Casos prácticos en los que se puede usar una Enumeración

Iniciado por z3nth10n, 8 Diciembre 2013, 17:46 PM

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

z3nth10n

Hola buenas, pues me gustaría saber sobre las enumeraciones, y como en MSDN viene todo tan técnicamente expresado, pues me cuesta entender los ejemplos..

Así que he aquí mi pregunta...

Vale la pena usar una enumeración, por ejemplo en el Width de X (14) objectos?? O mas bien, es mejor usar X (14) declaraciones de tipos int??

Un saludo.




Es que veréis, me gustaría hacer un sistema de propiedades para mi juego, en donde se puede resizar (cambiar de tamaño) los elementos de la GUI, y claro, no se que sería más fácil hacer, un array con 14 indexes, una enumeración con 14 elementos, o declarar 14 elementos...

Interesados hablad por Discord.

Vaagish

#1
Seguro que 14 declaraciones no (Siempre que tengas otro meto para hacer lo mismo), podes usar estructuras o enumeraciones,, dependiendo el caso, lo que creas que va a resultar mas facil de utilizar (implementar) y si realmente te conviene.. me da la impresion que te conviene una estructura en el caso de un Width (Igual no entiendo que son esos 14 objetos??) Tendrias que detallar mejor..

Con respecto a la MSDN, que te interesa saber? Es bastante clara.. te pone (por ejemplo) una API, te dice que parametros son opcionales y cuales obligatorios, te da una descripcion, en que libreria se encuentra y en algunos casos ejemplos..

EDITO: Ahora que releo el titulo del post, (Casos practicos...) una enumeracion es conveniente para agrupar tipos de datos relacionados,, por ejemplo, colores (el tipico ejemplo que se suele dar), pero pueden ser muchas cosas mas que quisieras "Enumerar", dias, meses, años, dispositivos.. cualquier cosa enumerable!!

Saludos!!

z3nth10n

Cita de: Vaagish en  8 Diciembre 2013, 20:20 PM
(Igual no entiendo que son esos 14 objetos??)

Son todo ints... Por eso digo, que a lo mejor me conviene más una enumeración.

También conozco una estructura, pero pa qué? Si todas las variables son del tipo int.

Interesados hablad por Discord.

Eleкtro

#3
Cita de: Ikillnukes en  8 Diciembre 2013, 17:46 PMVale la pena usar una enumeración, por ejemplo en el Width de X (14) objectos?? O mas bien, es mejor usar X (14) declaraciones de tipos int??

Típica pregunta inentendible como de costumbre Ikillnukes, pero viniendo de ti te perdono xD

¿Si no entiendo mal quieres decir que tienes 14 objectos y quieres guardar el valor de "ancho" de cada objeto en algún lugar para acceder a ellos fácilmente?

Por como pintas el problema no creo que una Enum sea lo que necesitas, puesto que para empezar no se puede crear dinámicamente una Enum en tiempo de ejecución (al menos eso dice MSDN), y los elementos de una Enum tampoco se pueden modificar en tiempo de ejecución, ademas los valores de "widths" me imagino que serán numéricos (otro motivo para no pdoer usar una Enum).

Un Array es algo complétamente diferente a una Enum, no tiene ni pies ni cabeza comparar uno con lo otro, Enumeraciones es para X cosas y un Array para otras, una Enum es util si se sabe usar y puedes hacer con ella cosas interesantes como utilizar el attributo Flags y combinarlos (si resultase necesario), pero como ya digo, dudo que sea el caso de que una Enum te sirva...

Yo te recomiendo el uso de un Dictionary o cualquier otro Type como una Tuple; un Array 2D también te sirve pero pff teniendo esto no hace falta, te muestro un ejemplo en VB.NET:

Código (vbnet) [Seleccionar]
Public Class Form1

   Private myObject As Object = "Object 1"

   Private ReadOnly Widths As New Dictionary(Of Object, Size) From
   {
       {myObject, New Size(500, 0)}
   }

   Private Sub Test() Handles MyBase.Shown

       ' Ejemplo de como iterar los elementos del diccionario
       For Each key As KeyValuePair(Of Object, Size) In Widths
           MsgBox(String.Format("Object:{0} Width:{1}", CStr(key.Key), CStr(key.Value.Width)))
       Next

       ' Ejemplo de como acceder a un elemento específico:
       MsgBox(Widths(myObject).Width)
       MsgBox(Widths.First.Value.Width)

   End Sub

End Class


EDITO: Si además del "Width" petendes especificar más cosas te recomiendo que crees tu Type propio y le añadas los miembros que quieras, como en el ejemplo del link que me has mostrado:

Citar
Código (csharp) [Seleccionar]
preset = new Item();
preset.name = "Apple";
preset.cost = 25;
preset.weight = 1;

Saludos!








z3nth10n

Vaya, y como de costumbre, siempre te sueles enterar "a duras penas" de lo que pregunto. xD

Pero vaya, me has aclarado la duda... Y sí, no es mala idea el diccionario, es más mira en lo que lo tenia pensado usar:

http://answers.unity3d.com/questions/155003/item-database.html

Un saludo.

Interesados hablad por Discord.

raul338

Probaste con la propiedades anchor de los controles?
Y si el usuario quiere sus propias medidas?

Pone un par de paneles con splitter y yá

Hardcodear no siempre es bueno...

z3nth10n

No son controles...

Son texturas representados con Rects :P

Interesados hablad por Discord.

Eleкtro

#7
Cita de: Ikillnukes en  9 Diciembre 2013, 01:07 AMSon texturas representados con Rects :P

Primero dices que necesitas especificar un tamaño, pero ahora dejas ver que también necesitas especificar unas coordenadas (Por el uso de la estructura Rect).

En ese caso puedes usar la estructura Rectangle para especificar ambos:
Código (vbnet) [Seleccionar]
Dim myTexture As New Rectangle(New Point(X, Y), New Size(W, H))

Saludos








z3nth10n

No a ver, Unity tiene sus propias maneras:

Código (csharp) [Seleccionar]
GUI.DrawTexture(new Rect(top, left, width, height), (Texture2D)Resources.Load("carpeta/archivo"));

Si no mal recuerdo, pero el top y el left son fijos.... Bueno ahora que lo pienso los que esten a la izquierda van a tener que casmbiar el left (hacerse mas chico) para poder contrarrestar el cambio de tamaño (resize), pero bueno, para eso ya haré alguna función... :P

Interesados hablad por Discord.

Vaagish

Citarademas los valores de "widths" me imagino que serán numéricos (otro motivo para no pdoer usar una Enum).

Te referís a que solo se pueden usar enteros y no decimales,, no?

@Ikillnukes: No estarás planeando hacer un juego serio en .NET, no?  :rolleyes: