[Guía] Declaraciones(assert | break | continue | else +)[P1]

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
gless
Avanzado
Avanzado
Mensajes: 448
Registrado: 22 Oct 2017 04:10
Ubicación: Soy de una casa versátil.
Reputación: 28

22 Nov 2017 15:06

Imagen

Buenas, Invitado les traigo está guía para se identifiquen un poco en las declaraciones ya qué es CLAVE Para el lenguaje pawn.. a continuación aquí les dejo el indice..

PARTE UNO: HABLAREMOS DE:


  • 1 assert
  • 2 break
  • 3 case
  • 4 continue
  • 5 default
  • 6 do
  • 7 else
  • 8 exit
  • 9 for

assert

- Aborta la ejecución con un error de tiempo de ejecución si la expresión se evalúa como lógicamente falsa. Parece que solo funciona en el bloque principal (). La instrucción assert debe usarse para indicar un error lógico (del programador), nunca un error en tiempo de ejecución (del usuario).

EJEMPLO:
 Codigo Pawno:
1
2
3
4

main()
{
assert (MAX_PLAYERS == GetMaxPlayers()); // comprobar que la definición de MAX_PLAYERS es igual a la cantidad real de ranuras de servidor en uso
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 4
break

- Se rompe al instante, solo sale del bucle de nivel superior, no de todos los bucles actuales.

EJEMPLO:
 Codigo Pawno:
1
2
3
4
5
6
7
8

for (new i = 0; i < 10; i++)
{
	printf("%d", i);
	if (i == 5)
	{
		break;
	}
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 8
Producira:
 Codigo Pawno:
1
2
3
4
5
6

0
1
2
3
4
5
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 6
Mientras qué este:
 Codigo Pawno:
1
2
3
4
5
6
7
8

for (new i = 0; i < 10; i++)
{
	if (i == 5)
	{
		break;
	}
	printf("%d", i);
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 8
Producirá:
 Codigo Pawno:
1
2
3
4
5

0
1
2
3
4
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 5
A medida que el ciclo se cierra al instante, ninguno de los bucles llega a 10 y el segundo finaliza antes de que se imprima el número 5...

case

- Maneja un resultado específico en una declaración de cambio. El resultado puede ser un número único, una selección de números o un rango de números:.

EJEMPLO:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

new
	switchVar = 10;
switch (switchVar)
{
	case 1:
	{
		printf("switchVar is 1");
	}
	case 4:
	{
		printf("switchVar is 4");
	}
	case 2, 3, 5:
	{
		printf("switchVar is either 2, 3 or 5");
	}
	case 7 .. 11:
	{
		printf("switchVar is somewhere between 7 and 11 inclusive (7, 8, 9, 10 or 11)");
	}
	default:
	{
		printf("switchVar is not 1, 2, 3, 4, 5, 7, 8, 9, 10 or 11");
	}
}
  Cantidad de llaves: Abiertas(6)-Cerradas(6) | Lineas Totales: 25
continue

- Similar a la ruptura, pero solo pasa a la siguiente iteración de bucle. Es importante tener en cuenta que el punto en el que salta varía según el tipo de bucle que utilice.
 Codigo Pawno:
1
2
3
4
5
6
7
8

for (new i = 0; i < 10; i++)
{
	if (i == 5)
	{
		continue;
	}
	printf("%d", i);
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 8
Producira:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9

0
1
2
3
4
6
7
8
9
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 9
Una continuación después de la impresión básicamente no hará nada. En un bucle for, continue salta a la tercera instrucción en la instrucción for (en este ejemplo, el bit "i ++;"), esto es diferente de cómo se comporta en un ciclo while:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11

new
	i = 0;
while (i < 10)
{
	if (i == 5)
	{
		continue;
	}
	printf("%d", i);
	i++;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 11
Esto producirá un bucle infinito ya que continue saltará a DESPUÉS del "i ++". y regresara a la parte "while (i <10)". En este momento, "i" seguirá siendo 5 como "i ++;" nunca se llamó, por lo que continue se volverá a llamar y "i" quedará estancado en 5 para siempre.

default

- Es el valor predeterminado maneja los resultados de la declaración de cambio que no son manejados explícitamente por las declaraciones de casos. Vea el ejemplo del case para un ejemplo.

do

- Es un tipo de bucle que se puede usar con while para producir un bucle que siempre se ejecutará al menos una vez. Tenga en cuenta el punto y coma después de while () en el siguiente ejemplo:
 Codigo Pawno:
1
2
3
4
5
6
7
8

 new
	i = 10;
do
{
	printf("%d", i);
	i++;
}
while (i < 10); 
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
"i" claramente no es menos de 10, pero este ciclo producirá:
 Codigo Pawno:
1

 10 
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
De todas formas. El ciclo while similar:
 Codigo Pawno:
1
2
3
4
5
6
7

new
	i = 10;
while (i < 10)
{
	printf("%d", i);
	i++;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 7
No dará ningún resultado ya que la condición falla al instante.
Estos también son útiles para evitar las verificaciones dobles:

 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12

new
	checkVar = 10;
if (checkVar == 10)
{
	new
		i = 0;
	while (checkVar == 10)
	{
		checkVar = someFunction(i);
		i++;
	}
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 12

Esto no es obviamente un problema importante, pero está comprobando checkVar dos veces en rápida sucesión al comienzo del ciclo, lo cual es bastante inútil, sin embargo, si es necesario ya que necesita hacer código si la condición es verdadera pero fuera del ciclo ( esta es una situación bastante común). Esto se puede mejorar haciendo: [/pawn]

 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13

 "text-strong">new
	checkVar = 10;
if (checkVar == 10)
{
	new
		i = 0;
	do
	{
		checkVar = someFunction(i);
		i++;
	}
	while (checkVar == 10);
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 13



En este caso, el resultado será exactamente el mismo, pero de forma crucial con un control menos inútil


else

- else se invoca cuando falla una instrucción if (suponiendo que esté presente):

 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10

"text-strong">new
checkVar = 5;
if (checkVar == 10)
{
	printf("Esto nunca se llamará");
}
else
{
	printf("La instrucción if falló, así que esto se mostrará");
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 10


-
else también se puede combinar con if:

 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14

"text-strong">new
	checkVar = 2;
if (checkVar == 1)
{
	printf("Esto no será llamado"):
}
else if (checkVar == 2)
{
	printf("El primero si falló así que el segundo fue verificado y es verdadero");
}
else
{
	printf("Esto no se llamará ya que uno de los ifs fue verdadero");
}
  Cantidad de llaves: Abiertas(3)-Cerradas(3) | Lineas Totales: 14


exit

Esto sale del programa actual al instante.

 Codigo Pawno:
1
2
3
4
5

"text-strong">main()
{
    exit;
    return 0;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 5


for

Un bucle for es un tipo de bucle que involucra tres etapas, inicialización, comparación y actualización. Cada uno de ellos está separado por un punto y coma (Wink y cada uno puede ser excluido simplemente configurando un espacio en blanco. El más básico para el ciclo es:

 Codigo Pawno:
1

"text-strong">for ( ; ; ) {}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 1


Esto no tiene inicialización, no hay comparación y no hay actualización y, como resultado, será para siempre (la comparación, al estar ausente, se establece de forma predeterminada en verdadero).
Uno de los bucles más comunes es:

 Codigo Pawno:
1
2
3
4

"text-strong">for (new i = 0; i < MAX_PLAYERS; i++)
{
	printf("%d", i);
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 4


La inicialización en este ciclo es:

 Codigo Pawno:
1

"text-strong">new i = 0
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1


-
El punto y coma marca el final de la inicialización. Esto declara una nueva variable, llamada i, que solo se puede usar con este ciclo. La siguiente comparación está hecha. Esto compara i con MAX_PLAYERS (por defecto 500 - vea #define) y si es menor continúa. Luego se ejecuta el contenido del bucle. Inicialmente esto imprimirá "0". Finalmente, la actualización se hace "i ++", esto aumenta el valor de i. Ahora se realiza una iteración completa, el bucle se repite, como su nombre lo indica, y vuelve a la etapa de comparación (la inicialización solo se realiza una vez por llamada).
El resultado de este ciclo es que se están imprimiendo todos los números del 0 al 499 inclusive. El ciclo while equivalente (ignorando los efectos de continuar) sería:

 Codigo Pawno:
1
2
3
4
5
6
7

 "text-strong">new
	i = 0;
while (i < MAX_PLAYERS)
{
	printf("%d", i);
	i++;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 7


Las tres etapas se pueden hacer mucho más complejas si es necesario usando comas para la primera y la última sección y comparaciones estándar para la sección intermedia:

 Codigo Pawno:
1
2
3
4

"text-strong">for (new i = 0, j = 200; i < MAX_PLAYERS && j > 10; i++, j -= 2)
{
	printf("%d %d", i, j);
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 4


Esto creará dos nuevas variables y las establecerá en 0 y 200, luego bucle, mientras que una es menor que 200 y la otra es mayor que 10, aumentando una cada vez y disminuyendo la otra por dos cada vez.
Como se dijo antes, el alcance de las variables se limita al ciclo por lo general;

 Codigo Pawno:
1
2
3
4
5

"text-strong">for (new i = 0; i < MAX_PLAYERS; i++)
{
	printf("%d", i);
}
printf("%d", i);
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 5


Eso producirá un error ya que "i" no existe después de que termine el ciclo. Sin embargo:

 Codigo Pawno:
1
2
3
4
5
6
7

"text-strong">new
	i = 0;
for ( ; i < MAX_PLAYERS; i++)
{
	printf("%d", i);
}
printf("%d", i);
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 7


Está bien ya que "i" no está declarado en el ciclo. También puede inicializar "i" en el ciclo pero no declararlo allí:

 Codigo Pawno:
1
2
3
4
5
6
7

"text-strong">new
	i;
for (i = 0; i < MAX_PLAYERS; i++)
{
	printf("%d", i);
}
printf("%d", i);
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 7
Productor músical
Programador
Editor Gráfico
Compositor
Cantante
Editor Audiovisual
AMX Booster
Mastering
Webmaster
Scripter
Y odioso, jeje..

Perdí mi facebook, cualquier problema hablarme por privado..

Liberaciones y aportes qué recuerdo.....

[AFK System Pause]: Ir a el sistema
[Pawno y sus funciones] [GUÍA]: Ir a la guía
[Include easyDialog]: Ir a la librería
Tunear vehículo vía comando]: Ir a el sistema
Include foreach: Ir a la librería
Declaraciones ¡RECOMENDADO!: Ir a la guía
Depuraciones y crasheos ¡RECOMENDADO! Ir a la guía
Ordenador policial para OZ: Ir al aporte
Cambiar personaje cómo GTA V: Ir al filterscript
Gamemode Stories of Sa: Ir al gamemode
Mensajes aleatorios: Ir al aporte
Sistema de administración BÁSICO: Ir a el sistema
Modifica tu servidor desde un comando: Ir al aporte
Mapa VC Para GTA.. Ir al aporte

"Pensemos en la modalidad de ayudar al prójimo y no en la competencia.."


Avatar de Usuario
MrDave
Ayudante
Ayudante
Mensajes: 1010
Registrado: 05 Oct 2017 12:13
Reputación: 112

22 Nov 2017 15:59

Muy buena guía, me gusto mucho y me hizo recordar viejas cosas, aunque me había gustado que explicaras la deducción de la instrucción de repetición for que consistía que argumentos del ciclo se ejecutaban primero.
Ejemplo:
 Codigo Pawno:
1
2
3
4
5

for(int i = 0; i <= 19; i++)
{
printf("%d", i);
print("/n");
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 5
¿Porqué aquí se imprimirían los números del 0 al 19?
Porque en la primera repetición solo se ejecuta el primer argumento y luego el segundo, a partir de la segunda iteración se comienza a leer el tercer parámetro y después la implicación, así sucesivamente hasta que llegue a la ultima repetición.

Es como que yo tenga este loop:
 Codigo Pawno:
1
2
3
4
5

for(int i = 19; i < 19; i++)
{
printf("%d", i);
print("/n");
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 5
¿Este pequeño algoritmo mostraría el valor 19?
Imposible, en la primera repetición se ejecutaría la variable del control y luego la evaluación donde el ciclo va a devolver un resultado de falsedad haciendo que el loop finalice.

Yo te daré un +1 de reputación, aunque usted jamas me ha dado una + 1 de reputación en mis guías/aportes, pero lo haré solo porque te lo mereces, no es tan fácil escribir una guía para las demás personas. -punk

- 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
gless
Avanzado
Avanzado
Mensajes: 448
Registrado: 22 Oct 2017 04:10
Ubicación: Soy de una casa versátil.
Reputación: 28

22 Nov 2017 16:04

Allí está tú +1 para tú reputación N°- 20 galan.. y gracias por comentar!
Productor músical
Programador
Editor Gráfico
Compositor
Cantante
Editor Audiovisual
AMX Booster
Mastering
Webmaster
Scripter
Y odioso, jeje..

Perdí mi facebook, cualquier problema hablarme por privado..

Liberaciones y aportes qué recuerdo.....

[AFK System Pause]: Ir a el sistema
[Pawno y sus funciones] [GUÍA]: Ir a la guía
[Include easyDialog]: Ir a la librería
Tunear vehículo vía comando]: Ir a el sistema
Include foreach: Ir a la librería
Declaraciones ¡RECOMENDADO!: Ir a la guía
Depuraciones y crasheos ¡RECOMENDADO! Ir a la guía
Ordenador policial para OZ: Ir al aporte
Cambiar personaje cómo GTA V: Ir al filterscript
Gamemode Stories of Sa: Ir al gamemode
Mensajes aleatorios: Ir al aporte
Sistema de administración BÁSICO: Ir a el sistema
Modifica tu servidor desde un comando: Ir al aporte
Mapa VC Para GTA.. Ir al aporte

"Pensemos en la modalidad de ayudar al prójimo y no en la competencia.."


Lolito
Mensajes: 222
Registrado: 11 Oct 2017 18:09
Ubicación: Narnia
Reputación: -6

22 Nov 2017 17:46

+1 Muy buena guía -thumbup -thumbup
Avatar de Usuario
gless
Avanzado
Avanzado
Mensajes: 448
Registrado: 22 Oct 2017 04:10
Ubicación: Soy de una casa versátil.
Reputación: 28

22 Nov 2017 20:19

Lolito escribió:
22 Nov 2017 17:46
+1 Muy buena guía -thumbup -thumbup
Muchas gracias por tú deseo, buena noche...
Productor músical
Programador
Editor Gráfico
Compositor
Cantante
Editor Audiovisual
AMX Booster
Mastering
Webmaster
Scripter
Y odioso, jeje..

Perdí mi facebook, cualquier problema hablarme por privado..

Liberaciones y aportes qué recuerdo.....

[AFK System Pause]: Ir a el sistema
[Pawno y sus funciones] [GUÍA]: Ir a la guía
[Include easyDialog]: Ir a la librería
Tunear vehículo vía comando]: Ir a el sistema
Include foreach: Ir a la librería
Declaraciones ¡RECOMENDADO!: Ir a la guía
Depuraciones y crasheos ¡RECOMENDADO! Ir a la guía
Ordenador policial para OZ: Ir al aporte
Cambiar personaje cómo GTA V: Ir al filterscript
Gamemode Stories of Sa: Ir al gamemode
Mensajes aleatorios: Ir al aporte
Sistema de administración BÁSICO: Ir a el sistema
Modifica tu servidor desde un comando: Ir al aporte
Mapa VC Para GTA.. Ir al aporte

"Pensemos en la modalidad de ayudar al prójimo y no en la competencia.."


Avatar de Usuario
MattHudson
Moderador Global
Moderador Global
Mensajes: 1668
Registrado: 31 Oct 2015 18:16
Ubicación: Argentina, Buenos Aires, San Miguel.
Contactar:
Reputación: 89

23 Nov 2017 20:58

Esta bueno que hayas recopilado las declaraciones de este tipo. En varias de mis guías las mencione pero las explicaba muy por encima, si me acuerdo pondré un acceso directo a este tema en ellas.


Saludos,

/MH
Avatar de Usuario
gless
Avanzado
Avanzado
Mensajes: 448
Registrado: 22 Oct 2017 04:10
Ubicación: Soy de una casa versátil.
Reputación: 28

24 Nov 2017 09:45

MattHudson escribió:
23 Nov 2017 20:58
Esta bueno que hayas recopilado las declaraciones de este tipo. En varias de mis guías las mencione pero las explicaba muy por encima, si me acuerdo pondré un acceso directo a este tema en ellas.


Saludos,

/MH
Gracias por tu deseos, vale, perfecto.. -punk -punk
Productor músical
Programador
Editor Gráfico
Compositor
Cantante
Editor Audiovisual
AMX Booster
Mastering
Webmaster
Scripter
Y odioso, jeje..

Perdí mi facebook, cualquier problema hablarme por privado..

Liberaciones y aportes qué recuerdo.....

[AFK System Pause]: Ir a el sistema
[Pawno y sus funciones] [GUÍA]: Ir a la guía
[Include easyDialog]: Ir a la librería
Tunear vehículo vía comando]: Ir a el sistema
Include foreach: Ir a la librería
Declaraciones ¡RECOMENDADO!: Ir a la guía
Depuraciones y crasheos ¡RECOMENDADO! Ir a la guía
Ordenador policial para OZ: Ir al aporte
Cambiar personaje cómo GTA V: Ir al filterscript
Gamemode Stories of Sa: Ir al gamemode
Mensajes aleatorios: Ir al aporte
Sistema de administración BÁSICO: Ir a el sistema
Modifica tu servidor desde un comando: Ir al aporte
Mapa VC Para GTA.. Ir al aporte

"Pensemos en la modalidad de ayudar al prójimo y no en la competencia.."


Responder