Funciones en TypeScript

Funciones en TypeScript


Bien una vez que ya configuramos  WebMatrix (clic aquí para ver como se hace) para poder trabajar con TypeScript, vamos a ver cómo trabajar con funciones dentro del TS y cómo es  que nos ofrece cierta ventajas sobre JS.

Para empezar con este ejemplo crearé un nuevo proyecto dentro de WebMatrix y un archivo TypeScript con el nombre “funciones.ts”.



Una vez que se crea el archivo nos aparece una ventana como la siguiente, en la cual del lado izquierdo nos aparecen los archivos que contiene el sitio (1) en que estamos trabajando, que en este caso solo nos debería mostrar el archivo que recién creamos “funciones.ts”, en la parte inferior (2)nos aparecen los distintas pestañas dentro de las cuales se nos presentará información sobre los archivos que estemos trabajando para este ejemplo nos centraremos en la pestaña error la cual como su nombre lo indica presenta los errores que tendremos en nuestro código TypeScript cuando lo compilemos. Y como ya lo habíamos mencionado para compilar nuestro código tenemos el botón llamado “compile TypeScript”(3), y en el centro tendremos nuestro espacio de trabajo(4).

La primer función que veremos es la más básica la cual no recibe parámetros ni devuelve parámetros, para indicar que una función no devuelve ningún valor debe de llevar la palabra reservada ‘void’, al final de la firma del método.

function fbasica():void{
    alert('funcion sin parametros');
}

Las siguientes funciones regresan algún valor sin que recibir ninguno. Hay que recordar que estamos trabajando con un lenguaje tipado por lo tanto, no podemos regresar cualquier valor a excepción que sea una función de devuelva valores de tipo ‘any’. Si no tendríamos un error de compilación.

//metodo sin valor de retorno
function fbasica():void{
    alert('el valor de euler es: '+f1());
}
// metodo que exclusivamente regresa valores numericos
function f1(): number{
        // regresa un valor de la constante de euler
        return Math.E;
}
// metodo que solo regresa cadenas de texto
function f2(): string{
        // la variable sitio se declara implicatamente como string
        var txt = "http://jwebmx.blogspot.mx/"; 
        return txt;
}
//metodo encargado de regresar un arreglo de numeros primos
function f3():number[]{
        var numeros:Array<number> = [1, 2, 3, 5, 7, 11, 13];
        return numeros;
}
//metodo que regresa cualquier tipo de valor
function f4():any{
        return f5();
}
//metodo que tambien regresa cualquier tipo de valor
function f5(){
        return true;
}
fbasica();
alert("gracias por visitar "+f2());
console.log("Los Primero Números Primos Son "+f3());


Este código ya fue probado tanto en WebMatrix como en chrome y opera, te invito a que lo pruebes en el tu archivos funciones y lo compiles, y te darás cuenta que automáticamente WebMatrix genera la versión de en JavaScript, este código no posee errores, pero en caso tenerlos, WebMatrix nos avisa en que línea se encuentran y cuál es el posible error.


Funciones con recepción de parámetros

Las funciones dentro de TS permite recibir parámetros de cualquiera de los tipos de datos, en este ejemplo se muestra una función que recibe dos parámetros de tipo lógico y regresa una cadena que depende de los valores recibidos.

//funcione encargada de recibir dos valores booleanos y regresar una cadena
function meCaso(ella:boolean,el:boolean):string{
        return (ella&&el)==true?"Hay Boda":"No Hay Boda";
}
console.log(meCaso(true,true));
console.log(meCaso(false,true));

La función recibe el arreglo de valores numéricos que devuelve la función f3(), para sumarlos y devolver la suma de dichos valores:

// funcion encargada de recibir un arreglo de valores numericos y devolver la suma de todos
function getSumaArray(numeros:Array<number>):string{
        var suma = 0;
        var i = 0;
        for(; i<numeros.length;i++)
        {
               suma += numeros[i];
        }
        return "La Suma De lo Valore Recibidos Es "+suma;
}
console.log(getSumaArray(f3()));


