[Tutorial] Una pequeсa idea sobre operadores ternarios
#1

INTRODUCCIУN.
Los operadores ternarios son parte de lo mismo que logra una condicional switch, if, etc .. Pero con caracterнsticas mбs importantes, la sintaxis bбsica para usar el operador es sencilla (es como un binario; verdadero o falso, sin embargo es posible crear mбs de dos clбusulas).

EJEMPLOS.
PHP Code:
new CommandExecuted[MAX_PLAYERS],
    
Variable2[MAX_PLAYERS];
public 
OnPlayerCommandText(playeridcmdtext[])
{
    if (
strcmp("/mycommand"cmdtexttrue10) == 0)
    {
        if(
CommandExecuted)
        {
            
Variable2[playerid] = true;
        }
        else
        {
            
Variable2[playerid] = false;
        }
        return 
1;
    }
    return 
0;

Es lo mismo que:

PHP Code:
public OnPlayerCommandText(playeridcmdtext[])
{
    if (
strcmp("/mycommand"cmdtexttrue10) == 0)
    {
        
Variable2[playerid] = (CommandExecuted) ? (true) : (false);
        return 
1;
    }
    return 
0;

Si "Condiciуn" es verdadera, la segunda expresiуn se ejecuta, o sea remplazando (Si es verdadero), si es falso se ejecuta (Si es falso), si se preguntan las diferencias son sencillas.. "if" es una sentencia, "?" es una expresiуn, con esto no declaro que lo ternario es mejor, porque con el if se pueden usar varias clausulas mientras que en el ternario sуlo se pueden usar dos, їA quй me refieron con clausulas?. a esto:

PHP Code:
public OnPlayerCommandText(playeridcmdtext[])
{
    if (
strcmp("/mycommand"cmdtexttrue10) == 0)
    {
        if(
Condicion == 1)
        {
            
// SI SE CUMPLE EN 1
        
}
        else if(
Condicion == 2)
        {
            
// SI SE CUMPLE EN 2
        
}
        else
        {
            
// SI NO SE CUMPLE NINGUNO
        
}
        return 
1;
    }
    return 
0;

EDIT: Un ejemplo de conversiуn bool a int con ternarios:

PHP Code:
new bool:a0;
    
printf("%d"b); 
OTROS EJEMPLOS:

Por OTACON:

PHP Code:
new data[100];
    
format(data,sizeof(data),"estado: %s",(GetPlayerSkin(playerid)==5) ? ("es gordo") : ("no es gordo"));
    
SendClientMessage(playerid,-1,data);
    
    
format(data,sizeof(data),"estado: %s",(GetPlayerState(playerid)==PLAYER_STATE_DRIVER) ? ("es conductor") : ("no es conductor"));
    
SendClientMessage(playerid,-1,data);
    
    
format(data,sizeof(data),"estado: %s",(GetPlayerWeapon(playerid)==30) ? ("tienes un AK-47") : ("no tienes un AK-47"));
    
SendClientMessage(playerid,-1,data); 
Ejemplo por Fothero:

PHP Code:
new variable;
    ((
variable == 1)?(true):(variable == 2)?(true):(variable == 3)?(true):(false)); 
ADICIONAL.
No sй realmente si es mбs rбpido el ternario que el la condiciуn if, aunque creerнa que sн porque presta atenciуn sуlo a dos clбusulas, aquн unas pruebas de velocidad.

Quote:
Originally Posted by MugiwaraNoLuffy
View Post
[04:20:19] if: 2135
[04:20:20] ternary operator: 1696
[04:22:12] if: 2210
[04:22:14] ternary operator: 1726
[04:23:58] if: 2174
[04:24:00] ternary operator: 1689

Cуdigo:
PHP Code:
public OnGameModeInit()
{
    new 
tick GetTickCount(), rand, var;
    for(new 
i;i<10000000;i++)
    {
        if(
random(2) == 0)
            var = 
0;
        else
            var = 
1;
    }
    
printf("if: %d"GetTickCount()-tick);
    
tick GetTickCount();
    for(new 
i;i<10000000;i++)
    {
        var = (
random(2) == 0) ? 1;
    }
    
printf("ternary operator: %d"GetTickCount()-tick);
    return 
1;

Reply
#2

buen tutorial, no hay muchos de esto y es una buena forma.

buen trabajo,
saludos.

aca otros ejemplo de uso .

Code:
	new data[100];
	format(data,sizeof(data),"estado: %s",(GetPlayerSkin(playerid)==5) ? ("es gordo") : ("no es gordo"));
	SendClientMessage(playerid,-1,data);
	
	format(data,sizeof(data),"estado: %s",(GetPlayerState(playerid)==PLAYER_STATE_DRIVER) ? ("es conductor") : ("no es conductor"));
	SendClientMessage(playerid,-1,data);
	
	format(data,sizeof(data),"estado: %s",(GetPlayerWeapon(playerid)==30) ? ("tienes un AK-47") : ("no tienes un AK-47"));
	SendClientMessage(playerid,-1,data);
Reply
#3

Quote:
Originally Posted by OTACON
View Post
buen tutorial, no hay muchos de esto y es una buena forma.

buen trabajo,
saludos.

aca otros ejemplo de uso .

Code:
	new data[100];
	format(data,sizeof(data),"estado: %s",(GetPlayerSkin(playerid)==5) ? ("es gordo") : ("no es gordo"));
	SendClientMessage(playerid,-1,data);
	
	format(data,sizeof(data),"estado: %s",(GetPlayerState(playerid)==PLAYER_STATE_DRIVER) ? ("es conductor") : ("no es conductor"));
	SendClientMessage(playerid,-1,data);
	
	format(data,sizeof(data),"estado: %s",(GetPlayerWeapon(playerid)==30) ? ("tienes un AK-47") : ("no tienes un AK-47"));
	SendClientMessage(playerid,-1,data);
Gracias, allн aсadн tu ejemplo.
Reply
#4

Lindo tutorial, saludos.
Reply
#5

Lo bueno es que la velocidad y la optimizacion mejoran muchнsimo
Reply
#6

Esto

Code:
if(Condicion == 1)
    {
        // SI SE CUMPLE EN 1
    }
    else if(Condicion == 2)
    {
        // SI SE CUMPLE EN 2
    }
    else 
    {
        // SI NO SE CUMPLE NINGUNO
    }
їSe puede hacer con switch?
Reply
#7

Quote:
Originally Posted by Fornew
View Post
Esto

Code:
if(Condicion == 1)
    {
        // SI SE CUMPLE EN 1
    }
    else if(Condicion == 2)
    {
        // SI SE CUMPLE EN 2
    }
    else 
    {
        // SI NO SE CUMPLE NINGUNO
    }
їSe puede hacer con switch?
Si, y seria mas veloz.

Code:
switch(Condicion)
{
case 1:{} // SI SE CUMPLE EN 1
case 2:{} // SI SE CUMPLE EN 2
default:{} // NO SE CUMPLEN
}
Reply
#8

Quote:
Originally Posted by Parka
View Post
Si, y seria mas veloz.

Code:
switch(Condicion)
{
case 1:{} // SI SE CUMPLE EN 1
case 2:{} // SI SE CUMPLE EN 2
default:{} // NO SE CUMPLEN
}
Muchas gracias amigo, es que estoy tratando de optimizar mi gm.
Reply
#9

Aqui dejo un ejemplo de multiples condiciones con el operador ternario.

Code:
new variable;
	((variable == 1)?(true):(variable == 2)?(true):(variable == 3)?(true):(false));
Muy buen tutorial Zume-Zero.

Un saludo.
Reply
#10

Quote:

No sй realmente si se compila y ejecuta mбs rбpidamente el ternario que el if, aunque creerнa que sн porque presta atenciуn sуlo a dos clбusulas pero en esto no podrнa asegurarles, espero haber sido de ayuda.

Obviamente se compila y funciona mas rбpido.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)