Bagikan melalui


Operasi Aritmatika

Topik ini menjelaskan operator aritmatika yang tersedia di F#.

Ringkasan Operator Aritmatika Biner

Tabel berikut ini meringkas operator aritmetika biner yang tersedia untuk jenis integral dan floating-point yang tidak dikotak.

Operator biner Catatan
+ (penambahan, tambah) Tidak dicentang. Kemungkinan kondisi luapan ketika angka ditambahkan bersama-sama dan jumlah melebihi nilai absolut maksimum yang didukung oleh jenis.
- (pengurangan, kurang) Tidak dicentang. Kemungkinan kondisi underflow saat jenis yang tidak ditandatangani dikurangi, atau ketika nilai floating-point terlalu kecil untuk diwakili oleh jenis.
* (perkalian, kali) Tidak dicentang. Kemungkinan kondisi luapan ketika angka dikalikan bersama-sama dan jumlah melebihi nilai absolut maksimum yang didukung oleh jenis.
/ (pembagian, bagi) Pembagian dengan nol menyebabkan DivideByZeroException untuk jenis integral. Untuk jenis floating-point, pembagian dengan nol memberi Anda nilai floating-point khusus infinity atau -infinity. Ada juga kemungkinan kondisi underflow ketika angka floating-point terlalu kecil untuk diwakili oleh jenis.
% (sisa, rem) Mengembalikan sisa operasi pembagian. Tanda hasilnya sama dengan tanda operand pertama.
** (eksponensial, pangkat) Kemungkinan kondisi luapan ketika hasil melebihi nilai absolut maksimum untuk jenis.

Operator eksponensial hanya berfungsi dengan jenis floating-point.

Ringkasan Operator Aritmatika Tunggal

Tabel berikut ini meringkas operator aritmetika tunggal yang tersedia untuk jenis integral dan floating-point.

Operator tunggal 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 underflow untuk jenis integral adalah membungkus. Ini menyebabkan hasil yang salah. Luapan bilangan bulat adalah masalah yang berpotensi serius karena dapat berkontribusi pada masalah keamanan ketika perangkat lunak tidak ditulis untuk memperhitungkannya. Jika ini menjadi perhatian aplikasi Anda, pertimbangkan untuk menggunakan operator yang dicentang di Microsoft.FSharp.Core.Operators.Checked.

Ringkasan Operator Perbandingan Biner

Tabel berikut menunjukkan 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 persamaan, karena representasi floating-point IEEE tidak mendukung operasi persamaan yang tepat. Dua angka yang dapat Anda verifikasi dengan mudah bahwa keduanya sama dengan memeriksa kode mungkin sebenarnya memiliki representasi bit yang berbeda.

Operator Catatan
= (persamaan, sama dengan) Ini bukan operator penugasan. Ini hanya digunakan untuk perbandingan. Ini adalah operator generik.
> (lebih besar) Ini adalah operator generik.
< (lebih kecil) 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 dengan) Ini adalah operator generik.

Operator Kelebihan Beban dan Generik

Semua operator yang dibahas dalam topik ini ditentukan dalam namespace Microsoft.FSharp.Core.Operators. Beberapa operator ditentukan menggunakan parameter jenis yang diselesaikan secara statik. Ini berarti bahwa ada definisi individual untuk setiap jenis tertentu yang berfungsi dengan operator tersebut. Semua operator tunggal dan biner aritmetika serta bitwise berada dalam kategori ini. Operator perbandingan bersifat umum dan oleh karena itu bekerja dengan jenis apa pun, bukan hanya jenis aritmatika primitif. Gabungan dan jenis rekaman yang didiskriminasi memiliki implementasi kustom mereka sendiri yang dihasilkan oleh pengompilasi F#. Jenis kelas menggunakan metode Equals.

Operator generik dapat dikustomisasi. Untuk mengustomisasi fungsi perbandingan, ambil alih Equals untuk memberikan perbandingan persamaan kustom Anda sendiri, lalu terapkan IComparable. Antarmuka System.IComparable memiliki satu metode, metode CompareTo.

Operator dan Inferensi Jenis

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, pengompilasi 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 menjadi int, tetapi jenis untuk function2 disimpulkan menjadi 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