Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Topik ini menjelaskan operator aritmatika yang tersedia di F#.
Ringkasan Operator Aritmatika Biner
Operasi aritmatika di F# dapat dilakukan dalam dua mode: Tidak Terkendali dan Terkendali. Secara default, operasi aritmatika menggunakan perilaku tanpa pengecekan, yang memprioritaskan kinerja tetapi memungkinkan terjadinya overflow/underflow. Operator yang diperiksa memprioritaskan keselamatan dengan melemparkan pengecualian dalam kasus seperti itu.
Operator Aritmatika Tanpa Pemeriksaan
Tabel berikut ini meringkas operator aritmetika biner yang tersedia untuk Aritmatika Tidak Dicentang dengan jenis integral dan titik mengambang yang tidak dikotak.
| Operator biner | Catatan |
|---|---|
+ (tambahan, plus) |
Tidak dicentang. Kemungkinan kondisi luapan ketika angka ditambahkan bersama-sama dan jumlah melebihi nilai absolut maksimum yang didukung oleh jenis . |
- (pengurangan, minus) |
Tidak dicentang. Kemungkinan kondisi underflow terjadi ketika tipe tanpa tanda dikurangi, atau ketika nilai titik mengambang terlalu kecil untuk dapat diwakili oleh tipe tersebut. |
* (perkalian, waktu) |
Tidak dicentang. Kemungkinan kondisi luapan ketika angka dikalikan sehingga hasil kali melebihi nilai absolut maksimum yang didukung oleh tipe data. |
/ (pembagian, dibagi dengan) |
Pembagian dengan nol menyebabkan DivideByZeroException untuk jenis integral. Untuk jenis floating-point, pembagian dengan nol menghasilkan nilai floating-point khusus infinity atau -infinity. Ada juga kemungkinan kondisi underflow ketika angka floating-point terlalu kecil untuk diwakili oleh tipe. |
% (sisa) |
Mengembalikan sisa operasi pembagian. Tanda hasilnya sama dengan tanda operand pertama. |
** (eksponensiasi, ke kekuatan) |
Kemungkinan kondisi overflow ketika hasil melebihi nilai absolut maksimum untuk tipe tersebut. Operator eksponensiasi hanya berfungsi dengan jenis floating-point. |
Perilaku yang tidak diawasi tidak melemparkan pengecualian ketika terjadi luapan atau pengurangan yang terlalu kecil, membuatnya kurang aman untuk aritmatika pada nilai besar atau kasus batas.
Operator Aritmatika Diperiksa
Tabel berikut ini meringkas operator aritmetika biner yang tersedia untuk Aritmatika Diperiksa dengan jenis integral yang tidak dikotak. Operator yang diperiksa memastikan bahwa perhitungan diverifikasi untuk luapan atau aliran bawah, menyediakan aritmatika yang lebih aman untuk aplikasi penting.
| Operator Biner | Catatan |
|---|---|
+ (tambahan, plus) |
Melemparkan OverflowException jika hasilnya melebihi nilai maksimum atau berada di bawah nilai minimum yang didukung oleh jenis . Baik Luapan dan Pengurangan dimungkinkan. |
- (pengurangan, minus) |
Melemparkan OverflowException jika hasilnya melebihi nilai maksimum atau berada di bawah nilai minimum yang didukung oleh jenis . Baik Luapan dan Pengurangan dimungkinkan. |
* (perkalian, waktu) |
Mengeluarkan OverflowException jika produk melebihi nilai maksimum atau kurang dari nilai minimum yang didukung oleh tipe data. Baik Luapan dan Pengurangan dimungkinkan. |
Operator yang diawasi berguna untuk memastikan bahwa luapan aritmatika ditangkap dan ditangani secara eksplisit.
Berikut adalah contohnya:
open Microsoft.FSharp.Core.Operators.Checked
let safeAddition () =
try
let result = 2147483647 + 1 // Attempt to add integers at their maximum boundary
printfn "Result: %d" result
with
| :? System.OverflowException as ex ->
printfn "Overflow occurred: %s" ex.Message
safeAddition()
// Output:
// Overflow occurred: Arithmetic operation resulted in an overflow.
Memilih Antara Operator yang Diperiksa dan Tidak Dicentang
Operator yang Diperiksa: Ideal untuk skenario di mana kesalahan luapan harus dideteksi dan ditangani secara eksplisit.
Operator Tidak Dicentang: Secara default, F# menggunakan aritmatika yang tidak dicentang karena alasan performa. Operasi ini dapat secara diam-diam menghasilkan hasil yang salah ketika luapan atau aliran bawah terjadi. Gunakan dengan hati-hati.
Ringkasan Operator Aritmatika Unari
Tabel berikut ini meringkas operator aritmetika unary yang tersedia untuk jenis integral dan floating-point.
| Operator Unaer | Catatan |
|---|---|
+ (positif) |
Dapat diterapkan ke ekspresi aritmatika apa pun. Tidak mengubah tanda nilai. |
- (negasi, negatif) |
Dapat diterapkan ke ekspresi aritmatika apa pun. Mengubah tanda nilai. |
Perilaku pada luapan atau aliran bawah untuk jenis integral adalah membungkus. Ini menyebabkan hasil yang salah. Luapan bilangan bulat adalah masalah yang berpotensi serius yang dapat berkontribusi pada masalah keamanan ketika perangkat lunak tidak ditulis untuk memperhitungkannya. Jika ini menjadi perhatian aplikasi Anda, pertimbangkan untuk menggunakan operator yang diperiksa di Microsoft.FSharp.Core.Operators.Checked.
Ringkasan Operator Perbandingan Biner
Tabel berikut ini memperlihatkan operator perbandingan biner yang tersedia untuk jenis integral dan floating-point. Operator ini mengembalikan nilai jenis bool.
Angka floating-point tidak boleh dibandingkan secara langsung untuk kesetaraan, karena representasi floating-point IEEE tidak mendukung operasi kesetaraan yang tepat. Dua angka yang dapat Anda verifikasi dengan mudah agar sama dengan memeriksa kode mungkin benar-benar memiliki representasi bit yang berbeda.
| Operator | Catatan |
|---|---|
= (kesetaraan, sama dengan) |
Ini bukan operator penugasan. Ini hanya digunakan untuk perbandingan. Ini adalah operator generik. |
> (lebih besar dari) |
Ini adalah operator generik. |
< (kurang dari) |
Ini adalah operator generik. |
>= (lebih besar dari atau sama dengan) |
Ini adalah operator generik. |
<= (kurang dari atau sama dengan) |
Ini adalah operator generik. |
<> (tidak sama) |
Ini adalah operator generik. |
Operator Yang Kelebihan Beban dan Generik
Semua operator yang dibahas dalam topik ini didefinisikan dalam Microsoft.FSharp.Core.Operators namespace. Beberapa operator didefinisikan dengan menggunakan parameter jenis yang diselesaikan secara statis. Ini berarti bahwa ada definisi individual untuk setiap jenis tertentu yang berfungsi dengan operator tersebut. Semua operator aritmatika dan bitwise, baik yang unary maupun biner, berada dalam kategori ini. Operator perbandingan bersifat umum dan oleh karena itu bekerja dengan jenis apa pun, bukan hanya jenis aritmatika primitif. Penyatuan dan jenis rekaman yang diskriminasi memiliki implementasi kustom mereka sendiri yang dihasilkan oleh pengkompilasi F#. Jenis kelas menggunakan metode Equals.
Operator generik dapat disesuaikan. Untuk menyesuaikan fungsi perbandingan, gantikan Equals untuk menyediakan perbandingan kesetaraan kustom Anda sendiri, lalu terapkan IComparable. Antarmuka System.IComparable memiliki satu metode, metode CompareTo.
Operator dan Inferensi Tipe
Penggunaan operator dalam ekspresi membatasi inferensi jenis pada operator tersebut. Selain itu, penggunaan operator mencegah generalisasi otomatis, karena penggunaan operator menyiratkan jenis aritmatika. Dengan tidak adanya informasi lain, pengkompilasi F# menyimpulkan int sebagai jenis ekspresi aritmatika. Anda dapat mengambil alih perilaku ini dengan menentukan jenis lain. Dengan demikian jenis argumen dan jenis pengembalian function1 dalam kode berikut disimpulkan int, tetapi jenis untuk function2 disimpulkan float.
// x, y and return value inferred to be int
// function1: int -> int -> int
let function1 x y = x + y
// x, y and return value inferred to be float
// function2: float -> float -> float
let function2 (x: float) y = x + y
Lihat juga
- Referensi Simbol dan Operator
- Kelebihan Beban Operator
- Operator Bitwise
- Operator Boolean