TypeScript - funções

As funções são os blocos de construção de código legível, sustentável e reutilizável. Uma função é um conjunto de instruções para realizar uma tarefa específica. As funções organizam o programa em blocos lógicos de código. Uma vez definidas, as funções podem ser chamadas para acessar o código. Isso torna o código reutilizável. Além disso, as funções facilitam a leitura e a manutenção do código do programa.

Uma declaração de função informa ao compilador sobre o nome de uma função, tipo de retorno e parâmetros. Uma definição de função fornece o corpo real da função.

Sr. Não Funções e descrição
1 Definindo uma função

Uma definição de função especifica o que e como uma tarefa específica seria realizada.

2 Chamando uma função

Uma função deve ser chamada para executá-la.

3 - Funções de retorno

As funções também podem retornar valor junto com o controle, de volta para o chamador.

4 Função Parametrizada

Os parâmetros são um mecanismo para passar valores para funções.

Parâmetros Opcionais

Parâmetros opcionais podem ser usados ​​quando os argumentos não precisam ser passados ​​obrigatoriamente para a execução de uma função. Um parâmetro pode ser marcado como opcional anexando um ponto de interrogação ao seu nome. O parâmetro opcional deve ser definido como o último argumento em uma função. A sintaxe para declarar uma função com parâmetro opcional é fornecida abaixo -

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

Exemplo: parâmetros opcionais

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]");
  • O exemplo acima declara uma função parametrizada. Aqui, o terceiro parâmetro, ou seja, mail_id é um parâmetro opcional.

  • Se um parâmetro opcional não receber um valor durante a chamada da função, o valor do parâmetro será definido como indefinido.

  • A função imprime o valor de mail_id apenas se o argumento receber um valor.

Na compilação, ele irá gerar o seguinte 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]");

O código acima produzirá a seguinte saída -

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

Parâmetros de repouso

Os parâmetros de descanso são semelhantes aos argumentos variáveis ​​em Java. Os parâmetros de descanso não restringem o número de valores que você pode passar para uma função. No entanto, os valores passados ​​devem ser todos do mesmo tipo. Em outras palavras, os parâmetros rest atuam como marcadores de posição para vários argumentos do mesmo tipo.

Para declarar um parâmetro rest, o nome do parâmetro é prefixado com três pontos. Qualquer parâmetro nonrest deve vir antes do parâmetro rest.

Exemplo: Parâmetros de repouso

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)
  • A declaração da função addNumbers () aceita um parâmetro resto nums . O tipo de dados do parâmetro rest deve ser definido como uma matriz. Além disso, uma função pode ter no máximo um parâmetro de repouso.

  • A função é chamada duas vezes, passando três e seis valores, respectivamente.

  • O laço for itera através da lista de argumentos, passada para a função e calcula sua soma.

Na compilação, ele irá gerar o seguinte 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);

A saída do código acima é a seguinte -

sum of numbers 6 
sum of numbers 50

Parâmetros padrão

Os parâmetros de função também podem receber valores atribuídos por padrão. No entanto, esses parâmetros também podem ser valores passados ​​explicitamente.

Sintaxe

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

Note - Um parâmetro não pode ser declarado opcional e padrão ao mesmo tempo.

Exemplo: parâmetros padrão

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)

Na compilação, ele irá gerar o seguinte 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);

Seu resultado é o seguinte -

Discount amount : 500 
Discount amount : 300
  • O exemplo declara a função calcular_discount . A função possui dois parâmetros - preço e taxa.

  • O valor da taxa do parâmetro é definido como 0,50 por padrão.

  • O programa invoca a função, passando para ela apenas o valor do parâmetro preço. Aqui, o valor da taxa é 0,50 (padrão)

  • A mesma função é chamada, mas com dois argumentos. O valor padrão da taxa é sobrescrito e é definido como o valor passado explicitamente.

Função Anônima

As funções que não estão associadas a um identificador (nome da função) são chamadas como anonymous functions. Essas funções são declaradas dinamicamente em tempo de execução. As funções anônimas podem aceitar entradas e retornar saídas, assim como fazem as funções padrão. Uma função anônima geralmente não está acessível após sua criação inicial.

As variáveis ​​podem ser atribuídas a uma função anônima. Essa expressão é chamada de expressão de função.

Sintaxe

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

Exemplo ─ Uma função anônima simples

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

Na compilação, ele irá gerar o mesmo código em JavaScript.

Ele produzirá a seguinte saída -

hello world

Exemplo ─ função anônima com parâmetros

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

A função anônima retorna o produto dos valores passados ​​a ela.

Na compilação, ele irá gerar o seguinte código JavaScript -

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

A saída do código acima é a seguinte -

24

Expressão da função e declaração da função ─ são sinônimos?

Expressão de função e declaração de função não são sinônimos. Ao contrário de uma expressão de função, uma declaração de função é limitada pelo nome da função.

A diferença fundamental entre os dois é que as declarações de função são analisadas antes de sua execução. Por outro lado, as expressões de função são analisadas apenas quando o mecanismo de script as encontra durante a execução.

