Aritmetik İşleçler

Bu konuda F# dilinde kullanılabilen aritmetik işleçler açıklanmaktadır.

İkili Aritmetik İşleçlerin Özeti

Aşağıdaki tabloda, kutulanmamış integral ve kayan nokta türleri için kullanılabilen ikili aritmetik işleçler özetlenmiştir.

İkili işleç Notlar
+ (toplama, artı) İşareti kaldırıldı. Sayılar bir araya eklendiğinde ve toplam türü tarafından desteklenen maksimum mutlak değeri aştığında olası taşma koşulu.
- (çıkarma, eksi) İşareti kaldırıldı. İmzasız türler çıkarıldığında veya kayan nokta değerleri tür tarafından temsil edilemeyecek kadar küçük olduğunda olası taşma koşulu.
* (çarpma, süre) İşareti kaldırıldı. Sayılar çarpıldığında ve ürün türü tarafından desteklenen maksimum mutlak değeri aştığında olası taşma koşulu.
/ (bölme, bölüştür) Sıfıra bölme, integral türleri için a'ya DivideByZeroException neden olur. Kayan nokta türleri için, sıfıra bölme size özel kayan nokta değerlerini infinity veya -infinityverir. Kayan noktalı sayı türüyle temsil edilemeyecek kadar küçük olduğunda da olası bir taşma koşulu vardır.
% (kalan, rem) Bölme işleminin geri kalanını döndürür. Sonucun işareti, ilk işlenenin işaretiyle aynıdır.
** (üs, gücü) Sonuç tür için maksimum mutlak değeri aştığında olası taşma koşulu.

Üs işleci yalnızca kayan nokta türleriyle çalışır.

Birli Aritmetik İşleçlerin Özeti

Aşağıdaki tabloda, tam sayı ve kayan nokta türleri için kullanılabilen tekli aritmetik işleçler özetlenmiştir.

Tekli işleç Notlar
+ (pozitif) Herhangi bir aritmetik ifadeye uygulanabilir. Değerin işaretini değiştirmez.
- (olumsuzlama, negatif) Herhangi bir aritmetik ifadeye uygulanabilir. Değerin işaretini değiştirir.

İntegral türleri için taşma veya yetersizlik davranışı çevresinde kaydırmaktır. Bu, yanlış bir sonuda neden olur. Tamsayı taşması, yazılım hesaba yazılmadığında güvenlik sorunlarına katkıda bulunabilecek ciddi bir sorundur. Bu, uygulamanız için önemliyse içindeki işaretli işleçleri Microsoft.FSharp.Core.Operators.Checkedkullanmayı göz önünde bulundurun.

İkili Karşılaştırma İşleçlerinin Özeti

Aşağıdaki tabloda tam sayı ve kayan nokta türleri için kullanılabilen ikili karşılaştırma işleçleri gösterilmektedir. Bu işleçler türünde booldeğerler döndürür.

IEEE kayan nokta gösterimi tam bir eşitlik işlemini desteklemediğinden, kayan noktalı sayılar hiçbir zaman eşitlik için doğrudan karşılaştırılmamalıdır. Kodu inceleyerek kolayca eşit olduğunu doğrulayabileceğiniz iki sayı aslında farklı bit gösterimlerine sahip olabilir.

Operatör Notlar
= (eşitlik, eşittir) Bu bir atama işleci değil. Yalnızca karşılaştırma için kullanılır. Bu genel bir işleçtir.
> (büyüktür) Bu genel bir işleçtir.
< (küçüktür) Bu genel bir işleçtir.
>= (büyüktür veya eşittir) Bu genel bir işleçtir.
<= (küçüktür veya eşittir) Bu genel bir işleçtir.
<> (eşit değil) Bu genel bir işleçtir.

Aşırı Yüklenmiş ve Genel İşleçler

Bu konuda ele alınan tüm işleçler Microsoft.FSharp.Core.Operators ad alanında tanımlanır. bazı işleçler statik olarak çözümlenen tür parametreleri kullanılarak tanımlanır. Bu, söz konusu işleçle çalışan her belirli tür için ayrı ayrı tanımlar olduğu anlamına gelir. Tekli ve ikili aritmetik ve bit düzeyinde işleçlerin tümü bu kategoridedir. Karşılaştırma işleçleri geneldir ve bu nedenle yalnızca ilkel aritmetik türlerle değil, herhangi bir türle çalışır. Ayrımcı birleşim ve kayıt türlerinin F# derleyicisi tarafından oluşturulan kendi özel uygulamaları vardır. Sınıf türleri yöntemini Equalskullanır.

Genel işleçler özelleştirilebilir. Karşılaştırma işlevlerini özelleştirmek için, kendi özel eşitlik karşılaştırmanızı sağlamak için öğesini geçersiz kılın Equals ve sonra uygulayın IComparable. Arabiriminin System.IComparable tek bir yöntemi vardır: CompareTo yöntemi.

İşleçler ve Tür Çıkarımı

bir ifadede işleç kullanımı, bu işleçteki tür çıkarımını kısıtlar. Ayrıca, işleçlerin kullanımı aritmetik bir tür anlamına geldiği için işleçlerin kullanımı otomatik genelleştirmeyi engeller. F# derleyicisi int , başka herhangi bir bilgi olmadığında aritmetik ifadelerin türü olarak çıkarımda bulunur. Başka bir tür belirterek bu davranışı geçersiz kılabilirsiniz. Bu nedenle, aşağıdaki koddaki bağımsız değişken türleri ve dönüş türü function1 olarak intçıkarılır, ancak için function2 türleri olarak çıkarılır 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

Ayrıca bkz.