Back-End

7 nov, 2017

C# 7.0: Local Functions

Publicidade

Com o C# 7.0, agora também é possível a declaração de funções dentro de métodos convencionais. Do ponto de vista prático, este recurso batizado como Local Functions permitirá que se isolem métodos que teriam a princípio uma abrangência de uso bem restrita (normalmente invocados por uma única operação).

Na próxima listagem está um exemplo envolvendo a utilização de uma Local Function chamada ExibirHorarioAtual:

using System;
using System.Threading;
 
namespace ExemploLocalFunctions01
{
    class Program
    {
        static void Main(string[] args)
        {
            void ExibirHorarioAtual()
            {
                Console.WriteLine(
                    quot;Horário atual: {DateTime.Now.ToString("HH:mm:ss")}");
 
            }
 
            ExibirHorarioAtual();
 
            Console.WriteLine("Aguarde alguns segundos...");
            Random r = new Random();
            Thread.Sleep(new Random().Next(3000, 6000));
 
            ExibirHorarioAtual();
            Console.ReadKey();
        }
    }
}

A imagem a seguir traz o resultado da execução desta sequência de instruções:

A listagem seguinte apresenta um segundo exemplo de uso de uma Local Function, com o método Inverter revertendo a ordem dos caracteres que compõem uma string:

using System;
using System.Linq;
 
namespace ExemploLocalFunctions02
{
    class Program
    {
        static void Main(string[] args)
        {
            string Inverter(string valor)
            {
                return new string(
                    valor.ToCharArray().Reverse().ToArray());
            }
 
            string texto;
 
            texto = "Utilizando o C# 7.0";
            Console.WriteLine(quot;{texto} -> {Inverter(texto)}");
 
            texto = "Local Function";
            Console.WriteLine(quot;{texto} -> {Inverter(texto)}");
 
            Console.ReadKey();
        }
    }
}

O resultado da execução deste bloco de código está na próxima imagem:

A função Inverter também poderia ser declarada empregando uma expressão lambda, representando assim um exemplo de Expression-bodied Function. É o que demonstra a listagem a seguir:

using System;
using System.Linq;
 
namespace ExemploLocalFunctions02
{
    class Program
    {
        static void Main(string[] args)
        {
            string Inverter(string valor) =>
                new string(valor.ToCharArray().Reverse().ToArray());
 
            string texto;
 
            texto = "Utilizando o C# 7.0";
            Console.WriteLine(quot;{texto} -> {Inverter(texto)}");
 
            texto = "Local Function";
            Console.WriteLine(quot;{texto} -> {Inverter(texto)}");
 
            Console.ReadKey();
        }
    }
}

Referências