TypeScript - Funciones

Las funciones son los componentes básicos del código legible, mantenible y reutilizable. Una función es un conjunto de declaraciones para realizar una tarea específica. Las funciones organizan el programa en bloques lógicos de código. Una vez definidas, las funciones se pueden llamar para acceder al código. Esto hace que el código sea reutilizable. Además, las funciones facilitan la lectura y el mantenimiento del código del programa.

Una declaración de función le dice al compilador sobre el nombre, el tipo de retorno y los parámetros de una función. Una definición de función proporciona el cuerpo real de la función.

No Señor Funciones y descripción
1. Definición de una función

Una definición de función especifica qué y cómo se haría una tarea específica.

2. Llamar a una función

Se debe llamar a una función para ejecutarla.

3. Funciones de retorno

Las funciones también pueden devolver valor junto con el control, de vuelta a la persona que llama.

4. Función parametrizada

Los parámetros son un mecanismo para pasar valores a funciones.

Parámetros opcionales

Los parámetros opcionales se pueden usar cuando los argumentos no necesitan pasarse obligatoriamente para la ejecución de una función. Un parámetro se puede marcar como opcional agregando un signo de interrogación a su nombre. El parámetro opcional debe establecerse como el último argumento de una función. La sintaxis para declarar una función con parámetro opcional es la siguiente:

function function_name (param1[:type], param2[:type], param3[:type])

Ejemplo: parámetros opcionales

function disp_details(id:number,name:string,mail_id?:string) { 
   console.log("ID:", id); 
   console.log("Name",name); 
   
   if(mail_id!=undefined)  
   console.log("Email Id",mail_id); 
}
disp_details(123,"John");
disp_details(111,"mary","[email protected]");
  • El ejemplo anterior declara una función parametrizada. Aquí, el tercer parámetro, es decir, mail_id es un parámetro opcional.

  • Si no se le pasa un valor a un parámetro opcional durante la llamada a la función, el valor del parámetro se establece en indefinido.

  • La función imprime el valor de mail_id solo si al argumento se le pasa un valor.

Al compilar, generará el siguiente código JavaScript:

//Generated by typescript 1.8.10
function disp_details(id, name, mail_id) {
   console.log("ID:", id);
   console.log("Name", name);
	
   if (mail_id != undefined)
      console.log("Email Id", mail_id);
}
disp_details(123, "John");
disp_details(111, "mary", "[email protected]");

El código anterior producirá el siguiente resultado:

ID:123 
Name John 
ID: 111 
Name  mary 
Email Id [email protected]

Parámetros de descanso

Los parámetros de descanso son similares a los argumentos variables en Java. Los parámetros de descanso no restringen el número de valores que puede pasar a una función. Sin embargo, los valores pasados ​​deben ser todos del mismo tipo. En otras palabras, los parámetros rest actúan como marcadores de posición para múltiples argumentos del mismo tipo.

Para declarar un parámetro de descanso, el nombre del parámetro tiene como prefijo tres puntos. Cualquier parámetro de descanso debe ir antes que el parámetro de descanso.

Ejemplo: Parámetros de descanso

function addNumbers(...nums:number[]) {  
   var i;   
   var sum:number = 0; 
   
   for(i = 0;i<nums.length;i++) { 
      sum = sum + nums[i]; 
   } 
   console.log("sum of the numbers",sum) 
} 
addNumbers(1,2,3) 
addNumbers(10,10,10,10,10)
  • La declaración de función addNumbers (), acepta un parámetro de descanso nums . El tipo de datos del parámetro rest debe establecerse en una matriz. Además, una función puede tener como máximo un parámetro de reposo.

  • La función se invoca dos veces, pasando tres y seis valores, respectivamente.

  • El ciclo for itera a través de la lista de argumentos, se pasa a la función y calcula su suma.

Al compilar, generará el siguiente código JavaScript:

function addNumbers() {
   var nums = [];
   for (var _i = 0; _i < arguments.length; _i++) {
      nums[_i - 0] = arguments[_i];
   }
	var i;
   var sum = 0;
	
   for (i = 0; i < nums.length; i++) {
      sum = sum + nums[i];
   }
   console.log("sum of the numbers", sum);
}
addNumbers(1, 2, 3);
addNumbers(10, 10, 10, 10, 10);

La salida del código anterior es la siguiente:

sum of numbers 6 
sum of numbers 50

Parámetros predeterminados

A los parámetros de función también se les pueden asignar valores por defecto. Sin embargo, dichos parámetros también pueden ser valores pasados ​​explícitamente.

Sintaxis

function function_name(param1[:type],param2[:type] = default_value) { 
}

Note - Un parámetro no puede declararse opcional y predeterminado al mismo tiempo.

Ejemplo: parámetros predeterminados

function calculate_discount(price:number,rate:number = 0.50) { 
   var discount = price * rate; 
   console.log("Discount Amount: ",discount); 
} 
calculate_discount(1000) 
calculate_discount(1000,0.30)

