To já zrovna naopak. Poté, co jsem zkusil Python na scripty, tak jsem se vrátil k Java, i přes relativně komplikovanější build. Relativně je na místě - pokud se všechno vleze do jednoho souboru, je to ok, ale s růstem do více souboru už bude Python docela chaos. V Java pořád vytvořím jeden executable jar s #!/usr/bin/env java -jar
na začátku a mám vystaráno (pokud nestačí single source).
A kolekce? Jak co, Java stream API je IMHO často čitelnější, obzvlášť u složitějších operací. Výběr je na taky na straně Java - u Python není v základní verzi ani TreeMap (!).
U toho -source
mi zatím chybí něco jako import jar
, to by značně zvýšilo použitelnost na scriptování v případech, kdy stačí jeden soubor, ale vyžaduje externí závislosti.
No jo jenže když potřebuji dělat s JSON a soubory, tak se s tím zrovna v Java nedělá moc dobře. U kolekcí jsem měl namysli hlavně práci s map a to, že se to dá zapsat jako v JSON. To je pro mě ten hlavní důvod, proč šáhnu po Python. Co mě naopak v Python chybí a v Java je, tak je security a HTTP client (protože ten ve standardním Python za moc nestojí, jenže s requests se zase dělá mnohem lépe než s nějakým jiným Java klientem).
Jenže problém s Groovy je, že ho nyní skoro nikdo nepoužívá a neumí (z velké části kvůli Kotlinu a to je taky jeden z důvodů proč Kotlin moc nemusím). My jsme taky hodně používali Groovy (ale i Jython kvůli WebSphere), ale pokud chcete dělat něco s nějakým cloudem, tak se s Python knihovnou dělá většinou lépe než s Java knihovnou. Ten kód se mi zdá prostě jednoduší (pro využití ve skriptech).
Tím neříkám, že je Groovy nebo JS špatná volba, ale každému vyhovuje něco jiného.
A v cem je v Jave pri praci s JSONem problem?
Pridam do mavenu GSON a hotovo, ve Spring Bootu je JSON podpora zabudovana primo a REST api mapuje JSON na Beany uplne samocinne.
Kdyz potrebuju JSONPath, dtto.
Delam nyni vyhradne v Pythonu a Jave a popravde nevidim jedinou vyhodu Pythonu v teto oblasti.
Naopak dynamicke typovani je pain, javovsky ArrayList<MyBean> opravdu nejde naplnit nesmysly v jinem formatu, jak v v Pythonu bezne.
Zrovna ted jsem videl Python klienta, ktery cetl z JSON/RPC, pricemz absolutne bez jedineho slova prijme JOSN/RPC Error (je taky zformatovany jako JSON), akorat to o kus dal lehne.
17. 5. 2024, 08:06 editováno autorem komentáře
Pridam do mavenu GSON a hotovo, ve Spring Bootu je JSON podpora zabudovana primo a REST api mapuje JSON na Beany uplne samocinne.
A to je přesně ten důvod proč na skripty používám Python. Kvůli JSON nemusím nic přidávat a nemusím nic nikam mapovat a s JSON pracuju jako s normální mapou. V 99% to ve skriptech stačí. To samé ukládání objekt, mapu cokoliv a uložím to v JSON. V Javě na to můžu použít buď serializaci nebo properties, ale to není nic moc.
Dynamické typování je pain v nějakém větším projektu u skriptů to vidím jako výhodu.
ArrayList<MyBean> opravdu nejde naplnit nesmysly v jinem formatu
Tohle bych opravdu netvrdil.
List list = new ArrayList<MyBean>(); list.add(new Object());
Zrovna ted jsem videl Python klienta, ktery cetl z JSON/RPC, pricemz absolutne bez jedineho slova prijme JOSN/RPC Error (je taky zformatovany jako JSON), akorat to o kus dal lehne.
Což se vám může stát i v Java. To, že ten klient je blbě napsaný vůbec nic neříká o tom jazyku.
tato klasika uz je vyresena (kovariance/kontravariance)?
class Ovoce { } class Hruska extends Ovoce { public String toString() { return "Hruska"; } } class Jablko extends Ovoce { public String toString() { return "Jablko"; } } public class Variance2 { public static void smichej(Ovoce[] kosik) { kosik[0] = new Hruska(); kosik[1] = new Jablko(); } public static void main(String[] args) { Ovoce[] kosik = new Hruska[2]; smichej(kosik); for (Ovoce ovoce:kosik) { System.out.println(ovoce); } } }
A nebo z toho udělat binarku rovnou s PyInstaller https://pyinstaller.org/en/stable/
Poukazoval jsem na to, že se pak ztrácí ta zdánlivá výhoda jednoduchosti napsat jeden script a máme hotovo. Ty možnosti pro oba jsou pak komplikovanější (setup.py s čímkoliv či třeba Maven s shared a executable-jar pluginy), ale u jen trochu větších projektů nevyhnutelné.
Ohledně dřívějšího komentáře, že -cp
jde napsat do #!/usr/bin/env -S java...
- ano, jde, problém je, že není úplný standard, kde jsou ty knihovny instalovány - chybí tam něco jako standardní search path. Nejjednodušší pak bývá udělat Maven setup, který všechny dependencies zabalí do jednoho executable jar.