Enum
O Enum é um conceito bastante útil para algumas áreas de programação. Na verdade trata-se da abreviação de Enumeração, que na prática nada mais é do que um grupo de constantes. A grande vantagem das Enums é que elas podem expressar números através de nomes. Vou colocar um exemplo que vai deixar bem claro sua utilidade. Vamos imaginar o cenário de um pequeno jogo de batalha-naval, que tenha, para cada objeto do jogo, uma determinada pontuação. Para dar início ao exemplo, criarei um novo projeto no Visual C# Express e dentro dele uma classe chamada "Pontos".
Agora, dentro dessa classe, criarei uma Enum chamada "PontosAcertos", que definirá a pontuação referente a cada objeto do jogo.
Notem que eu atribui alguns valores para cada objeto do jogo.
Agora imaginem que num outro momento do código você queira utilizar, exibindo na tela, o valor atribuído a um Cruzador. Para muitos a solução já deve estar mentalmente pronta, que seria:
Pontos.PontosAcertos.Cruzadores
Essa resposta faz sentido, já que acessa primeiro a Classe, depois a Enum e em seguida o valor do item desejado.
No entanto, vamos tentar exibi-la no Console do C# com o seguinte comando:
Console.WriteLine(Pontos.PontosAcertos.Cruzadores);
Vejamos o que acontece na saída:
Não era bem isso que queríamos. O que aconteceu aqui foi o seguinte: todo item de um Enum é naturalmente uma String associada a um valor e, quando não deixamos explícito que queremos exibir ou utilizar o valor, o retorno será sempre a String em si. A solução para isso é muito simples e envolve o conceito de Cast, visto no tópico anterior, vejam:
Vejamos a saída agora:
Percebam que agora foi retornado o valor associado a esse item da Enum e não mais o seu nome.
O interessante é que se ao longo desse jogo fosse necessário calcular a pontuação referente ao acerto de vários Cruzadores ao mesmo tempo, nós poderíamos fazer o seguinte código:
Vejam a saída desse comando com o multiplicador:
Os enumeradores permitem grande ganho de tempo no desenvolvimento de aplicações. Imagine que você decida, no final do desenvolvimento, alterar o valor da pontuação dos Cruzadores, de 5 para 10 pontos. Se não tivesse feito um Enum, seria necessário procurar em todos os locais do seu código que fizessem uso dessa pontuação e substituir o 5 pelo 10. Utilizando o Enum basta trocar em um único local e o código já estará atualizado.
Bem, os mais atentos e que já passaram pelo minicurso de Lógica podem estar se perguntando qual seria a diferença entre o Enum e as Constantes, afinal de contas eles parecem ter o mesmo resultado prático. Se você pensou dessa forma, parabéns, pois até aqui realmente eles não apresentam nenhuma diferença no resultado e isso significa que você está atento, no entanto o Enum é, de fato, uma Enumeração, uma sequência. Se não especificarmos nenhum valor aos seus itens, isso será feito automaticamente, como se fossem índices de um vetor. Vejam na prática o que acontece quando eu removo todos os valores associados aos itens do Enum:
Para o código de exibição, fiz uma alteração para que sejam exibidos todos os itens da Enum, deixando-o da seguinte forma:
Agora vejamos essa saída:
Percebam agora que ele atribuiu valores a cada item, de acordo com a ordem em que eles aparecem na Enum. E, assim como os índices de um vetor, o primeiro tem valor zero.
Agora ficou claro o que diferencia uma Enum de simples Constantes.
Para encerrar o assunto Enum, vale destacar que por padrão os valores associados são do tipo int, mas também é possível usar os tipos byte, short e long através da seguinte sintaxe:
Vale destacar que uma Enum não aceita os tipos de dados Double, Float e Char.
Bem, é isso. Essa é a Enum. No próximo tópico falarei sobre as listas.