Java programátor expert
Java news: Aké najlepšie vylepšenia priniesli aktualizácie pre nové verzie SE 8 – SE 17?
Programovací jazyk Java pravidelne prechádza aktualizáciami, ktoré prinášajú rôzne zmeny. Niektoré sú významné, iné menej podstatné. Ich zoznam môže byť celkom dlhý, preto vyberáme z každej verzie len tie najdôležitejšie.
Druhý najpoužívanejší programovací jazyk je Java
Java je jedným z najobľúbenejších programovacích jazykov. Je univerzálny, stabilný a objektovo orientovaný a má dlhú históriu. Prvýkrát bol predstavený už v roku 1995. Spoločnosť Oracle, ktorá ho vytvorila, vydávala spočiatku nové väčšie verzie každé 3 – 4 roky. Technológie však idú neustále dopredu, čo spôsobilo nutnosť prejsť na agilný spôsob vydávania novej verzie každých 6 mesiacov.
Prvá agilná verzia bola Java SE 9, ktorá bola vydaná v septembri 2017. Verzia 10 sa následne objavila po ďalších šiestich mesiacoch. Ostatné aktualizácie začali vychádzať v podobnom intervale.
… Niektoré Java verzie sú označované aj ako LTS (Long Time Support)? Znamená to, že Oracle poskytuje podporu a aktualizácie po dobu niekoľkých rokov. V prípade Javy SE 11 (LTS) to bude napríklad až do roku 2026.
V čase písania článku je aktuálnou verziou Java SE 17 (LTS). Vydaná bola v septembri 2021 a najbližšia aktualizácia sa očakáva v marci 2022.
Najobľúbenejšia je Java 11
Java 11 bola podľa ročného prieskumu spoločnosti Snyk najpoužívanejšou verziou v roku 2021. Využívalo ju až 61,5 % opýtaných. Iba 12 % aktualizovalo jazyk na najnovšiu verziu, ktorou bola v čase robenia prieskumu Java 15.
Zaujímavé boli tiež odpovede na otázku, aké sú dôvody toho, že ľudia neprešli na novšiu verziu. Väčšina sa zhodovala v tom, že nie je schopná alebo ochotná migrovať Javu každých 6 mesiacov. Iní, približne 51 %, tvrdia, že zmeny nepotrebujú, pretože ich súčasné prostredie funguje dobre.
K ďalším dôvodom, prečo účastníci prieskumu zostávajú pri starších verziách, patria:
- vysoké náklady migrácie,
- neochota zákazníkov migrovať,
- nová verzia nemá žiadne špeciálne vylepšenia,
- aplikačné servery alebo knižnice nepodporujú najnovšie verzie.
Z prieskumu z roku 2020 zas vyplynulo, že stratégiou väčšiny vývojárov (55 %) je držať sa dlhodobých vydaní. Napriek tomu až 22 % respondentov uvádza, že sa plánuje rozhodnúť, či bude, alebo nebude inovovať. Chcú tak zistiť, či sú novozavedené funkcie dostatočne dôležité na odôvodnenie migrácie.
Najvýznamnejšie aktualizácie v každej verzii Java
Každá nová verzia so sebou prináša nejaké zmeny. Niektoré sú väčšie, iné zase menšie. Vyberáme pre teba kľúčové zmeny, ktoré by sa mohli hodiť každému, kto Javu používa.
Java SE 9
Java SE 9 vyšla v septembri 2017 a priniesla so sebou niekoľko zmien. Nie všetky ale boli významné a dôležité. Toto sú tri najdôležitejšie:
Modularita – Jigsaw Project
Najvýznamnejšou zmenou v prostredí Java 9 bol systém modularity, ktorý bol pomenovaný ako Jigsaw Project. Modul je skupina kódu charakteristická určitými črtami. Funkcia modularity rozdeľuje programovací jazyk na menšie modely, aby poskytoval:
- tieňovanie,
- znižovanie konfliktov medzi verziami,
- pridávanie zapuzdrenia,
- vyššiu bezpečnosť,
- vyšší výkon,
- prispôsobený runtime JDK s menšou veľkosťou.
Na vytvorenie nového modelu potrebuješ module-info.java súbor v tvojom src.main.java adresári. Vo vnútri môžeš definovať svoje požiadavky na modul.
Privátne metódy v rozhraniach Java
Ďalšia funkcia Java 9 umožňuje písanie privátnych a statických metód v rozhraniach, aby sa zabránilo nadbytočnému kódu.
Nástroj príkazového riadku Java JShell
Spoločnosť Oracle vyvinula nový REPL nástroj nazvaný JShell. REPL znamená Read – Evaluate – Print – Loop. Ako jeho názov napovedá, slúži na spúšťanie príkazov, vytváranie premenných, tried, metód a umožňuje ich rýchlo testovať. Skvelý je na testovanie malých útržkov kódu, ktoré by inak vyžadovali vytvorenie novej triedy pomocou main metódy.
JShell možno nájsť v <JAVA_HOME> / bin zložke a môžeš ho spustiť zadaním jshell do príkazového riadku a okamžite začať písať kód.
Interaktívny Java jshell je dodávaný s históriou a automatickým dokončovaním. Poskytuje tiež funkcie, ako napríklad ukladanie a načítanie zo súborov a všetkých alebo z niektorých riadkov kódu:
Java SE 10
Javu SE 10 vydala spoločnosť Oracle v marci 2018. Pre vývojárov priniesla dve dôležité zmeny:
OpenJDK
Aby bola komunita Javy viac priateľská, Oracle začala propagovať binárne súbory OpenJDK ako primárne JDK do budúcnosti. Problém je však v tom, že ak chceš získať napríklad rozšírenú podporu pre staršie verzie Javy, musíš si za služby zaplatiť.
Premenná var
Premenná var nie je ničím novým, pretože existuje aj v iných programovacích jazykoch. Jej hlavnou výhodou je, že znižuje výrečnosť jazyka. V praxi to znamená, že pomocou nej sa vyhneš dlhým názvom objektov alebo písaniu rovnakých názvov dvakrát.
Programátori sa však môžu pýtať, aký je rozdiel medzi var a Object. Kľúčové slovo var znamená, že chceš, aby kompilátor sám zistil typ. Na druhej strane, pomocou Object pretypuješ svoju inštanciu objektu na typ Object. Znamená to, že aj keď môžeš použiť všeobecné metódy triedy Object, nemôžeš použiť svoje metódy špecifické pre danú triedu. Vytvorí to kompilačnú chybu.
Java SE 11
Java SE 11 vyšla šesť mesiacov po verzii číslo 10, čiže v septembri 2018. Priniesla dve zásadné zmeny:
Spúšťanie súborov Java
Zásadnou zmenou v tejto verzii je, že programátor nepotrebuje explicitne kompilovať zdrojové súbory ava s príkazom javac.
Namiesto toho môže súbor spustiť priamo pomocou príkazu java.
Použitie syntaxe lokálnych premenných
Java 11 má podporu pre použitie syntaxe lokálnych premenných v parametroch lambda. Funkcia sa dá využiť na aplikovanie modifikátorov na lokálne premenné, napríklad na definovanie anotácie.
Java SE 12
Verzia 12 vyšla v marci 2019 a prišla len s jedným výrazným zlepšením. Bol ním alternatívny zápis switch. Nasledujúca ukážka porovnáva starý a nový zápis výrazu switch. Kód rozlišuje pracovné a víkendové dni.
Kód v novom zápise vyzerá oveľa čistejšie a kratšie. Nová forma switch taktiež odstraňuje potrebu kľúčových slov break. Znamená to, že keď kód nájde prvú zhodu, prestane pracovať. Ďalším rozdielom je, že premennej sa môže priamo priradiť hodnota z príkazu switch.
Java SE 13
Java 13 vyšla v septembri 2019. Aktualizácia prišla s dvomi hlavnými vylepšeniami:
Textové bloky
Nová funkcia textových blokov umožnila vývojárom ľahšie čítať viacriadkové texty. Používa tri úvodzovky, podobne ako Python a Groovy.
Okrem toho sú k dispozícii všetky funkcie triedy String.
Vylepšenia výrazu switch
Java 13 vylepšuje switch výraz z verzie 12 o kľúčové slovo yield. Pomocou yield sa dajú navracať hodnoty z výrazu switch.
Java SE 14
V marci 2020 vyšla verzia Java SE 14 a priniesla až štyri významnejšie vylepšenia:
Switch ako štandard
Výraz switch, ktorý bol zavedený ako preview v Jave 12 a bol vylepšený vo verzii 13, sa stal jazykovým štandardom.
Vylepšenie NullPointerException
NullPointerException nemal v minulosti príliš veľkú výpovednú hodnotu. Dôvod bol ten, že sa prostredníctvom neho dalo zistiť len to, že určitá hodnota bola v danom súbore nulová. V novej verzii je však všetko inak. Funkcia sa rozšírila a programátori sa konečne dozvedia, ktorá premenná spôsobila túto výnimku.
Java záznamy – record
Záznamy boli zavedené na zníženie opakovaného štandardného kódu v dátových modeloch POJO. Zjednodušujú každodenný vývoj, zvyšujú efektivitu a výrazne minimalizujú riziko ľudskej chyby. Napríklad, dátový model pre používateľa s ID a heslom možno jednoducho definovať ako:
V tomto prípade sa využilo aj nové kľúčové slovo record, ktoré automaticky pridáva metódy konštruktora, getters, equals, hashCode a toString.
Zhoda vzoru pre instanceof
Verzia 14 predstavila porovnávanie vzorov s cieľom zjednodušiť kód. Bez novej funkcie by kód vyzeral takto:
Vďaka novej verzii Javy však kód vyzerá oveľa jednoduchšie a kratšie:
Java SE 15
Java SE 15 vyšla v septembri 2020 a priniesla so sebou tri hlavné aktualizácie:
Textové bloky ako štandard
Textové bloky, ktoré boli zavedené ako preview v prostredí Java 13, sa stali jazykovým štandardom.
Sealed triedy
Modifikátory prístupu public, protected a private poskytujú veľmi hrubú kontrolu. Pomocou kľúčových slov sealed, non-sealed a permits sa programátor dokáže pohrať s hierarchiou dedičnosti. Cieľom sealed tried je umožniť jednotlivým triedam deklarovať, ktoré typy sa môžu použiť ako podtypy. To platí aj pre rozhrania a určovanie, ktoré typy ich môžu implementovať.
V tomto príklade sme deklarovali abstraktnú triedu s názvom Person. Zároveň sme špecifikovali, že jediné triedy, ktoré ju môžu rozšíriť, sú Employee a Manager. Rozšírenie sealed triedy sa deje rovnako ako dnes v Jave pomocou kľúčového slova extends:
Každá trieda, ktorá rozširuje sealed triedu, musí byť sama vyhlásená za sealed, non-sealed alebo final. To zaisťuje, že hierarchia tried zostáva konečná a kompilátor ju pozná.
Skryté triedy
Cieľom skrytých tried je umožniť vytvárať triedy, ktoré nie sú viditeľné. Znamená to, že ich nemôžu spájať iné triedy ani ich nie je možné objaviť pomocou reflexie. Triedy, ako sú tieto, majú zvyčajne krátky životný cyklus, preto sú navrhnuté tak, aby boli hlavne efektívne. Užitočné sú najmä pre vývojárov pracujúcich s JVM.
Java SE 16
Verzia 16 vyšla v marci 2021 a priniesla jednu významnú zmenu, ktorou bola migrácia OpenJDK do Gitu. Zdrojové kódy OpenJDK boli premigrované z Mercurial do Gitu. Dôvodom bola veľkosť súborov metadát, lepšie nástroje a hostovanie.
Java SE 17
Až do marca 2022 je najnovšou verziou Java 17, ktorá priniesla novú renderovaciu pipeline pre systémy macOS, podporu portu pre najnovší čip Apple M1 a podporu sealed classes. Nechýbajú ani jazykové vylepšenia a odstránenie komplikácie ahead-of-time a just-in-time.
Najlepšie rozšírenia pre jazyk Java
Jednotlivé aktualizácie Java majú oveľa viac noviniek. Nie všetky sú však také veľké a dôležité ako tie, ktoré sme vybrali. Pomocou nich získaš nielen čistejší, ale aj kvalitnejší kód a rýchlejšiu a lepšiu implementáciu. Ak by si si chcel pozrieť všetky novinky, dávame do pozornosti nasledujúce zdroje: