Burgershot
  • Home
  • Members
  • Team
  • Help
  • Search
  • Register
  • Login
  • Home
  • Members
  • Help
  • Search
Burgershot Other languages Spanish/Español Programación [GUÍA] Usos de switch.

 
  • 0 Vote(s) - 0 Average
[GUÍA] Usos de switch.
klays
Offline

i like dogs
Posts: 53
Threads: 2
Joined: Apr 2019
Reputation: 1
Location: chile
#1
2019-04-14, 03:19 AM (This post was last modified: 2019-04-15, 10:29 PM by klays. Edit Reason: se agregan sugerencias y arreglos de comentarios. )
switch, usos.


Para Variables globales.

Primero hay que tener una variable creada, para testear puedes probar con esto:
PHP Code:
new randomnumber = random(4); 

Luego de eso creamos el switch, puede ser llamado cuando se ejecute un comando, por ejemplo.
PHP Code:
switch(randomnumber)
{
    case 0: print("el numero es 0.");
    case 1: print("el numero es 1.");
    case 2: print("el numero es 2.");
    case 3: print("el numero es 3.");
    default: print("el número no es reconocido.");
} 

Esto significará, si la variable (randomnumber) es igual a x (el número aleatorio de 0 a 3) imprimirá cierto valor (print).

Para variables del jugador.

Primero hay que crear la variable:
PHP Code:
new variable[MAX_PLAYERS]; 

Luego de eso, el switch, puede ser llamado desde un comando, por ejemplo:
PHP Code:
switch(variable[playerid])
{
    case 0:
    {
        SendClientMessage(playerid, -1, "tu variable es 0.");
        // resto de código en caso de ser necesario.
    }
    case 1:
    {
        SendClientMessage(playerid, -1, "tu variable es 1.");
        // resto de código en caso de ser necesario.
    }
    case 2:
    {
        SendClientMessage(playerid, -1, "tu variable es 2.");
       // resto de código en caso de ser necesario.
    }
    default:
    {
        SendClientMessage(playerid, -1, "...");
        // resto de código en caso de ser necesario.
    }
} 

En resumen, si la variable (variable) del jugador es igual a x (numero asignado) mendará cierto mensaje y ejecutará cierta función según el case.

default: es llamado cuando ningún case (tras comprobarlos) es igual a la variable, ejemplo:
PHP Code:
new dos = 2;

switch(
dos)
{
    case 0: print("numero 0.");
    case 1: print("numero 1.");
    case 2: print("numero 2.");
    case 3: print("numero 3.");
    default: print("numero x");
} 

En el ejemplo anterior la variable es igual a 2, por lo tanto ejecutará el case 2, en resumen imprimirá numero 2 en la consola, pero en el siguiente ejemplo:
PHP Code:
new dos = 2;

switch(
dos)
{
    case 0: print("numero 0.");
    case 1: print("numero 1.");
    default: print("numero x");
} 

la variable es igual a dos, dentro del switch no hay ningún case con valor 2 por lo tanto se ejecutará el default. Por lo tanto imprimirá: numero x en la consola.

Para resumir default es invocado cuando ningún case cumple con la variable.

__

Rangos de comprobaciones.

Para números consecutivos: puedes comprobar más de un (1) solo número en el case (definimos case como: case: 1, etcétera) con:
PHP Code:
case 1 .. 4: // resto del código. 

Un ejemplo para esto es lo siguiente:
PHP Code:
new variable = random(51);

switch(
variable)
{
    case 1 .. 10: print("el numero está entre el 1 al 10.");
    case 11 .. 20: print("el numero está entre el 11 al 20.");
    case 21 .. 30: print("el numero está entre el 21 al 30.");
    case 31 .. 40: print("el numero está entre el 31 al 40.");
    case 41 .. 50: print("el numero está entre el 41 al 50.");
    default: print("el numero esta en un rango del 0 al 50.");
} 

(créditos/idea: autorojo) | En resumen, si la variable se establece en un número entre 1 y 10 imprimirá: el número está entre el 1 al 10 y así consecutivamente dependiendo del case. En caso de que ninguno esté en lo correcto se ejecutará default.