Funciones con parámetros opcionales

TypeScript permite crear funciones con parámetros opcionales es se vuelve funcional ya que a veces alguno de los valores que recibimos no siempre es necesario o es repetitivo, veamos como declara una función de  este tipo y las precauciones que debemos tomar.
Para declarar un parámetro opcional dentro una función se utiliza la siguiente nomenclatura:


Esto le dice al compilador que puede o no contener ese valor, pero si respeta el tipo de dato que se indica asi que no puede ser sustituido por un valor de otro tipo a menos que el tipo de dato no se indique o se indique como any.

Ejemplo:
// funcion que permite que se le pase o no un valor
function getNombre(nombre:string,apellidos:string,titulo?:string):string{  
       return "Buen Día, "+titulo+" "+nombre+" "+apellidos;
}
console.log(getNombre("Pablo","Gómez","Sr."));
console.log(getNombre("Alicia","Valles","Srita."));
console.log(getNombre("Francisco","Pantera"));

Si nosotros ejecutamos este código el compilador no marca error en la última línea y permite la generación del archivo del archivo .JS, pero si vemos la salida en la consola de cualquier navegador nos parece un extraño vemos que al ejecutar la última llamada de la función.

Vemos que en vez de dejar un espacio en blanco nos coloca el valor ‘undefined’ y esto es correcto ya que ese parámetro no se inicializó cuando la función fue recibida y es por eso que aparece con este comportamiento, para evitar que esto nos ocurra cuando trabajamos con parámetros opcionales TS, permite establecer un valor por defecto, que solo se modificará si al momento de llamar la función esta llamada posee el valor para dicho parámetro. La forma de establecer el valor por defecto es al momento de la declaración del parámetro establecemos el valor por defecto para dicho parámetro.
Veamos como quedaría nuestro ejemplo corregido:

// funcion que permite que se le pase o no un valor
function getNombre(nombre:string,apellidos:string,titulo="C."):string{      
        return "Buen Día, "+titulo+" "+nombre+" "+apellidos;
}
console.log(getNombre("Pablo","Gómez","Sr."));
console.log(getNombre("Alicia","Valles","Srita."));
console.log(getNombre("Francisco","Pantera"));

Con lo cual la salida en la consola del navegador quedaría corregida:

Sí ha estado revisando el código generado por compilador de TS a JavaScript hasta el momento se podría pensar que lo único que hace el compilador es quitar los tipos de datos que se establecen dentro de TS, pero si ahora vemos el código que genera el compilador por la función anterior podemos ver que automáticamente el compilador establece las condiciones necesarias para que lo que nosotros pusimos como valor por defecto en TS sea respetado de igual manera dentro del archivo JS.
Veamos cómo queda en los archivos:


Vemos que automáticamente el compilador lo primero que hace dentro del método en JS es verificar si se asigno algún valor para el parámetro ‘titulo’ y en caso de no ser así la función asigna la cadena de texto “C.”, que fue establecida por defecto en la función TS.

Funciones con resto de parámetros

Al igual que muchos lenguajes de programación TypeScript permite crear funciones con longitud de parámetros variable, esto quiere decir que nuestra función puede aceptar N cantidad de valores, siempre y cuando respetemos el tipo de dato que acepta el parámetro de la función. Vemos como se declara y como trabajar con este tipo de funciones:


A continuación te muestro la misma función una programada en TS y su igual en JS, para que compares y empecemos a ver como empieza a dar benéficos la utilización de TS para generar código JS.
...


Si deseas descargar los archivos fuente de estos códigos da clic aquí, saludos.

Entradas más populares de este blog

Geochart - Republica Mexicana

TypeScript (Tipos De Datos)

JS convertir una cadena de texto en mayúsculas, minúsculas o solo la primer letra de cada texto