Molti semplici operatori ternari e uno if else, quale dovrei usare?

2

Ad esempio, supponiamo di avere un ascoltatore di pulsanti di attivazione e che abbia alcune attività da svolgere in base allo stato di attivazione:

stile 1: usa molti operatori ternari:

tutorialModeToggle(isTutorialOn){
    SoundUtility.play(isTutorialOn?"s1.mp3":"s2.mp3");
    this.titleLabel.setString(isTutorialOn?"(Tutorial Mode)":"");
    this.tutorialLayout.opacity=isTutorialOn?255:128;
    isTutorialOn?this.playAnimation1():this.playAnimation2();
    .
    .
    .
}

style 2: usa un singolo if-else:

tutorialModeToggle(isTutorialOn){
    if(isTutorialOn){
        SoundUtility.play("s1.mp3");
        this.titleLabel.setString("(Tutorial Mode)");
        this.tutorialLayout.opacity=255;
        this.playAnimation1();
        .
        .
        .
    }else{
        SoundUtility.play("s2.mp3");
        this.titleLabel.setString("");
        this.tutorialLayout.opacity=128;
        this.playAnimation2()
        .
        .
        .
    }
}

Quale dovrei usare?

Nota: non sto chiedendo di

Operatore ternario considerato dannoso?

L'operatore ternario dovrebbe essere utilizzato al di fuori delle istruzioni di assegnazione?

perché sono circa UN operatore ternario VS ONE if-else, ma sto chiedendo di MOLTI operatori ternari contro UNO se-else.

Inoltre non sto chiedendo di

Stile per il controllo del flusso con controlli di convalida

perché quella domanda riguarda il controllo delle condizioni MULTIPLE ma sto chiedendo un controllo di condizione UNO

    
posta mmmaaa 23.11.2018 - 11:03
fonte

3 risposte

5

La tua lingua lo supporta, ti suggerisco una terza via: usa una tupla o l'equivalente della tua lingua. Ciò evita la necessità della ripetizione del codice con if/else ed evita di testare isTutorialOn più volte:

tutorialModeToggle(isTutorialOn) {
    (sound, title, opacity, playAnimation) = isTutorialOn
        ? ("s1.mp3", "(Tutorial Mode)", 255, this.playAnimation1)
        : ("s2.mp3", "", 128, this.playAnimation2);

    SoundUtility.play(sound);
    this.titleLabel.setString(title);
    this.tutorialLayout.opacity = opacity;
    playAnimation();
    .
    .
    .
}
    
risposta data 23.11.2018 - 11:12
fonte
5

Questo è completamente arbitrario. Quando hai una griglia di n × m elementi, non è importante se li ordini dal primo asse o dal secondo asse nella griglia. Qui, i tuoi due assi sono:

  1. Se la condizione è vera o falsa.
  2. Le diverse impostazioni interessate dalla condizione.

Poiché la scelta è arbitraria, potrebbe essere meglio mantenere le cose correlate vicine . Ma se le impostazioni all'interno di una condizione oi due valori di un'impostazione sono più strettamente correlati, è principalmente la tua opinione.

Nota che se consideri la distinzione della condizione più importante, potresti essere in grado di evitare la condizione usando tecniche orientate agli oggetti. Per esempio. è possibile utilizzare lo State Pattern per passare dalla modalità normale alla modalità tutorial, confrontare anche la tecnica di refactoring "replace conditionals with polymorphism".

    
risposta data 23.11.2018 - 11:17
fonte
1

Dovresti usare if / else . Valuta solo una volta il bool, che non è solo una giovane vittoria in termini di prestazioni, ma rende anche il tuo codice più robusto di fronte alle condizioni della gara.

E nonostante i recenti contraccolpi contro il codice imperativo, un% non innestato di baseif / else è facile da leggere e facile da mantenere e più facile da eseguire il debug, anche per i programmatori principianti.

    
risposta data 15.12.2018 - 02:10
fonte

Leggi altre domande sui tag