Al compilar, generará el siguiente código JavaScript:

//Generated by typescript 1.8.10
function calculate_discount(price, rate) {
   if (rate === void 0) { rate = 0.50; }
   var discount = price * rate;
   console.log("Discount Amount: ", discount);
}
calculate_discount(1000);
calculate_discount(1000, 0.30);

Su salida es la siguiente:

Discount amount : 500 
Discount amount : 300
  • El ejemplo declara la función, calculate_discount . La función tiene dos parámetros: precio y tarifa.

  • El valor de la tasa del parámetro se establece en 0,50 por defecto.

  • El programa invoca la función, pasándole solo el valor del parámetro precio. Aquí, el valor de la tasa es 0.50 (predeterminado)

  • Se invoca la misma función, pero con dos argumentos. El valor predeterminado de la tasa se sobrescribe y se establece en el valor pasado explícitamente.

Función anónima

Las funciones que no están vinculadas a un identificador (nombre de función) se llaman como anonymous functions. Estas funciones se declaran dinámicamente en tiempo de ejecución. Las funciones anónimas pueden aceptar entradas y devolver salidas, al igual que las funciones estándar. Una función anónima generalmente no es accesible después de su creación inicial.

A las variables se les puede asignar una función anónima. Esta expresión se llama expresión de función.

Sintaxis

var res = function( [arguments] ) { ... }

Ejemplo: una función anónima simple

var msg = function() { 
   return "hello world";  
} 
console.log(msg())

Al compilar, generará el mismo código en JavaScript.

Producirá la siguiente salida:

hello world

Ejemplo ─ Función anónima con parámetros

var res = function(a:number,b:number) { 
   return a*b;  
}; 
console.log(res(12,2))

La función anónima devuelve el producto de los valores que se le pasan.

Al compilar, generará el siguiente código JavaScript:

//Generated by typescript 1.8.10
var res = function (a, b) {
   return a * b;
};
console.log(res(12, 2));

La salida del código anterior es la siguiente:

24

Expresión de función y declaración de función ─ ¿Son sinónimos?

La expresión de función y la declaración de función no son sinónimos. A diferencia de una expresión de función, una declaración de función está vinculada por el nombre de la función.

La diferencia fundamental entre los dos es que las declaraciones de función se analizan antes de su ejecución. Por otro lado, las expresiones de función se analizan solo cuando el motor de secuencia de comandos las encuentra durante la ejecución.

Cuando el analizador de JavaScript ve una función en el flujo de código principal, asume Declaración de función. Cuando una función forma parte de una declaración, es una expresión de función.

El constructor de funciones

TypeScript también admite la definición de una función con el constructor de JavaScript incorporado llamado Function ().

Sintaxis

var res = new Function( [arguments] ) { ... }.

Ejemplo

var myFunction = new Function("a", "b", "return a * b"); 
var x = myFunction(4, 3); 
console.log(x);

La nueva función () es una llamada al constructor que a su vez crea y devuelve una referencia de función.

Al compilar, generará el mismo código en JavaScript.

La salida del código de ejemplo anterior es la siguiente:

12

Funciones de recursividad y TypeScript

La recursividad es una técnica para iterar sobre una operación haciendo que una función se llame a sí misma repetidamente hasta que llegue a un resultado. La recursividad se aplica mejor cuando necesita llamar a la misma función repetidamente con diferentes parámetros dentro de un bucle.

Ejemplo: recursividad

function factorial(number) {
   if (number <= 0) {         // termination case
      return 1; 
   } else {     
      return (number * factorial(number - 1));     // function invokes itself
   } 
}; 
console.log(factorial(6));      // outputs 720

Al compilar, generará el mismo código en JavaScript.

Aquí está su salida:

720

Ejemplo: función recursiva anónima

(function () { 
   var x = "Hello!!";   
   console.log(x)     
})()      // the function invokes itself using a pair of parentheses ()

Al compilar, generará el mismo código en JavaScript.

Su salida es la siguiente:

Hello!!

Funciones lambda

Lambda se refiere a funciones anónimas en programación. Las funciones Lambda son un mecanismo conciso para representar funciones anónimas. Estas funciones también se denominanArrow functions.

Función Lambda - Anatomía

Hay 3 partes en una función Lambda:

  • Parameters - Una función puede tener opcionalmente parámetros

  • The fat arrow notation/lambda notation (=>) - También se llama como el operador va al

  • Statements - representar el conjunto de instrucciones de la función

Tip - Por convención, se recomienda el uso de parámetros de una sola letra para una declaración de función compacta y precisa.

Expresión Lambda

Es una expresión de función anónima que apunta a una sola línea de código. Su sintaxis es la siguiente:

( [param1, parma2,…param n] )=>statement;

Ejemplo: expresión lambda

var foo = (x:number)=>10 + x 
console.log(foo(100))      //outputs 110

