Funciones, recomendaciones al escribir generics Funciones, recomendaciones al escribir generics

🥇 Funciones, recomendaciones al escribir generics

🍿 Guia para escribir buenas funciones genéricas

Al escribir funciones genéricas es importante no utilizar generics en donde no sean necesarios, debido a que esto puede interferir con el mantener una función sencilla de utilizar e interpretar.

🥤 Favorece la inferencia sobre la declaración de los tipos de los argumentos

Aquí hay dos funciones que operan igual.

function primerElemento<Type>(arr: Type[]) {
    return arr[0];
}

function primerElemento<Type extends any[]>(arr: Type[]) {
    return arr[0];
}

Ambas funciones realizan el mismo trabajo y ambas funciones infieren el tipo del return, sin embargo para la primera función el Type sera el tipo provisto como argumento a la función mientras que en la segunda el Type es any que es mucho mas generalista.

🥤 Utiliza pocos parámetros

Aquí hay otras dos funciones.

function filtrar1<Type>(arr: Type[], func: (arg: Type) => boolean): Type[] {
    return arr.filter(func);
}

function filtrar2<Type, Func extends (arg: Type) => boolean>(
    arr: Type[],
    func: Func
): Type[] {
    return arr.filter(func);
}

En este ejemplo tenemos dos funciones que realizan la misma tarea, pero en el segundo ejemplo Func no relaciona al menos dos valores, solo hace mas complicado de leer la función y no existe una razón valida para ello.

🥤 El parámetro Type debe aparecer al menos dos veces

En algunas ocasiones olvidamos que una función no requiere siempre utilizar generics.

function saludar(Type extends string)(s: Type) {
    console.log("Hola " + s);
}

La función anterior puede ser escrita fácilmente en una forma mas simple.

function saludar(s: string) {
    console.log("Hola " + s);
}

Intenta recordar siempre que si implementas generics es porque deseas relacionar valores. Si un parámetro es utilizado solamente en una ocasión, no requiere que eches uso de esta característica.

Funciones, especificar type arguments (argumentos del Type) Funciones, parámetros opcionales
comments powered by Disqus