インライン関数Inline Functions

インライン関数は、呼び出し元のコードに直接統合される関数です。Inline functions are functions that are integrated directly into the calling code.

インライン関数の使用Using Inline Functions

静的な型パラメーターを使用する場合、型パラメーターによってパラメーター化される関数はインラインである必要があります。When you use static type parameters, any functions that are parameterized by type parameters must be inline. これにより、コンパイラがこれらの型パラメーターを解決できることが保証されます。This guarantees that the compiler can resolve these type parameters. 通常のジェネリック型パラメーターを使用する場合、このような制限はありません。When you use ordinary generic type parameters, there is no such restriction.

インライン関数は、メンバー制約の使用を有効にするだけでなく、コードの最適化にも役立ちます。Other than enabling the use of member constraints, inline functions can be helpful in optimizing code. ただし、インライン関数を使用すると、コンパイラの最適化およびライブラリ関数の実装の変更に対してコードの抵抗力が低下する可能性があります。However, overuse of inline functions can cause your code to be less resistant to changes in compiler optimizations and the implementation of library functions. そのため、他のすべての最適化手法を試していない場合は、最適化にインライン関数を使用しないようにしてください。For this reason, you should avoid using inline functions for optimization unless you have tried all other optimization techniques. 関数またはメソッドをインラインで作成すると、パフォーマンスが向上する場合がありますが、常にそうであるとは限りません。Making a function or method inline can sometimes improve performance, but that is not always the case. したがって、特定の関数をインラインで実行することによって実質的な効果が得られることを確認するために、パフォーマンス測定も使用する必要があります。Therefore, you should also use performance measurements to verify that making any given function inline does in fact have a positive effect.

inline修飾子は、最上位レベルの関数、モジュールレベル、またはクラスのメソッドレベルで適用できます。The inline modifier can be applied to functions at the top level, at the module level, or at the method level in a class.

次のコード例は、最上位レベルのインライン関数、インラインインスタンスメソッド、およびインライン静的メソッドを示しています。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

インライン関数と型推論Inline Functions and Type Inference

の存在はinline 、型の推定に影響します。The presence of inline affects type inference. これは、インライン関数は静的に解決される型パラメーターを持つことができるのに対し、非インライン関数は使用できないためです。This is because inline functions can have statically resolved type parameters, whereas non-inline functions cannot. 次のコード例は、静的inlineに解決される型パラメーター floatを持つ関数 (変換演算子) を使用しているため、が役に立つケースを示しています。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)

修飾子を指定しない場合、型の推定によって、関数は特定のint型を強制的に取得します (この場合は)。 inlineWithout the inline modifier, type inference forces the function to take a specific type, in this case int. ただし、 inline修飾子を使用すると、静的に解決される型パラメーターを持つように関数も推論されます。But with the inline modifier, the function is also inferred to have a statically resolved type parameter. inline修飾子を使用すると、型は次のように推論されます。With the inline modifier, the type is inferred to be the following:

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

これは、関数がfloat型への変換をサポートする任意の型を受け入れることを意味します。This means that the function accepts any type that supports a conversion to float.

関連項目See also