Thread: [ES][TUT] Enums
View Single Post
Author Message
Alucard^
AMXX Moderator: Others
Join Date: Sep 2007
Location: Street
Old 11-25-2009 , 11:05   [ES][TUT] Enums
#1

Hago este tuto por las siguientes razones:

1) Para que no quede tirada la info aportada en este thread: http://forums.alliedmods.net/showthread.php?t=110080 Y reunir toda esa info en un tutorial.

2) Para que se entienda del todo bien el tema de los enums, voy a intentar ser lo mas explicativo posible y ampliar lo que mas pueda sobre el tema.

3) Para agregar otro tuto mas a la recopilacion y que la gente tenga mas material para aprender? No hacia falta mensionar este ya que es el punto principal por el cual se hacen los tutoriales, pero weno o.O

Cabe aclarar que todo el credito no va para mi, ya que gran parte de este tema lo aprendi justamente en el thread anteriormente mensionado en el punto 1.

Bueno, empecemos. Este tema es bastante simple...

¿Que son los Enums?

Como la palabra lo indica, son enumeraciones... enumeraciones las cuales conforman una estructura de ciertos elementos enumerados.

Cada elemento contiene un valor, gracias al mismo enum, ya que aumenta el valor de cada elemento de 1 en 1 (aunque esto puede ser modificado para que lo haga de 100 en 100 o como uno quiera).

Otra propiedad del enum, es que las enumeraciones son constantes. Esto quiere decir que en la ejecucion del plugin no pueden ser modificados. Sin embargo (y aca llega una duda mia) creo que con "constantes" se refiere a los nombres de las enumeraciones y no al valor asignado a estos.

Yo, personalmente, creo que los enums pueden ser comparados como defines, son distintos si... pero cumplen (en parte) una funcion muy similar, que es definir cosas previamente en el codigo que luego vamos a usar... y esto hace que los enums no sean impresindibles, los podemos usar si queremos y si no queremos, no los usamos... no es algo obligatorio, en ningun caso.

Por eso, dicho esto... podemos decir que los enums sirven para..... (mejor seguimos en la prox pregunta )

¿Para que sirven?

* Facilitarte la vida? Facilitar el cambio de ciertas cosas dentro del plugin que estemos haciendo, es por eso que los enums son muy utiles cuando los elementos del mismo, son usados muchas veces... entonces si decidimos cambiar algo del codigo, solamente tendriamos que dirigirnos al enum y modificar lo que queramos.

* Facilitar la lectura del codigo, ya sea para el autor del plugin o para un tercer lector. Y mantener un mejor orden... asi como lo hacen los defines, const y demas... probablemente de diferente forma pero al fin y al cabo terminan siendo utiles practicamente de la misma forma.

* Facilitar la creacion del plugin, es decir que al estructurarte primero y rearmar lo que luego vas a usar, es un muy buen metodo para entender mejor el codigo y asi dificultarte menos, la creacion del mismo.

* Y seguramente cada uno puede exprimir y sacarle el juego al uso de estos enums de una forma particular y personal.

Me pudri de leer ¿Y si me das ejemplos?

Empecemos por lo mas simple...

