Java 8 Matematika nove metode

1. Uvod

Obično kad razmišljamo o novim značajkama koje su došle s verzijom 8 Jave, funkcionalno programiranje i lambda izrazi su prve stvari koje nam padnu na pamet.

Unatoč tome, osim tih velikih značajki, postoje i druge, možda s manjim utjecajem, ali također zanimljive i često ne baš poznate ili čak pokrivene bilo kojom recenzijom.

U ovom uputstvu nabrojat ćemo i dati mali primjer svake od novih metoda dodanih u jednu od osnovnih klasa jezika: java.lang.Math.

2. Novo *točno() Metode

Prvo, imamo skupinu novih metoda koje proširuju neke od postojećih i najčešćih aritmetičkih operacija.

Kao što ćemo vidjeti, prilično su razumljivi, budući da imaju potpuno istu funkcionalnost od metoda iz kojih proizlaze, ali sa kojima dodatak izbacivanja iznimke u slučaju da rezultirajuća vrijednost prelazi maksimalnu ili minimalnu vrijednost njihovih vrsta.

Ove metode možemo koristiti s obje cijeli brojevi i čezne kao parametri.

2.1. addExact ()

Dodaje dva parametra, bacajući an ArithmeticException u slučaju prelijevanja (što vrijedi za sve *Točno() metode) od dodavanja:

Math.addExact (100, 50); // vraća 150 Math.addExact (Integer.MAX_VALUE, 1); // baca ArithmeticException

2.2. substrateExact ()

Oduzima vrijednost drugog parametra prvom, bacajući ArithmeticException u slučaju prelijevanja oduzimanja:

Math.subtractExact (100, 50); // vraća 50 Math.subtractExact (Long.MIN_VALUE, 1); // baca ArithmeticException

2.3. inkrementExact ()

Povećava parametar za jedan, bacajući ArithmeticException u slučaju prelijevanja:

Math.incrementExact (100); // vraća 101 Math.incrementExact (Integer.MAX_VALUE); // baca ArithmeticException

2.4. decrementExact ()

Parametar se smanjuje za jedan bacajući ArithmeticException u slučaju prelijevanja:

Math.decrementExact (100); // vraća 99 Math.decrementExact (Long.MIN_VALUE); // baca ArithmeticException

2.5. multiplyExact ()

Pomnožite dva parametra, bacajući znak ArithmeticException u slučaju prelijevanja proizvoda:

Math.multiplyExact (100, 5); // vraća 500 Math.multiplyExact (Long.MAX_VALUE, 2); // baca ArithmeticException

2.6. negateExact ()

Mijenja znak parametra, bacajući znak ArithmeticException u slučaju prelijevanja.

U ovom slučaju, moramo razmisliti o unutarnjem predstavljanju vrijednosti u memoriji da bismo razumjeli zašto postoji prelijevanje, što nije tako intuitivno kao i ostale "točne" metode:

Math.negateExact (100); // vraća -100 Math.negateExact (Integer.MIN_VALUE); // baca ArithmeticException

Drugi primjer zahtijeva objašnjenje jer nije očito: Preljev je zbog Cijeli broj.MIN_VALUE je -2,147.483.648, a s druge strane Cijeli broj.MAX_VALUE biti 2.147.483.647 tako da se vraćena vrijednost ne uklapa u Cijeli broj za jednu jedinicu.

3. Ostale metode

3.1. floorDiv ()

Dijeli prvi parametar s drugim, a zatim izvodi a kat() operacija nad rezultatom, vraćanje Cijeli broj koji je manji ili jednak količniku:

Math.floorDiv (7, 2)); // vraća 3 

Točan količnik je 3,5 dakle pod (3,5) == 3.

Pogledajmo još jedan primjer:

Math.floorDiv (-7, 2)); // vraća -4 

Točan količnik je -3,5 dakle pod (-3,5) == -4.

3.2. modDiv ()

Ova je slična prethodnoj metodi floorDiv (), ali primjenom kat() operacija nad modulom ili ostatkom dijeljenja umjesto količnika:

Math.modDiv (5, 3)); // vraća 2 

Kao što vidimo, modDiv () za dva pozitivna broja je isto što i% operator. Pogledajmo drugačiji primjer:

Matematika.modDiv (-5, 3)); // vraća 1 

Vraća 1, a ne 2 jer katDiv (-5, 3) je -2, a ne -1.

3.3. nextDown ()

Vraća odmah nižu vrijednost parametra (supports plutati ili dvostruko parametri):

plutajuće f = Math.nextDown (3); // vraća 2.9999998 double d = Math.nextDown (3); // vraća 2.999999761581421

4. Zaključak

U ovom smo članku ukratko opisali funkcionalnost svih novih metoda dodanih u razred java.lang.Math u inačici 8 Java platforme i također vidjeli neke primjere kako ih koristiti.

Kao i uvijek, puni izvorni kod dostupan je na GitHub-u.