Nové matematické metódy Java 8
1. Úvod
Zvyčajne, keď sa zamyslíme nad novými funkciami, ktoré prišli s verziou Java 8, je ako prvé potrebné myslieť na funkčné programovanie a výrazy lambda.
Okrem týchto veľkých funkcií však existujú aj ďalšie, ktoré môžu mať menší vplyv, ale tiež zaujímavé a mnohokrát nie veľmi známe alebo dokonca pokryté žiadnou recenziou.
V tomto tutoriáli uvedieme výčet a uvedieme malý príklad každej z nových metód pridaných do jednej zo základných tried jazyka: java.lang.Math.
2. Nové * presné () Metódy
Najskôr máme skupinu nových metód, ktoré rozširujú niektoré z existujúcich a najbežnejších aritmetických operácií.
Ako uvidíme, sú úplne vysvetľujúce, pretože majú úplne rovnakú funkcionalitu ako metódy, z ktorých však vychádzajú pridanie výnimky v prípade, že výsledná hodnota pretečie nad maximálnymi alebo minimálnymi hodnotami ich typov.
Tieto metódy môžeme použiť s oboma celé čísla a túži ako parametre.
2.1. addExact ()
Pridá dva parametre, hádzanie Aritmetická výnimka v prípade pretečenia (čo platí pre všetkých * Presné () metódy) dodatku:
Math.addExact (100, 50); // vráti 150 Math.addExact (Integer.MAX_VALUE, 1); // hodí ArithmeticException
2.2. substractExact ()
Substituuje hodnotu druhého parametra od prvého, pričom hodí znak Aritmetická výnimka v prípade pretečenia odčítania:
Math.subtractExact (100, 50); // vráti 50 Math.subtractExact (Long.MIN_VALUE, 1); // hodí ArithmeticException
2.3. incrementExact ()
Zvyšuje parameter o jednu, hodí znakom Aritmetická výnimka v prípade pretečenia:
Math.incrementExact (100); // vráti 101 Math.incrementExact (Integer.MAX_VALUE); // hodí ArithmeticException
2.4. decrementExact ()
Zníži parameter o jednu, hodí znakom Aritmetická výnimka v prípade pretečenia:
Math.decrementExact (100); // vráti 99 Math.decrementExact (Long.MIN_VALUE); // hodí ArithmeticException
2.5. multiplyExact ()
Vynásobte dva parametre hodením Aritmetická výnimka v prípade pretečenia produktu:
Math.multiplyExact (100, 5); // vráti 500 Math.multiplyExact (Long.MAX_VALUE, 2); // hodí ArithmeticException
2.6. negateExact ()
Zmení znamienko parametra hodením znaku Aritmetická výnimka v prípade pretečenia.
V tomto prípade musíme premýšľať o vnútornej reprezentácii hodnoty v pamäti, aby sme pochopili, prečo dochádza k pretečeniu, pretože to nie je také intuitívne ako ostatné „presné“ metódy:
Math.negateExact (100); // vráti -100 Math.negateExact (Integer.MIN_VALUE); // hodí ArithmeticException
Druhý príklad vyžaduje vysvetlenie, pretože nie je zrejmé: Prepad je spôsobený Celé číslo. MIN_VALUE je −2,147 483 688 a na druhej strane Celé číslo.MAX_VALUE je 2,147,483,647 takže vrátená hodnota sa nezmestí do Celé číslo o jednu jednotku.
3. Iné metódy
3.1. floorDiv ()
Rozdelí prvý parameter druhým a potom vykoná a poschodie () operácia nad výsledkom, vrátenie Celé číslo to je menšie alebo rovné kvocientu:
Math.floorDiv (7, 2)); // vráti 3
Presný kvocient je 3,5, teda poschodie (3,5) == 3.
Pozrime sa na ďalší príklad:
Math.floorDiv (-7, 2)); // vráti -4
Presný kvocient je -3,5, takže poschodie (-3,5) == -4.
3.2. modDiv ()
Tento je podobný predchádzajúcej metóde floorDiv (), ale uplatnenie poschodie () operácia nad modulom alebo zvyškom delenia namiesto kvocientu:
Math.modDiv (5, 3)); // vráti 2
Ako vidíme, modDiv () pre dve kladné čísla je to isté ako operátor%. Pozrime sa na iný príklad:
Math.modDiv (-5,3)); // vráti 1
Vracia 1 a nie 2, pretože floorDiv (-5, 3) je -2 a nie -1.
3.3. nextDown ()
Vráti okamžite nižšiu hodnotu parametra (podporuje plavák alebo dvojitý parametre):
float f = Math.nextDown (3); // vráti 2,9999998 double d = Math.nextDown (3); // vráti 2,999999761581421
4. Záver
V tomto článku sme stručne opísali funkčnosť všetkých nových metód pridaných do triedy java.lang.Math vo verzii 8 platformy Java a tiež si všimol niekoľko príkladov, ako ich používať.
Celý zdrojový kód je ako vždy k dispozícii na serveri GitHub.