Metode Baru Java 8 Math

1. Perkenalan

Biasanya, ketika kita memikirkan tentang fitur-fitur baru yang datang dengan Java versi 8, pemrograman fungsional dan ekspresi lambda adalah hal pertama yang terlintas dalam pikiran.

Namun demikian, selain fitur-fitur besar itu masih ada yang lain, mungkin memiliki dampak yang lebih kecil tetapi juga menarik dan seringkali tidak terlalu terkenal atau bahkan dicakup oleh ulasan apa pun.

Dalam tutorial ini, kami akan menghitung dan memberikan sedikit contoh dari setiap metode baru yang ditambahkan ke salah satu kelas inti bahasa: java.lang.Math .

2. Metode baru * exact ()

Pertama, kami memiliki sekelompok metode baru yang memperluas beberapa operasi aritmatika yang ada dan paling umum.

Seperti yang akan kita lihat, mereka cukup jelas, karena mereka memiliki fungsionalitas yang sama persis dengan metode yang mereka peroleh tetapi dengan tambahan melempar pengecualian dalam kasus, nilai yang dihasilkan melebihi nilai maks atau min dari tipenya. .

Kita dapat menggunakan metode ini dengan baik bilangan bulat dan rindu sebagai parameter.

2.1. addExact ()

Menambahkan dua parameter, memunculkan ArithmeticException jika terjadi overflow (yang berlaku untuk semua metode * Exact () ) dari penambahan:

Math.addExact(100, 50); // returns 150 Math.addExact(Integer.MAX_VALUE, 1); // throws ArithmeticException

2.2. substractExact ()

Mengurangi nilai parameter kedua dari yang pertama, melempar ArithmeticException jika terjadi overflow pengurangan:

Math.subtractExact(100, 50); // returns 50 Math.subtractExact(Long.MIN_VALUE, 1); // throws ArithmeticException

2.3. incrementExact ()

Menambahkan parameter satu per satu, memunculkan ArithmeticException jika terjadi overflow:

Math.incrementExact(100); // returns 101 Math.incrementExact(Integer.MAX_VALUE); // throws ArithmeticException

2.4. decrementExact ()

Mengurangi parameter satu per satu, memunculkan ArithmeticException jika terjadi overflow:

Math.decrementExact(100); // returns 99 Math.decrementExact(Long.MIN_VALUE); // throws ArithmeticException

2.5. multiplyExact ()

Kalikan dua parameter, lemparkan ArithmeticException jika produk meluap:

Math.multiplyExact(100, 5); // returns 500 Math.multiplyExact(Long.MAX_VALUE, 2); // throws ArithmeticException

2.6. negateExact ()

Mengubah tanda parameter, memunculkan ArithmeticException jika terjadi overflow.

Dalam kasus ini, kita harus memikirkan tentang representasi internal dari nilai dalam memori untuk memahami mengapa ada luapan, yang tidak seintuitif metode "tepat" lainnya:

Math.negateExact(100); // returns -100 Math.negateExact(Integer.MIN_VALUE); // throws ArithmeticException

Contoh kedua memerlukan penjelasan karena tidak jelas: Overflow disebabkan oleh Integer.MIN_VALUE menjadi −2.147.483.648, dan di sisi lain Integer.MAX_VALUE menjadi 2.147.483.647 sehingga nilai yang dikembalikan tidak sesuai dengan Integer oleh satu unit.

3. Metode Lain

3.1. floorDiv ()

Membagi parameter pertama dengan yang kedua, dan kemudian melakukan operasi floor () atas hasilnya, mengembalikan Integer yang kurang atau sama dengan hasil bagi:

Math.floorDiv(7, 2)); // returns 3 

Hasil bagi yang tepat adalah 3,5 jadi floor (3,5) == 3.

Mari kita lihat contoh lain:

Math.floorDiv(-7, 2)); // returns -4 

Hasil bagi yang tepat adalah -3,5 jadi floor (-3,5) == -4.

3.2. modDiv ()

Metode ini mirip dengan metode floorDiv () sebelumnya , tetapi menerapkan operasi floor () pada modulus atau sisa pembagian alih-alih hasil bagi:

Math.modDiv(5, 3)); // returns 2 

Seperti yang bisa kita lihat, modDiv () untuk dua bilangan positif sama dengan operator% . Mari kita lihat contoh yang berbeda:

Math.modDiv(-5, 3)); // returns 1 

Ini mengembalikan 1 dan bukan 2 karena floorDiv (-5, 3) adalah -2 dan bukan -1.

3.3. nextDown ()

Mengembalikan nilai yang lebih rendah dari parameter (mendukung parameter float atau ganda ):

float f = Math.nextDown(3); // returns 2.9999998 double d = Math.nextDown(3); // returns 2.999999761581421

4. Kesimpulan

Dalam artikel ini, kami telah menjelaskan secara singkat fungsionalitas dari semua metode baru yang ditambahkan ke kelas java.lang.Math di versi 8 platform Java dan juga melihat beberapa contoh cara menggunakannya.

Seperti biasa, kode sumber lengkap tersedia di GitHub.