Funções em C#
- #C#
Convidarei você a um exercício mental:
Imagine que lhe solicitaram construir um programa que realiza o cálculo da média inteira de 2 números, 7 e 10, respectivamente. Ora, em um ecossistema como a linguagem C#, é tão simples quanto fazer algo como:
using System;
public class Program
{
public static void Main()
{
int a = 7;
int b = 15;
int media = (7 + 15) / 2;
Console.WriteLine(media);
}
}
No entanto, alguns dias depois, seu cliente solicita que o mesmo cálculo de média seja replicado para outros 10 pares de valores. A princípio, poderá sentir a tentação de replicar o mesmo código outras 10 vezes, porém, existe para tal um mecanismo mais elegante: Funções.
Funções na linguagem C# podem ser definidas como blocos de código que executam uma tarefa específica e podem ser chamados de diferentes partes do programa para fim de reutilização. A palavra chave aqui é a reutilização.
Funções também podem ser denominadas métodos, em um vocabulário mais formal no contexto de Orientação a Objetos.
Para usar funções em C#, você precisará declará-las, definir parâmetros caso a mesma possua e poderá ou não retornar um valor, se necessário. Você também pode aplicar modificadores e atributos às funções para controlar seu comportamento e acesso (seguindo assim boas práticas de Orientação a Objetos). Por fim, para realmente utilizá-la, você precisará invocar sua função através de sua assinatura (em termos simples, 'a forma como você a declarou'). Seguindo o caso anterior, teríamos:
public int Media(int a, int b) //Neste exemplo, a e b são seus parâmetros.
{
//A palavra chave 'public' refere-se ao escopo da função
//Já a palavra chave int, refere-se ao tipo que esta função resultará no final de sua execução
//A palavra chave "return" permite que um valor seja passado como resultado da sua função para quem 'chamou'
return (a + b) / 2;
}
//Invocando a função Media
Console.WriteLine(Media(7, 15));
Uma ênfase sobre a palavra chave public, é que podemos ter diferentes escopos para funções em C#, definindo rapidamente os mais comuns, seriam:
- public: Nível de acesso mais amplo, qualquer outro código 'no mesmo projeto' pode invocar.
- private: Nível de acesso mais restrito, somente código na mesma classe (ou mesma struct) pode invocar.
- protected: Similar ao private, porém permite acesso por classes derivadas (conceito de Herança)
Para não alongar muito a explicação sobre escopos, recomendo a pesquisa em paralelo sobre Escopos no contexto de Orientação a Objetos. É extremamente interessante!
No entanto, talvez pela natureza simples deste exemplo, um outro fator interessante tenha passado despercebido: Utilizar funções é uma ótima forma de proporcionar capacidade de manutenção ao seu código. Imagine no cenário anterior, caso a pessoa desenvolvendo a aplicação cometesse um erro no cálculo da média e replicasse outras 10 vezes? Imagine isto para um caso mais crítico, como uma aplicação bancária por exemplo? Realmente, é nisto que as funções demonstram seu poder.
Há funções que são definidas naturalmente como parte das bibliotecas da linguagem C#. Algumas também, podem ser facilmente construídas a partir de outras funções.
Há ainda o conceito de Delegates, que foge um pouco ao escopo deste artigo, mas recomendo a pesquisa a todos os interessados. Na prática, Delegates são funções que podem ser passadas como argumentos ou atribuídas a variáveis.
Enfim, espero que este artigo possa ter ilustrado brevemente sobre funções em C#. Obrigado pela leitura.
public void Agradecimento()
{
Console.WriteLine("Obrigado pela leitura");
}
Referências:
Documentação da Microsoft sobre Métodos: Methods - C# Programming Guide - C# | Microsoft Learn
Documentação da Microsoft sobre Delegates: Delegados – Guia de Programação em C# | Microsoft Learn