Online IDE pro Javu s možností debugování

gl

Re:Online IDE pro Javu s možností debugování
« Odpověď #345 kdy: 09. 08. 2016, 20:54:44 »
Ty si delas srandu?

Nedělám a pořád mi to neni jasné.


Re:Online IDE pro Javu s možností debugování
« Odpověď #346 kdy: 09. 08. 2016, 21:10:43 »
Ty si delas srandu?

Nedělám a pořád mi to neni jasné.

Tak jeste pomaleji:

Kód: [Vybrat]
final Foo f = foo()
f.bar()

V tomhle kodu neni bez dalsi znalosti/studia jasne, zda f muze byt null ALE f.bar() je naprosto bezny obrat a proto projde casto bez povsimnuti.

V
Kód: [Vybrat]
final Optional<Foo> f = foo()
f.get().bar()

je naprosto zrejme, ze
  • foo() muze vratit "nic"
  • f.get() bez kontroly je krajne podezrely obrat

Podtrzeno secteno - veci jsou zrejmejsi (ze neco muze nemit hodnotu je explicitni) a zaroven bezpecnejsi (nebezpecne operace jsou podezrele na prvni pohled jak pro lidi tak pro statickou analyzu). Navic dostavas prostredky pro bezpecnou praci s tou (ne) hodnotou, jako je map(), filter(), flatMap(). Ty jsou casto elegantnejsi nez if (f.isPresent()), protoze  lepe umozni retezit operace.

Samozrejme je tady dalsi prostor pro zlepseni, z toho prikladu je trebas celkem videt, ze by Jave prospela typova inference... ale to je uz jiny pribeh.

Re:Online IDE pro Javu s možností debugování
« Odpověď #347 kdy: 09. 08. 2016, 23:04:09 »
Celkově mi Optional přijde jako zbytečná abstrakce, která nic neusnadní.
Základní význam Optional je v tom, že je to typově bezpečný způsob jak deklarovat, že metoda může vracet prázdnou hodnotu. Některé jazyky to mají přímo na úrovni typů (rovnou při použití nějakého typu definujete, zda může nebo nemůže být null), v Javě pro to některé nástroje definují anotaci @Nullable |opačnou k @NotNull), kterou kontroluje IDE nebo nějaký nástroj spouštěný při buildu. No a v Javě 8 to vtipně vyřešili tím, že přidali třídu Optional do standardní knihovny. Tím pádem nebylo potřeba měnit jazyk, kontrolují to už současné nástroje pro typovou kontrolu, a jako bonus se do té třídy mohly přidat metody jako map nebo flatMap, což je vlastně jen syntaktický cukr. Porovnávat to se zachycováním NPE je nesmysl, vůbec nejde o to, co je rychlejší nebo přehlednější na použití, podstatná je možnost deklarovat nullable návratový typ metody. Dá se očekávat, že nástroje provádějící statickou analýzu kódu začnou doporučovat použít Optional tam, kde metoda může vracet null.