Abstrakce u OOP

Ink

  • *****
  • 653
    • Zobrazit profil
    • E-mail
Re:Abstrakce u OOP
« Odpověď #90 kdy: 12. 06. 2020, 19:36:48 »
To znamena, ze za normalnich okolnosti jsou komentare na obtiz?
Takze pisu komentare kvuli nenormalnim okolnostem protoze me to jednou vytahne z bryndy, i kdyz vim, ze se kvuli tomu musim denno denne brodit sumem?

Ano, je to podobné jako s pásy v autě, se zdravotním pojištěním nebo znalostí logaritmů. Je to opruz, většinu života je to úplně na nic, ale holt se to hodí.


Kit

  • *****
  • 702
    • Zobrazit profil
    • E-mail
Re:Abstrakce u OOP
« Odpověď #91 kdy: 12. 06. 2020, 19:39:20 »
Základ jsou docstringy k metodám a třídám.

K čemu jsou docstringy, když mám parametry i návratové hodnoty řádně otypovány?

Ink

  • *****
  • 653
    • Zobrazit profil
    • E-mail
Re:Abstrakce u OOP
« Odpověď #92 kdy: 12. 06. 2020, 19:48:04 »
Základ jsou docstringy k metodám a třídám.

K čemu jsou docstringy, když mám parametry i návratové hodnoty řádně otypovány?

Prosím už nereaguj, děkuju.

Re:Abstrakce u OOP
« Odpověď #93 kdy: 12. 06. 2020, 19:50:35 »
To znamena, ze za normalnich okolnosti jsou komentare na obtiz?
Takze pisu komentare kvuli nenormalnim okolnostem protoze me to jednou vytahne z bryndy, i kdyz vim, ze se kvuli tomu musim denno denne brodit sumem?

Ano, je to podobné jako s pásy v autě, se zdravotním pojištěním nebo znalostí logaritmů. Je to opruz, většinu života je to úplně na nic, ale holt se to hodí.

Spatna analogie...
Pasy v aute jsou ze zakona povinne... Zdravotni pojisteni taky. Psani komentaru ne.
Znalost logaritmu nepovazuju za obtezujici.

Kit

  • *****
  • 702
    • Zobrazit profil
    • E-mail
Re:Abstrakce u OOP
« Odpověď #94 kdy: 12. 06. 2020, 19:51:23 »
v Utils.py se mi nejvic libi komentar:
Kód: [Vybrat]
def url_is_absolute(url):
    """Determine whether a given URL is absolute"""

Jsou tam i jiné výživné komponenty
Kód: [Vybrat]
try:
    os.lstat(path)
except OSError:
    return False
return True


Kit

  • *****
  • 702
    • Zobrazit profil
    • E-mail
Re:Abstrakce u OOP
« Odpověď #95 kdy: 12. 06. 2020, 20:05:23 »
U komentářů výše jasně píšu, že za normálních okolností jsou šum - když se člověk v nějakém kódu pohybuje denně. Pokud něco nemáš v hlavě a z kódu to snadno nevyčteš, je z šumu rázem signál. To je asi tak odpověď na Tvoje dvě otázky - proč jsou komentáře a proč jsou komentáře vizuálně potlačeny.

Všechno to v diskusi už zaznělo.

To znamena, ze za normalnich okolnosti jsou komentare na obtiz?
Takze pisu komentare kvuli nenormalnim okolnostem protoze me to jednou vytahne z bryndy, i kdyz vim, ze se kvuli tomu musim denno denne brodit sumem?

Komentáře by nebyly na obtíž, kdyby to skutečně byly komentáře. V drtivé většině případů jsou však jen šumem, který zhoršuje čitelnost kódu. Proto je třeba je potlačit.

xyz

  • ***
  • 193
    • Zobrazit profil
Re:Abstrakce u OOP
« Odpověď #96 kdy: 12. 06. 2020, 20:48:20 »
Komentar v kodu beru jako svoje selhani pri snaze napsat sebevysvetlujici kod. Snazim se jich mit co nejmin a ostatni k tomu nabadam taky.
Osvedcilo se mi to.

No tak si to užij. Akorát si dovolím podotknout, že tady nikdo netvrdil, že kód má být nepřehledný a že komentář je od toho, aby to kompenzoval.

Taky sem nerekl, ze to nekdo tvrdil. byla to reakce na to ze "komentujeme hodne". To mi rika, ze je neco spatne....

EDIT: Muzes sem treba dat kus kodu, ktery podle tebe vyzaduje byti hodne okomentovan. Rad bych ho videl.

Tady je treba kousek kodu, ktery by si okomentovani zaslouzil:

function [lambdaMax, nullMSE] = computeLambdaMax(X, Y, weights, alpha, standardize)

if ~isempty(weights)
    observationWeights = true;
    weights = weights(:)';       
    normalizedweights = weights / sum(weights);
else
    observationWeights = false;
end

[N,~] = size(X);

