Tür Çıkarma

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

Genel Olarak Tür Çıkarımı

Tür çıkarımı fikri, derleyicinin türü kesin olarak çıkaramadığı durumlar dışında F# yapılarının türlerini belirtmeniz gerekmemesidir. Açık tür bilgilerinin atlanması, F# dilinin dinamik olarak yazılan bir dil olduğu veya F# dilindeki değerlerin zayıf yazıldığı anlamına gelmez. F# statik olarak yazılan bir dildir; bu da derleyicinin derleme sırasında her yapı için tam bir tür çıkardığı anlamına gelir. Derleyicinin her bir yapı türünü vermesi için yeterli bilgi yoksa, genellikle kodun herhangi bir yerine açık tür ek açıklamaları ekleyerek ek tür bilgileri sağlamanız gerekir.

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

Parametre listesinde, her parametrenin türünü belirtmeniz gerekmez. Ancak, F# statik olarak yazılan bir dildir ve bu nedenle her değer ve ifade derleme zamanında kesin bir türe sahiptir. Açıkça belirtmediğiniz türler için derleyici, türü bağlama göre çıkarsar. Tür başka bir şekilde belirtilmezse, genel olarak çıkarılır. Kod tutarsız bir değer kullanıyorsa, bir değerin tüm kullanımlarını karşılayan tek bir çıkarım türü olmayacak şekilde derleyici bir hata bildirir.

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

Örneğin, aşağıdaki kodda parametre türleri a ve b dönüş türü, değişmez değeri 100 türünde intolduğundan çıkarılırint.

let f a b = a + b + 100

Değişmez değerleri değiştirerek tür çıkarımını etkileyebilirsiniz. son ekini 100uekleyerek a uint32 yaparsanız, , bve dönüş değeri türleri aolarak çıkarılıruint32.

Yalnızca belirli bir türle çalışan işlevler ve yöntemler gibi tür üzerindeki kısıtlamaları ima eden diğer yapıları kullanarak da tür çıkarımını etkileyebilirsiniz.

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

// 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 belirtebilirsiniz.

let addu1 x y : uint32 =
   x + y

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

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

Otomatik Genelleştirme

İşlev kodu bir parametrenin türüne bağımlı değilse, derleyici parametreyi genel olarak değerlendirir. Buna otomatik genelleştirme adı verilir ve karmaşıklığı artırmadan genel kod yazmanın güçlü bir yardımı olabilir.

Örneğin, aşağıdaki işlev herhangi bir türdeki iki parametreyi bir tanımlama grubu halinde birleştirir.

let makeTuple a b = (a, b)

Türün çıkarılacağı

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

Ek Bilgi

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

Ayrıca bkz.