¿Cómo reducir el anidamiento de estos condicionales condicionales?

tengo un pequeño problema :D no puedo encontrar las palabras correctas para buscar así que escribí esta pregunta. ¿Cómo consigo esto más corto? Lo sé con esta lógica || pero ¿cómo podría agregar más de 1 en una línea? Gracias por tu tiempo Saludos cordiales John

    bool b = [self NSStringContains:convert contains:@"Input"];
    if (b ==true)
    {
           bool b = [self NSStringContains:convert contains:@"Output"]; 
           if (b ==true)
           {
                     bool b = [self NSStringContains:convert contains:@"statecheck"]; 
                     if (b ==true)
                     {
                     ....
                     }
           }
     }

preguntado el 03 de mayo de 12 a las 20:05

Que es esto NSStringContains:contains: ¿cosa? Ese es un nombre de método horrible; ¿Por qué no usar los métodos de cadena existentes directamente? -

2 Respuestas

En este caso, parece que necesita &&:

if ([self NSStringContains:convert contains:@"Input"] &&
    [self NSStringContains:convert contains:@"Output"] &&
    [self NSStringContains:convert contains:@"statecheck"])
{
   ...
}

Por lo que vale, dado bool b;, if (b==true) siempre es redundante, solo use if (b).

contestado el 03 de mayo de 12 a las 20:05

¿Cómo codifico esto, cuando solo una condición de estas 3 declaraciones debe ser correcta? - John

@John: No estoy seguro de lo que estás preguntando. ¿Quieres decir que quieres algo como if (..."Input") xxx else if (..."Output) yyy else if (..."statecheck") zzz; ? - ataúd de jerry

Probablemente algo como esto:

bool hasInput = [self NSStringContains:convert contains:@"Input"];
bool hasOutput = [self NSStringContains:convert contains:@"Output"];
bool hasStatecheck = [self NSStringContains:convert contains:@"statecheck"];
if (hasInput && hasOutput && hasStatecheck)
{
}

Lo que está usando es, "si esta condición, entonces verifique esta condición y esta condición", etc. Puede juntarlos con un AND lógico, denotado por el &&.

contestado el 03 de mayo de 12 a las 20:05

¿No es perder pasos? si el primero es falso, no necesita verificar los siguientes casos. Cuando la primera condición falla en (x && y && z), el resto no se verificará y se guardarán los dos pasos de las operaciones: Manchar

@ D3mon-1stVFW Eso es cierto, en ese tipo de rendimiento que se necesita, entonces la solución de Jerry es mejor. Escribiría el código para que sea legible primero. - vcsjones

Exactamente. Lo escribiría así antes, y en el caso inusual de que esto resulte ser un cuello de botella en el rendimiento, reescriba sin las variables. - Elland

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.