Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: z3nth10n en 8 Diciembre 2013, 17:46 pm



Título: Casos prácticos en los que se puede usar una Enumeración
Publicado por: z3nth10n en 8 Diciembre 2013, 17:46 pm
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...


Título: Re: Casos prácticos en los que se puede usar una Enumeración
Publicado por: Vaagish en 8 Diciembre 2013, 20:20 pm
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!!


Título: Re: Casos prácticos en los que se puede usar una Enumeración
Publicado por: z3nth10n en 8 Diciembre 2013, 20:31 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.


Título: Re: Casos prácticos en los que se puede usar una Enumeración
Publicado por: Eleкtro en 8 Diciembre 2013, 20:37 pm
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??

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
  1. Public Class Form1
  2.  
  3.    Private myObject As Object = "Object 1"
  4.  
  5.    Private ReadOnly Widths As New Dictionary(Of Object, Size) From
  6.    {
  7.        {myObject, New Size(500, 0)}
  8.    }
  9.  
  10.    Private Sub Test() Handles MyBase.Shown
  11.  
  12.        ' Ejemplo de como iterar los elementos del diccionario
  13.        For Each key As KeyValuePair(Of Object, Size) In Widths
  14.            MsgBox(String.Format("Object:{0} Width:{1}", CStr(key.Key), CStr(key.Value.Width)))
  15.        Next
  16.  
  17.        ' Ejemplo de como acceder a un elemento específico:
  18.        MsgBox(Widths(myObject).Width)
  19.        MsgBox(Widths.First.Value.Width)
  20.  
  21.    End Sub
  22.  
  23. 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
  1. preset = new Item();
  2. preset.name = "Apple";
  3. preset.cost = 25;
  4. preset.weight = 1;

Saludos!


Título: Re: Casos prácticos en los que se puede usar una Enumeración
Publicado por: z3nth10n en 8 Diciembre 2013, 20:42 pm
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.


Título: Re: Casos prácticos en los que se puede usar una Enumeración
Publicado por: raul338 en 9 Diciembre 2013, 00:54 am
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...


Título: Re: Casos prácticos en los que se puede usar una Enumeración
Publicado por: z3nth10n en 9 Diciembre 2013, 01:07 am
No son controles...

Son texturas representados con Rects :P


Título: Re: Casos prácticos en los que se puede usar una Enumeración
Publicado por: Eleкtro en 9 Diciembre 2013, 02:06 am
Son 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
  1. Dim myTexture As New Rectangle(New Point(X, Y), New Size(W, H))

Saludos


Título: Re: Casos prácticos en los que se puede usar una Enumeración
Publicado por: z3nth10n en 9 Diciembre 2013, 11:09 am
No a ver, Unity tiene sus propias maneras:

Código
  1. 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


Título: Re: Casos prácticos en los que se puede usar una Enumeración
Publicado por: Vaagish en 9 Diciembre 2013, 17:29 pm
Citar
ademas 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:


Título: Re: Casos prácticos en los que se puede usar una Enumeración
Publicado por: z3nth10n en 9 Diciembre 2013, 17:32 pm
xD A ver, es lo que me brinda Unity3D, que le hago yo...

Si solo tengo C#, JS y Boo... :P


Título: Re: Casos prácticos en los que se puede usar una Enumeración
Publicado por: Vaagish en 9 Diciembre 2013, 17:34 pm
Citar
xD A ver, es lo que me brinda Unity3D, que le hago yo...

Si solo tengo C#, JS y Boo... :P

Uff,, es que como practica te va a servir muchísimo, pero va a quedar extremadamente pesado el juego.. pero suerte!! Te va a ser divertido!  ;D

Saludos!!


Título: Re: Casos prácticos en los que se puede usar una Enumeración
Publicado por: Eleкtro en 10 Diciembre 2013, 02:25 am
Te referís a que solo se pueden usar enteros y no decimales,, no?

Hola

Me refería a que los nombres de los identifficadores de una Enum no pueden ser numéricos, como en este ejemplo:

Código
  1. <Flags>
  2. Enum Widths As Short
  3.    500
  4.    600
  5. End Enum

Aunque no sé si Ikillnukes tenia pensado hacer algo asi, pero de todas formas lo intenté aclarar.

Saludos!


Título: Re: Casos prácticos en los que se puede usar una Enumeración
Publicado por: Vaagish en 10 Diciembre 2013, 17:19 pm
Citar
Me refería a que los nombres de los identifficadores de una Enum no pueden ser numéricos

ah si tamos de acuerdo,, yo pensé que decías que una Enum, no podía tener valores numéricos

Saludos!