if standardize
    constantPredictors = (range(X)==0);

    if ~observationWeights
        [X0,~,~] = zscore(X,1);
    else
        muX = normalizedweights * X;
        X0 = bsxfun(@minus,X,muX);
        sigmaX = sqrt( normalizedweights * (X0.^2) );
        sigmaX(constantPredictors) = 1;
        X0 = bsxfun(@rdivide, X0, sigmaX);
    end
else
    if ~observationWeights
        muX = mean(X,1);
        X0 = bsxfun(@minus,X,muX);
    else
        muX = normalizedweights(:)' * X;
        X0 = bsxfun(@minus,X,muX);
    end
end

if observationWeights
    wX0 = bsxfun(@times, X0, weights');
end

if ~observationWeights
    muY = mean(Y);
else
    muY = weights*Y;
end
Y0 = Y - muY;

if ~observationWeights
    dotp = abs(X0' * Y0);
    lambdaMax = max(dotp) / (N*alpha);
else
    dotp = abs(sum(bsxfun(@times, wX0, Y0)));
    lambdaMax = max(dotp) / alpha;
end

if ~observationWeights
    nullMSE = mean(Y0.^2);
else
    nullMSE = weights * (Y0.^2);
end
end

Re:Abstrakce u OOP
« Odpověď #97 kdy: 12. 06. 2020, 20:54:22 »
Komentar v kodu beru jako svoje selhani pri snaze napsat sebevysvetlujici kod. Snazim se jich mit co nejmin a ostatni k tomu nabadam taky.
Osvedcilo se mi to.

No tak si to užij. Akorát si dovolím podotknout, že tady nikdo netvrdil, že kód má být nepřehledný a že komentář je od toho, aby to kompenzoval.

Taky sem nerekl, ze to nekdo tvrdil. byla to reakce na to ze "komentujeme hodne". To mi rika, ze je neco spatne....

EDIT: Muzes sem treba dat kus kodu, ktery podle tebe vyzaduje byti hodne okomentovan. Rad bych ho videl.

Tady je treba kousek kodu, ktery by si okomentovani zaslouzil:

function [lambdaMax, nullMSE] = computeLambdaMax(X, Y, weights, alpha, standardize)

if ~isempty(weights)
    observationWeights = true;
    weights = weights(:)';       
    normalizedweights = weights / sum(weights);
else
    observationWeights = false;
end

[N,~] = size(X);

if standardize
    constantPredictors = (range(X)==0);

    if ~observationWeights
        [X0,~,~] = zscore(X,1);
    else
        muX = normalizedweights * X;
        X0 = bsxfun(@minus,X,muX);
        sigmaX = sqrt( normalizedweights * (X0.^2) );
        sigmaX(constantPredictors) = 1;
        X0 = bsxfun(@rdivide, X0, sigmaX);
    end
else
    if ~observationWeights
        muX = mean(X,1);
        X0 = bsxfun(@minus,X,muX);
    else
        muX = normalizedweights(:)' * X;
        X0 = bsxfun(@minus,X,muX);
    end
end

if observationWeights
    wX0 = bsxfun(@times, X0, weights');
end

if ~observationWeights
    muY = mean(Y);
else
    muY = weights*Y;
end
Y0 = Y - muY;

if ~observationWeights
    dotp = abs(X0' * Y0);
    lambdaMax = max(dotp) / (N*alpha);
else
    dotp = abs(sum(bsxfun(@times, wX0, Y0)));
    lambdaMax = max(dotp) / alpha;
end

if ~observationWeights
    nullMSE = mean(Y0.^2);
else
    nullMSE = weights * (Y0.^2);
end
end

Me prijde, ze by si spis zaslouzil smazat.... :-)

Kit

  • *****
  • 702
    • Zobrazit profil
    • E-mail
Re:Abstrakce u OOP
« Odpověď #98 kdy: 12. 06. 2020, 21:05:38 »
...

Me prijde, ze by si spis zaslouzil smazat.... :-)

Teď jsem to chtěl napsat, ale předběhl jsi mne. Je to fakt hnus.

xyz

  • ***
  • 193
    • Zobrazit profil
Re:Abstrakce u OOP
« Odpověď #99 kdy: 12. 06. 2020, 21:11:46 »
Komentar v kodu beru jako svoje selhani pri snaze napsat sebevysvetlujici kod. Snazim se jich mit co nejmin a ostatni k tomu nabadam taky.
Osvedcilo se mi to.

No tak si to užij. Akorát si dovolím podotknout, že tady nikdo netvrdil, že kód má být nepřehledný a že komentář je od toho, aby to kompenzoval.

Taky sem nerekl, ze to nekdo tvrdil. byla to reakce na to ze "komentujeme hodne". To mi rika, ze je neco spatne....

EDIT: Muzes sem treba dat kus kodu, ktery podle tebe vyzaduje byti hodne okomentovan. Rad bych ho videl.

Tady je treba kousek kodu, ktery by si okomentovani zaslouzil:

function [lambdaMax, nullMSE] = computeLambdaMax(X, Y, weights, alpha, standardize)

if ~isempty(weights)
    observationWeights = true;
    weights = weights(:)';       
    normalizedweights = weights / sum(weights);
else
    observationWeights = false;
end

[N,~] = size(X);

if standardize
    constantPredictors = (range(X)==0);

    if ~observationWeights
        [X0,~,~] = zscore(X,1);
    else
        muX = normalizedweights * X;
        X0 = bsxfun(@minus,X,muX);
        sigmaX = sqrt( normalizedweights * (X0.^2) );
        sigmaX(constantPredictors) = 1;
        X0 = bsxfun(@rdivide, X0, sigmaX);
    end
else
    if ~observationWeights
        muX = mean(X,1);
        X0 = bsxfun(@minus,X,muX);
    else
        muX = normalizedweights(:)' * X;
        X0 = bsxfun(@minus,X,muX);
    end
end

if observationWeights
    wX0 = bsxfun(@times, X0, weights');
end

if ~observationWeights
    muY = mean(Y);
else
    muY = weights*Y;
end
Y0 = Y - muY;

if ~observationWeights
    dotp = abs(X0' * Y0);
    lambdaMax = max(dotp) / (N*alpha);
else
    dotp = abs(sum(bsxfun(@times, wX0, Y0)));
    lambdaMax = max(dotp) / alpha;
end

if ~observationWeights
    nullMSE = mean(Y0.^2);
else
    nullMSE = weights * (Y0.^2);
end
end

Me prijde, ze by si spis zaslouzil smazat.... :-)

Jasny, kdyz nevim, co to dela, tak to smazu :-))

Re:Abstrakce u OOP
« Odpověď #100 kdy: 12. 06. 2020, 21:18:50 »
Sebevysvetlujici kod v dlouhodobe vyvijenem projektu je utopie. Jestli nekdo tvrdi, ze se obejde bez komentaru, tak lze, nebo dela jen male veci.

Treba nedavno kolega nasel bug v knihovne spadajicich do "apache commons" (javisti jiste znaji). Tak co se necha udelat. Chyba se reportuje, ale mezitim je potreba do sveho kodu dostat "fix". To jest kus co na prvni pohled nedava smysl a vypada jako prasecina, plus peknych par radku s vysvetlenim vo co go. A takovych situaci se behem let opravdu nasklada mnoho.

Re:Abstrakce u OOP
« Odpověď #101 kdy: 12. 06. 2020, 21:20:02 »


Me prijde, ze by si spis zaslouzil smazat.... :-)

