їEs malo йsto...?
#1

Hola,
Quisiera saber si es malo usar la funciуn stock para cosas asн por ejemplo:

Quote:

stock ActualizarCuenta(playerid)
{
new Float,Float:y,Float:z,skin,interior,vw;
GetPlayerPos(playerid,x,y,z); vw = GetPlayerVirtualWorld(playerid);
skin = GetPlayerSkin(playerid);
PlayerInfo[playerid][jPosX] = x; PlayerInfo[playerid][jPosY] = y; PlayerInfo[playerid][jPosZ] = z; interior = GetPlayerInterior(playerid);
PlayerInfo[playerid][jInt] = interior; PlayerInfo[playerid][jVW] = vw; PlayerInfo[playerid][jSkin] = skin;
GetPlayerWeaponData(playerid, 0, PlayerInfo[playerid][jArmaID1], PlayerInfo[playerid][jBalas1]);
GetPlayerWeaponData(playerid, 1, PlayerInfo[playerid][jArmaID2], PlayerInfo[playerid][jBalas2]);
GetPlayerWeaponData(playerid, 2, PlayerInfo[playerid][jArmaID3], PlayerInfo[playerid][jBalas3]);
GetPlayerWeaponData(playerid, 3, PlayerInfo[playerid][jArmaID4], PlayerInfo[playerid][jBalas4]);
GetPlayerWeaponData(playerid, 4, PlayerInfo[playerid][jArmaID5], PlayerInfo[playerid][jBalas5]);
GetPlayerWeaponData(playerid, 5, PlayerInfo[playerid][jArmaID6], PlayerInfo[playerid][jBalas6]);
GetPlayerWeaponData(playerid, 6, PlayerInfo[playerid][jArmaID7], PlayerInfo[playerid][jBalas7]);
GetPlayerWeaponData(playerid, 7, PlayerInfo[playerid][jArmaID8], PlayerInfo[playerid][jBalas8]);
GetPlayerWeaponData(playerid, 8, PlayerInfo[playerid][jArmaID9], PlayerInfo[playerid][jBalas9]);
GetPlayerWeaponData(playerid, 9, PlayerInfo[playerid][jArmaID10], PlayerInfo[playerid][jBalas10]);
return 1;
}

Y otros stocks que sуlo los utilizo para setear muchas variables y eso, si es malo, їtendrнa que usar el forward & public y por quй?, gracias por leer.
Reply
#2

Stock es para acortar una funciуn. Public se utiliza para llamar a dicha callback en un tiempo determinado, pero si usas ambos (stock y public) como funciones no hay problema.
Reply
#3

Yo siempre he tenido la misma confusiуn, y aъn la sigo teniendo por lo que voy a decir no es totalmente seguro, segъn tengo entendido la funciуn stock, lo ъnico que hace es no ocupar espacio si no la llaman y no da warning de error al compilar, entonces esta es usada cuando se llama en el script muy pocas veces, en cambio el public es todo lo contrario, y obviamente cuando se usa bastante йsta (Timers), yo aъn sigo con la confusiуn y tambiйn con las funciones planas que son iguales a las public solo que en esta si puedes retornar strings, he leнdo bastante pero aъn sigo con la confusiуn, puedes mirar este post: https://sampforum.blast.hk/showthread.php?tid=341545

En fin en mi opiniуn si es una funciуn que se llama muchas veces ъsala plana:

