Javu jsem zavrhl kvůli
- alchymii statických a dynamických objektů (které spolu nemohou kooperovat, jak by bylo potřeba),
- totálně nepřehledné a nelogické syntaxi
- a naprosto šílené dokumentaci.
K tomu poslednímu: Člověk by potřeboval vědět něco ve smyslu "třída ta a ta má ty a ty metody, metoda A má ty a ty argumenty a dělá s nimi to a to a pro ty argumenty jsou nastaveny (při jejich nezadání) ty a ty implicitní hodnoty". Dolovat tento údaj z oficiální dokumentace, představující z 99% slovní salát a jen asi jediné procento smysluplné informace mě opravdu nebavilo.
S blbou syntaxí souhlasím, ale nerozumím, co ti vadí na té dokumentaci. Když náhodou kliknu třeba na dokumentaci ConcurrentHashMap
https://docs.oracle.com/javase/7/docs/api/
co v té dokumentaci není přesně tak, jak popisuješ, že by se ti líbilo? Je tam seznam metod třídy, u každé metody se píše k čemu slouží parametry, a že java umí nezadané argumenty ani nevím. A slovního salátu jsem si moc nevšiml, v popisu třídy jsou podle mě dost relevantní věci.
Pardon, ta dokumentace k ConcurrentHashMap je zde: https://docs.oracle.com/javase/9/docs/api/java/util/concurrent/ConcurrentHashMap.html
WTF? :( Toto nie je dokumentacia toto vyzera ako 5. diel Война и мир od Tolstoja.
Mna ucili ze programovanie je o kompozicii malych jednotiek do vacsich celkov. Zdoraznujem "malych". A teraz pozeram do kodu... trieda ConcurrentHashMap ma vyse 6000 riadkov! SRSLY ?!?!?!? :(
1) Toto je dokumentace, a řekl bych, že má všechny vlastnosti, o kterých původní tazatel tvrdil, že tam chybí. To, že je dlouhá, souvisí s tím, že toho ConcurrentHashMap umí hodně a jsou to netriviální věci. Kdyby byla tato dokumentace krátká, OP by nadával, že není zdokumentované všechno. Nadávat, že rozsáhlá věc má rozsáhlou dokumentaci, mi přijde takový.. no asi si dovedeš domyslet.
2) Obecně s poučkou souhlasím, ale ConcurrentHashMap mi přijde jako dost atomická věc. Ale rád se nechám poučit. Jak by jsi dekomponoval funkcionalitu ConcurrentHashMap do menších jednotek? Jsem velmi zvědavý.
> Jak by jsi dekomponoval funkcionalitu ConcurrentHashMap do menších jednotek?
Chces aby som si za pol hodky nastudoval 6000 riadkov kodu? Uhm, no dobre uvidim co najdem... aaa tak napriklad mkrni na triedy
MapReduceKeysToIntTask http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/tip/src/share/classes/java/util/concurrent/ConcurrentHashMap.java#l6078
MapReduceValuesToIntTask http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/tip/src/share/classes/java/util/concurrent/ConcurrentHashMap.java#l6128
MapReduceKeysToIntTask
Toto smrdi copy-pastom! No a ked tak na to hladim, zda sa mi ze asi vacsina tried MapReduce.*To.*Task bude podobnych a komentar vysvetlujuci preco to nie je "abstracted away" evidente chyba.
> Nadávat, že rozsáhlá věc má rozsáhlou dokumentaci, mi přijde takový.. no asi si dovedeš domyslet.
Nekriticky tvrdit ze vec je rozsiahla lebo rozsiahla byt musi... no domyslel som si.
Jo, smrdí to copy-pastem, nevím proč je to implementovaný tak jak to je. Abstrakce by v tomhle případě asi znamenala přidat nějaký getter, který by vracel buď key nebo val, takže tipuju, že je to takhle "unrollnutý" kvůli výkonu, ale najisto nevím.
Každopádně za dekompozici považuju něco jiného, než co ti (nám) vadí na příkladu co jsi našel. A s uživatelskou dokumentací tenhle příklad nesouvisí vůbec, tyhle třídy jsou "implementační detail".
Ah :) dobra poznamka https://youtu.be/TVHcdgrqbHE?t=2187
ty si dobry amater
objekt - je instancia triedy. Staticky/dynamicky objekt - to si kde cital? Niekde v referate nejakeho stredoskolaka, ktory nieco skopiroval z wiki a ani sam nevie o com pisal? Prosimta, ja som uz som programoval kdeco, ale nikdy som nemusel riesit nejake dynamicke/staticke objekty ale iba objekty.
A keby si vedel aspon zaklady objektoveho programovanie tak by si mohol vediet, ze rozhranie netvoria iba metody, argumenty, triedy ale ze maju aj svoje stavy a svoje spravanie - to je ten salat co k tomu potrebujes vies. Lebo bez toho nemozes ani len tusit, co sposoby spustenie jednej metody. myslis ze Object.clone() to len tak nakolonuje objekt lebo sa vola clone a netreba ti poznat teoriu za tym?
A co multiparalelne prostredie na serveri ty macher? Kodil si uz aj nieco ine ako jednudchy konzolovu appku s jednym vlaknom? Naco ti bude nazov metody, ak nevies ci je thread safe? A co rozne factories a buildery v multivlaknovom rpostredi? Takym ako ty dat nakodit serverovu appku, tak ak by to bola banka asi vsetci ludia pridu o svoje uspory.
S tvojim pristupom, staci pozriet na zdrvojaky Linux kernela - tamen subor ma take a take funkcie a hned ovladas cely kernel do podrobna.
Nelogicka syntax - uplne najlogickejsia - ved vychadza z Ccka. To si este nezazil asi funcionalny pristup v Java 8 a funkcionalne programovanie v JavaScripte alebo moderne jazyky ako Ruby. Uz radsej ani nehovorim o C++ ktoreho syntax ti umoznuje spravit uplne vsetko preto je oproti Jave sialna, pretoze Java syntax je zuzena na objektove programovanie. Mimochodom pointre a nieco medzi pointrom a referenciou mas uz aj v C# a kvoli prehladnosti to asi nebude.