[Guia] PPSR - Estandarizar tu código.

Aprende lo que no sabes de este lenguaje y encuentra herramientas y códigos útiles.

Moderador: Ayudantes

Reglas del Foro
  • Si tu código es corto, no crees un tema nuevo para liberarlo, publica un mensaje en el tema [Funciones] ¡Publica tu código aquí!.
  • Si creas una guía, debes explicar el código claramente. Evita poner la explicación en forma de comentarios dentro del mismo y no olvides utilizar el BBCode correspondiente: [Pawn]Código aquí[/Pawn].
  • No postear códigos sin probar. Publicar códigos con errores (que impidan compilar el script para el cual está destinado) en este apartado es motivo de sanción.
  • Si tu código necesita plugins, includes u otros códigos adicionales para funcionar, debes mencionarlo en el mensaje.
  • Si has utilizado códigos de otros autores, recuerda colocar los créditos correspondientes. (El plagio es motivo de sanción).
  • Si tu aporte es para un GameMode en específico, debes publicar el tema en el apartado "Guías y Aportes para GameModes específicos".
Responder
Avatar de Usuario
FR0Z3NH34R7
Junior
Junior
Mensajes: 67
Registrado: 10 Jul 2017 13:44
Contactar:
Reputación: 14

25 Feb 2019 14:46

Pawn Programming Standard Recommendation

Presenté la idea de crear nuestros estándares para desarrollar código legible y re-utilizable pero no se tomó en serio y recibí preguntas como
¿para que voy a hacer eso si de otra manera compila igual?
los estándares no son obligatorios, y su objetivo es hacer de tu código algo más legible y re-utilizable, veamos unos ejemplos:

I.-Programación en Ingles

El Inglés es el idioma estándar de comunicación en muchos países y de cierta forma es versátil para el uso en programación. Muchos de los lenguajes de programación más populares han sido creados por personas que NO hablan esa lengua, pero se crearon en inglés precisamente para llegar a mucha más gente. Por otra parte los comentarios de nuestro código SI puede estar en otro idioma.


II.- Espaciado

Muchas personas creen que ahorrando los espacios en blanco crean código más optimizado. Ésta es una idea incorrecta ya que el compilador ignora los espacios en blanco fuera de las cadenas.

El bueno uso del espaciado es considerado una buena practica. Véase el siguiente código:

 Codigo Pawno:
1

new number; for(number=0;number<10;number++){printf("%d",number*number+number);}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 1
Compárese con
 Codigo Pawno:
1
2
3
4
5

