Dvě podmínky ve while

Hmmm

Re:Dvě podmínky ve while
« Odpověď #90 kdy: 02. 09. 2015, 14:16:27 »
Ty nechapes, ze to neni zdaleka jenom o viditelnosti na obrazovce, ale o komplexite a o tom, mit v jedne funkci praci s jednou veci na jedne urovni abstrakce? Tohle neni zadne svate pravidlo, neznam team, kde by ti za 22 radku nekdo utrhnul hlavu a naopak samo o sobe to nestaci. Je to hlavne hint na tema, ze cim vic tech dvacet (sam bych byl spis pro deset, ale to je jina) radku prekracujes, tim vic vzrusta pravdepodobnost, ze neco delas blbe.

Žádná komplexita, jasně bylo řečeno 20 řádků.
S tvrzením že v jedné funkci má být max. 20 důležitých věcí, bych problém neměl. Shodou okolností má taková funkce zhruba 30-50 řádků :)
Ale ano, komplexita. Pretoze ak sa drzis +- 20 riadkov vo funkcii, tak mas velku sancu sa drzat principu atomickych funkcii (teda funkcii, ktore robia len jednu jedinu vec). A cim mas viac takych funkcii, tym tazsie do kodu zavedis chybu a ak uz ano, tak ju lahsie odladis a lahsie na nieco take napises testy. Nehovoriac o tom, ze mozes pisat testy aj na tie samotne atomicke funkcie, ktore vykonavaju jednotlive casti tvojej 200 riadkovej funkcie. Divide and conquer.


k

Re:Dvě podmínky ve while
« Odpověď #91 kdy: 02. 09. 2015, 14:30:14 »

No tak to vidíš špatně, dál se o automotive nebavím.

Ale ano, komplexita. Pretoze ak sa drzis +- 20 riadkov vo funkcii

Tak komplexita 20 nebo počet řádků 20 ? Vyber si jedno nebo druhé :)

Pavel Tisnovsky

Re:Dvě podmínky ve while
« Odpověď #92 kdy: 02. 09. 2015, 14:32:01 »
Žádná komplexita, jasně bylo řečeno 20 řádků.
S tvrzením že v jedné funkci má být max. 20 důležitých věcí, bych problém neměl. Shodou okolností má taková funkce zhruba 30-50 řádků :)

To asi bylo v kontextu k nejakemu jazyku (aspon doufam). Protoze jsem snad jeste ani nevidel obri funkci
ve Forthu ci APL (napriklad), ktera by tech 20 radku mela, tam je i 5 radku moc (ostatne klasicke Forthy
pouzivaji/pouzivaly logickou obrazovku 64x16 znaku, takze by se tam ani ta funkce nevesla).

gamer

Re:Dvě podmínky ve while
« Odpověď #93 kdy: 02. 09. 2015, 14:34:57 »
No tak to vidíš špatně, dál se o automotive nebavím.

Ty to vidíš špatně a dál se o tom nebavím. Přeloženo: došly mi argumenty, takže se o tom dál radši nebudu bavit.

Hmmm

Re:Dvě podmínky ve while
« Odpověď #94 kdy: 02. 09. 2015, 14:37:11 »

No tak to vidíš špatně, dál se o automotive nebavím.

Ale ano, komplexita. Pretoze ak sa drzis +- 20 riadkov vo funkcii

Tak komplexita 20 nebo počet řádků 20 ? Vyber si jedno nebo druhé :)
Cely cas je rec o 20 riadkoch. Neviem co dalsie myslis.


Re:Dvě podmínky ve while
« Odpověď #95 kdy: 02. 09. 2015, 14:42:44 »
Žádná komplexita, jasně bylo řečeno 20 řádků.
S tvrzením že v jedné funkci má být max. 20 důležitých věcí, bych problém neměl. Shodou okolností má taková funkce zhruba 30-50 řádků :)

To asi bylo v kontextu k nejakemu jazyku (aspon doufam). Protoze jsem snad jeste ani nevidel obri funkci
ve Forthu ci APL (napriklad), ktera by tech 20 radku mela, tam je i 5 radku moc (ostatne klasicke Forthy
pouzivaji/pouzivaly logickou obrazovku 64x16 znaku, takze by se tam ani ta funkce nevesla).

Podobne trebas Haskell, tam clovek taky tak nejak automaticky dojde k malym kompaktnim funkcim.

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Dvě podmínky ve while
« Odpověď #96 kdy: 02. 09. 2015, 14:54:21 »
A co v případě, že už mám funkce na získání potřebných dat k dispozici (např. pokud tvořím modul) a potřebuji pouze různá data vzít, poskládat a vrátit výsledek? Mám si je skládat po 20 ti řádcích na funkci do jednoho public array, nebo si mám data rozdělit do několika arrays, ty potom sloučit a vrátit, nebo si mám array naskládat v jednom řádku s délkou několik set až tisíc znaků a s použitím zkrácených ifů, nebo si mám znovu napsat již existující systémové funkce nějak jinak, nebo si mám udělat jednu funkci getDataParts, která bude mít sice třeba 100 řádků a na konci return, ale hlavní funkce getData už bude mít "jenom" $cosi=getDataParts a return, nebo rovnou udělat jednu 100 řádkovou funkci s jedním returnem?

