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

[ES][TUT] Utilizacion de variables estaticas


  
 
 
Thread Tools Display Modes
Author Message
Javivi
AlliedModders Donor
Join Date: Dec 2008
Old 11-29-2009 , 05:37   [ES][TUT] Utilizacion de variables estaticas
#1

TRADUCCION DE ESTE POST DE HAWK552
http://forums.alliedmods.net/showthread.php?t=40340



Que es una variable estatica ? Es basicamente una variable global que solo puede ser llamada por la funcion en la que esta declarada.

Esto significa:

PHP Code:
#include <amxmodx>
#include <amxmisc>

public plugin_init()
{
    
register_plugin("The Internet","Has","Spoken")
    
    
fnDoFunc()
    
iNum 2
}

fnDoFunc()
{
    static 
iNum
    iNum 
1

Esto NO es valido. Por qué?. Porque la variable estatica esta declarada en fnDoFUnc, no en el plugin_init.

El ejemplo anterior no revela el verdadero poder de las variables estaticas. Si vas a ponerla en 0 despues de usarla, usa el operador "new". Declarar una variable "new" no es una operacion dificil, simplifica el ponerla a 0.

Pero, ¿que puede hacer una variable estatica?

Aqui un ejemplo de las variables "static" vs "new":

Static
PHP Code:
#include <amxmodx>
#include <amxmisc>

public plugin_init()
    
register_plugin("The Internet","Has","Spoken")

public 
client_connect(id)
{
    static 
szName[33]
    
    
get_user_name(id,szName,32)
    
client_print(0,print_chat,"the matrix has %s",szName)

New
PHP Code:
#include <amxmodx>
#include <amxmisc>

public plugin_init()
    
register_plugin("The Internet","Has","Spoken")

public 
client_connect(id)
{
    new 
szName[33]
    
get_user_name(id,szName,32)
    
client_print(0,print_chat,"the matrix has %s",szName)

Pero por qué la variable estatica es mas rapida? Porque la memoria no es creada cada vez que se necesita, si no que queda guardada, muchas de las variables globales nunca pierden su valor ni despues de usarlas en una funcion.


Por ejemplo, este es el log del server:

Static
Code:
  variable static iniciada
  
  Hawk552 entra al server
  client_connect es llamado
  la variable estatica ya existe
  obtenemos el nombre
  mostramos el nombre
  
  *5 minutes mas tarde*
  
  zomg entra al server
  client_connect es llamado
  la variable estatica ya existe, pero tiene el valor "Hawk552\0..."
  obtenemos el nombre -> ahora quedaria como "zomg\052\0...", de todas formas del /0 en adelante no se lee, asi que no importa el 52.
  mostramos el nombre
New
Code:
  Hawk552 entra al server
   client_connect es llamado
  variable new iniciada
   obtenemos el nombre
   mostramos el nombre
  
  *5 minutos mas tarde*
  
  zomg entra al server
    client_connect es llamado
   variable new iniciada
    obtenemos el nombre
    mostramos el nombre
Y esto es basicamente el porque las variables estaticas son útiles.


PD: Una de sus mejores utilidades son cosas como esta
PHP Code:
static szName[33]
get_user_name(idszName32

Saludos,


Javivi.
__________________
Javivi is offline
01101101
BANNED
Join Date: Nov 2009
Location: 9`su 09`n0n7e`r0f76a
Old 11-29-2009 , 13:34   Re: [ES][TUT] Utilizacion de variables estaticas
#2

Lo mas importante que tenes que decir es que no sirve cuando tenes que hacer funciones recursivas.
01101101 is offline
Old 11-29-2009, 13:37
Raddish
This message has been deleted by Raddish. Reason: fail 4ever
uFairyMadaFaka
BANNED
Join Date: Nov 2009
Old 11-29-2009 , 13:37   Re: [ES][TUT] Utilizacion de variables estaticas
#3

en las static se guarda el valor con el que quedo?
uFairyMadaFaka is offline
01101101
BANNED
Join Date: Nov 2009
Location: 9`su 09`n0n7e`r0f76a
Old 11-29-2009 , 13:38   Re: [ES][TUT] Utilizacion de variables estaticas
#4

@ Raddish

Se utiliza static igual que new nada mas que no podes poner , para crear multiples variables.

@ ufairy...

No no se guarda, se resetea en el momento que dice static, pero nunca se borra, esa es la diferencia.
01101101 is offline
Raddish
BANNED
Join Date: Jul 2008
Location: Argentina
Old 11-29-2009 , 13:42   Re: [ES][TUT] Utilizacion de variables estaticas
#5

Osea mira

PHP Code:
public asd(id)
{
   static 
asd[33]
   
asd 1
   
switch (g_ammopacks[id])
   {
           case 
10asd 5
   
}

Se puede?
Raddish is offline
01101101
BANNED
Join Date: Nov 2009
Location: 9`su 09`n0n7e`r0f76a
Old 11-29-2009 , 13:44   Re: [ES][TUT] Utilizacion de variables estaticas
#6

Quote:
Originally Posted by Raddish View Post
Osea mira

PHP Code:
public asd(id)
{
   static 
asd[33]
   
asd 1
   
switch (g_ammopacks[id])
   {
           case 
10asd 5
   
}

Se puede?
@Raddish
Obvio que si, porque no?
No no se puede porque no indicas el index del array.
01101101 is offline
Raddish
BANNED
Join Date: Jul 2008
Location: Argentina
Old 11-29-2009 , 13:46   Re: [ES][TUT] Utilizacion de variables estaticas
#7

Ah me olvide de poner [id] bueno.. la cuestion era esa.
ponele.
cuando se ejecuta el public asd, desde ya tenga 1 punto. entonces si tiene 10 ammopacks pasaria a tener 5.
No? XD
Raddish is offline
01101101
BANNED
Join Date: Nov 2009
Location: 9`su 09`n0n7e`r0f76a
Old 11-29-2009 , 13:49   Re: [ES][TUT] Utilizacion de variables estaticas
#8

Quote:
Originally Posted by Raddish View Post
Ah me olvide de poner [id] bueno.. la cuestion era esa.
ponele.
cuando se ejecuta el public asd, desde ya tenga 1 punto. entonces si tiene 10 ammopacks pasaria a tener 5.
No? XD
No, esa variable no deberia ser un array. No se porque creas un array, eso salio de tu imaginacion
01101101 is offline
Raddish
BANNED
Join Date: Jul 2008
Location: Argentina
Old 11-29-2009 , 13:49   Re: [ES][TUT] Utilizacion de variables estaticas
#9

Exacto.
Raddish is offline
Alucard^
AMXX Moderator: Others
Join Date: Sep 2007
Location: Street
Old 11-29-2009 , 16:31   Re: [ES][TUT] Utilizacion de variables estaticas
#10

Quote:
Originally Posted by 01101101 View Post
@ Raddish

Se utiliza static igual que new nada mas que no podes poner , para crear multiples variables.
Con "multiples variables" te referis a hacer:

Code:
static variable1, variable2, variable 3

no?
__________________
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 01:43.


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