new number;
for (number= 0; number< 10; number++)
{
   printf("%d", number* number+ number);
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 5
Claramente nuestro código es más legible, ordenado y no afecta al rendimiento.

III.- Nombres de variables apropiadas

Una pieza clave para hacer nuestro código legible es la elección apropiada de los nombres que usamos en nuestras variables. Una variable mal nombrada dificulta la lectura de nuestro código y la comprensión. Véase el siguiente ejemplo:
 Codigo Pawno:
1
2
3
4
5

if(a < 24 && b < 60 && c < 60) {
   return true;
} else {
   return false;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 5
Debido a la elección de los nombres de variable es difícil comprender la función del código. Compárese ahora con la siguiente versión:
 Codigo Pawno:
1
2
3
4
5

if(hours < 24 && minutes < 60 && seconds < 60) {
   return true;
} else {
   return false;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 5
Ahora es más fácil comprender la intención del código.

A.- Defines y constantes

Los nombres de definiciones y constantes deben verse como el siguiente:
 Codigo Pawno:
1

#define TODO_EN_MAYÚSCULAS_CON_GUIONES_BAJOS
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
B.- Funciones y Callbacks

Los nombres de funciones y callbacks deben verse como el siguiente:
 Codigo Pawno:
1

public primeraPalabraEnMinusculasLasDemasConInicialesEnMayusculas()
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Así podremos diferenciarlas de funciones nativas como public OnPlayerConnect( playerid )

C.- Variables globales

Los nombres de variables globales deben verse como el siguiente:
 Codigo Pawno:
1

new todo_en_minúsculas_con_guiones_bajos;
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
D.- Variables locales

Los nombres de variables globales deben verse como el siguiente:
 Codigo Pawno:
1

new _todo_en_minúsculas_con_guion_bajo_al_principio;
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
D.- Arrays

Los nombres de arrays deben verse como el siguiente:
 Codigo Pawno:
1

new InicialesMayusculas[MAX_PLAYERS];
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1

Continuará
ForwardDevs - Desarrollo Web
FAN PAGE
+54 9 11 4144 9924
https://www.forwarddevs.com

¡Buscamos personal!

TomiiJuegah
Aprendiz
Aprendiz
Mensajes: 308
Registrado: 26 Nov 2015 10:15
Ubicación: Chile
Contactar:
Reputación: 5

25 Feb 2019 15:25

muy buena, ojalá llegue a más gente para que dejen de poner códigos mal organizados, otra mala práctica es el pragma tabsize 0 en gamemodes :p
Avatar de Usuario
FR0Z3NH34R7
Junior
Junior
Mensajes: 67
Registrado: 10 Jul 2017 13:44
Contactar:
Reputación: 14

26 Feb 2019 12:44

TomiiJuegah escribió:
25 Feb 2019 15:25
otra mala práctica es el pragma tabsize 0 en gamemodes
Muy cierto, eso va en la regla de Espaciado, luego lo pondré y seguiré con otras reglas.
ForwardDevs - Desarrollo Web
FAN PAGE
+54 9 11 4144 9924
https://www.forwarddevs.com

¡Buscamos personal!

Avatar de Usuario
Graber
Ayudante
Ayudante
Mensajes: 194
Registrado: 10 Abr 2016 19:16
Contactar:
Reputación: 22

26 Feb 2019 16:03

Ya existe algo asi, y me guio de esto:
https://github.com/TradeWars/gamemode/b ... e-Guide.md
Imagen

No doy soporte por privado y no estoy disponible para ningún trabajo/proyecto/lo que sea. Eviten MPs de ese tema

Avatar de Usuario
FR0Z3NH34R7
Junior
Junior
Mensajes: 67
Registrado: 10 Jul 2017 13:44
Contactar:
Reputación: 14

26 Feb 2019 17:47

Graber escribió:
26 Feb 2019 16:03
Ya existe algo asi, y me guio de esto:
https://github.com/TradeWars/gamemode/b ... e-Guide.md
¿Te guías por la documentación de un GM? Espero que sea broma.
ForwardDevs - Desarrollo Web
FAN PAGE
+54 9 11 4144 9924
https://www.forwarddevs.com

¡Buscamos personal!

Avatar de Usuario
Graber
Ayudante
Ayudante
Mensajes: 194
Registrado: 10 Abr 2016 19:16
Contactar:
Reputación: 22

27 Feb 2019 08:12

FR0Z3NH34R7 escribió:
26 Feb 2019 17:47
Graber escribió:
26 Feb 2019 16:03
Ya existe algo asi, y me guio de esto:
https://github.com/TradeWars/gamemode/b ... e-Guide.md
¿Te guías por la documentación de un GM? Espero que sea broma.
No es un estándar pero es una buena guía de estilo, la andaban pasando el mismo Southclaws por los foros a pesar de ser parte de la documentación. Antes no existía nada asi y no le veía nada de malo asi que la empezé a usar. No tiene muchas diferencias con tu recomendación despues de todo.
Imagen

No doy soporte por privado y no estoy disponible para ningún trabajo/proyecto/lo que sea. Eviten MPs de ese tema

Avatar de Usuario
TheGamerVici0
Aprendiz
Aprendiz
Mensajes: 27
Registrado: 18 Ago 2018 12:05
Ubicación: Cordoba
Contactar:
Reputación: 2

28 Feb 2019 20:45

FR0Z3NH34R7 escribió:
25 Feb 2019 14:46
Pawn Programming Standard Recommendation

Presenté la idea de crear nuestros estándares para desarrollar código legible y re-utilizable pero no se tomó en serio y recibí preguntas como
¿para que voy a hacer eso si de otra manera compila igual?
los estándares no son obligatorios, y su objetivo es hacer de tu código algo más legible y re-utilizable, veamos unos ejemplos:

I.-Programación en Ingles

El Inglés es el idioma estándar de comunicación en muchos países y de cierta forma es versátil para el uso en programación. Muchos de los lenguajes de programación más populares han sido creados por personas que NO hablan esa lengua, pero se crearon en inglés precisamente para llegar a mucha más gente. Por otra parte los comentarios de nuestro código SI puede estar en otro idioma.


II.- Espaciado

Muchas personas creen que ahorrando los espacios en blanco crean código más optimizado. Ésta es una idea incorrecta ya que el compilador ignora los espacios en blanco fuera de las cadenas.

El bueno uso del espaciado es considerado una buena practica. Véase el siguiente código:

 Codigo Pawno:
1

new number; for(number=0;number<10;number++){printf("%d",number*number+number);}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 1
Compárese con
 Codigo Pawno:
1
2
3
4
5

new number;
for (number= 0; number< 10; number++)
{
   printf("%d", number* number+ number);
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 5
Claramente nuestro código es más legible, ordenado y no afecta al rendimiento.

III.- Nombres de variables apropiadas

Una pieza clave para hacer nuestro código legible es la elección apropiada de los nombres que usamos en nuestras variables. Una variable mal nombrada dificulta la lectura de nuestro código y la comprensión. Véase el siguiente ejemplo:
 Codigo Pawno:
1
2
3
4
5

if(a < 24 && b < 60 && c < 60) {
   return true;
} else {
   return false;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 5
Debido a la elección de los nombres de variable es difícil comprender la función del código. Compárese ahora con la siguiente versión:
 Codigo Pawno:
1
2
3
4
5

if(hours < 24 && minutes < 60 && seconds < 60) {
   return true;
} else {
   return false;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 5
Ahora es más fácil comprender la intención del código.

A.- Defines y constantes

Los nombres de definiciones y constantes deben verse como el siguiente:
 Codigo Pawno:
1

#define TODO_EN_MAYÚSCULAS_CON_GUIONES_BAJOS
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
B.- Funciones y Callbacks

Los nombres de funciones y callbacks deben verse como el siguiente:
 Codigo Pawno:
1

public primeraPalabraEnMinusculasLasDemasConInicialesEnMayusculas()
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Así podremos diferenciarlas de funciones nativas como public OnPlayerConnect( playerid )

C.- Variables globales

Los nombres de variables globales deben verse como el siguiente:
 Codigo Pawno:
1

new todo_en_minúsculas_con_guiones_bajos;
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
D.- Variables locales

Los nombres de variables globales deben verse como el siguiente:
 Codigo Pawno:
1

new _todo_en_minúsculas_con_guion_bajo_al_principio;
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
D.- Arrays

Los nombres de arrays deben verse como el siguiente:
 Codigo Pawno:
1

new InicialesMayusculas[MAX_PLAYERS];
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1

Continuará
Concuerdo en varios aspectos como el primero, el segundo y el tercero, pero el cuarto punto me parece innecesario, ya que agregando guiones bajos y escribir variables en mayúscula pierdes tiempo, un aproximado de 1 a 4 segundo por variable, en mi opinión seria mejor utilizar jorobas de camello ya que es mas cómodo ya que en escribir una sola mayúscula tardas menos tiempo que escribir guiones bajos.
Y el tema de los define para mi seria mejor empezarlos en minúscula y por cada palabra nueva usar la joroba de camello.
Lo de los callbacks me parece perfecto, aunque yo propondría dejar de utilizar callbacks a favor de los Stock's, con el propósito de ahorrar memoria
 Codigo Pawno:
1
2
3
4
5
6
7
8

CMD:habilidades(playerid, params[])
{
SendClientMessage(playerid, -1, "Scripting: "#CROJO"60%");
SendClientMessage(playerid, -1, "Mapper: "#CROJO"10%");
SendClientMessage(playerid, -1, "Webmaster: "#CROJO"40%");
SendClientMessage(playerid, -1, "TS3 Master: "#CROJO"60%");
return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
Aportes

Spoiler:
Filterscripts
[FS] Sistema de Rentas: viewtopic.php?f=81&t=33260
[FS] Animaciones: viewtopic.php?f=81&t=33691&p=167696#p167696

Aportes e Includes
[APORTE] Comando /skin y /skinj: viewtopic.php?f=40&t=32685
[APORTE] Comandos de ROL: viewtopic.php?f=40&t=33690

Guias

Gamemodes
Facebook: https://www.facebook.com/The-Gamer-Vici ... _todo_tour
Youtube: https://www.youtube.com/channel/UCd_As3Z8QLSbsVad6J66dNw
Avatar de Usuario
MrDave
Ayudante
Ayudante
Mensajes: 957
Registrado: 05 Oct 2017 12:13
Reputación: 107

05 Mar 2019 14:11

Spoiler:
TheGamerVici0 escribió:
28 Feb 2019 20:45
FR0Z3NH34R7 escribió:
25 Feb 2019 14:46
Pawn Programming Standard Recommendation

Presenté la idea de crear nuestros estándares para desarrollar código legible y re-utilizable pero no se tomó en serio y recibí preguntas como
¿para que voy a hacer eso si de otra manera compila igual?
los estándares no son obligatorios, y su objetivo es hacer de tu código algo más legible y re-utilizable, veamos unos ejemplos:

I.-Programación en Ingles

El Inglés es el idioma estándar de comunicación en muchos países y de cierta forma es versátil para el uso en programación. Muchos de los lenguajes de programación más populares han sido creados por personas que NO hablan esa lengua, pero se crearon en inglés precisamente para llegar a mucha más gente. Por otra parte los comentarios de nuestro código SI puede estar en otro idioma.


II.- Espaciado

Muchas personas creen que ahorrando los espacios en blanco crean código más optimizado. Ésta es una idea incorrecta ya que el compilador ignora los espacios en blanco fuera de las cadenas.

El bueno uso del espaciado es considerado una buena practica. Véase el siguiente código:

 Codigo Pawno:
1

new number; for(number=0;number<10;number++){printf("%d",number*number+number);}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 1
Compárese con
 Codigo Pawno:
1
2
3
4
5

new number;
for (number= 0; number< 10; number++)
{
   printf("%d", number* number+ number);
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 5
Claramente nuestro código es más legible, ordenado y no afecta al rendimiento.

III.- Nombres de variables apropiadas

Una pieza clave para hacer nuestro código legible es la elección apropiada de los nombres que usamos en nuestras variables. Una variable mal nombrada dificulta la lectura de nuestro código y la comprensión. Véase el siguiente ejemplo:
 Codigo Pawno:
1
2
3
4
5

if(a < 24 && b < 60 && c < 60) {
   return true;
} else {
   return false;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 5
Debido a la elección de los nombres de variable es difícil comprender la función del código. Compárese ahora con la siguiente versión:
 Codigo Pawno:
1
2
3
4
5

if(hours < 24 && minutes < 60 && seconds < 60) {
   return true;
} else {
   return false;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 5
Ahora es más fácil comprender la intención del código.

A.- Defines y constantes

Los nombres de definiciones y constantes deben verse como el siguiente:
 Codigo Pawno:
1

#define TODO_EN_MAYÚSCULAS_CON_GUIONES_BAJOS
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
B.- Funciones y Callbacks

Los nombres de funciones y callbacks deben verse como el siguiente:
 Codigo Pawno:
1

public primeraPalabraEnMinusculasLasDemasConInicialesEnMayusculas()
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Así podremos diferenciarlas de funciones nativas como public OnPlayerConnect( playerid )

C.- Variables globales

Los nombres de variables globales deben verse como el siguiente:
 Codigo Pawno:
1

new todo_en_minúsculas_con_guiones_bajos;
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
D.- Variables locales

Los nombres de variables globales deben verse como el siguiente:
 Codigo Pawno:
1

new _todo_en_minúsculas_con_guion_bajo_al_principio;
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
D.- Arrays

Los nombres de arrays deben verse como el siguiente:
 Codigo Pawno:
1

new InicialesMayusculas[MAX_PLAYERS];
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1

Continuará
Concuerdo en varios aspectos como el primero, el segundo y el tercero, pero el cuarto punto me parece innecesario, ya que agregando guiones bajos y escribir variables en mayúscula pierdes tiempo, un aproximado de 1 a 4 segundo por variable, en mi opinión seria mejor utilizar jorobas de camello ya que es mas cómodo ya que en escribir una sola mayúscula tardas menos tiempo que escribir guiones bajos.
Y el tema de los define para mi seria mejor empezarlos en minúscula y por cada palabra nueva usar la joroba de camello.
Lo de los callbacks me parece perfecto, aunque yo propondría dejar de utilizar callbacks a favor de los Stock's, con el propósito de ahorrar memoria

¿Para que usar usar "stock" en una función? El stock solo hace que la función sea ignorada por el compilador, es decir, no lo compilaría sí la función nunca se llegara a usar/invocar.
Sí haces un INCLUDE FILE para otras personas, ahí sí sería útil usar el prefijo "stock", ya que no sabes que función usarán del include, de lo contrario, se debe emplear una función normal con esta sintaxis:
 Codigo Pawno:
1
2
3
4

mifunción(lista de parámetros)
{
     //código
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 4

Usar una función normal o un callback, gastaran la misma memoria y se ejecutarán en la misma velocidad, así que ni el uno es más rápido que el otro y viceversa.
Así que puedes usar un callback o una función normal, depende del programador.
Se suele usar un callback cuando quieres llamarlo/usarlo desde una biblioteca externa/plugin.

- Temporalmente estoy retirado de SA-MP; por lo tanto no me envíen propuestas de proyectos.
- No respondo dudas por privado, usa la sección de preguntas.
Avatar de Usuario
Felipe_Medina
Junior
Junior
Mensajes: 107
Registrado: 29 Jul 2014 20:18
Ubicación: Colombia
Reputación: 13

10 Mar 2019 10:11

¡Hola! Me parece buena la guía, sobre todo para aquellos que quieren codificar como profesionales. Me hubiese encantado haber estudiado de esto antes, para hacer mis programas más legibles, pero bueno, todo a su debido tiempo. Luego de entrar a la universidad, el profesor me recomendó el siguiente libro, muy útil y estándar para bastantes lenguajes. Se llama código limpio, y es la mejor herramienta para aprender a codificar de manera legible. Por aquí les dejo el link para los que quieran descargarlo (Esta en drive).

Avatar de Usuario
flopjack
Junior
Junior
Mensajes: 293
Registrado: 08 May 2016 20:24
Ubicación: Mexico Guanajuato
Reputación: 18

14 Mar 2019 23:06

Es bueno, solo que te apegas demasiado a los estándares y pues sabes que ultimo lo único que importa es la optimización y claro es importantes si lo compartiras, pero si el codigo es para ti y lo conoces al 100% no creo que sea necesario, bueno en mi humilde opinion,

Que sigue? Diagramas de casos de usos y etc -tongue ?
¿Necesitas ayuda? Mándame MP te resolveré la duda o apoyare en algún script por medio de MP lo mas rápido posible.
Si te ayude dale +rep
Mis aportes


Sacar provecho de un buen consejo exige más sabiduría que darlo. "John Churton Collins"
Avatar de Usuario
FR0Z3NH34R7
Junior
Junior
Mensajes: 67
Registrado: 10 Jul 2017 13:44
Contactar:
Reputación: 14

07 May 2019 21:40

flopjack escribió:
14 Mar 2019 23:06
Que sigue? Diagramas de casos de usos y etc -tongue ?
Sería lo mejor, personalmente los hago, hasta estructuras de las db (Vease el siguiente)

Imagen
ForwardDevs - Desarrollo Web
FAN PAGE
+54 9 11 4144 9924
https://www.forwarddevs.com

¡Buscamos personal!

Responder