Scala v expertnej kontrole Prečo Scala a nie Java

V dokumentácii k téme Scala skúmame otázku, kam sa v súčasnosti nachádza populárny jazyk JVM a kam smeruje. Pri odbornej kontrole nám šesť skúsených vývojárov Scala poskytlo svoj pohľad na Scalu. 1. časť sa zaoberá otázkou, čo robí Scalu tak fascinujúcou a čo má Scala v skutočnosti pred Java.
Komentujte a vyhrajte!
Diskutujte s! Medzi všetky konštruktívne pripomienky k odbornej kontrole Scala Rozdávame tri výtlačky knihy „Začíname so Scalou“ Heiko Seeberger.
tvoj názor sa počíta!
Prečo ste vývojárom Scala? Čím to vás osobne fascinuje na jazyku?
Heiko Seeberger: Na Scale ma fascinuje najmä to, že môžete - rovnako ako v niekoľkých iných jazykoch - písať výstižný a zrozumiteľný kód súčasne. Najlepšie to vidíme na triedach prípadov, ktoré predstavujú objekty nemennej hodnoty so „vstavanými“ implementáciami equals a hashCode a porovnávaním vzorov - kvázi „zapnutie steroidov“. Akka pomocou týchto funkcií určuje, ako herec reaguje na správy:
Ak by ste tento príklad implementovali v Jave, museli by ste namiesto tried jednoriadkových prípadov písať viacriadkové triedy s poľami, getrami a predovšetkým s implementáciami pre equals a hashCode. A namiesto porovnávania vzorov by ste museli pracovať s instanceof a písať obsadenia. Aj keď moderné IDE odľahčujú časť práce, výsledný kód zostáva omnoho rozsiahlejší a nejasný, zameranie v Jave nie je také ostré na skutočné „čo“.
Experti z Scaly
Heiko Seeberger: Členka codecentric. Autor knihy „Začíname so Scalou.“ @Hseeberger
Julian Tournay: CTO v @mfg_labs a autor JTO/validácie
Daniela Sfregola: blogerka a technologická vedúca v PayTouch. @DanielaSfregola
Ivan Kusalic: softvérový inžinier v HERE. Organizátor stretnutí berlínskeho softvéru Craftsmanship, SoCraTes. @ikusalic
Daniel Westheide: konzultant v spoločnosti innoQ. Autor publikácie „The Neophyte’s Guide to Scala.“ @Kaffeecoder
Markus Hauck: IT konzultant a tréner Scala v codecentric.
Daniel Westheide: Pôvodne som sa zaujímal o Scalu, pretože som už začal programovať v Jave v trochu funkčnejšom štýle, ale v určitom okamihu som už nechcel používať požadovaný štandardný štítok. Na Scale ma fascinuje najmä systém výkonných typov, ktorý takmer neexistuje v žiadnom bežnom jazyku.
Dva zaujímavé príklady: Pomocou vyšších druhov a typov tried je napríklad možné abstrahovať prostredníctvom zbierok Spark RDD (kolekcia distribuovaná na niekoľkých počítačoch v klastri) a zbierok Scala - moja aplikačná logika potom nevie nič o tom, či spustite ho v klastri Spark na RDD alebo lokálne na stroji v malej zbierke Scala. Takzvané fantómové typy mi umožňujú zaistiť v čase kompilácie, aby som náhodou nenapísal prístupy do svojej databázy čítaného otroka.
Ivan Kusalic: Scala je vynikajúci programovací jazyk, ktorý je vhodný najmä na spracovanie backendu v podnikových prostrediach. Najviac sa mi páči množstvo podporovaných programovacích štýlov: uprednostňujem kombináciu funkčného a objektovo orientovaného programovania, pri ktorom funkčný prístup zaisťuje nemennosť a tok procesov, zatiaľ čo objektovo orientovaný prístup poskytuje dobré zapuzdrenie údajov.
Scala je veľmi expresívny jazyk a je skutočne potešením s ním pracovať. Umožňuje vytvárať flexibilné a bezpečné vzory, ktoré v mnohých iných jazykoch jednoducho nie sú možné. Od jednoduchých DSL až po triedy písania alebo dokonca makrá, ak ich potrebujete. Väčšinou mám pri práci so Scalou pocit, že dokážem previesť svoje myšlienky priamo do kódu bez toho, aby som sa musel trápiť s ťažkopádnymi a zdĺhavými prekladmi.
A potom samozrejme sú tu aj chlapci! Naozaj si už neviem predstaviť prácu s jazykom, ktorý nemá expresívne typy. V neposlednom rade treba spomenúť krásu funkcií, ktoré na seba nadväzujú. Skutočnosť, že máte pred sebou triedy písania ako návrhový vzor a nie ako zabudovanú funkciu, hovorí všetko.
Markus Hauck: Scala ma fascinuje, pretože kombinuje funkčné programovanie na JVM so systémom expresívneho typu. Interoperabilita s Javou je ďalším bonusom, najmä pokiaľ ide o postupnú migráciu zo zavedenej kódovej základne v Jave do Scaly.
Daniela Sfregola: V predchádzajúcom živote som pracoval ako vývojár v prostredí Java. Práca s jazykom sa mi veľmi páčila. Ale po niekoľkých rokoch vývoja som chcel vyskúšať flexibilnejší a expresívnejší jazyk, a preto som sa rozhodol si so Scalou trochu zahrať. V tom čase to bol ešte jeden z nových lesklých jazykov, s ktorými sa super deti hrali.
Z cesty som sa už nevrátil. Podľa môjho názoru je Scala fascinujúci a výkonný jazyk, ktorý umožňuje programátorovi rozhodnúť sa, ako by mal kód vyzerať. V prípade iných jazykov sa toto rozhodnutie urobí s väčšou pravdepodobnosťou podľa jazykovej syntaxe.
Julien Tournay: Okolo roku 2009 som začal hrať so Scalou. Hlavným dôvodom boli lambdy, ktoré mi na Jave veľmi chýbali. V tom čase som pracoval v tej istej spoločnosti s Guillaume Bortom, ktorý vyvinul rámec Play. Guillaume a zvyšok spoločnosti sa o Scalu začali zaujímať o niekoľko mesiacov neskôr. Využil som príležitosť profesionálne použiť jazyk a zostal som pri tom.
Keď som lepšie vychádzal so Scalou, veci, ktoré sa mi na jazyku páčia, sa veľmi zmenili. Lambdy sa spočiatku cítili dobre. V JavaScripte som toho urobil veľa a môže to znieť ako paradox, ale Scala sa cítila bližšie k JavaScriptu ako Java. Potom som o tom zistil trochu viac, objavil som triedy typu, potom čisté funkčné programovanie, teóriu kategórií, programovanie na úrovni typov, logiku, teóriu programovacieho jazyka - a stále sa učím!
Na Scale milujem hlavne cestu. Jazyk vám nepomáha iba pri písaní lepších programov. Scala a jej komunita vám môžu zabezpečiť, že „rastiete“ ako vývojár. Začína to veľmi základnými problémami („Java je príliš chatrná“, „Chcem lambdas“, „Chcem používať Spark“), a čím viac sa do jazyka dostanete, tým viac ste vystavení celému svetu nových konceptov. Nie sú tu len nové knižnice alebo nástroje, ale aj úplne nové nápady. Spočiatku je to úplne ohromujúce, ale po chvíli vás učenie baví.
Prečo Scala a nie Java?
Daniel Westheide: Okrem oveľa výkonnejšieho typu systému existuje ešte veľa ďalších dôvodov, prečo by som všeobecne uprednostnil Scalu. Dve, ktoré by som v tomto bode rád vyzdvihol a ktoré sú do istej miery navzájom prepojené, sú na jednej strane možnosť definovania algebraických dátových typov a na druhej strane porovnávanie vzorov, aby sa dalo s týmito dátovými typmi pracovať s ľahko čitateľným kódom.
V nasledujúcom príklade kódu vidíme obe v akcii: Definujeme algebraický dátový typ s názvom Relácia a rozlišujeme medzi reláciou prihláseného používateľa a anonymnou reláciou. Potom používame porovnávanie vzorov, aby sme vrátili prispôsobené alebo všeobecné odporúčania:
Daniela Sfregola: Aj keď Java čoskoro využije funkčnejší štýl, Scala má niektoré funkcie, ktoré Java (zatiaľ) nemá, a oveľa kompaktnejšiu syntax. Vďaka tomu je programovanie so Scalou oveľa zábavnejšie a produktívnejšie ako s Javou - aj keď musím uznať, že je ťažšie sa Scalu naučiť.
Ivan Kusalic: Za Scalu hovorí spoľahlivosť typu, výraznosť, stručnosť, funkčná paradigma, možnosti abstrakcie atď. Záverom je, že Java a Scala sú jednoducho dva veľmi odlišné jazyky. Scala je oveľa viac ako Java a trvalo by hodiny, kým by ste určili všetky tieto body.
Scala má samozrejme aj nevýhody: vyššiu zložitosť a strmú krivku učenia. A trh práce. O rýchlosti by sa dalo diskutovať, ale zisťujem, že bit kódu, ktorý treba naozaj doladiť, je neúmerný čitateľnosti. Ak máte pochybnosti, môžete to napísať priamo v Jave, ak je optimalizácia skutočne nevyhnutná. Ale trh práce je v porovnaní s Javou skutočne veľké mínus. So všetkým ostatným Scala vyhráva - a väčšinou veľká.
Markus Hauck: Kvôli systému typu Scala. Java má niektoré vážne slabosti a v praxi má písanie tendenciu skôr rušiť ako pomáhať. V Scale to vyzerá inak, pomocou kompilátora Scala môžete zabrániť veľkému počtu chýb.
Julien Tournay: Pre mňa je najväčšou výzvou v profesijnom rozvoji „škálovanie“ projektu. Tým myslím prácu na projekte, ktorý je čoraz väčší a s tímom, ktorý zahŕňa čoraz viac vývojárov. Podľa môjho názoru systémy typu pomáhajú pri zmierňovaní tohto problému.
Ak ste vývojár Java, položte si toto: Prečo mám radšej Java ako Python alebo JavaScript? Ak je vaša odpoveď „Pretože mám rád statické jazyky“, mali by ste vyskúšať toto pole, ktoré iné jazyky ponúkajú. Existujú jazyky, ktoré majú oveľa lepší systém typov ako Java. Potom by ste mohli vyskúšať napríklad Scalu alebo Haskell, metajazyk, alebo dokonca Idris. Scala má výhodu v tom, že beží na JVM, čo uľahčuje migráciu z existujúcej základne kódu Java do Scaly.
V časti 2 odbornej kontroly sa pozrieme na rozdiely medzi programom Scala a funkčným programovaním pomocou výrazov Java 8 Lambda. Zostaňte naladení!
A ty? Komentujte a vyhrajte!
Čím vás Scala fascinuje? V čom vidíte výhody alebo nevýhody Scaly oproti Jave?
Komentujte tu!
Medzi všetky konštruktívne pripomienky k odbornej kontrole Scala Rozdávame tri výtlačky knihy „Začíname so Scalou“ Heiko Seeberger. (Nezabudnite pre tento účel uviesť svoju e-mailovú adresu).