Back-End

20 mar, 2019

C# 7.0 – Funções locais

Publicidade

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#, mas o que são, afinal?

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

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

  • Métodos
  • Construtores
  • Acessadores de propriedades
  • Acessadores de eventos
  • Métodos anônimos
  • Expressões Lambdas
  • Finalizadores
  • Outras funções locais

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 esse 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 na qual foi declarada

Vamos supor que você esteja criando um método chamado Calcular() para realizar cálculos que receberão uma expressão contendo o cálculo a ser realizado, e que esse cálculo envolve realizar operações de adição, subtração, multiplicação e divisão. Exemplo:

  • [2 + ( 3*5)/2 – 1 ]
public static string Calcular(string expressao)   
{  
    string resultado = string.Empty;   
      // realizar cálculos
      // .......
    return resultado;  
}

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 quatro funções locais: Adicionar(), Subtrair(), Multiplicar() e Dividir(), dentro do método Calcular():

public static string Calcular(string expressao)   
{  
    string resultado = string.Empty;  
    T Adicionar < T > (T a, T b) { return (a + b);  }  
    T Subtrair < T > (T a, T b) { return (a - b);  }  
    T Multiplicar < T > (T a, T b) { return (a * b); }  
    T Dividir < T > (T a, T b) { return (a / b); }  
    return resultado;  
}

Vamos ver 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 desse método definimos uma função local chamada Multiplicar(), que vai ser chamada apenas nesse 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:

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

Pegue o projeto aqui: CShp_FuncLocal.zip.