Para números distintos: puedes comprobar distintos números que no estén de forma consecutiva de la siguiente forma:
PHP Code:
case 1, 3, 7: // resto del código. 
Para explicar, si la variable es igual a 1, 3 ó 7 será ejectuada la función que esta contenga, ejemplo:
PHP Code:
new variable = random(10);

switch(
variable)
{
    case 1, 3, 7: print("el numero puede ser 1, 3 o 7.");
    case 2, 4, 6: print("el numero puede ser 2, 4 o 6.");
    default: print("el numero puede ser 0 o 5.");
} 

Para resumir, el case 1, 3, 7 se ejecutarán si el número aleatorio es igual a cualquiera de esos 3 y así con los demás, caso contrario se ejecutará el default (número 0 y 5, los restantes).

__

post en edición.
Faith Hills Role-Play
Faith Hills, juego de rol
WEBSITE: fhrp.me
Mugsy Away

Desarollador
Posts: 171
Threads: 10
Joined: Apr 2019
Reputation: 0
Location: Spain
#2
2019-04-14, 10:09 AM
mola, pero creo q esta en la sección equivocada
[Image: oN9R4KR.gif]
G0NZ4L0
Offline

Burgershot Member
Posts: 98
Threads: 10
Joined: Apr 2019
Reputation: 0
Location: Colombia - LocalHost
#3
2019-04-14, 03:43 PM
Pues es la única sección española del foro así que toca publicar por acá, está buena la guia, respect + (sonido de misión superada del San Andreas)
Latam Roleplay {Proximámente}
Latinoamérica {Presente}
Erziok
Offline

Comunidad Latinoamerica [BURGERSHOT]
Posts: 29
Threads: 1
Joined: Apr 2019
Reputation: 0
#4
2019-04-14, 03:47 PM
Buena guía, muy útil la información.


[Image: OJBf7gI.jpeg]











Keizer
Offline

Comunidad LatinoAmerica [BURGERSHOT]
Posts: 60
Threads: 3
Joined: Apr 2019
Reputation: 0
Location: Argentina
#5
2019-04-15, 01:43 AM
Buena guia pero deberian hacer Secciones xD
#Fede
Offline

Burgershot Member
Posts: 12
Threads: 1
Joined: Apr 2019
Reputation: 0
Location: Montevideo, Uruguay
#6
2019-04-15, 04:48 AM
Esta bien, pero en la parte del switch podrias explicar el uso de default y por cierto, el random(3) nunca llegara a 3, simplemente va del 0 al 2.
Graber
Offline

open.mp Developer

Posts: 31
Threads: 4
Joined: Feb 2019
Reputation: 6
Location: Germany
#7
2019-04-15, 12:48 PM
Los ejemplos están algo bien, pero todo eso se podría resumir con format sin tener que usar switch, si se trata de simples mensajes:

PHP Code:
new randomnumber = random(3);
printf("El numero es %d", randomnumber);

// [...]

new variable[MAX_PLAYERS];

// [...]

new string[144];
format(string, sizeof string, "tu variable es %d.", variable[playerid]);
SendClientMessage(playerid, -1, string); 
Autorojo
Offline

Burgershot Member
Posts: 9
Threads: 0
Joined: Apr 2019
Reputation: 0
#8
2019-04-15, 03:19 PM
Está bien, es una guía básica, pero creo que falla en varios aspectos.

(2019-04-14, 03:19 AM)klays Wrote: Primero hay que tener una variable creada, para testear puedes probar con esto:
PHP Code:
new randomnumber = random(3); 

Luego de eso creamos el switch, puede ser llamado cuando se ejecute un comando, por ejemplo.
PHP Code:
switch(randomnumber)
{
    case 0: print("el numero es 0."); 
    
case 1: print("el numero es 1.");
    case 2: print("el numero es 2.");
    case 3: print("el numero es 3.");
} 

Esto significará, si la variable (randomnumber) es igual a x (el número aleatorio de 0 a 3) imprimirá cierto valor (print).

En caso de hacer un random(3), los resultados irán del 0 al 2 (inclusive), es decir: 0, 1 ó 2. Por lo tanto el "case 3" nunca será ejecutado.

No hacés mención al caso "default" ni enseñás la posibilidad de incluir más de un valor en un solo caso:

Code:
new rand = random(20);

switch(rand)
{
    case 0..4: // lo mismo que hacer 0, 1, 2, 3, 4
        print("El número aleatorio es un número entre cero y cuatro, inclusive.");

    case 5:
        print("El número aleatorio es cinco.");

    case 6, 7, 8, 9, 10: // lo mismo que hacer 6..10
        print("El número aleatorio es un número entre seis y diez, inclusive.");

    default: // ninguno de los casos es verdadero
        print("El número aleatorio es menor a cero o mayor a diez.");
}

Es posible expresarlo de otro modo obteniendo el mismo resultado:

Code:
new rand = random(20);

if(rand >= 0 && rand <= 4)
    print("El número aleatorio es un número entre cero y cuatro, inclusive.");
else if(rand == 5)
    print("El número aleatorio es cinco.");
else if(rand == 6 || rand == 7 || rand == 8 || rand == 9 || rand == 10)
    print("El número aleatorio es un número entre seis y diez, inclusive.");
else
    print("El número aleatorio es menor a cero o mayor a diez.");

Pruébese: https://fiddle.sa-mp.dev/GastronomicalUnchangedIbisbill

Es válido expresarlo de ambas formas aunque, evidendentemente, utilizar un switch donde corresponde siempre es más ordenado que utilizar un if.

Otra cosa: dividís variables "globales" y variables "del jugador". Hasta donde yo sé, las variables se pueden dividir en globales (que están fuera de una función) y locales (que están dentro de una función). No existen las variables del jugador. Una variable expresada como "gPlayerInfo[MAX_PLAYERS]" es un array con un espacio equivalente al máximo de jugadores (MAX_PLAYERS). Naturalmente, se utilizaría para guardar información relacionada a determinado jugador, pero eso no hace que deje de ser una variable global. A menos, claro, que esté declarada dentro de una función.
klays
Offline

i like dogs
Posts: 53
Threads: 2
Joined: Apr 2019
Reputation: 1
Location: chile
#9
2019-04-15, 10:09 PM (This post was last modified: 2019-04-15, 10:30 PM by klays.)
(2019-04-15, 04:48 AM)#Fede Wrote: Esta bien, pero en la parte del switch podrias explicar el uso de default y por cierto, el random(3) nunca llegara a 3, simplemente va del 0 al 2.

la estaré editando.
Gracias por la corrección, error mío.

__

@Graber, lo sé, eran ejemplos en el primer caso.

__

@autorojo: gracias por las correcciones, la estaré editando.

guía actualizada ^^
Faith Hills Role-Play
Faith Hills, juego de rol
WEBSITE: fhrp.me
MaikPlay_YT
Offline

Burgershot Member
Posts: 9
Threads: 0
Joined: Apr 2019
Reputation: 0
#10
2019-04-15, 10:44 PM
Linda para los programadores aprendices, buen trabajo.
DarkThinking
Offline

Burgershot Member
Posts: 3
Threads: 1
Joined: May 2019
Reputation: 0
Location: TU VIEJA 2019
#11
2019-05-30, 04:55 PM (This post was last modified: 2019-05-30, 04:57 PM by DarkThinking.)
Util, pero te falta explicar:

->Que los switch solo son numéricos (integers).

->Que no es necesario usar un random.

ejemplo:

Code:
new i[MAX_PLAYERS];

i[playerid]++;
new string[12];
switch(i[playerid])
{
     case 1: string = "I = 1";
     case 2: string = "I = 2";
     case 3: string = "I = 3";
     case 4 .. 5: string = "I = 4 o 5";
}

y que es la forma mas optimizada de hacer todos
Code:
if(isnull(var))
{
}
else if(var == 1)
{
}
....
Markski
Offline

Burgershot Clerk

Posts: 127
Threads: 6
Joined: Apr 2019
Reputation: 5
Location: La Plata, Argentina
#12
2019-05-30, 04:57 PM (This post was last modified: 2019-05-30, 05:00 PM by Markski.)
(2019-05-30, 04:55 PM)DarkThinking Wrote: ->Que los switch solo son numéricos (integers).

No necesariamente, un switch puede iterar sobre cualquier elemento byte como lo es un char

se puede hacer case 'a': | case 'b': etc
Website
« Next Oldest | Next Newest »



  • View a Printable Version
  • Subscribe to this thread
Forum Jump:

© Burgershot - Powered by our Community and MyBB Original Theme by Emerald

Linear Mode
Threaded Mode