Recept na špagety - java vs. net

dustin

Re:Recept na špagety - java vs. net
« Odpověď #45 kdy: 11. 10. 2017, 20:14:36 »
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í.


gll

Re:Recept na špagety - java vs. net
« Odpověď #46 kdy: 11. 10. 2017, 21:11:26 »
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í.

Konvence jsou v kazdem jazyku jine. Nebyva uplne spatny napad se nejdriv podivat na konvence pouzivane ve standartni knihovne, pripadne si zapnout nejakou kontrolu stylu.

namatkou metody vestavenych typu Pythonu

list

Kód: [Vybrat]
list.append                 list.clear                  list.copy                   list.count                  list.extend                 list.index
list.insert                 list.mro                    list.pop                    list.remove                 list.reverse                list.sort

str

Kód: [Vybrat]
str.capitalize    str.casefold      str.center        str.count         str.encode        str.endswith      str.expandtabs    str.find          str.format
str.format_map    str.index         str.isalnum       str.isalpha       str.isdecimal     str.isdigit       str.isidentifier  str.islower       str.isnumeric
str.isprintable   str.isspace       str.istitle       str.isupper       str.join          str.ljust         str.lower         str.lstrip        str.maketrans
str.mro           str.partition     str.replace       str.rfind         str.rindex        str.rjust         str.rpartition    str.rsplit        str.rstrip
str.split         str.splitlines    str.startswith    str.strip         str.swapcase      str.title         str.translate     str.upper         str.zfill

dict

Kód: [Vybrat]
dict.clear                  dict.copy                   dict.fromkeys               dict.get                    dict.items                  dict.keys
dict.mro                    dict.pop                    dict.popitem                dict.setdefault             dict.update                 dict.values

soubor

Kód: [Vybrat]
f.buffer          f.close           f.closed          f.detach          f.encoding        f.errors          f.fileno          f.flush           f.isatty
f.line_buffering  f.mode            f.name            f.newlines        f.read            f.readable        f.readline        f.readlines       f.seek
f.seekable        f.tell            f.truncate        f.writable        f.write           f.writelines

moc dvouslovnych nazvu tam nevidim.

Kit

Re:Recept na špagety - java vs. net
« Odpověď #47 kdy: 11. 10. 2017, 21:13:50 »
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í.

Ano, dělám minimalistické třídy, většinou na 20-80 řádek. Tím předmětem je skutečně "itself". Místo load() mám konstruktor, ve kterém by mohlo být i initialize(), ale netuším k čemu by bylo dobré. Co by mělo dělat store()? Pro přidávání položek kolekce používám spíš add(), pro hledání find(), pro změnu dat update(), pro prezentaci implicitní metody __toString() nebo třeba jsonSerialize(). Ty jsou sice ze dvou slov, ale s tím nic neudělám. Aspoň snadno poznám, že jsem jejich názvy nevymýšlel.

Inicializaci konkrétních bloků subkomponent dělám v konstruktorech dalších objektů, které následně injektuji do konstruktoru objektu, ve kterém bys měl tohle vše naházeno. Objekty dělím na procesní (drží si jen informace o vlastní konfiguraci a metodice výpočtu, nikoli však data) a datové, které bývají uspořádány do kolekce, např. stromu.

Kit

Re:Recept na špagety - java vs. net
« Odpověď #48 kdy: 11. 10. 2017, 21:17:21 »
namatkou metody vestavenych typu Pythonu
...
moc dvouslovnych nazvu tam nevidim.

Moc hezký výčet. Kéž by sloužil i ostatním pro inspiraci.

gll

Re:Recept na špagety - java vs. net
« Odpověď #49 kdy: 11. 10. 2017, 21:37:27 »
namatkou metody vestavenych typu Pythonu
...
moc dvouslovnych nazvu tam nevidim.

Moc hezký výčet. Kéž by sloužil i ostatním pro inspiraci.

Ostatni by se meli inspirovat v jazyku/frameworku, ktery pouzivaji.


dustin

Re:Recept na špagety - java vs. net
« Odpověď #50 kdy: 11. 10. 2017, 21:52:57 »
Ukažte kód, kde mají vaše komponenty řešící něco konkrétního názvy stejně obecné, jako zde ukázané názvy ve standardních knihovnách obecných prvků (list, string, dictionary). A to hodně přes polovinu je dvouslovné. Jakmile do toho zavedete doménové termíny ("byznys model"), musíte popisovat něco konkrétního. Nebo žádný kód nemáte a jenom tu popisujete teorii?


Kit

Re:Recept na špagety - java vs. net
« Odpověď #51 kdy: 11. 10. 2017, 21:57:46 »
Ukažte kód, kde mají vaše komponenty řešící něco konkrétního názvy stejně obecné, jako zde ukázané názvy ve standardních knihovnách obecných prvků (list, string, dictionary). A to hodně přes polovinu je dvouslovné. Jakmile do toho zavedete doménové termíny ("byznys model"), musíte popisovat něco konkrétního. Nebo žádný kód nemáte a jenom tu popisujete teorii?

