reklama

Recept na špagety - java vs. net

Kit

Re:Recept na špagety - java vs. net
« Odpověď #60 kdy: 12. 10. 2017, 00:06:49 »
protože u vlastních tříd nám obvykle stačí 3-5 veřejných metod. Pokud ty metody pojmenuješ sémanticky, tak ti to jedno slovo obvykle stačí.

Tvůj kód má jenom veřejné metody? A co ty ostatní, kterých bývá podstatně víc než veřejných. Nebo snad 4-úrovňové špagety ve veřejných?

Mám dostatečnou slovní zásobu na to, abych dokázal pojmenovat všechny metody, nejen veřejné. Špagety nevedu, ale často je refaktoruji po druhých. Není na tom nic těžkého, není na to potřeba ani IDE. Zkus to.

reklama


Ivan Nový

Re:Recept na špagety - java vs. net
« Odpověď #61 kdy: 12. 10. 2017, 06:51:01 »
Metoda něco dělá, takže minimálně sloveso (co dělá, přísudek) a téměř vždy k tomu nějaké podstatné jméno "čemu" (předmět). Často ještě upřesněné přídavným jménem. Nedovedu si představit, jak metody obsahující např. inicializaci konkrétních bloků subkomponent nějaké hlavní komponenty (můj příklad rozpadu dlouhého lineárního kódu) mohou mít jednoslovný název.

Tvé jednoslovné názvy by mě opravdu zajímaly. Buď máš vše do posledního detailu rozdělené do minimalistických tříd s pár metodami (čemuž nevěřím), nebo jsou názvy nedostatečně popisné a anglicky nesrozumitelné. Protože jednoslovné metody by znamenaly, že tím předmětem je implicitní "itself" - load itself, store itself, initialize itself, atd. Ukaž nějaký kód, ale to už tě tu žádalo spoustu lidí.

to itself je instance objektu, volání metody je pak podmět.přísudek(předmět+příslovečná_určení) a nebo v anglické větě SVOMPT who.do(what, where, how, when)

gll

Re:Recept na špagety - java vs. net
« Odpověď #62 kdy: 12. 10. 2017, 07:58:45 »
get/set vůbec nemusí vracet jen property, může dělat spoustu jiného. Zkratka se obecně nedoporučují, z hodné dobrého důvodu. rtrim a ltrim jsou standardně známé. Camelcase je pro tuto diskusi nepodstatný.

Jak vypadá takové api javy, např. Character či String:

https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html

Kolik je tam jednoslovných metod?

Mám rád knihovnu java joda time, která v podstatě přešla do javy 8. Jaké má API, jednoslovné metody? http://www.joda.org/joda-time/apidocs/index.html Téměř vždy sloveso + něco, často přídavné jméno a podstatné jm. Používáním v kódu vznikají docela čitelné anglické věty, velice přehledný kód.

I v pythonu jednoslovných metod (nepočítám zkratky) zase tolik  není. Líbí se mi knihovna pathlib, i tady moc čistě jednoslovným metod není (opět nepočítám obecně známé zkratky, které jinde neexistují) https://docs.python.org/3/library/pathlib.html#methods-and-properties .

Budu konvertovat svůj standalone kód https://github.com/pavhofman/aio do několika rozšíření  pro projekt mopidy https://github.com/mopidy/mopidy . Mopidy považuji za poměrně slušně napsaný a ve své oblasti hodně úspěšný, existuje pro něj mraky rozšíření https://github.com/search?utf8=%E2%9C%93&q=mopidy&type= . Kolik má kód mopidy jednoslovných metod?

Vážně si to nedovedu představit. A hlavně nechápu, k čemu by to bylo dobré.

Osobne nepovazuji pojmenovani za dulezite, ale kdyz uz tady chcete poucovat o spravnych nazvech metod, tak byste si mohl alespon precist PEP8.

gll

Re:Recept na špagety - java vs. net
« Odpověď #63 kdy: 12. 10. 2017, 08:09:54 »
pathlib.Path obsahuje 19 dvouslovnych z 80 metod.

dustin

Re:Recept na špagety - java vs. net
« Odpověď #64 kdy: 12. 10. 2017, 08:11:09 »
Itself je anglicky předmět (česky zvratné zájmeno se/si), ne podmět.


dustin

Re:Recept na špagety - java vs. net
« Odpověď #65 kdy: 12. 10. 2017, 08:19:53 »
Osobne nepovazuji pojmenovani za dulezite

Pak ovšem nemáme o čem diskutovat. Správné a výstižné pojmenování je z mé a nejen mé zkušenosti zcela a naprosto zásadní. Při nesprávných názvech vzniká spoustu chyb, lovíme je v našem legacy kódu obden. Každý jazyk má formát pojmenování jinak, ale princip je vždy stejný - výstižnost.

Pathlib.Path má spoustu zkratek (odpovídajících běžně známým příkazům - mkdir, chmod) a spojených slov do jednoho (expanduser). Významově jsou víceslovná.

Ivan Nový

Re:Recept na špagety - java vs. net
« Odpověď #66 kdy: 12. 10. 2017, 08:31:16 »
Víceslovné metody ukazují na nepromyšlený málo abstraktní ad hoc návrh. Jednoslovní metoda proto, aby ji bylo možnou použít u různých objektů s významem daným objektem. Jednoslovní metody pak vedou na jakýsi pomyslný normální návrh, který vychází ze společného sdíleného mentálního a archetypálního modelu světa.

