Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu konuda F# dilinde kullanılabilen aritmetik işleçler açıklanmaktadır.
İkili Aritmetik İşleçlerin Özeti
F# dilinde aritmetik işlemler iki modda gerçekleştirilebilir: İşaretsiz ve İşaretli. Varsayılan olarak, aritmetik işlemler performansı önceliklendirir ancak taşma/azalmaya izin veren denetlenmeyen davranış kullanır. Denetlenen operatörler, bu gibi durumlarda özel durumlar oluşturarak güvenliği önceliklendirir.
Kontrolsüz Aritmetik İşleçler
Aşağıdaki tabloda, kutulanmamış integral ve kayan nokta türlerine sahip İşaretsiz Aritmetik için kullanılabilen ikili aritmetik işleçler özetlenmiştir.
| İkili işleç | Notlar |
|---|---|
+ (toplama, artı) |
İşaretlenmedi. 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) |
İşaretlenmedi. İ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) |
İşaretlenmedi. 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ünmüş) |
Sıfıra bölme, integral türleri için DivideByZeroException hatasına neden olur. Kayan nokta türleri için sıfıra bölme, infinity veya -infinityözel kayan nokta değerlerini verir. 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 kalanını döndürür. Sonucun işareti, ilk operandın işaretiyle aynıdır. |
** (üs, kuvvet) |
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. |
Denetlenmeyen davranış, taşma veya eksik taşıma oluştuğunda istisnalar fırlatmaz, bu da büyük veya uç durum değerlerinde aritmetik işlemlerini daha az güvenli olmasını sağlar.
Kontrollü Aritmetik Operatörler
Aşağıdaki tabloda, kutulanmamış tam sayı türlerine sahip denetlenmiş Aritmetik için kullanılabilen ikili aritmetik işleçler özetlenmiştir. Denetlenen işleçler, hesaplamaların taşma veya azalma açısından doğrulandığından emin olur ve kritik uygulamalar için daha güvenli bir aritmetik sağlamak amacıyla kullanılır.
| İkili İşleç | Notlar |
|---|---|
+ (toplama, artı) |
Sonuç maksimum değeri aşarsa veya türü tarafından desteklenen en düşük değerin altına girerse bir OverflowException oluşturur. Hem Taşma hem de Alt Taşma mümkündür. |
- (çıkarma, eksi) |
Sonuç maksimum değeri aşarsa veya türü tarafından desteklenen en düşük değerin altına girerse bir OverflowException oluşturur. Hem Taşma hem de Alt Taşma mümkündür. |
* (çarpma, süre) |
Ürün maksimum değeri aşarsa veya türü tarafından desteklenen minimum değerin altına girerse bir OverflowException oluşturur. Hem Taşma hem de Alt Taşma mümkündür. |
Kontrollü işleçler, aritmetik taşmaların yakalanmasını ve açıkça işlenmesini sağlamak için kullanışlıdır.
İşte bir örnek:
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.
İşaretli ve İşaretsiz İşleçler Arasında Seçim
Kontrollü İşleçler: Taşma hatalarının algılanıp açıkça işlenmesi gereken senaryolar için idealdir.
İşaretsiz İşleçler: F# varsayılan olarak performans nedenleriyle işaretlenmemiş aritmetik kullanır. Bu işlemler, taşma veya yetersizlik oluştuğunda sessizce yanlış sonuçlar üretebilir. Dikkatli kullanın.
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.
| Tekil operatör | 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 bu durumu hesaba katmadığında güvenlik sorunlarına katkıda bulunabilecek potansiyel olarak ciddi bir sorundur. Bu uygulamanız için önemliyse, Microsoft.FSharp.Core.Operators.Checkediçindeki işaretli işleçleri kullanmayı 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 booltüründe değ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üçük 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 Equalsyöntemini kullanı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 üzere Equals geçersiz kılın ve IComparableuygulayın. System.IComparable arabiriminin 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, başka bir bilgi olmadığında int aritmetik ifadelerin türü olarak çıkarsar. Başka bir tür belirterek bu davranışı geçersiz kılabilirsiniz. Bu nedenle, aşağıdaki koddaki function1 bağımsız değişken türleri ve dönüş türü intolarak çıkarılır, ancak function2 türleri floatolarak çıkarılır.
// 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.
- Simgesi ve Operatör Referansı
- İşleci Aşırı Yükleme
- bit düzeyinde işleçler
- Boole İşleçleri