Jasny, kdyz nevim, co to dela, tak to smazu :-))

Nadsazka....
Chtel by refactoring...
Funce tak na 5 radku tops... a poradny jmena

Kit

  • *****
  • 702
    • Zobrazit profil
    • E-mail
Re:Abstrakce u OOP
« Odpověď #102 kdy: 12. 06. 2020, 21:24:18 »


Me prijde, ze by si spis zaslouzil smazat.... :-)

Jasny, kdyz nevim, co to dela, tak to smazu :-))

Nadsazka....
Chtel by refactoring...
Funce tak na 5 radku tops... a poradny jmena

Našel jsem originál napsaný v R a ten ty komentáře má. Ovšem má tam i zcela zbytečnou proměnnou observationWeights, která ten kód tak mlží.

qelurg

  • ****
  • 364
    • Zobrazit profil
    • E-mail
Re:Abstrakce u OOP
« Odpověď #103 kdy: 12. 06. 2020, 22:13:37 »
Základ jsou docstringy k metodám a třídám.

K čemu jsou docstringy, když mám parametry i návratové hodnoty řádně otypovány?
Ke zdokumentování kódu.

Re:Abstrakce u OOP
« Odpověď #104 kdy: 12. 06. 2020, 22:15:24 »
Sebevysvetlujici kod v dlouhodobe vyvijenem projektu je utopie. Jestli nekdo tvrdi, ze se obejde bez komentaru, tak lze, nebo dela jen male veci.

Treba nedavno kolega nasel bug v knihovne spadajicich do "apache commons" (javisti jiste znaji). Tak co se necha udelat. Chyba se reportuje, ale mezitim je potreba do sveho kodu dostat "fix". To jest kus co na prvni pohled nedava smysl a vypada jako prasecina, plus peknych par radku s vysvetlenim vo co go. A takovych situaci se behem let opravdu nasklada mnoho.

Tak treba ten fitnesse ma 15 let.... je to dost dlouhodobe?
Komentaru je tam pomalu.
No a ty kousky co tu postoval Ink me nepresvedcili, ze ty komentare jsou extra uzitecne.

A samozrejme... jsou situace kdy proste musis...  nikdy sem nerekl, ze komentare nepisu vubec. Jen rikam, ze se to snazim minimalizovat.
Problem komentaru proste je, ze se nekompilujou a netestujou (doctest ted nechme stranou).
Takze pro me nejsou duveryhodne.