Olá amigos! Neste artigo vamos conhecer o que é uma Enumeração, tanto em .NET, quanto no mySQL e como ela pode te ajudar nos seus projetos diários.
Clique aqui para dar download no projeto de exemplo.
Enumeração é um tipo de variável que vincula um valor constante numérico a um nome (string). Como exemplo, podemos dizer que se assemelha muito de uma lista. Por exemplo, queremos definir níveis fixos de usuários no nosso sistema.
Outro exemplo é se quisermos especificar tipos de animais que o nosso sistema de pet-shop aceita.
Note que para nós, 1 é cachorro, 2 é gato, 3 peixe , 4 Pássaro e 5 Outros. Para um sistema é sempre mais rápido trabalhar com números, do que com palavras. Quando salvamos estas informações em banco de dados, também pode nos ajudar a diminuir o espaço em disco, pois salvar 1, ocuparia menos espaço em disco do que salvar "Cachorro". Ainda mais se multiplicarmos por mil, dez mil, ou um milhão de registros.
Podemos salvar o valor da enumeração em um campo numérico, como por exemplo um tinyInt(1), caso o seu banco de dados não suporte enumeração. Porém, recomendo utilizar campo do tipo enumeração, caso o seu banco de dados suporte.
Como exemplo, vamos utilizar o mySQL. Caso não utilize o mySQL, pule a próxima parte deste artigo, e vá para a sessão "Mãos à obra".Em banco de dados, como o mySQL.
Vamos criar uma tabela (tblanimais) para armazenar os animais no sistema de pet-shop.
Campo Tipo
------ --------------------------------------------------ID int(11)
Tipo enum('Cachorro','Gato','Peixe','Passaro','Outros')Idade int(11)
Nome varchar(255)O Create table ficaria assim:
CREATE TABLE `tblanimais` (
`ID` int(11) NOT NULL auto_increment,
`Tipo` enum('Cachorro','Gato','Peixe','Passaro','Outros') default NULL,
`Idade` int(11) default NULL,
`Nome` varchar(255) default NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 Ao criar a enumeração na tabela, passamos os tipos, diretamente no create table.
Um comando de insert ficaria assim:
Insert into `animais`(`ID`,`Tipo`,`Idade`,`Nome`) values ( NULL,'Cachorro','14','Rufos')Note que passamos a string, no tipo de enumeração.
Mesmo salvando "string", por de baixo dos panos uma enumeração possuí uma performance melhor do que se utilizássemos um campo varchar, por exemplo.
Vamos criar um sistema bem simples, só para entender como utilizar a enumeração com .NET.
Modelo da tela de exemplo a ser criada
Crie um projeto web (pode ser em Vb.net ), e adicione um diretório chamado App_Code, caso ainda não exista.
Adicione uma classe no diretório App_Code de seu projeto web, chamada "enumeracoes.vb".
Imports Microsoft.VisualBasic
Public Class enumeracoes
''' <summary>
''' Enumeração de acesso
''' </summary>
''' <remarks></remarks>
Public Enum Permissao
[Diretor] = 2
[Gerente] = 3
[Analista] = 4
[Estagiario] = 5
[Visitante] = 6
[Administrador] = Diretor Or Gerente Or Analista Or Estagiario Or Visitante
End Enum
''' <summary>
''' Enumeração de animais
''' </summary>
''' <remarks></remarks>
Public Enum Animais
[Cachorro] = 1
[Gato] = 2
[Peixe] = 3
[Pássaro] = 4
[Outros] = 5
End Enum
''' <summary>
''' Quando queremos tratar enumerações
''' como bits
''' </summary>
''' <remarks></remarks>
<Flags()> Public Enum EstadoLed
[TudoApagado] = 0
[Aceso25PorCento] = 1
[Aceso50PorCento] = 2
[Aceso75PorCento] = 4
[Aceso100PorCento] = 8
End Enum
End Class
Enumeração em C# (como curiosidade)
public class enumeracoes
{
/// <summary>
/// Enumeração de acesso
/// </summary>
public enum Permissao
{
Diretor = 2,
Gerente = 3,
Analista = 4,
Estagiario = 5,
Visitante = 6,
Administrador = Diretor | Gerente | Analista | Estagiario | Visitante
}
/// <summary>
/// Enumeração de animais
/// </summary>
public enum Animais
{
Cachorro = 1,
Gato = 2,
Peixe = 3,
Pássaro = 4,
Outros = 5
}
/// <summary>
/// Quando queremos tratar enumerações
/// como bits
/// </summary>
[Flags()]
public enum EstadoLed
{
TudoApagado = 0,
Aceso25PorCento = 1,
Aceso50PorCento = 2,
Aceso75PorCento = 4,
Aceso100PorCento = 8
}
}
Note que coloquei um exemplo de enumeração chamada EstadoLed. Esta enumeração possui uma marca de Flag. Isto significa que pode ser tratada como bits, com portência de 2 (1, 2, 4, 8...).
Agora que criamos a nossa classe com as enumerações do sistema, vamos ver como interagir facilmente com a tela.
Crie uma página chamada default.aspx, em seu projeto. (Prefira em utilizar "code behind", ou seja, o código da página no arquivo default.aspx.vb). Na sua página default.aspx, copie o código.
<form id="form1" runat="server">
<div>
<fieldset>
<legend>Permissão de acesso </legend>
<asp:CheckBoxList ID="chkPermissao" runat="server">
</asp:CheckBoxList><br />
<asp:Button ID="btnMostrarValores" runat="server" Text="Mostrar Valores Selecionados" />
<br />
<br />
<asp:Label ID="lblValoresSelecionados" runat="server"></asp:Label>
</fieldset>
</div>
<br />
<fieldset>
<legend>Animais </legend>
<i>Selecione o tipo de animal abaixo.</i><br />
<asp:DropDownList ID="ddlAnimais" runat="server" AutoPostBack="true">
</asp:DropDownList><br />
<asp:Label runat="server" ID="lblSQLAnimais"></asp:Label>
</fieldset>
<br />
</form>
Para trabalhar com a permissão, vamos criar o código abaixo.
#Region "Permissão"
''' <summary>
''' Método que carrega a permissão na checkbox
''' </summary>
Private Sub carregarPermissao()
Dim sPermissoesNomes As String() = System.[Enum].GetNames(GetType(enumeracoes.Permissao))
For Each sPermissao As String In sPermissoesNomes
' Para cara ítem na minha enumeração, eu adiciono na checkbox list
chkPermissao.Items.Add(New ListItem(sPermissao, Convert.ToString(sPermissao)))
Next
End Sub
''' <summary>
''' Método do botão Mostrar valores, que nos permite receber o que o usuário selecionou
''' </summary>
Protected Sub btnMostrarValores_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnMostrarValores.Click
Dim sValoresSelecionados As String = String.Empty
For Each oChkItem As ListItem In chkPermissao.Items
If oChkItem.Selected Then
Dim enumPermissao As New enumeracoes.Permissao
' Dou um parse no valor da checkbox, se selecionada, para poder exibir o valor
enumPermissao = System.Enum.Parse(GetType(enumeracoes.Permissao), oChkItem.Value)
sValoresSelecionados &= enumPermissao & " (" & enumPermissao.ToString & "); "
End If
Next
lblValoresSelecionados.Text = sValoresSelecionados
End Sub
#End Region
Para trabalhar com a enumeração de animais, vamos criar o código abaixo:
#Region "Animais"
''' <summary>
''' Método que carrega os animais, em uma combo
''' </summary>
Private Sub carregarAnimais()
Dim sAnimaisNomes As String() = System.[Enum].GetNames(GetType(enumeracoes.Animais))
Dim enumAnimal As New enumeracoes.Animais
For Each sAnimais As String In sAnimaisNomes
' Para cara ítem na minha enumeração, eu adiciono na combo
enumAnimal = System.Enum.Parse(GetType(enumeracoes.Animais), sAnimais)
ddlAnimais.Items.Add(New ListItem(sAnimais, enumAnimal))
Next
' adiciono um ítem de selecionar na combo.
ddlAnimais.Items.Insert(0, New ListItem("<--Selecione-->", "NaoSelecionado"))
End Sub
''' <summary>
''' evento que tratya a mudança de valor da dropdown
''' </summary>
Protected Sub ddlAnimais_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlAnimais.SelectedIndexChanged
Dim sSQL As String = String.Empty
Dim enumAnimal As New enumeracoes.Animais
If String.Compare(ddlAnimais.SelectedValue, "NaoSelecionado") = 0 Then
lblSQLAnimais.Text = "Selecione um animal"
Else
' Dou um parse no valor da combo (dropdown), se selecionada, para poder exibir o valor
enumAnimal = System.Enum.Parse(GetType(enumeracoes.Permissao), ddlAnimais.SelectedValue)
sSQL = "insert into tblanimais " & _
"(Tipo,Idade,Nome) values " & _
"('" & enumAnimal.ToString & "','14','Rufos')"
lblSQLAnimais.Text = "Sua SQL que você deve usar para salvar " & _
" no mySQL é: <br />"" <i>" & sSQL & "</i> """
End If
End Sub
#End Region
Agora só precisamos chamar os métodos no page load
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
' Chamo os métodos de carregar, se não for postback
carregarPermissao()
carregarAnimais()
End If
End SubNeste artigo aprendemos a como trabalhar com enumeração, tanto em .Net quanto em MySQL. Vimos como ela pode nos auxiliar nos projetos do dia a dia. Além de ajudar a melhorar a performance, a enumeração nos ajuda a ter um código mais legível, de fácil manutenção e expansão.
Clique aqui para dar download no projeto de exemplo.Forte Abraço!
Muito bom eu mesmo desconhecia e nunca utilizei Enumeração!
Parabens!!
Átila, enumeração realmente é bem interessante.
Se bem utilizada, pode poupar retrabalho, e deixar o código mais legível e robusto. Com o Visual Studio ainda, é gerado o "intelisense", que ajuda e muito o desenvolvimento.
Use a criatividade e boa sorte!
Forte Abraço!
Thomas A. Semple
Os textos publicados neste espaço são de responsabilidade única de seus autores (colunistas e leitores) e podem não expressar necessariamente a opinião do iMasters.
Thomas Alexander Semple é engenheiro eletrônico com ênfase em telecomunicações e é líder de projetos da T4W. Com mais de 10 anos de experiência, participa de projetos para empresas dos mais diversos segmentos. A T4W (www.t4w.com.br) é uma empresa de tecnologia onde sua área de desenvolvimento vem atendendo empresas de médio e grande porte em projetos corporativos e especiais. Thomas A. Semple também escreve periodicamente para as revistas .Net Magazine e Web Mobile.
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.