SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Español/Spanish

 
 
Thread Tools Display Modes
Old 16/09/2017, 06:45 PM   #1
iSanchez
Huge Clucker
 
Join Date: Nov 2014
Posts: 260
Reputation: 4
Question Operador IF: multiple en una linea

Hola, tengo una pregunta, ¿Hay forma de hacer lo siguiente?

Code:
if(PlayerData[playerid][level] != LEVEL_ADMIN | LEVEL_VIP | LEVEL_MOD)
{
     return 0;
}
¿Es posible hacer que PlayerData[playerid][level] pueda verificar si no es igual a los 3 valores en una misma linea sin necesidad de hacer esto?

Code:
if(PlayerData[playerid][level] != LEVEL_ADMIN && PlayerData[playerid][level] != LEVEL_VIP && PlayerData[playerid][level] != LEVEL_MOD)
{
     return 0;
}
Gracias
iSanchez is offline  
Old 16/09/2017, 06:57 PM   #2
Unrea1
Gangsta
 
Unrea1's Avatar
 
Join Date: Oct 2013
Location: Venezuela
Posts: 866
Reputation: 123
Default Re: Operador IF: multiple en una linea

Podrías usar switch y ir directamente al valor que quieres que se ejecute la función.

PHP Code:
switch(PlayerData[i][level])
{
    case 
LEVEL_ADMINLEVEL_VIPLEVEL_MOD:
    {
        
/* Funciones */
        
return true;
    }
    default: return 
false;

Unrea1 is offline  
Old 16/09/2017, 08:09 PM   #3
iSanchez
Huge Clucker
 
Join Date: Nov 2014
Posts: 260
Reputation: 4
Default Respuesta: Re: Operador IF: multiple en una linea

Quote:
Originally Posted by Unrea1 View Post
Podrías usar switch y ir directamente al valor que quieres que se ejecute la función.

PHP Code:
switch(PlayerData[i][level])
{
    case 
LEVEL_ADMINLEVEL_VIPLEVEL_MOD:
    {
        
/* Funciones */
        
return true;
    }
    default: return 
false;

La idea era ahorrar código en una linea xd.

¿No hay otra forma?
iSanchez is offline  
Old 16/09/2017, 08:14 PM   #4
Unrea1
Gangsta
 
Unrea1's Avatar
 
Join Date: Oct 2013
Location: Venezuela
Posts: 866
Reputation: 123
Default Re: Operador IF: multiple en una linea

¿Crees que con ahorrar líneas irá más rápido?, ja.

Haz las pruebas de velocidad y mira qué es más rápido, si el if/else if o switch.
Unrea1 is offline  
Old 16/09/2017, 08:42 PM   #5
iSanchez
Huge Clucker
 
Join Date: Nov 2014
Posts: 260
Reputation: 4
Default Respuesta: Re: Operador IF: multiple en una linea

Quote:
Originally Posted by Unrea1 View Post
¿Crees que con ahorrar líneas irá más rápido?, ja.

Haz las pruebas de velocidad y mira qué es más rápido, si el if/else if o switch.
Yo no mencione la velocidad, ja. (xD)

Lo quiero en una linea para editar más rápido el código en caso de ser necesario y para que pueda ser mas legible para mi, más práctico.

.-.
iSanchez is offline  
Old 16/09/2017, 08:48 PM   #6
Unrea1
Gangsta
 
Unrea1's Avatar
 
Join Date: Oct 2013
Location: Venezuela
Posts: 866
Reputation: 123
Default Re: Respuesta: Re: Operador IF: multiple en una linea

Quote:
Originally Posted by iSanchez View Post
Yo no mencione la velocidad, ja. (xD)

Lo quiero en una linea para editar más rápido el código en caso de ser necesario y para que pueda ser mas legible para mi, más práctico.

.-.
PHP Code:
IsAdminValid(playeridlevel)
{
    switch(
PlayerData[playerid][level]) 
    { 
        case 
LEVEL_ADMINLEVEL_VIPLEVEL_MOD
        { 
            return 
true
        } 
        default: return 
false
    }  
}

// ** Uso:

if (IsAdminValid(playeridLEVEL_ADMIN))
{
    return 
true;
}
else
    return 
false
También puedes eliminar el tag "level" para que identifique de una vez si pertenece a los niveles que quieras personalizar.
Unrea1 is offline  
Old 16/09/2017, 09:29 PM   #7
realgantzyo
Little Clucker
 
Join Date: Sep 2017
Posts: 1
Reputation: 0
Default Re: Operador IF: multiple en una linea

Code:
if(PlayerData[playerid][level] != LEVEL_ADMIN || LEVEL_VIP || LEVEL_MOD)
{
     return 0;
}
Usá el operador || para ver comprobar distintos valores.
realgantzyo is offline  
Old 17/09/2017, 01:19 AM   #8
x3378
Little Clucker
 
Join Date: Jul 2015
Posts: 33
Reputation: 10
Default Respuesta: Operador IF: multiple en una linea

Quote:
Originally Posted by Unrea1 View Post
¿Crees que con ahorrar líneas irá más rápido?, ja.

Haz las pruebas de velocidad y mira qué es más rápido, si el if/else if o switch.
Es necesario mencionar que la diferencia entre uno y otro, son micro-segundos, todos estos operadores funcionan en menos tiempo del que te imaginas, básicamente no tiene sentido la velocidad en esta situación.

Quote:
Originally Posted by Unrea1 View Post
IsAdminValid(playerid, level)..

También puedes eliminar el tag "level" para que identifique de una vez si pertenece a los niveles que quieras personalizar.
Sería "IsValidAdmin" y utilizar una función extra para saber si es administrador o no; es un consejo que él debería tomar, sin embargo también podrías ahorrar más lineas o también podría utilizar el operador IF de otra manera.


Método #1 (Agregar una función para comprobar si tiene un nivel (o mayor)


Code:
bool:IsValidAdmin(playerid, admin_level) // La función (devuelve true si tiene nivel)
{
	if (PlayerData[playerid][level] >= admin_level) return true;
	return false;
}

if (IsValidAdmin(playerid, level)) // Así serían tus condiciones
{
}
Método #2 (Utilizar el operador IF rápido y sencillo)

Code:
if (!(1 <= PlayerData[playerid][level] <= 10))
{
    //  No es nivel 1 a 10, sólo cambiarías los números (1 por el nivel menor y 10 por el nivel mayor)
}


// Y podrías utilizarlo así
if (!(LEVEL_VIP <= PlayerData[playerid][level] <= LEVEL_ADMIN))
    return SendClientMessage(playerid, 0xFFFFFFFF, "ERROR: No eres un miembro VIP o Administrador");

Last edited by x3378; 17/09/2017 at 01:52 AM.
x3378 is offline  
 

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[Ajuda] Operador bit-a-bit NOT Rodney Francalim Português/Portuguese 1 23/01/2015 05:16 PM
[Ajuda] Operador == PetterAdriano Português/Portuguese 6 12/10/2014 02:48 AM
[Tutorial] Operador & ipsBruno Lançamentos/Releases 18 21/06/2012 04:18 PM
[AJUDA]Operador! gcoder Português/Portuguese 22 14/04/2012 04:22 PM


All times are GMT. The time now is 03:43 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.