C# 7.0 - Apresentando Funções Locais


  No artigo de hoje veremos as funções locais, um novo recurso da versão 7.0 do C#.

As funções locais foram introduzidas na versão 7.0 da linguagem C#.

O que são ?

Funções locais são métodos privados de um tipo que estão aninhados em outro membro.

As funções locais podem ser declaradas e chamadas em :

Assim podemos definir uma função dentro de outra função, mas, não podemos declarar funções locais dentro de um Expression-Body Member.

Você pode usar este recurso para isolar um método que possui um escopo limitado dentro de outro método.

Nota: O conceito de funções locais é semelhante aos métodos anônimos, quando você precisa criar uma funcionalidade que é apenas local.

A figura abaixo exibe o escopo das funções locais :

  1. Public Function - Pode ser acessada de qualquer lugar do programa;
     
  2. Private Function - Pode ser acessada somente a partir da classe onde foi declarada;
     
  3. Local Function - Pode ser acessada somente a partir do membro no qual foi declarada;

Vamos supor que você esta criando um método chamado Calcular() para realizar cálculos que vai receber uma expressão contendo o cálculo a ser realizado, e, que este cálculo envolve realizar operações de adição, subtração, multiplicação e divisão.  Ex: [2 + ( 3*5)/2 - 1 ]

  1. public static string Calcular(string expressao)   
  2. {  
  3.     string resultado = string.Empty;   
  4.       // realizar cálculos
  5.       // .......
  6.     return resultado;  
  7. }  
     

Neste cenário os cálculos serão usados somente pelo método Calcular().

Podemos então pensar em criar funções locais, ou métodos privados, dentro do método Calcular().

Vamos criar 4 funções locais : Adicionar(), Subtrair(), Multiplicar() e Dividir() dentro do método Calcular() :

  1. public static string Calcular(string expressao)   
  2. {  
  3.     string resultado = string.Empty;  
  4.     T Adicionar < T > (T a, T b) { return (a + b);  }  
  5.     T Subtrair < T > (T a, T b) { return (a - b);  }  
  6.     T Multiplicar < T > (T a, T b) { return (a * b); }  
  7.     T Dividir < T > (T a, T b) { return (a / b); }  
  8.     return resultado;  
  9. }  
     

Vejamos agora um exemplo prático de como calcular o fatorial de um número usando funções locais.

 

Temos a classe Calculo contendo o método CalcularFatorial() e no interior deste método definimos uma função local chamada Multiplicar() que vai ser chamada apenas neste método.

A seguir temos o código que usa a classe Calculo() e o método CalcularFatorial() :

Abaixo temos o resultado da execução do código :

Devemos lembrar algumas restrições das funções locais que são:

  1. Não podemos incluir um modificador de acesso de membro;
  2. Não podemos usar a palavra-chave static na definição de uma função local;
  3. Não podemos aplicar atributos aos membros de uma função local;

Pegue o projeto aqui :  CShp_FuncLocal.zip

"Porque o Senhor é justo, e ama a justiça; o seu rosto olha para os retos."
Salmos 11:7

Referências:


José Carlos Macoratti