Nebo další varianta, prohlásit, že je systém debilní a žádný modul do něj dělat nebudu, protože bych musel porušit "svatá pravidla" o víc, než někým tolerovaný kousek? A jaký je ten tolerovaný kousek? 20 řádků by mělo být, 22 ještě dobrý, 23 s přimhouřeným okem, 24 se zavřenýma oběma očima a 25 už striktně ne?

Já to vidím takhle... nas*at na tyhle "poučky". Sice jsem programátor samouk a většinou když něco dělám, tak jen pro sebe nebo pro známý, ale na druhou stranu už programuju dobrých 25 let a moc dobře vím, jak napsat program tak, abych se v něm i s časovým odstupem sám v pohodě vyznal. A když se v tom vyzná takovej amatér jako já, pro profíka by to asi taky neměl být problém, kdyby se k tomu někdy nějakej omylem dostal.

Když chce někdo programovat, je to o svobodě, o způsobu myšlení. Jestli to někdo dělá jenom pro peníze a nebaví ho to, poučky mu nepomůžou, stejně nikdy nebude dost dobrej. Pokud to dělám mimo jiné i proto, že mě to baví, poučky jsou omezující. Za traktorem taky nepojedu hodinu dvacítkou po jinak prázdné přehledné silnici jenom proto, že tam nějakej debil omylem načmáral plnou čáru.

Re:Dvě podmínky ve while
« Odpověď #97 kdy: 02. 09. 2015, 14:58:29 »
A co v případě, že už mám funkce na získání potřebných dat k dispozici (např. pokud tvořím modul) a potřebuji pouze různá data vzít, poskládat a vrátit výsledek? Mám si je skládat po 20 ti řádcích na funkci do jednoho public array, nebo si mám data rozdělit do několika arrays, ty potom sloučit a vrátit, nebo si mám array naskládat v jednom řádku s délkou několik set až tisíc znaků a s použitím zkrácených ifů, nebo si mám znovu napsat již existující systémové funkce nějak jinak, nebo si mám udělat jednu funkci getDataParts, která bude mít sice třeba 100 řádků a na konci return, ale hlavní funkce getData už bude mít "jenom" $cosi=getDataParts a return, nebo rovnou udělat jednu 100 řádkovou funkci s jedním returnem?

Nebo další varianta, prohlásit, že je systém debilní a žádný modul do něj dělat nebudu, protože bych musel porušit "svatá pravidla" o víc, než někým tolerovaný kousek? A jaký je ten tolerovaný kousek? 20 řádků by mělo být, 22 ještě dobrý, 23 s přimhouřeným okem, 24 se zavřenýma oběma očima a 25 už striktně ne?

Já to vidím takhle... nas*at na tyhle "poučky". Sice jsem programátor samouk a většinou když něco dělám, tak jen pro sebe nebo pro známý, ale na druhou stranu už programuju dobrých 25 let a moc dobře vím, jak napsat program tak, abych se v něm i s časovým odstupem sám v pohodě vyznal. A když se v tom vyzná takovej amatér jako já, pro profíka by to asi taky neměl být problém, kdyby se k tomu někdy nějakej omylem dostal.

Když chce někdo programovat, je to o svobodě, o způsobu myšlení. Jestli to někdo dělá jenom pro peníze a nebaví ho to, poučky mu nepomůžou, stejně nikdy nebude dost dobrej. Pokud to dělám mimo jiné i proto, že mě to baví, poučky jsou omezující. Za traktorem taky nepojedu hodinu dvacítkou po jinak prázdné přehledné silnici jenom proto, že tam nějakej debil omylem načmáral plnou čáru.

Co ze to delas s tim polem?

k

Re:Dvě podmínky ve while
« Odpověď #98 kdy: 02. 09. 2015, 15:10:10 »
Ty to vidíš špatně a dál se o tom nebavím. Přeloženo: došly mi argumenty, takže se o tom dál radši nebudu bavit.

Došla mi energie vysvětlovat, že opravdu zdejší diskuze nemá nic společného s aerospace a uniká mi proč to tady vůbec někdo zatáhnul.

Cely cas je rec o 20 riadkoch. Neviem co dalsie myslis.