Na rozlišení domén přece slouží namespace.

dustin

Re:Recept na špagety - java vs. net
« Odpověď #52 kdy: 11. 10. 2017, 22:04:25 »
Ukaž reálný kód, kde máš vše rozpadlé do tolika tříd, že si vystačíš s jednoslovnými metodami, tj. v podstatě pouze slovesy. Pořád nevím, o čem tu mluvíš.


gll

Re:Recept na špagety - java vs. net
« Odpověď #53 kdy: 11. 10. 2017, 22:41:32 »
Ukažte kód, kde mají vaše komponenty řešící něco konkrétního názvy stejně obecné, jako zde ukázané názvy ve standardních knihovnách obecných prvků (list, string, dictionary). A to hodně přes polovinu je dvouslovné. Jakmile do toho zavedete doménové termíny ("byznys model"), musíte popisovat něco konkrétního. Nebo žádný kód nemáte a jenom tu popisujete teorii?

Ja tu diskutuji anonymne. Nevim co je teoretickeho na vestavenych typech/funkcich. Tezko najit v praxi pouzivanejsi vec. Teorii tu nepopisuji, naopak, ja jsem v techto diskuzich jediny praktik. Casto sem posilam reseni ve forme funkcniho kodu.

dustin

Re:Recept na špagety - java vs. net
« Odpověď #54 kdy: 11. 10. 2017, 22:53:59 »
Sorry, mě nezajímá teorie. Zajímá mě (a věřím, že i spoustu ostatních), jak vypadá kód, který skutečně něco reálného řeší a používá jen jednoslovné metody. Já takový neznám. Nejsou jimi ani ty základní třídy, které samy o sobě žádný reálný problém neřeší a přesto mají minimálně polovinu dvouslovných metod (pro boolean isXXX, vrací getXXX, setXXX, right trim rtrim, left trim ltrim, zero fill zfill atd. - viz API pro string.

gll

Re:Recept na špagety - java vs. net
« Odpověď #55 kdy: 11. 10. 2017, 23:11:04 »
Sorry, mě nezajímá teorie. Zajímá mě (a věřím, že i spoustu ostatních), jak vypadá kód, který skutečně něco reálného řeší a používá jen jednoslovné metody. Já takový neznám. Nejsou jimi ani ty základní třídy, které samy o sobě žádný reálný problém neřeší a přesto mají minimálně polovinu dvouslovných metod (pro boolean isXXX, vrací getXXX, setXXX, right trim rtrim, left trim ltrim, zero fill zfill atd. - viz API pro string.

setXXX, getXXX se v pythonu nepoužívá. Zaprve je to cammelcase a zadruhe k tomu ucelu slouzi properties. Kdyz uz chcete pouzit metodu, tak podstatne jmeno nebo sloveso v trpnem rode namisto getxxx. Sloveso v cinnem rode misto setxx. Je to konvence bezna ve vsech novejsich knihovnach. rtrim beru jako jedno slovo - zkratku.

Kit

Re:Recept na špagety - java vs. net
« Odpověď #56 kdy: 11. 10. 2017, 23:24:51 »
Sorry, mě nezajímá teorie. Zajímá mě (a věřím, že i spoustu ostatních), jak vypadá kód, který skutečně něco reálného řeší a používá jen jednoslovné metody. Já takový neznám. Nejsou jimi ani ty základní třídy, které samy o sobě žádný reálný problém neřeší a přesto mají minimálně polovinu dvouslovných metod (pro boolean isXXX, vrací getXXX, setXXX, right trim rtrim, left trim ltrim, zero fill zfill atd. - viz API pro string.

Základní třídy jsou obvykle příliš obecné, proto mají mnoho metod, z nichž většinu nepotřebujeme. Není tedy vhodné je brát jako vzor, 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čí. Zejména pokud chceš uplatnit polymorfismus, u kterého název metody musíš oddělit od souvislosti s názvem třídy objektu i jeho atributů. Není zde tedy prostor pro názvy isXXX, getXXX, setXXX apod, neboť objekt má skrývat svou implementaci. Jiný objekt se stejným rozhraním může mít zcela jiné atributy.

dustin

Re:Recept na špagety - java vs. net
« Odpověď #57 kdy: 11. 10. 2017, 23:32:09 »
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é.

dustin

Re:Recept na špagety - java vs. net
« Odpověď #58 kdy: 11. 10. 2017, 23:33:44 »
Kite, tvé obecné vyprávění už jsme všichni slyšeli tisíckrát. Ukaž kód, kde to tak děláš. Třeba se poučíme.

dustin

Re:Recept na špagety - java vs. net
« Odpověď #59 kdy: 11. 10. 2017, 23:36:35 »
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?