Passa / seleziona caso ecc. rispetto a If ... ElseIf ... Else [duplicate]

0

Non capisco perché il switch o equivalente sia così popolare nelle lingue. Per me, sembra che abbia avuto un posto indietro nei giorni in cui l'alternativa era un sacco di istruzioni% co_de nidificate nella parte if di altre dichiarazioni else . Ora che abbiamo if , perché ne abbiamo bisogno?

Se prendiamo quanto segue:

switch (expr) {
  case "Oranges":
    document.write("Oranges are $0.59 a pound.<br>");
    break;
  case "Apples":
    document.write("Apples are $0.32 a pound.<br>");
    break;
  case "Bananas":
    document.write("Bananas are $0.48 a pound.<br>");
    break;
  default:
    document.write("Sorry, we are out of " + expr + ".<br>");
}

È chiaramente più leggibile di sotto?

if (expr == "Oranges") {
    document.write("Oranges are $0.59 a pound.<br>");
} else {
    if (expr == "Apples") {
        document.write("Apples are $0.32 a pound.<br>");
    } else {
        if (expr == "Bananas") {
            document.write("Bananas are $0.48 a pound.<br>");
        } else {
            document.write("Sorry, we are out of " + expr + ".<br>");
        }
    }
}

Ma com'è più leggibile di:

if (expr == "Oranges") {
    document.write("Oranges are $0.59 a pound.<br>");
} else if (expr == "Apples") {
    document.write("Apples are $0.32 a pound.<br>");
} else if (expr == "Bananas") {
    document.write("Bananas are $0.48 a pound.<br>");
} else {
    document.write("Sorry, we are out of " + expr + ".<br>");
}
    
posta neelsg 20.02.2014 - 10:50
fonte

1 risposta

3

Now we have else if

In molte specifiche del linguaggio, Java è sicuramente tra di loro (dovrei cercare Java * script *), altrimenti se non è una cosa. Hai if (expr) {block} [else statement] dove un'istruzione if è di per sé un'affermazione. Non sono sicuro che ci siano molte lingue in cui l'idea di un "else if" è stata impossibile.

Le istruzioni switch / case hanno avuto origine perché consentivano al compilatore di creare una tabella di salto, consentendo di creare un gran numero di "percorsi" diversi senza dover necessariamente pagare per n confronti. Una tabella di salto può salvare un discreto numero di istruzioni e, una volta, ciò ha davvero importanza. Puoi visualizzare un'istruzione case come etichetta goto anche ora.

In questi giorni le differenze sono meno rilevanti, ma alcuni pensano che l'interruttore / caso mostri meglio l'intento.

Personalmente sono più propenso a concordare con la tua conclusione, che non è necessariamente più leggibile e introduce delle oscillazioni concettuali con un'etichetta del caso che è logicamente un "blocco" ma non effettivamente definito come tale.

    
risposta data 20.02.2014 - 10:59
fonte

Leggi altre domande sui tag