[Duda] Las enumeraciones (Enum) (Solucionado)

Iniciado por Senior++, 1 Enero 2012, 17:29 PM

0 Miembros y 1 Visitante están viendo este tema.

Senior++

Edito: A ver ... los enums están pensados para evitar "números mágicos" en el código. La idea es evitar código como este:

Public Sub EjecutaAccion(ByVal opciones As Integer)

If opciones = 1 Then
'Haz algo
ElseIf opciones = 3 Then
'haz algo diferente
ElseIf opciones = 4 Then
'haz otra cosa

'...

End If

End Sub

Este código es difícil de comprender y mantener, especialmente sin documentación, ya que al cabo del tiempo se olvidan la descripción de los valores. En cambio el mismo código con enums:

Public Enum Opciones
Ninguna = 0
Visualizar = 1
Editar = 2
Borrar = 4
'...
End Enum

Public Sub EjecutaAccion(ByVal eOpciones As Opciones)

If eOpciones = Opciones.Visualizar Then
'Haz algo
ElseIf eOpciones = (Opciones.Visualizar Or Opciones.Editar) Then
'haz algo diferente
ElseIf eOpciones = Opciones.Borrar Then
'haz otra cosa

'...

End If

End Sub

Con los enums el programa casi se auto-documenta y se facilita mucho su comprensión y mantenimiento.


Pero sigo sin entender!, ese código esta mal da error en: Public Sub EjecutaAccion(ByVal eOpciones As Opciones)

Porfavor alguien podría poner un claro ejemplo?
Vendo cuenta de LEAGUE OF LEGENDS lvl 30, EU west, muy barata

Jenhyal

Hola, SixToex (Agares).

A ver si te sirven los ejemplos de elguille (por cierto, un máquina en todo esto):

http://www.elguille.info/NET/cursoVB.NET/glosarioNET.htm#Enumeraciones

seba123neo

debes estar llamando mal a la funcion, por ejemplo esto funciona bien:

Código (vb) [Seleccionar]
Public Enum Opciones
    Ninguna = 0
    Visualizar = 1
    Editar = 2
    Borrar = 4
End Enum

Private Sub EjecutaAccion(ByVal eOpciones As Opciones)

    If eOpciones = Opciones.Visualizar Then
        MsgBox "Visualizar"
    ElseIf eOpciones = Editar Then
        MsgBox "Editar"
    ElseIf eOpciones = Opciones.Borrar Then
        MsgBox "Borrar"
    ElseIf eOpciones = Opciones.Ninguna Then
        MsgBox "Ninguna"
    End If

End Sub

Private Sub Form_Load()
    Call EjecutaAccion(Ninguna)
End Sub


y si la llamas con el numero:

Código (vb) [Seleccionar]
Call EjecutaAccion(0)

tambien funciona.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Senior++

Muchas gracias, ya lo entendi  :xD

Saludos ::)
Vendo cuenta de LEAGUE OF LEGENDS lvl 30, EU west, muy barata