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.

Vedel si, že...

… 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.

Nové verzie programovacieho jazyka Java od Oracle
Prehľad verzii Java, zdroj: wikipedia.org

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.

Kód privátnych a statických metód v Java 9
Verzia Java 9 obsahuje funkciu písania privátnych a statických metód v rozhraniach.

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.

kód príkazového riadku JShell v Java SE 9
Nástroj príkazového riadku Java JShell je skvelý na testovanie malých útržkov kódu.

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:

Automatické dokončovanie a história interaktívneho Java JShell
Nový nástroj REPL nazývaný JShell umožňuje ukladanie i načítanie zo súborov a 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.

Kód spúšťania Java súborov bez kompilovania zdrojových súborov
Vo verzii Java 11 už nemusíš explicitne kompilovať zdrojové súbory ava s príkazom javac.

Namiesto toho môže súbor spustiť priamo pomocou príkazu java.

Kód - Priame spúšťanie súborov Java vo verzii SE 11.
Priame spúšťanie súborov Java vo verzii SE 11.

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.

Kód - Použitie syntaxe lokálnych premenných v Java SE 11
Java SE 11 umožňuje použitie syntaxe lokálnych premenných v parametroch lambda.

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 - starý zápis switch v Java SE 12
Java 12 vylepšila starý zápis výrazu switch.
Kód - Alternatívny zápis výrazu switch v Java 12
Java SE 12 predstavila nový alternatívny zápis výrazu switch.

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.

Kód - Nová funkcia textových blokov v Java SE 13
Java 13 prináša novú funkciu textových blokov, ktorá používa tri úvodzovky ako Python a Groovy.

Okrem toho sú k dispozícii všetky funkcie triedy String.

Kód - Funkcie triedy String v Java SE 13
V Java SE 13 máš k dispozícii tiež 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.

Kód - Vylepšený výraz switch z verzie 12 v Java SE 13
Java SE 13 ponúka vylepšený výraz switch z verzie 12.

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.

Kód - Switch ako jazykový štandard v Java SE 14
Java SE 14 premenila pôvodný výraz switch na jazykový štandard v programovaní.

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:

Kód - Nová funkcia záznamov v Java SE 14
Java 14 zaviedla na zníženie opakovaného štandardného kódu v dátových modeloch POJO záznamy.

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:

Kód - Porovnávanie vzorov pomocou funkcie instanceof v Java 14
Starý zápis funkcie instanceof pre porovnávanie vzorov bol zložitý.

Vďaka novej verzii Javy však kód vyzerá oveľa jednoduchšie a kratšie:

Kód - Vylepšená funkcia instanceof v Java 14
Nová funkcia Javy 14 zjednodušila zápis výrazu instanceof.

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ť.

Kód - Hierarchia dedičnosti pomocou sealed tried
Sealed triedy umožňujú deklaráciu typov, ktoré v jednotlivých triedach možno vymedziť ako podtypy.

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:

Kód - Rozšírenie sealed triedy v Java SE 15
Pomocou extends rozšíriš sealed triedy v súčasnej verzii Java i vo verzii SE 15.

 

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:

O autorovi

Jozef Wagner

Java Developer Senior

Viac ako 10 rokov programujem v Jave, momentálne pracujem v msg life Slovakia ako Java programátor senior a pomáham zákazníkom implementovať ich požiadavky do poistného softvéru Life Factory. Vo voľnom čase si rád oddýchnem v lese, prípadne si zahrám nejakú dobrú počítačovú hru.

Daj nám o sebe vedieť