To první znamená volání funkce ze jmenného prostoru. To stejné je použito pro volání statických metod - což jsou de facto taky funkce, takže jde napsat třeba:
(System/exit 1)
Volání "nestatických" metod (který se předává this) je divočejší, na druhou stranu to pořád odpovídá - voláš funkci nazvanou .něco, které se v prvním parametru předá this představovaný zvenku jménem proměnné. Moc často se to nepoužívá, spíše se volá (doto ...) a nebo se knihovny Javy úplně obchází (což je mnohem čistší ve výsledku).
No já jsem o tom slyšel zmínku jen v jedné přednášce Richa, říkal tam, že celé Java interop je založené na symbolu tečky, takže ji [teď si to živě představuju :-)] vrážel před identifikátor metody, za identifikátor třídy atd. až vyšlo to co vyšlo. Nějaká hlubší příčina tam asi nebude.
Z praxe - dá se s tím žít, na druhou stranu jak jsem zmiňoval doto, to je pěkná věc, v javě mi chybí...
Nerozumím ... co vám vadí na polské notaci. Kromě toho, že to není 'obvyklé', to nádherně koreluje se syntaxním zápisem (fce arg1 arg2...). Pokud by to někomu hooodně vadilo, není problém si v těchto jazycích napsat infixovou notaci, která by podle Vás zřejmě 'krokem stranou' nebyla. Nikdo po tom ale netouží, protože zvyknout si na tento způsob zápisu trvá ochotné mysli chvilku a pak už jen oceňuje nastolený pořádek oproti zajetému infixovému bordelu ;-)
+ ovšem v Clojure není operátor, ale funkce, což má zajímavé důsledky:
1) podporuje libovolný počet argumentů, včetně žádného argumentu (což nikdo asi nenapíše do programu přímo, ale při nejakém použití apply je to vcelku běžné)
2) + nepatří mezi speciální znaky, takže existuje například i "vylepšené sčítání" reprezentované funkcí +', můžete si napsat funkci +1 namísto inc, "přetížit" funkci apod. (víc je to vidět u znaků * a -, které jsou používány na spoustu dalších věcí a nemusí se to psát do příručky jazyka :-)
3) nelíbí se vám chování +? není problém předeklarovat, popř. předeklarovat jen v rámci jednoho jmenného prostoru atd. atd.
Myslím, že pana Tišnovského můžou českým clojuristům ti ostatní jen závidět :-).
Jen se chci zeptat na dvě drobnůstky...
1) nebylo by lepší u toho http-regexp zakrýt tu podskupinu s 'www' na (?:www\.), aby nám ji ta funkce re-find nevracela? Na rozdíl od té třetí s parametry je na výstupu asi zbytečná.
2) u toho výpisu jmen z /etc/passwd ... se da použít třeba taky map:
(map #(first (str/split % #":")) (str/split-lines (slurp "/etc/passwd")))
Je některá z obou verzí (map vs for) doporučenější z hlediska případného paraelního zpracování, nebo je to šumák?
Díky!
1) to je pravda, dobrý postřeh (a asi to hodím i do produkčního kódu, ze kterého jsem ten příklad vzal :-)
2) podle mě je to jedno, já jsem jen zvyklý používat for, ale i map bude fungovat bez problémů (a možná i lepší, teoreticky můžeš map nahradit za pmap, tady to nepomůže, ale u nějakých šílených výpočtů ano)
Jo pmap znám (už z některého z Tvých minulých článků O:) ... to mě mohlo trknout, schopnost zvyknout si více na map mi může možná někdy pomoci rychleji převést už hotové konstrukce na pmap...
Když jsem psal ten dotaz, tak mě spíš vrtalo hlavou, jestli by tam nemohl bejt problém s tím, že by to 'for' dělal sekvenčně - klasický cyklus, jeden prvek za druhým, kdežto map by to udělal najednou atomicky. Ale z Tvý odpovědi soudím, že to asi bude obyč.cyklus v obou případech...