PHP код:
ActualizarCuenta(playerid)
{
    new 
Float,Float:y,Float:z,skin,interior,vw;
    
GetPlayerPos(playerid,x,y,z); vw GetPlayerVirtualWorld(playerid);
    
skin GetPlayerSkin(playerid);
    
PlayerInfo[playerid][jPosX] = xPlayerInfo[playerid][jPosY] = yPlayerInfo[playerid][jPosZ] = zinterior GetPlayerInterior(playerid);
    
PlayerInfo[playerid][jInt] = interiorPlayerInfo[playerid][jVW] = vwPlayerInfo[playerid][jSkin] = skin;
    
GetPlayerWeaponData(playerid0PlayerInfo[playerid][jArmaID1], PlayerInfo[playerid][jBalas1]);
    
GetPlayerWeaponData(playerid1PlayerInfo[playerid][jArmaID2], PlayerInfo[playerid][jBalas2]);
    
GetPlayerWeaponData(playerid2PlayerInfo[playerid][jArmaID3], PlayerInfo[playerid][jBalas3]);
    
GetPlayerWeaponData(playerid3PlayerInfo[playerid][jArmaID4], PlayerInfo[playerid][jBalas4]);
    
GetPlayerWeaponData(playerid4PlayerInfo[playerid][jArmaID5], PlayerInfo[playerid][jBalas5]);
    
GetPlayerWeaponData(playerid5PlayerInfo[playerid][jArmaID6], PlayerInfo[playerid][jBalas6]);
    
GetPlayerWeaponData(playerid6PlayerInfo[playerid][jArmaID7], PlayerInfo[playerid][jBalas7]);
    
GetPlayerWeaponData(playerid7PlayerInfo[playerid][jArmaID8], PlayerInfo[playerid][jBalas8]);
    
GetPlayerWeaponData(playerid8PlayerInfo[playerid][jArmaID9], PlayerInfo[playerid][jBalas9]);
    
GetPlayerWeaponData(playerid9PlayerInfo[playerid][jArmaID10], PlayerInfo[playerid][jBalas10]);
    return 
1;

Reply
#4

No, no hay nada de malo hacer eso, ni afectara nada - solo te da mejor accesibilidad (stocks). Los publics solamente deberнas usarlos en casos especiales como timers, ya que usan mas memoria.

Lo ъnico que hace stock (aunque no hay diferencia en la velocidad de ejecuciуn entre funciones plenas) es ignorar lo que tiene la palabra clave cuando no se utiliza en ningъn lado del script al compilar. Muchos lo utilizan para buscar la funciуn principal y asн poder editarlo (como yo, por ejemplo).

Funciуn plena:
pawn Код:
Function()
{
    return 1;
}
Tambien, mira esto: http://forum.sa-mp.com/showpost.php?...46&postcount=6
Reply
#5

їPara quй sirve "stock"?
stock se utiliza principalmente para que el compilador no de el tнpico warning ("warning 203: symbol is never used: "X"") cuando algo no se usa, como una funciуn.

Si una funciуn declarada con stock no se usa en el script, a la hora de compilar el compilador la ignorarб y no la incluirб en el archivo compilado (.amx); esto quiere decir que ahorraremos algo de memoria y contribuiremos a la optimizaciуn del script.


Entonces, їcuбndo usar "stock"?
stock nos va a ser muy ъtil a la hora de crear una librerнa (un include) con varias funciones generales, de la cual usaremos una cierta cantidad de funciones; las que no usemos serбn excluidas por el compilador del archivo compilado (.amx).


їCuando usar "public" y "forward"?
forward se usa simplemente para "avisar" de que vas a crear una funciуn public, es como el new en una variable. Una funciуn ha de ser public cuando se dan los siguientes casos:
  • Va a ser llamada mediante SetTimer/SetTimerEx.
  • Va a ser llamada mediante CallLocalFunction/CallRemoteFunction.

їQuй es lo mejor?
Si sobre tu funciуn no se aplica ningъn caso anterior, lo mejor es declarar una funciуn plana, sin stock y sin public. De esta manera podrбs llamar tu funciуn cuando tu quieras y donde quieras sin warnings.

Si tus funciones son muy generales, puedes hacer un .inc e incluir ahн todas las funciones y les pones stock, asн solamente se incluirбn en tu script las que vayas a usar.

NOTA: si tu funciуn va a ser usada solamente en el archivo en el que se declara, podrнas usar static.


Para mбs informaciуn deberнas leerte el manual Pawn.

Un saludo.
Reply
#6

Quote:
Originally Posted by RIDE2DAY
Посмотреть сообщение
їQuй es lo mejor?
Si sobre tu funciуn no se aplica ningъn caso anterior, lo mejor es declarar una funciуn plana, sin stock y sin public. De esta manera podrбs llamar tu funciуn cuando tu quieras y donde quieras sin warnings.
Nope, no hay ninguna diferencia en usar "stock" y nada (desnudo). Muchos utilizan "stock" como un gestor de bъsqueda, y asн poder encontrar la funciуn declarada rбpidamente y mejorar la accesibilidad a la hora de estar programando.

Piensas lo contrario? Tienes pruebas de que es mejor utilizar una funciуn desnudo, que una funciуn con "stock"? Y como dije, es para accesibilidad. Y si no hay ninguna diferencia, entonces para que te haces la vida mas complicada? Intenta programar con funciones desnudos, es bastante difнcil con un script largo y un IDE tan limitado.
Reply
#7

Quote:
Originally Posted by SickAttack
Посмотреть сообщение
Nope, no hay ninguna diferencia en usar "stock" y nada (desnudo). Usar "stock" es muy util para usarlo como un gestor de bъsqueda y asн poder encontrar la funciуn declarada rбpidamente y mejorar la accesibilidad a la hora de estar programando.

Piensas lo contrario? Tienes pruebas de que es mejor utilizar una funciуn desnudo, que una funciуn con "stock"? Y como dije, es para accesibilidad. Y si no hay ninguna diferencia, entonces para que te haces la vida mas complicada?
Sн, pienso lo contrario... stock tiene una finalidad que he explicado mбs arriba, no se ha creado para decorar tu script por el amor al arte.

He visto que sabes inglйs, pбsate por aquн y verбs que no soy el ъnico iluminado.

Que te vaya bien.

Quote:
Originally Posted by Pawn Language Guide
A “stock” function is a function that the pawn parser must “plug into” the program when it is used, and that it may simply “remove” from the program (without warning) when it is not used. Stock functions allow a compiler or interpreter to optimize the memory footprint and the file size of a (compiled) pawn program: any stock function that is not referred to, is completely skipped — as if it were lacking from the source file.
Reply
#8

public son funciones publicas para todas las instancias AMX cargadas, es decir que se pueden ejecutar desde cualquier lado (se "exportan"). Son mas lentas, se buscan por el nombre. No hay diferencias de rendimiento entre la funcion desnuda o con stock solo en tiempo de compilaciуn (una da warning cuando no es usada, mientras que la otra no)
Reply
#9

Quote:
Originally Posted by RIDE2DAY
Посмотреть сообщение
Sн, pienso lo contrario... stock tiene una finalidad que he explicado mбs arriba, no se ha creado para decorar tu script por el amor al arte.

He visto que sabes inglйs, pбsate por aquн y verбs que no soy el ъnico iluminado.

Que te vaya bien.
Esperaba que revelaras ese tema, y como vez, yo tambiйn estuve ahн.

Obviamente, no leнste lo que puso Jay_ (Utiliza ****** Traductor si quieres).
Quote:
Originally Posted by Jay_
Посмотреть сообщение
There are a couple of points in this topic that I disagree with.

Is there any evidence to suggest the use of stock has any impact on the code or performance whatsoever?

It was highlighted in a previous post that prefixing functions with "stock" is useful for searchability which is an important thing when we have such limited IDE's for PAWN.
Yes, you can add preprocesser defines for "function", but if the use of stock doesn't make a difference, why bother? Also, "function" is a very broad term - what about callbacks or mutator methods?
Y la evidencia de que es mejor? No tienes? Entonces, no puedes decir que es mejor, cuando nomas estas complicбndote la vida buscando la funciуn para editarlo.

Quote:

A “stock” function is a function that the pawn parser must “plug into” the program when it is used, and that it may simply “remove” from the program (without warning) when it is not used. Stock functions allow a compiler or interpreter to optimize the memory footprint and the file size of a (compiled) pawn program: any stock function that is not referred to, is completely skipped — as if it were lacking from the source file.

Eso es lo que tambiйn hace "stock", ignorar lo que no se usa - no tiene nada que ver con lo otro.
Reply
#10

Quote:
Originally Posted by SickAttack
Посмотреть сообщение
Esperaba que revelaras ese tema, y como vez, yo tambiйn estuve ahн.

Obviamente, no leнste lo que puso Jay_ (Utiliza ****** Traductor si quieres).


Y la evidencia de que es mejor? No tienes? Entonces, no puedes decir que es mejor, cuando nomas estas complicбndote la vida buscando la funciуn para editarlo.
No tengo problemas de inglйs, de todas formas, si lo que quieres es encontrar una funciуn... haz un include.

El uso de "stock" es mбs bien una cosa moral, si se ha creado para no incluir funciones/variables/etc. que no van a ser usadas en el .amx, їpor quй iba a usar stock en algo que sн voy a usar? Podrнa, yo no dije que no, pero no serнa lo normal... yo no me considero anormal.

Como ves, es algo que depende de cada quiйn, yo opino igual que Vince y el Pawn Language Guide.
Quote:
Originally Posted by Pawn Language Guide
A typical use of stock functions, hence, is in the creation of a set of “library” functions. A collection of general purpose functions, all marked as “stock” may be put in a separate include file, which is then included in any pawn script. Only the library functions that are actually used get “linked” in.
Respecto a lo que dijo Jay_
Quote:
Originally Posted by Jay_
[...]is an important thing when we have such limited IDE's for PAWN.
Hoy en dнa existen varios editores que resuelven este problema.


Ya que me has hecho ir a la quinta pбgina del tema... te lo digo yo tambiйn.
Quote:
Originally Posted by Infinity
Посмотреть сообщение
Seems the point of this thread went right over your head...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)