Tür Çıkarma

Bu konuda, F# derleyicinin değer, değişken, parametre ve dönüş değeri türlerini nasıl çıkarlediği açıklanmıştır.

Genel Olarak Tür Çıkarlığı

Tür çıkarıcısı fikri, derleyicinin türü kesin olarak çıkaramama dışında F# yapılarının türlerini belirtmenize gerek olmadığını gösterir. Açık tür bilgilerini yoksayma, F# dilinin dinamik olarak yazıldığından veya F# dilindeki değerlerin zayıf yazıldığından anlamına değildir. F# statik olarak türüne sahip bir dildir ve derleyicinin derleme sırasında her yapı için tam bir tür olduğunu gösterir. Derleyicinin her yapının türlerini açıklaması için yeterli bilgi yoksa, genellikle kodun herhangi bir yere açık tür ek açıklamaları ekleyerek ek tür bilgileri de belirtebilirsiniz.

Parametre ve Dönüş Türlerinin Çıkarı

Parametre listesinde, her parametrenin türünü belirtmenize gerek yok. Yine de F# statik olarak türe sahip bir dildir ve bu nedenle her değer ve ifade derleme zamanında kesin bir türe sahip olur. Açıkça belirtmezseniz, derleyici türü bağlama göre çıkartır. Tür aksi belirtilmedikçe genel olduğu kabul edildi. Kod bir değeri tutarsız bir şekilde kullanıyorsa, bir değerin tüm kullanımlarını karşılayan tek bir ertelenmiş tür yoksa, derleyici bir hata raporlar.

Bir işlevin dönüş türü, işlevde son ifadenin türüne göre belirlenir.

Örneğin, aşağıdaki kodda parametre türleri ve dönüş türünün hepsi değişmez değer türünde olduğundan a b olduğu int 100 int gibidir.

let f a b = a + b + 100

Değişmez değişmezleri değiştirerek tür çıkarılarını etkileysiniz. son ekini ekerek bir değerini 100 alırsanız, , ve dönüş değeri türleri olarak uint32 u a b uint32 alır.

Ayrıca, yalnızca belirli bir türle birlikte çalışmakta olan işlevler ve yöntemler gibi tür üzerindeki kısıtlamaları ifade etmek için diğer yapıları kullanarak da tür çıkarmlarını etkileyebilirsiniz.

Ayrıca, aşağıdaki örneklerde gösterildiği gibi işlev veya yöntem parametrelerine veya ifadelerde değişkenlere açık tür ek açıklamaları uygulayabilirsiniz. Farklı kısıtlamalar arasında çakışmalar oluşursa hatalar oluşur.

// Type annotations on a parameter.
let addu1 (x : uint32) y =
    x + y

// Type annotations on an expression.
let addu2 x y =
    (x : uint32) + y

Ayrıca, tüm parametrelerden sonra bir tür ek açıklaması sağlayarak bir işlevin dönüş değerini açıkça belirtsiniz.

let addu1 x y : uint32 =
   x + y

Bir parametrede tür ek açıklamasının yararlı olduğu yaygın bir durum, parametre bir nesne türü olduğunda ve üye kullanmak istemenizdir.

let replace(str: string) =
    str.Replace("A", "a")

Otomatik Genelleştirme

İşlev kodu parametrenin türüne bağımlı değilse, derleyici parametreyi genel olarak kabul ediyordur. Bu, otomatik genelleştirme olarak adlandırılan ve karmaşıklığı artırmadan genel kod yazmaya yardımcı olabilir.

Örneğin, aşağıdaki işlev herhangi bir türde iki parametreyi bir tuple içinde birleştirir.

let makeTuple a b = (a, b)

Türün şu şekilde olduğu

'a -> 'b -> 'a * 'b

Ek Bilgi

Tür çıkarlığı, F# Dil Belirtimi'nde daha ayrıntılı olarak açıklanmıştır.

Ayrıca bkz.