Dvě podmínky ve while

gamer

Re:Dve podminky ve while
« Odpověď #75 kdy: 01. 09. 2015, 16:14:56 »
Hmm. Proč by měl snippet, nad kterým jsem strávil sotva pár minut, fungovat? Abstrakce je přece mnohem důležitější, než konkrétní realizace. Přece jsi nechtěl, abych kompletně refaktoroval celých 1500 řádek kódu? To by byla práce na několik hodin, kterou by nikdo neocenil.

Že nefunguje, by ani tak nevadilo. Horší je, že jsi to refaktoroval špatně. Chybně jsi aplikoval poučku "break je špatný" a vyhodil ho ze switche, kde naopak má velmi dobrý smysl. Místo toho jsi tam vrazil return, ale blbě, protože return nemá co vracet. Tím vznikla logická blbost, zavádíš návratovou hodnotu, která je k ničemu. Celé jsi to zatemnil a znepřehlednil.


Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Dve podminky ve while
« Odpověď #76 kdy: 01. 09. 2015, 16:29:44 »
Hmm. Proč by měl snippet, nad kterým jsem strávil sotva pár minut, fungovat? Abstrakce je přece mnohem důležitější, než konkrétní realizace. Přece jsi nechtěl, abych kompletně refaktoroval celých 1500 řádek kódu? To by byla práce na několik hodin, kterou by nikdo neocenil.

Jinak přesně to jsem měl na mysli... funkčnost je vždy na prvním místě... udělat kód "hezčí" za cenu jeho znefunkčnění nebude ta správná cesta a je jedno, jestli se jedná o pár řádků na ukázku, nebo celý projekt.

Hmmm

Re:Dve podminky ve while
« Odpověď #77 kdy: 02. 09. 2015, 11:24:41 »
No vida, našel jsi to!

Nenašel, výčet parametrů VT100 není důkaz proč má mít funkce 20 řádek.

Funkcia, ktora ma 240 riadkov, bude tazko znovupouzitelna v UPLNE INOM projekte.

Běžně mám funkce 200 řádek a běžně je používám v jiných projektech. Například když má switch 15 možností a každá možnost je na pět řádek + break, tak kvůli tobě nebudu dělit do pěti funkcí.
Kvoli mne si nic nedel. Del si to kvoli sebe a svojmu usetrenemu casu. Ja ti hovorim co vychadza zo skusenosti.
Mozes sa hadat, ale nezmenis na tom nic.

Ale ozaj by som teda rad videl funkciu s 200 riadkami, ktora je pouzitelna v UPLNE INOM projekte.

k

Re:Dve podminky ve while
« Odpověď #78 kdy: 02. 09. 2015, 12:06:17 »
Kvoli mne si nic nedel. Del si to kvoli sebe a svojmu usetrenemu casu. Ja ti hovorim co vychadza zo skusenosti.
Mozes sa hadat, ale nezmenis na tom nic.

Ale ozaj by som teda rad videl funkciu s 200 riadkami, ktora je pouzitelna v UPLNE INOM projekte.

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.

Nepřekvapivě se stavový automat podobné velikosti implementuje v úplně jiném projektu a úplně stejně.

Re:Dve podminky ve while
« Odpověď #79 kdy: 02. 09. 2015, 12:18:41 »
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.

Nepřekvapivě se stavový automat podobné velikosti implementuje v úplně jiném projektu a úplně stejně.

Protoze je to "tak akorat"? Protoze dvaadvacet je porad OK, ale padesat uz ne a osmnact je pro podobna pravidla blbe cislo? Protoze kazda obrazovka je jina?

A nenapadlo te mit stavovy automat spis v datech nez v kodu?


Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Dve podminky ve while
« Odpověď #80 kdy: 02. 09. 2015, 12:54:49 »
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.

Nepřekvapivě se stavový automat podobné velikosti implementuje v úplně jiném projektu a úplně stejně.

Protoze je to "tak akorat"? Protoze dvaadvacet je porad OK, ale padesat uz ne a osmnact je pro podobna pravidla blbe cislo? Protoze kazda obrazovka je jina?

A nenapadlo te mit stavovy automat spis v datech nez v kodu?
že by třeba optimalizace? Pokud se jedná o statické hodnoty, je rozhodně rychlejší udělat to přes case, než řešit nějaký data, smyčky atd. A čitelnost kódu bude asi v tomto případě většinou lepší s case. Poučky jsou naprd, jejich slepá aplikace je kolikrát kontraproduktivní a zlikvidovat si přehlednost proto, že někdo tvrdí, že 20 řádků na metodu je tak akorát, to mi nepřijde úplně správný.

Mimochodem, několikrát zmíněná kniha Clean Code vede ke zbytečnému fanatismu a chybí jí už v předmluvě velké varování, že autor není Bůh a že kniha se skládá z jeho osobních názorů, které sice nejsou zcela špatné, ale rozhodně se nejedná o žádnou Bibli, Korán, nebo etalon programování.

gamer

Re:Dvě podmínky ve while
« Odpověď #81 kdy: 02. 09. 2015, 13:20:11 »
Dám sem alternativu ke Clean Code, něco z reálného života: http://www.stroustrup.com/JSF-AV-rules.pdf
Coding standards z leteckého průmyslu, v mnoha ohledech je to pochopitelně mnohem restriktivnější než Clean Code.