El programa declara una función de expresión lambda. La función devuelve la suma de 10 y el argumento pasado.

Al compilar, generará el siguiente código JavaScript.

//Generated by typescript 1.8.10
var foo = function (x) { return 10 + x; };
console.log(foo(100));      //outputs 110

Aquí está la salida del código anterior:

110

Declaración Lambda

La declaración Lambda es una declaración de función anónima que apunta a un bloque de código. Esta sintaxis se utiliza cuando el cuerpo de la función abarca varias líneas. Su sintaxis es la siguiente:

( [param1, parma2,…param n] )=> {
 
   //code block
}

Ejemplo: declaración Lambda

var foo = (x:number)=> {    
   x = 10 + x 
   console.log(x)  
} 
foo(100)

La referencia de la función se devuelve y se almacena en la variable. foo.

Al compilar, generará el siguiente código JavaScript:

//Generated by typescript 1.8.10
var foo = function (x) {
   x = 10 + x;
   console.log(x);
};
foo(100);

El resultado del programa anterior es el siguiente:

110

Variaciones sintácticas

Tipo de parámetro Inferencia

No es obligatorio especificar el tipo de datos de un parámetro. En tal caso, el tipo de datos del parámetro es cualquiera. Echemos un vistazo al siguiente fragmento de código:

var func = (x)=> { 
   if(typeof x=="number") { 
      console.log(x+" is numeric") 
   } else if(typeof x=="string") { 
      console.log(x+" is a string") 
   }  
} 
func(12) 
func("Tom")

Al compilar, generará el siguiente código JavaScript:

//Generated by typescript 1.8.10
var func = function (x) {
   if (typeof x == "number") {
      console.log(x + " is numeric");
   } else if (typeof x == "string") {
      console.log(x + " is a string");
   }
};
func(12);
func("Tom");

Su salida es la siguiente:

12 is numeric 
Tom is a string

Paréntesis opcionales para un solo parámetro

var display = x=> { 
   console.log("The function got "+x) 
} 
display(12)

Al compilar, generará el siguiente código JavaScript:

//Generated by typescript 1.8.10
var display = function (x) {
   console.log("The function got " + x);
};
display(12);

Su salida es la siguiente:

The function got 12

Corchetes opcionales para una sola declaración, paréntesis vacíos para ningún parámetro

El siguiente ejemplo muestra estas dos variaciones sintácticas.

var disp =()=> { 
   console.log("Function invoked"); 
} 
disp();

Al compilar, generará el siguiente código JavaScript:

//Generated by typescript 1.8.10
var disp = function () {
   console.log("Function invoked");
};
disp();

Su salida es la siguiente:

Function invoked

Sobrecargas de funciones

Las funciones tienen la capacidad de operar de manera diferente en función de la información que se les proporciona. En otras palabras, un programa puede tener varios métodos con el mismo nombre con diferente implementación. Este mecanismo se denomina sobrecarga de funciones. TypeScript proporciona soporte para la sobrecarga de funciones.

Para sobrecargar una función en TypeScript, debe seguir los pasos que se indican a continuación:

Step 1- Declarar múltiples funciones con el mismo nombre pero diferente firma de función. La firma de función incluye lo siguiente.

  • The data type of the parameter

function disp(string):void; 
function disp(number):void;
  • The number of parameters

function disp(n1:number):void; 
function disp(x:number,y:number):void;
  • The sequence of parameters

function disp(n1:number,s1:string):void; 
function disp(s:string,n:number):void;

Note - La firma de la función no incluye el tipo de retorno de la función.

Step 2- La declaración debe ir seguida de la definición de la función. Los tipos de parámetros deben establecerse enanysi los tipos de parámetros difieren durante la sobrecarga. Además, paracase b explicado anteriormente, puede considerar marcar uno o más parámetros como opcionales durante la definición de la función.

Step 3 - Finalmente, debes invocar la función para que sea funcional.

Ejemplo

Echemos ahora un vistazo al siguiente código de ejemplo:

function disp(s1:string):void; 
function disp(n1:number,s1:string):void; 

function disp(x:any,y?:any):void { 
   console.log(x); 
   console.log(y); 
} 
disp("abc") 
disp(1,"xyz");
  • Las dos primeras líneas representan la declaración de sobrecarga de la función. La función tiene dos sobrecargas:

    • Función que acepta un solo parámetro de cadena.

    • Función que acepta dos valores de tipo número y cadena respectivamente.

  • La tercera línea define la función. El tipo de datos de los parámetros se establece enany. Además, el segundo parámetro es opcional aquí.

  • La función sobrecargada es invocada por las dos últimas declaraciones.

Al compilar, generará el siguiente código JavaScript:

//Generated by typescript 1.8.10
function disp(x, y) {
   console.log(x);
   console.log(y);
}
disp("abc");
disp(1, "xyz");

El código anterior producirá el siguiente resultado:

abc 
1 
xyz