Code:
enum _:Estructura {     Elemento1 = 0,  // Este toma el valor de 0 como se lo seteamos nosotros     Elemento2,      // Dijimos que aumenta de 1 en 1 el enum por default, entonces el valor de este es 1 (0 + 1 = 1)     Elemento3,      // El valor de este es 2 (1 + 1 = 2)     Elemento4,      // El valor de este es 3 (2 + 1 = 3)     Elemento5       // El valor de este es 4 (3 + 1 = 4)         // Es importante acordarse que el ultimo elemento no lleva coma... y para los que se pregunten por que?     // En este caso el enum esta hecho verticalmente, pero si lo hariamos horizontalmente seria asi:     // enum { Elemento1 = 0, Elemento2, Elemento3, Elemento4, Elemento5 }     // Y como seguramente saben el ultimo valor no lleva coma, solo que al verlo verticalmente muchos se confunden }

Que pasa si por ej en el ejemplo previo, al primer elemento le seteamos el valor de 1 en vez de 0? Obviamente el segundo elemento obtendria el valor de 2, el tercero el valor de 3 y asi sucesivamente. Lo mismo pasaria si le seteamos otro numero distinto.

Con respecto a setearle el valor de 1 al primer elemento, CREO.... que no es necesario, creo que el valor default del primer elemento ya es 1... por lo que que seria lo mismo a esto:

Code:
enum _:Estructura {     Elemento1,  // Valor 1     Elemento2,  // Valor 2     Elemento3,  // Valor 3     Elemento4,  // Valor 4     Elemento5   // Valor 5 }

Igualmente de esto no estoy seguro asi que habria que esperar la respuesta de otros que sepan bien y se corregira si es incorrecta mi suposicion.

Despues, como dije antes... tambien se le puede modificar la suma de los valores, que en vez de sumar de 1 en 1, sume de 100 en 100 u otro numero... y aca va un ejemplo de como hacer esto, es muy sencillo:

Code:
enum _:Estructura(+=100) }     Elemento1 = 0,  // Le seteamos el primer elemento a 0 si queremos/necesitamos     Elemento2,      // Valor 100 (0 + 100 = 100)     Elemento3,      // Valor 200 (100 + 100 = 200)     Elemento4,      // Valor 300 (200 + 100 = 300)     Elemento5       // Valor 400 (300 + 100 = 400) }

Quizas el ejemplo que les voy a dar ahora, pueda llegar a facilitarles mas la comprension de estos enums (Gracias a juan aka. IneedHelp). Seria una comparacion:

Code:
/* ------- / Ejemplo 1 \ ------------*/ enum _:Estructura {     Elemento1 = 0,     Elemento2,     Elemento3,     Elemento4,     Elemento5 } new g_Variable[_:Estructura] /* ------- / Ejemplo 2 \ ------------*/ new g_Variable[5] // Estructura de la g_Variable[5]: g_Variable[0] = 0 g_Variable[1] = 1 g_Variable[2] = 2 g_Variable[3] = 3 g_Variable[4] = 4

El ejemplo 1 seria igual al ejemplo 2, solo que el primero usa un enum y el segundo no. Igualmente vuelvo a usar la palabra "creo" ya que no estoy del todo seguro sobre esto y si lo estoy explicando de la forma correcta.

Explicacion de algunas cosas

* Cabe aclarar que el "_:" que use en el nombre de los enums, es solo para identificarlo de las otras cosas dentro de un codigo, no es para nada necesario... es decir que:

Code:
enum _:Estructura }     /*  Elementos aca  */ } // Puede ir tranquilamente asi: enum Estructura }     /*  Elementos aca  */ } // Y si no me equivoco, tambien puede ir asi: enum }     /*  Elementos aca  */ } // Dependiendo si necesitemos o no llamar al nombre de la estructura (enum) en alguna parte de nuestro codigo

* Se que algo mas tenia para aclarar, pero se me olvido, lol. Cualquier cosa edito.

Bueno, por el momento este tutorial/informacion lo finalizo aca (me pudri de escribir), sin embargo despues lo voy a expandir traduciendo y explicando el tutorial hecho por Greenberet, del link que dejo Juan. Me refiero a este tuto: http://forums.alliedmods.net/showthread.php?t=26634

Y tambien aclarando algunas cosas que me haya faltadon en este tuto, y quizas alguien que sepa mas del tema me corrija algo sobre este thread... o agregue otra informacion al tema. Porque como veran de algunas cosas no estoy completamente seguro y tengo ciertas dudas, se que suena raro ya que soy el que esta armando este tutorial pero weno, el punto del mismo es exponer toda la info que se sepa, no solo de parte mia sino de todos.
__________________
Approved Plugins - Steam Profile

Public non-terminated projects:
All Admins Menu, HLTV parameters, Subnick,
Second Password (cool style), InfoZone,
Binary C4 plant/defuse, and more...

Private projects:
NoSpec (+menu), NV Surf Management,
PM Adanved System, KZ longjump2, and more...

Last edited by Alucard^; 11-25-2009 at 15:17.
Alucard^ is offline
Send a message via Skype™ to Alucard^