es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuál es el equivalente de “written out” de una asignación ternaria?

Tengo una estructura que no se puede construir por defecto.
Quiero asignar valores diferentes a un objeto de esa estructura dependiendo de una condición.
Dado que la estructura no se puede construir por defecto, no es posible declarar un objeto no inicializado de la misma.
Sin embargo, es posible hacerlo con un operador ternario:

struct foo {
    foo(int a);
};

foo generateFoo1() {
    return foo(1);
}

foo generateFoo2() {
    return foo(2);
}

int main() {
    bool test = false;

    // compila bien
    foo f = test ? generateFoo1() : generateFoo2();

    // lo siguiente no compila
    foo f2;
    if (test) {
        f2 = generateFoo1();
    } else {
        f2 = generateFoo2();
    }
}

¿Cuál sería un equivalente “expresado por escrito” de la asignación ternaria?
Tengo en mente la simplicidad y la ternaria es como una espina en mi ojo. Me gustaría mantenerlo lo más limpio/legible posible.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La equivalencia de “escritura” de la asignación ternaria sería utilizar una declaración if-else con inicialización del objeto en cada rama:

    bool test = false;
    foo f;
    if (test) {
        f = foo(1);
    } else {
        f = foo(2);
    }
    

    Sin embargo, esto no necesariamente hace que el código sea más legible o más simple que el uso del operador ternario, ya que introduce líneas adicionales y potencialmente hace que el código sea más largo. En última instancia, la elección entre el uso del operador ternario o una instrucción if-else depende de la preferencia personal y del contexto específico del código.

Comments are closed.