Satır İçi İşlevlerInline Functions

Satır içi işlevler doğrudan çağıran koda tümleştirilen işlevlerdir.Inline functions are functions that are integrated directly into the calling code.

Satır Içi Işlevleri kullanmaUsing Inline Functions

Statik tür parametreleri kullandığınızda, tür parametrelerine göre parametreli olan tüm işlevler satır içi olmalıdır.When you use static type parameters, any functions that are parameterized by type parameters must be inline. Bu, derleyicinin bu tür parametrelerini çözümleyebilecek olmasını güvence altına alır.This guarantees that the compiler can resolve these type parameters. Sıradan genel tür parametreleri kullandığınızda böyle bir kısıtlama yoktur.When you use ordinary generic type parameters, there is no such restriction.

Üye kısıtlamaları kullanımını etkinleştirmenin dışında, satır içi işlevler kodu iyileştirmek için yararlı olabilir.Other than enabling the use of member constraints, inline functions can be helpful in optimizing code. Ancak, satır içi işlevlerin aşırı kullanımı, kodunuzun, derleyici iyileştirmeleri ve kitaplık işlevlerinin uygulanması için değişikliklere daha az dayanıklı olmasına neden olabilir.However, overuse of inline functions can cause your code to be less resistant to changes in compiler optimizations and the implementation of library functions. Bu nedenle, diğer en iyi duruma getirme tekniklerini denemediğiniz takdirde en iyi duruma getirme için satır içi işlevleri kullanmaktan kaçının.For this reason, you should avoid using inline functions for optimization unless you have tried all other optimization techniques. İşlevin veya yöntemin satır içi yapılması bazen performansı iyileştirebilir, ancak bu her zaman durum değildir.Making a function or method inline can sometimes improve performance, but that is not always the case. Bu nedenle, belirli bir işlevi satır içi olarak yapmanın aslında pozitif bir etkiye sahip olduğunu doğrulamak için performans ölçümlerini da kullanmanız gerekir.Therefore, you should also use performance measurements to verify that making any given function inline does in fact have a positive effect.

inline Değiştirici, en üst düzeydeki işlevlere, modül düzeyinde veya bir sınıftaki yöntem düzeyinde uygulanabilir.The inline modifier can be applied to functions at the top level, at the module level, or at the method level in a class.

Aşağıdaki kod örneği, en üst düzeydeki bir satır içi işlev, bir satır içi örnek yöntemi ve bir satır içi statik yöntem gösterir.The following code example illustrates an inline function at the top level, an inline instance method, and an inline static method.

let inline increment x = x + 1
type WrapInt32() =
    member inline this.incrementByOne(x) = x + 1
    static member inline Increment(x) = x + 1

Satır içi Işlevler ve tür çıkarımıInline Functions and Type Inference

' Nin inline varlığı tür çıkarımı etkiler.The presence of inline affects type inference. Bunun nedeni, satır içi işlevlerin statik olarak çözümlenen tür parametrelerine sahip olmasından kaynaklanır, ancak satır içi olmayan işlevler olamaz.This is because inline functions can have statically resolved type parameters, whereas non-inline functions cannot. Aşağıdaki kod örneğinde, statik olarak çözümlenen bir inline tür parametresine sahip bir işlev kullandığınız için float , dönüştürme işleci olan bir durum gösterilmektedir.The following code example shows a case where inline is helpful because you are using a function that has a statically resolved type parameter, the float conversion operator.

let inline printAsFloatingPoint number =
    printfn "%f" (float number)

Değiştirici olmadan, tür çıkarımı işlevi belirli bir tür almaya zorlar, bu durumda int. inlineWithout the inline modifier, type inference forces the function to take a specific type, in this case int. Ancak inline değiştiriciyle işlev statik olarak çözümlenen bir tür parametresine sahip olacak şekilde de algılanır.But with the inline modifier, the function is also inferred to have a statically resolved type parameter. inline Değiştiriciyle, tür şu şekilde algılanır:With the inline modifier, the type is inferred to be the following:

^a -> unit when ^a : (static member op_Explicit : ^a -> float)

Bu, işlevin floatöğesine dönüştürmeyi destekleyen herhangi bir türü kabul ettiği anlamına gelir.This means that the function accepts any type that supports a conversion to float.

Ayrıca bkz.See also