Pular para o conteúdo principal

Delegate, FUNC e Action no C# com Fibonacci?

Vamos direto ao ponto: a melhor maneira de aprender a usar uma nova funcionalidade de sua linguagem de programação favorita é identificá-la em um uso do dia a dia. Vamos então utilizar um problema, identificar a situação ao qual o delegate seria útil e vamos mostrar o uso para melhorar a qualidade do seu código.

Existe um algorítimo que todo aspirante a programador tem que aprender para firmar o conhecimento no uso de iterações que é o algorítimo do Fatorial. Basicamente, o objetivo é descobrir qual seria o fatorial do número 3, por exemplo, 

Fat3 = 3 * 2 * 1 = 6.

Uma das formas de desenvolver isto no C#, em uma Console Application, é fazer um laço decremental sempre multiplicando o valor resultante pelo número que está no laço. Por exemplo:



Mas existe uma outra forma também, que seria fazer um algorítimo recursivo. Mais ou menos como abaixo.



O resultado neste caso não muda. O problema é se quisermos mostrar os dois resultados juntos. Olha como ficaria o nosso método Main.



Código repetido. Argh! Bons programadores não fazem isto.

A única diferença entre os dois blocos é somente o método chamado. E se a gente pudesse aproveitar todo o código e só trocar o nome do método dinamicamente, como se fosse uma variável? Podemos. Isto é C#. É aí que entra o FUNC.

A melhor definição que encontro quando converso sobre ele é que é uma forma de tratar métodos como se fossem variáveis. Veja a sintaxe:

FUNC<[tipo parametro1], [tipo parametro2], ..., [tipo parametro n], [retorno]> [nome da função]

Como todo método em C# possui apenas um retorno, ele sempre será o último tipo mencionado. Trazendo para a nossa realidade, teremos, para os métodos de fatoriais:


  • Um parâmetro do tipo INTEIRO e
  • Uma saída do tipo LONG
FUNC<int, long> fatorial
Transformando isto em um método, temos


Onde o primeiro parâmetro é uma função. Mas não complique, só pense que é um parâmetro que você pode executar como um método, exatamente como fizemos. Assim, qualquer método em toda a nossa aplicação que receba um único inteiro e retorne um long pode ser passado como parâmetro, exatamente como abaixo.


Ficou melhor não? Então, se quisermos agora contar o tempo, é só modificar em um único canto, como no exemplo abaixo:




O ACTION é exatamente como o FUNC, mas ele não tem retorno. Ótimo para métodos com retorno VOID.

E o delegate você usará quando quiser definir métodos "no quente", ou seja, na hora de chamar a função, como abaixo.


O importante, como sempre digo, é mostrar o funcionamento para que o conhecimento fique impregnado. Qualquer dúvida, gentileza entrar em contato.



Comentários

Postagens mais visitadas deste blog

Lendo sobre o Mercado! Isso vai dar certo?

Economia? Todo mundo sabe que não sou um investidor de sucesso (basta ver que ainda não fiquei milionário), mas gosto de tentar entender como o mercado funciona. Faço analisando diversas opiniões publicadas em tablóides sobre o assunto (principalmente sobre o mercado de ações). E, se é assim, porque não escrever um pouco sobre isso? Com certeza vai manter as minhas noites ocupadas e espero proporcionar um pouco de feedback  sobre as minhas erradas opiniões... (não estou sendo modesto, na verdade digo erradas porque ainda não consegui acertar) Sem mais delongas... ... existe um novo artigo no site do InfoMoney intitulado "O que comprar e o que vender na bolsa em 2014, de acordo com gestor"   que apresenta opiniões acerca do que pode acontecer no mercado acionário no ano de 2014 pelo Mendes (Walter Mendes). Basicamente o autor defende que a economia vai se manter estagnada (crescendo míseros 2%), mas a inflação vai continuar alta. O que isto quer dizer? Os consumido...

Comunicação é a alma do negócio

Eu não sei se todo chefe sabe, mas em qualquer almoço em que mais de dois subordinados estejam reunidos sem que “o carrasco” esteja presente, ele será o assunto principal! Não importa se é bom ou ruim ou se é empenhado ou não, é irressistível não falar daquele que é responsável por nossa produtividade! Foi assim nos tempos de colégio, quando os nossos pais mandavam a gente estudar, foi assim na faculdade quando nossas namoradas ligavam a todo momento e é assim no dia-a-dia de trabalho. E o tema da conversa nem sempre é bom… Mas sabe o que todo chefe devia fazer? Ele devia achar ÓTIMO! É importantíssimo receber  feedbacks!  Infelizmente a quantidade de retornos que recebemos é inversamente proporcional ao cargo que desempenhamos. Se dizer para o chefe o quanto ele está se saindo bem já é difícil, imagina dizer que tudo o que ele faz é atrapalhar o andamento dos processos! Falar olhando para cima é muito mais complicado do que falar olhando para frente. E,  se ...

Ter um alvo onde colocar a mira é o segredo de todo início de projeto.

Imediatamente após nós, jovens empreendedores, identificarmos uma “necessidade de sucesso”, sofremos uma súbita onda de empolgação! A descoberta esta tão fresca na cabeça que começamos a bolar milhões de planos sobre como o produto ou o serviço poderia ser. Surge uma vontade imensa de compartilhar com outras pessoas a possibilidade de negócio. Realmente acreditamos que a idéia pode ser uma excelente oportunidade (e na maioria das vezes ela o é)! Esta é a melhor fase, mas infelizmente também é a mais perigosa por três motivos: 1º Para começar porque a maioria das pessoas com quem você comentará não esta preparada para trilhar caminhos fora de uma zona de conforto. Elas vão comentar sobre o trabalho despendido e que já existem dezenas de produtos iguais no mercado, que você será só mais um etc… Mas você já pensou no mundo sem o Google? Um produto nada inovador que hoje representa um império de 100 bilhões de dólares… E o facebook? Outra empresa bilionária. 2º Por ca...