Raised This Month: $51 Target: $400
 12% 

[ES][TUT] Enums


  
 
 
Thread Tools Display Modes
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^
Old 11-25-2009, 11:06
Spartan!
This message has been deleted by Alucard^. Reason: Sry, postea mas abajo :X
Alucard^
AMXX Moderator: Others
Join Date: Sep 2007
Location: Street
Old 11-25-2009 , 11:06   Re: [ES][TUT] Enums
#2

Creditos:
  • Kiske - Por preguntar sobre los enums y de esa forma se obtuvo mas info sobre el tema.
  • Speed - Aporte sobre el tema.
  • Starsailor - Aporte sobre el tema.
  • capostrike93 - Aporte sobre el tema.
  • IneedHelp - Aporte sobre el tema.
  • AntiBots - Aporte sobre el tema.
  • larito - Aporte sobre el tema.

Todos los creditos estan relacionados con este thread.
__________________
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 11:20.
Alucard^ is offline
Send a message via Skype™ to Alucard^
fezh
Veteran Member
Join Date: Dec 2008
Location: BANNED
Old 11-25-2009 , 12:03   Re: [ES][TUT] Enums
#3

También sirve para hacer esto:

Code:
enum _:PluginCvars {     MyCvarNumber1 = 0,     MyCvarNumber2,     MyCvarNumber3 }; new g_iCvars[4]; public plugin_init() {     g_iCvars[MyCvarNumber1] = register_cvar("my_cvar_number1", "1");     g_iCvars[MyCvarNumber2] = register_cvar("my_cvar_number2", "1");     g_iCvars[MyCvarNumber3] = register_cvar("my_cvar_number3", "1"); }
__________________
"There is no knowledge, that is not power"
fezh is offline
Starsailor
horrible hahah
Join Date: Aug 2008
Location: Buenos Aires
Old 11-25-2009 , 12:09   Re: [ES][TUT] Enums
#4

Podrias hacer asi tambien

Code:
enum _:PluginCvars {     MyCvarNumber1 = 0,     MyCvarNumber2,     MyCvarNumber3 }; new g_iCvars[PluginCvars]; public plugin_init() {     g_iCvars[MyCvarNumber1] = register_cvar("my_cvar_number1", "1");     g_iCvars[MyCvarNumber2] = register_cvar("my_cvar_number2", "1");     g_iCvars[MyCvarNumber3] = register_cvar("my_cvar_number3", "1"); }
__________________
Find my plugins here..

Ex - Spanish Moderator.
Starsailor is offline
Alucard^
AMXX Moderator: Others
Join Date: Sep 2007
Location: Street
Old 11-25-2009 , 12:17   Re: [ES][TUT] Enums
#5

Joya, despues los agrego... y tambien aclaro otras cosas que descubri testeando.

Estaria bueno tambien agregar info con respecto al rendimiento, si el codigo se ve un poco afectado o el cambio es totalmente minimo, o que. Tambien comparar el rendimiento entre los diferentes ejemplos, por ej el de fezh con el de starsailor, cual conviene mas o si es exactamente lo mismo (siempre hablando en cuanto a rendimiento).
__________________
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...
Alucard^ is offline
Send a message via Skype™ to Alucard^
Starsailor
horrible hahah
Join Date: Aug 2008
Location: Buenos Aires
Old 11-25-2009 , 12:34   Re: [ES][TUT] Enums
#6

Segun el codigo de fezh:
Post de abajo

Segun mi codigo:
Code:
date: Wed Nov 25 14:31:34 2009 map: de_dust2_largo
type |                             name |      calls | time / min / max
-------------------------------------------------------------------
   n |                    register_cvar |          3 | 0.000034 / 0.000006 / 0.000022
   p |                      plugin_init |          1 | 0.000007 / 0.000007 / 0.000007
0 natives, 0 public callbacks, 1 function calls were not executed.
Igual ahora vuelvo a testear, para ver si no hay algo mal.
__________________
Find my plugins here..

Ex - Spanish Moderator.

Last edited by Starsailor; 11-25-2009 at 12:41.
Starsailor is offline
Alucard^
AMXX Moderator: Others
Join Date: Sep 2007
Location: Street
Old 11-25-2009 , 12:36   Re: [ES][TUT] Enums
#7

Por lo que entendi, tu code es mas rapido... pero en lo que respecta rendimiento creo que la diferencia es muy minima, ya que tienen las mismas llamadas, solo varia la velocidad que tampoco es mucha... creo.
__________________
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...
Alucard^ is offline
Send a message via Skype™ to Alucard^
Starsailor
horrible hahah
Join Date: Aug 2008
Location: Buenos Aires
Old 11-25-2009 , 12:41   Re: [ES][TUT] Enums
#8

En realidad es lo mismo, porque hice mas profiles y obtengo los mismos resultados que con mi codigo. No se porque la primera ves me tiro ese valor

Esto es lo que me da ahora con el codigo de fezh:
Code:
date: Wed Nov 25 14:38:51 2009 map: de_dust2_largo
type |                             name |      calls | time / min / max
-------------------------------------------------------------------
   n |                    register_cvar |          3 | 0.000035 / 0.000006 / 0.000023
   p |                      plugin_init |          1 | 0.000009 / 0.000009 / 0.000009
0 natives, 0 public callbacks, 1 function calls were not executed.
__________________
Find my plugins here..

Ex - Spanish Moderator.
Starsailor is offline
Arkshine
AMX Mod X Plugin Approver
Join Date: Oct 2005
Old 11-25-2009 , 12:42   Re: [ES][TUT] Enums
#9

You can get some materials for your tutos.

http://forums.alliedmods.net/showthr...947#post995947 or http://forums.alliedmods.net/showthr...728#post998728
__________________
Arkshine is offline
Alucard^
AMXX Moderator: Others
Join Date: Sep 2007
Location: Street
Old 11-25-2009 , 12:44   Re: [ES][TUT] Enums
#10

@ Starsailor

Ah, ahora si... es lo mismo ><

@ Arkshine

Oh, very good!!! i will add this, thx for the info.
__________________
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...
Alucard^ is offline
Send a message via Skype™ to Alucard^
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 05:51.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode