Compartir a través de


Funciones inline (F#)

Las funciones inline son funciones cuyo código se integra directamente en el código que las llama.

Utilizar funciones inline

Cuando se usan parámetros de tipo estático, todas las funciones con parámetros de tipo deben ser funciones inline. De este modo, se garantiza que el compilador puede resolver estos parámetros de tipo. En el caso de usar parámetros de tipo genérico normales, no existe esa restricción.

Además de habilitar el uso de restricciones de miembro, las funciones inline pueden ser útiles a la hora de optimizar el código. Sin embargo, el uso excesivo de funciones inline puede hacer que el código sea menos resistente a los cambios en las optimizaciones del compilador y la implementación de las funciones de biblioteca. Por esta razón, se recomienda evitar el uso de funciones inline para la optimización, a menos que haya probado ya todas las técnicas de optimización. La inserción del código de una función o un método a veces puede mejorar el rendimiento, pero no siempre es el caso. Por consiguiente, se ha de medir el rendimiento para comprobar que la inserción del código de una función realmente tiene un efecto positivo.

El modificador inline puede aplicarse a funciones en el nivel superior, en un módulo o en los métodos de una clase.

En el siguiente ejemplo de código, se muestra una función inline en el nivel superior, un método de instancia insertado y un método estático insertado.

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

Funciones inline e inferencia de tipos

La presencia de inline afecta a la inferencia de tipos. Esto es debido a que las funciones inline, a diferencia de las funciones que no son inline, pueden tener parámetros de tipo que se resuelven estáticamente. En el siguiente ejemplo de código, se muestra un caso donde inline es útil porque se usa una función que tiene un parámetro de tipo estáticamente resuelto, el operador de conversión float.

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

Sin el modificador inline, la inferencia de tipos hace que la función tome un tipo específico; en este caso, int. Sin embargo, con el modificador inline, se deduce que la función tiene un parámetro de tipo que se resuelve estáticamente. Con el modificador inline, se deduce que el tipo es:

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

Esto significa que la función acepta cualquier tipo que admita una conversión a float.

Vea también

Referencia

Funciones (F#)

Restricciones (F#)

Parámetros de tipo resueltos estáticamente (F#)