Quando o analisador JavaScript vê uma função no fluxo de código principal, ele assume a Declaração de Função. Quando uma função vem como parte de uma instrução, é uma Expressão de Função.

O Construtor de Função

O TypeScript também oferece suporte à definição de uma função com o construtor interno de JavaScript denominado Function ().

Sintaxe

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

Exemplo

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

O novo Function () é uma chamada ao construtor que, por sua vez, cria e retorna uma referência de função.

Na compilação, ele irá gerar o mesmo código em JavaScript.

A saída do código de exemplo acima é a seguinte -

12

Funções de recursão e TypeScript

A recursão é uma técnica para iterar uma operação fazendo com que uma função se chame repetidamente até chegar a um resultado. A recursão é melhor aplicada quando você precisa chamar a mesma função repetidamente com diferentes parâmetros de dentro de um loop.

Exemplo - Recursão

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

Na compilação, ele irá gerar o mesmo código em JavaScript.

Aqui está o resultado -

720

Exemplo: função recursiva anônima

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

Na compilação, ele irá gerar o mesmo código em JavaScript.

Seu resultado é o seguinte -

Hello!!

Funções Lambda

Lambda se refere a funções anônimas na programação. As funções lambda são um mecanismo conciso para representar funções anônimas. Essas funções também são chamadas deArrow functions.

Função Lambda - Anatomia

Existem 3 partes para uma função Lambda -

  • Parameters - Uma função pode opcionalmente ter parâmetros

  • The fat arrow notation/lambda notation (=>) - Também é chamado de operador vai para

  • Statements - representa o conjunto de instruções da função

Tip - Por convenção, o uso do parâmetro de uma letra é encorajado para uma declaração de função compacta e precisa.

Expressão Lambda

É uma expressão de função anônima que aponta para uma única linha de código. Sua sintaxe é a seguinte -

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

Exemplo: expressão lambda

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

O programa declara uma função de expressão lambda. A função retorna a soma de 10 e o argumento é aprovado.

Na compilação, ele irá gerar o seguinte código JavaScript.

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

Aqui está a saída do código acima -

110

Declaração Lambda

A instrução lambda é uma declaração de função anônima que aponta para um bloco de código. Essa sintaxe é usada quando o corpo da função abrange várias linhas. Sua sintaxe é a seguinte -

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

Exemplo: declaração Lambda

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

A referência da função é retornada e armazenada na variável foo.

Na compilação, ele irá gerar o seguinte código JavaScript -

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

O resultado do programa acima é o seguinte -

110

Variações Sintáticas

Tipo de parâmetro inferência

Não é obrigatório especificar o tipo de dados de um parâmetro. Nesse caso, o tipo de dados do parâmetro é qualquer. Vamos dar uma olhada no seguinte snippet 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")

Na compilação, ele irá gerar o seguinte 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");

Seu resultado é o seguinte -

12 is numeric 
Tom is a string

Parênteses opcionais para um único parâmetro

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

Na compilação, ele irá gerar o seguinte código JavaScript -

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

Seu resultado é o seguinte -

The function got 12

Chaves opcionais para uma única instrução, parênteses vazios para nenhum parâmetro

O exemplo a seguir mostra essas duas variações sintáticas.

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

Na compilação, ele irá gerar o seguinte código JavaScript -

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

Seu resultado é o seguinte -

Function invoked

Sobrecargas de função

As funções têm a capacidade de operar de maneira diferente com base nas informações fornecidas a elas. Em outras palavras, um programa pode ter vários métodos com o mesmo nome com implementações diferentes. Este mecanismo é denominado Sobrecarga de Função. TypeScript fornece suporte para sobrecarga de função.

Para sobrecarregar uma função no TypeScript, você precisa seguir as etapas fornecidas abaixo -

Step 1- Declarar várias funções com o mesmo nome, mas com assinatura de função diferente. A assinatura da função inclui o seguinte.

  • 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 - A assinatura da função não inclui o tipo de retorno da função.

Step 2- A declaração deve ser seguida pela definição da função. Os tipos de parâmetro devem ser definidos paraanyse os tipos de parâmetro diferem durante a sobrecarga. Além disso, paracase b explicado acima, você pode considerar marcar um ou mais parâmetros como opcionais durante a definição da função.

Step 3 - Finalmente, você deve invocar a função para torná-la funcional.

Exemplo

Vamos agora dar uma olhada no código de exemplo a seguir -

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");
  • As primeiras duas linhas representam a declaração de sobrecarga de função. A função tem duas sobrecargas -

    • Função que aceita um único parâmetro de string.

    • Função que aceita dois valores de tipo number e string respectivamente.

  • A terceira linha define a função. O tipo de dados dos parâmetros são definidos paraany. Além disso, o segundo parâmetro é opcional aqui.

  • A função sobrecarregada é chamada pelas duas últimas instruções.

Na compilação, ele irá gerar o seguinte código JavaScript -

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

O código acima produzirá a seguinte saída -

abc 
1 
xyz