Počet řádků a komplexita jsou dvě různé věci, motáš se v tom stále.
20 řádků = cargo cult z VT100
komplexita 20 = logické racionální zdůvodnění

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Dvě podmínky ve while
« Odpověď #99 kdy: 02. 09. 2015, 15:11:10 »
Vytahat data z různýma funkcema a z nich udělat pole (do toho pár podmínek). Jenom je toho prostě na řádky moc, skládat to za sebe na řádek jenom kvůli počtu řádků je taky blbost a dělit to na víc částí je totálně nelogický.

Ale to je celkem jedno, jde o to, že pravidla jsou doporučující, nikoliv zavazující. Vždycky se najde velmi dobrej důvod, proč je porušit.

Kit

Re:Dve podminky ve while
« Odpověď #100 kdy: 02. 09. 2015, 15:14:57 »
Zajímá mě z kterého klobouku se vyčarovalo to "20 řádek". Proč to není třeba "půl obrazovky", "jedna obrazovka", "jedna A4" a podobně. Zkušeností mám dostatek.

Daly by se použít fuzzy pojmy, ale když někomu řekneš, že funkce nemá mít příliš mnoho řádek, okamžitě se zeptá, co je to "příliš mnoho". Tak se udělala nějaká statistika z úspěšných aplikací a zjistilo se, že v těch úspěšných nebývají funkce delší než těch 20 řádek.

Z toho tedy vyplývá, že čím ty funkce či metody budeš mít delší, tím menší je pravděpodobnost, že uděláš úspěšnou aplikaci. Obráceně to však neplatí! Krátké funkce ti nijak nezaručují, že aplikace bude úspěšná - pouze snižují pravděpodobnost, že něco zvoráš a nevšimneš si toho.

Dlouhé funkce se navíc hodně blbě testují. Když však provozuješ TDD, tak dlouhé funkce zpravidla ani nevznikají.

gamer

Re:Dvě podmínky ve while
« Odpověď #101 kdy: 02. 09. 2015, 15:17:45 »
Pořád řešíte počet řádků funkce, ale to není moc dobrá metrika. Mnohem lepší je cyklomatická složitost funkce.

Když budu mít 1000 řádkovou funkci s cyklomatickou složitostí 1, tak ji můžu rozdělit do 100 fukcí po 10 řádcích, ale jejich cyklomatická složitost bude pořád 1. Mentální kapacita nutná k pochopení jedné funkce s 1000 řádky nebo 100 funkcí s 10 řádky je pořád stejná. Nic moc tím rozdělením neziskám.

Když budu mít 1000 řádkovou funci s cyklomatickou složitostí 100, tak vím, že je to opravdu blbě. Tohle nikdo nikdy nepochopí (ani autor). Tady je jediná cesta, rozdělit to do více malých funkcí s malou cyklomatickou složitostí.

k

Re:Dve podminky ve while
« Odpověď #102 kdy: 02. 09. 2015, 15:20:14 »
Pořád řešíte počet řádků funkce, ale to není moc dobrá metrika. Mnohem lepší je cyklomatická složitost funkce.

Když budu mít 1000 řádkovou funkci s cyklomatickou složitostí 1, tak ji můžu rozdělit do 100 fukcí po 10 řádcích, ale jejich cyklomatická složitost bude pořád 1. Mentální kapacita nutná k pochopení jedné funkce s 1000 řádky nebo 100 funkcí s 10 řádky je pořád stejná. Nic moc tím rozdělením neziskám.

Když budu mít 1000 řádkovou funci s cyklomatickou složitostí 100, tak vím, že je to opravdu blbě. Tohle nikdo nikdy nepochopí (ani autor). Tady je jediná cesta, rozdělit to do více malých funkcí s malou cyklomatickou složitostí.

S tímto souhlasím, konečně jsme se k něčemu dobrali  :)

gamer

Re:Dvě podmínky ve while
« Odpověď #103 kdy: 02. 09. 2015, 15:23:17 »
Došla mi energie vysvětlovat, že opravdu zdejší diskuze nemá nic společného s aerospace a uniká mi proč to tady vůbec někdo zatáhnul.

Bavíme se o coding standards? Takže v čem je problém s coding standards z aerospace? Že jsou moc restriktivní pro nějaké jiné použití? No tak vezmu jen ty pravidla, která se mi hodí pro moji aplikaci. I tak jich zbyde dost. Přesně tohle doporučuje i Bjarne Stroustrup, mimochodem on je spoluautorem těch aerospace coding standards: http://www.stroustrup.com/bs_faq2.html#coding-standard

A proč jsem to sem dával? Protože pořád řešíte velikost switche a aerospace coding standards, které lze považovat za nejvíce restriktivní, ji v podstatě neomezují.

k

Re:Dvě podmínky ve while
« Odpověď #104 kdy: 02. 09. 2015, 15:27:41 »
A proč jsem to sem dával? Protože pořád řešíte velikost switche a aerospace coding standards, které lze považovat za nejvíce restriktivní, ji v podstatě neomezují.

Tak tím se to vysvětluje a je to OK.