Když použijete mail.send_order(supplier, products) a mail.send_invoice(customer, products) vede to na procedurální návrh, a ne objektový, či funkcionální. Když pak potřebujete přidat zaslání poptávky, musíte vytvořit objekt poptávka a přidat metodu send_demand v objektu mail. Místo mail.send(DemandMail(supplier)) se standardizovaným komunikačním rozhraním pro objekt Mail.

gll

Re:Recept na špagety - java vs. net
« Odpověď #67 kdy: 12. 10. 2017, 08:36:02 »
Osobne nepovazuji pojmenovani za dulezite

Pak ovšem nemáme o čem diskutovat. Správné a výstižné pojmenování je z mé a nejen mé zkušenosti zcela a naprosto zásadní. Při nesprávných názvech vzniká spoustu chyb, lovíme je v našem legacy kódu obden. Každý jazyk má formát pojmenování jinak, ale princip je vždy stejný - výstižnost.

Pathlib.Path má spoustu zkratek (odpovídajících běžně známým příkazům - mkdir, chmod) a spojených slov do jednoho (expanduser). Významově jsou víceslovná.

zkratky jako  chmod, rglob, cwd apod.povazuji za jedno slovo. Dvouslovne nazvy obsahuji podtrzitko uprostred nazvu.

Ivan Nový

Re:Recept na špagety - java vs. net
« Odpověď #68 kdy: 12. 10. 2017, 08:42:28 »
Itself je anglicky předmět (česky zvratné zájmeno se/si), ne podmět.

A právě předmět by měl být významově nepodstatný, nemůžete konstruovat metody závislé na předmětu, což se dokonce projeví v jejich jménu. To je chyba návrhu. Metody mají být průtokové, do jisté míry bezstavové, mají pracovat s definovaným rozhraním argumentů, nikoliv významově s argumenty samotnými. Nemáte si v objektu ukládat stav argumentu, ale argumentu posílat zprávy o stavu objektu vlastnícímu danou metodu, či je použít jako argument dalších metod objektu.

Jinak na tom, překládat si () jako se/si či itself, nevidím nic špatného a neanglického, či dokonce zamlčeného. To se/si tam je, jen je zapsáno slovem ().

balki

Re:Recept na špagety - java vs. net
« Odpověď #69 kdy: 12. 10. 2017, 08:53:26 »
Osobne nepovazuji pojmenovani za dulezite

Pak ovšem nemáme o čem diskutovat. Správné a výstižné pojmenování je z mé a nejen mé zkušenosti zcela a naprosto zásadní. Při nesprávných názvech vzniká spoustu chyb, lovíme je v našem legacy kódu obden. Každý jazyk má formát pojmenování jinak, ale princip je vždy stejný - výstižnost.

Pathlib.Path má spoustu zkratek (odpovídajících běžně známým příkazům - mkdir, chmod) a spojených slov do jednoho (expanduser). Významově jsou víceslovná.

Zrovna tieto skratky prikazov a nazvov aplikacii mv, rm, tr, cat, chmod, awk a podobne, to je najhorsia vec na unixoch. V at&t a na berkley asi tak trosku fetovali, ked to vymyslali. Ako, rozumiem motivacii, na tty sa tazsie pisalo a cim menej pismen, tym menej preklepov, ale aj tak ...

gll

Re:Recept na špagety - java vs. net
« Odpověď #70 kdy: 12. 10. 2017, 09:49:16 »
Víceslovné metody ukazují na nepromyšlený málo abstraktní ad hoc návrh.

Přesně. Cílem je minimalizovat vynaložené úsilí uživatele API. Výběr správné akce by měl pokud možno provést počítač a ne uživatel na základě pročítání dokumentace desítek metod. Veřejné metody by se měly chovat inteligentně. Odhadovat záměr uživatele.

balki

Re:Recept na špagety - java vs. net
« Odpověď #71 kdy: 12. 10. 2017, 09:55:34 »
Veřejné metody by se měly chovat inteligentně. Odhadovat záměr uživatele.

Ja preferujem hlupejsie api. Tie kniznice, co myslia za mna len robia problemy a nutia ma robit rozne hacky a workaroundy. V tom co robim potrebujem mat presne a predvidatelne spravanie.

hu

Re:Recept na špagety - java vs. net
« Odpověď #72 kdy: 12. 10. 2017, 10:35:16 »
Mě by hrozně zajímalo, co přesně, páni odborníci, programujete.

gll

Re:Recept na špagety - java vs. net
« Odpověď #73 kdy: 12. 10. 2017, 10:45:36 »
Mě by hrozně zajímalo, co přesně, páni odborníci, programujete.

https://forum.root.cz/index.php?topic=16277.15
https://forum.root.cz/index.php?topic=16348.165

od tebe jsem tu jeste zadny kod nevidel.

dustin

Re:Recept na špagety - java vs. net
« Odpověď #74 kdy: 12. 10. 2017, 18:40:14 »
ale kdyz uz tady chcete poucovat o spravnych nazvech metod, tak byste si mohl alespon precist PEP8.

Kde se v PEP8 povídá o obsahu názvů? Vidím tam jen samou štábní kulturu, o doporučení názvů tam není nic. Jestli myslíš formální stránku - podtržítkovou notaci, ta je v této diskusi irelevantní. Textový obsah je stejný. Já nemám podtržítkovou notaci rád, jsem z Javy zvyklý na mixed case notaci a proto ji používám i ve svém pythoním kódu.

Mimochodem téměř celé PEP8 hlídá Pycharm, jen tu naming convention inspekci mám záměrně vypnutou. Ale to vážně není o popisnosti názvů.

 

reklama