13.01.2014, 15:12
Hola, quiero saber, їcuбndo va un static o new?.
public OnPlayerConnect(playerid)
{
static conexiones_totales;
conexiones_totales += 1;
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
conexiones_totales += 1;
// El compilador mostrarб un error porque esta variable global solo se puede manipular dentro de OnPlayerConnect.
return 1;
}
if (x)
{
static st_a;
new a;
// PRIMER БMBITO, EL NIVEL SUPERIOR
if (y) {
static st_b;
new b;
// SEGUNDO БMBITO, SUPERIOR A if (z) e INFERIOR A if (x)
if (z)
{
static st_c;
new c;
// TERCER Y ULTIMO БMBITO (EN ESTE CASO), INFERIOR A TODOS LOS БMBITOS (if (x) e if (y))
}
}
}
El static va cuando quieres que una variable sea global pero solo se pueda usar dentro de cierto lugar. Por ejemplo, una variable que quieres que mantenga su valor pero no quieres que sea accesible fuera de OnPlayerConnect
pawn Код:
La palabra new, en cambio, hace que la variable exista dentro del bloque donde se creу. Si la comparamos con static podremos observar que las static son globales restringidas a un бmbito (ellas existen fuera del бmbito aunque no son accesibles a niveles superiores) y las new son locales y por lo tanto NO EXISTEN fuera de su бmbito (pierden su valor cuando la ejecuciуn del script va a un bloque de cуdigo superior). Esto suena bastante complicado pero en realidad no lo es, solo requiere leer un poco sobre que es un бmbito y que significa local y global. pawn Код:
|
Hola, їcуmo andas?, bueno, casi, no entendн nada, їpodrнas ser mбs explicativo? :/.
|
public OnPlayerConnect(playerid)
{
static string[128];
if(playerid == 0)
{
format(string, sizeof string, "Hola jugador id %d", playerid);
}
SendClientMessage(playerid, 0xFF0000FF, string);
return 1;
}
static mantiene su valor anterior. Por ejemplo:
pawn Код:
Supongamos que entra el jugador id 0, se cumple la condiciуn y le mandarнa el mensaje "Hola jugador id 0". Luego entra el jugador id 1, el jugador id 1, tambiйn va a recibir el mensaje "Hola jugador id 0" porque el contenido de la variable string no se borro ya que es una static. Si string fuera una variable new, no almacena su valor y se borra al terminar la ejecuciуn de OnPlayerConnect, al llamarse de nuevo la variable se crearнa de nuevo y su valor se reiniciaria, por lo que enviarнa un mensaje en vacнo. Esto sucede porque las variables new se almacenan en stack/heap, es decir, es memoria dinбmica, se crea, se usa y se libera, en cambio las static se utiliza memoria estбtica ya que no se borran y permanecen durante toda la ejecuciуn del script. Las static globales, es decir, que no estбn dentro de ninguna callback o funciуn, solo pueden usarse en ese archivo que fue declarada y no en los includes. |