Domanda

Dati i seguenti modi di dire:

1)

variable = value1
if condition
  variable = value2

2)

variable = value2
if not condition
  variable = value1

3)

if condition
  variable = value2
else
  variable = value1

4)

if not condition
  variable = value1
else
  variable = value2

Quale preferisci e perché?

Partiamo dal presupposto che il percorso di esecuzione più comune sia quello in cui condition è falso.

Tendo a imparare ad usare 1), anche se non sono esattamente sicuro del perché mi piaccia di più.

Nota: i seguenti esempi potrebbero essere più semplici & # 8212; e quindi forse più leggibili & # 8212; ma non tutte le lingue forniscono tale sintassi e non sono adatte per estendere l'assegnazione di variabili per includere più di una istruzione in il futuro.

variable = condition ? value2 : value1
...
variable = value2 if condition else value1
È stato utile?

Soluzione

In teoria, preferisco il n. 3 in quanto evita di dover assegnare un valore alla variabile due volte. Nel mondo reale, sebbene io usi uno dei quattro precedenti che sarebbe più leggibile o esprimerebbe più chiaramente la mia intenzione.

Altri suggerimenti

Preferisco il metodo 3 perché è più conciso e un'unità logica. Imposta il valore solo una volta, può essere spostato come un blocco e non è soggetto a errori (ciò accade, specialmente nel metodo 1 se impostazione su valore1 e verifica e facoltativamente impostazione su valore2 sono separati da altre dichiarazioni)

3) è l'espressione più chiara di ciò che vuoi che accada. Penso che tutti gli altri richiedano qualche riflessione extra per determinare quale valore finirà nella variabile.

In pratica, userei l'operatore ternario (? :) se usassi una lingua che lo supportasse. Preferisco scrivere in stile funzionale o dichiarativo sull'imperativo ogni volta che posso.

Tendo a usare # 1 molto da solo. if condition è più facile di if! condition , specialmente se ti manca acidamente il '!', almeno secondo me almeno.

La maggior parte della codifica che faccio è in C #, ma tendo comunque a stare alla larga dall'operatore terniario, a meno che non stia lavorando con (principalmente) variabili locali. Le linee tendono ad allungarsi MOLTO rapidamente in un operatore ternario se stai chiamando tre strati in profondità in una struttura, il che riduce rapidamente di nuovo la leggibilità.

  

Nota: i seguenti esempi potrebbero essere più semplici & # 8212; e quindi probabilmente più leggibili & # 8212; ma non tutte le lingue forniscono tale sintassi

Questo non è un argomento per non usarli in lingue che forniscono tale sintassi. Per inciso, ciò include tutte le lingue correnti correnti dopo il mio ultimo conteggio.

  

e non sono adatti per estendere l'assegnazione di variabili per includere più di un'istruzione in futuro.

Questo è vero. Tuttavia, è spesso certo che tale estensione non avrà mai luogo, poiché la condizione genererà sempre uno dei due casi possibili.

In tali situazioni preferirò sempre la variante di espressione rispetto alla variante di istruzione perché riduce il disordine sintattico e migliora l'espressività. In altre situazioni tendo ad andare con l'istruzione switch menzionata prima di & # 8211; se la lingua consente questo utilizzo. In caso contrario, tornare al generico se .

Anche l'istruzione

switch funziona. Se è semplice e più di 2 o 3 opzioni, è quello che uso.

In una situazione in cui la condizione potrebbe non verificarsi. Vorrei andare con 1 o 2. Altrimenti è solo basato su ciò che voglio che faccia il codice. (es. sono d'accordo con cruiser)

Tendo a usare se non ... return.

Ma questo è se stai cercando di restituire una variabile. Rimuovere le squalificazioni per prima cosa tende a renderlo più leggibile. Dipende molto dal contesto della dichiarazione e anche dalla lingua. Un'istruzione case potrebbe funzionare meglio ed essere leggibile per la maggior parte del tempo, ma le prestazioni soffrono sotto VB, quindi una serie di istruzioni if ??/ else ha più senso in quel caso specifico.

Metodo 1 o metodo 3 per me. Il metodo 1 può evitare un'entrata / uscita extra dell'ambito, ma il metodo 3 evita un'assegnazione aggiuntiva. Tenderei ad evitare il Metodo 2 mentre cerco di mantenere la logica delle condizioni il più semplice possibile (in questo caso, il! È estraneo in quanto potrebbe essere riscritto come Metodo 1 senza di esso) e lo stesso motivo vale per il Metodo 4.

Dipende da quale condizione sto testando.

Se si tratta di una condizione di flag di errore, userò 1) l'impostazione del flag di errore per rilevare l'errore e quindi se la condizione ha esito positivo deselezionate il flag di errore. In questo modo non è possibile perdere una condizione di errore.

Per tutto il resto userei 3)

La logica NOT aggiunge solo confusione durante la lettura del codice - bene nella mia testa, non posso parlare per chiunque altro :-)

Se la variabile ha un valore predefinito naturale andrei con # 1. Se uno dei due valori è ugualmente (in) appropriato per un valore predefinito, andrei con # 2.

Dipende. Mi piacciono gli operatori ternari, ma a volte è più chiaro se usi un'istruzione 'if'. Quale delle quattro alternative che scegli dipende dal contesto, ma tendo a cercare qualunque cosa renda più chiara la funzione del codice e che varia da situazione a situazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top