A switch se tam řeší:
Kód: [Vybrat]
All functions shall have a cyclomatic complexity number of 20 or less.   
Rationale:
Limit function complexity. See AV Rule 3 in Appendix A for additional details.
Exception:
 A function containing a switch statement with many case labels may exceed this limit.

A break se tam taky řeší:
Kód: [Vybrat]
The break statement shall not be used (except to terminate the cases of a switch statement).

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Dvě podmínky ve while
« Odpověď #82 kdy: 02. 09. 2015, 13:44:08 »
Vždy a všude se najde vyjímka :)

Jinak příklad z nedávné minulosti, jednalo se o modul pro e-shop OpenCart, respektive jednu relativně triviální funkci, nic velkýho, cca 200 řádků, z toho 50 je natahování language files, nějaký definování použitých modelů, serepetičky kolem, čistej samotnej kód, kterej něco dělá, má ani ne 100 řádků a z nich většina tahá nějaký data z různých míst pomocí již hotových funkcí z natažených modelů a na základě pár podmínek vypadne nějakej výsledek (respektive vrátí jeden array). Rozsekat to celý na další části by sice bylo otázkou pár minut, nicméně nevím, co bych tím konkrétně získal. Asi funkci, která volá další funkce, který volají interní funkce... to je tak akorát noční můra při debugování. Možná to bude hezčí opticky, ale celkově to čitelnosti kódu nijak zvlášť nepomůže.

Re:Dvě podmínky ve while
« Odpověď #83 kdy: 02. 09. 2015, 13:51:21 »
Vždy a všude se najde vyjímka :)

Jinak příklad z nedávné minulosti, jednalo se o modul pro e-shop OpenCart, respektive jednu relativně triviální funkci, nic velkýho, cca 200 řádků, z toho 50 je natahování language files, nějaký definování použitých modelů, serepetičky kolem, čistej samotnej kód, kterej něco dělá, má ani ne 100 řádků a z nich většina tahá nějaký data z různých míst pomocí již hotových funkcí z natažených modelů a na základě pár podmínek vypadne nějakej výsledek (respektive vrátí jeden array). Rozsekat to celý na další části by sice bylo otázkou pár minut, nicméně nevím, co bych tím konkrétně získal. Asi funkci, která volá další funkce, který volají interní funkce... to je tak akorát noční můra při debugování. Možná to bude hezčí opticky, ale celkově to čitelnosti kódu nijak zvlášť nepomůže.

ti nevim, ale

foo() {
  loadImages()
  bar = prepareData()
  return stuff(bar)
}

mi prijde o dost prehlednejsi nez foo() se dvema sty radky. Nemluve ani o tom, ze vyjimka ze stuff() je popisnejsi nez vyjimka z foo() a ze vazne netusim, jak chces na neco o dvou stech radkach psat testy..

Co je na tom nocni mura pro debugovani? To nemas IDE s debuggerem?

k

Re:Dvě podmínky ve while
« Odpověď #84 kdy: 02. 09. 2015, 13:52:56 »
Protoze je to "tak akorat"? Protoze dvaadvacet je porad OK, ale padesat uz ne a osmnact je pro podobna pravidla blbe cislo? Protoze kazda obrazovka je jina?

To už tady bylo, 20 řádků je "tak akorát" na VT100. Na mém průměrném LCD vidím 55 řádků. Dle selského rozumu by "tak akorát" bylo 55.

Coding standards z leteckého průmyslu, v mnoha ohledech je to pochopitelně mnohem restriktivnější než Clean Code.

Aerospace, military, automotive a life-support je ve všech ohledech jiný svět, vůbec nemá smysl to sem tahat.
Mimochodem ani v automotive nemají limit na 20 řádků, přečti si to pořádně.

Re:Dvě podmínky ve while
« Odpověď #85 kdy: 02. 09. 2015, 13:59:41 »
Protoze je to "tak akorat"? Protoze dvaadvacet je porad OK, ale padesat uz ne a osmnact je pro podobna pravidla blbe cislo? Protoze kazda obrazovka je jina?
To už tady bylo, 20 řádků je "tak akorát" na VT100. Na mém průměrném LCD vidím 55 řádků. Dle selského rozumu by "tak akorát" bylo 55.

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.

gamer

Re:Dvě podmínky ve while
« Odpověď #86 kdy: 02. 09. 2015, 14:03:27 »
Aerospace, military, automotive a life-support je ve všech ohledech jiný svět, vůbec nemá smysl to sem tahat.
Mimochodem ani v automotive nemají limit na 20 řádků, přečti si to pořádně.

Proč to sem nemá smysl tahat? V aerospace neprogramují? Kde jsem psal o nějakém limitu na 20 řádků?

k

Re:Dvě podmínky ve while
« Odpověď #87 kdy: 02. 09. 2015, 14:04:33 »
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ů :)

k

Re:Dvě podmínky ve while
« Odpověď #88 kdy: 02. 09. 2015, 14:06:34 »
Proč to sem nemá smysl tahat? V aerospace neprogramují?

Je to naprosto jiný svět. Je to rozdíl jako Země a Mars.

gamer

Re:Dvě podmínky ve while
« Odpověď #89 kdy: 02. 09. 2015, 14:11:34 »
Je to naprosto jiný svět. Je to rozdíl jako Země a Mars.

Jiný než co? Programuje se v C(++), coding standards jsou značně restriktivnější. Já automotive dělal a nevidím důvod, proč to sem nedat.