JavaRush /Java Blog /Random-IT /Condizioni di Yoda
MAX
Livello 16
Киров

Condizioni di Yoda

Pubblicato nel gruppo Random-IT
Un breve post è dedicato a tutti gli appassionati di Star Wars e Java/JavaRush in onore del 40° anniversario dell'uscita dell'Episodio V della saga stellare! Condizioni Yoda - 1A volte puoi trovare molte cose interessanti su Internet e l'altro giorno mi sono imbattuto in una pratica di programmazione piuttosto divertente a prima vista chiamata Condizioni Yoda . In breve, le condizioni Yoda (anche notazione Yoda) sono uno stile di programmazione in cui le due parti dell'espressione di confronto familiare nelle istruzioni condizionali sono invertite:
if (5 == a) {
    // do something
}
Questo stile può essere utilizzato in linguaggi con sintassi simile al C, molto spesso in espressioni con ife while.
if (0 == variable) {
    // do something
}

while (false == endingCondition) {
    // do something
}
Perché spostare l'espressione costante sul lato sinistro dell'operatore di confronto? Assumiamo una situazione ipotetica in cui, dopo una maratona di visione di tutte le nove e sei parti della Saga, noi, senza dormire, ci siamo seduti per scrivere del codice per il nostro progetto preferito e abbiamo scritto quanto segue:
void checkNumber(int a)
{
    if (a = 13) // Здесь-то и появляется так называемый unexpected behavior!
    {
        printf("Number is 13");
    }
}
In questo caso, ogni volta che eseguirai il programma, riceverai la stringa Number is 13", indipendentemente dall'argomento passato аal metodo checkNumber(int a). Questo non è quello che ci aspettavamo! Gli errori logici possono verificarsi abbastanza spesso tra i programmatori alle prime armi (credetemi, lo so). Ma in fase di compilazione, un codice come 13 = a produrrà un errore, che certamente non trascureremo, poiché il valore intero è costante e, di conseguenza, non può cambiare (trasformarsi in “a”). Condizioni Yoda - 1

Ci sono sia pro che contro nell'usare le condizioni di Yoda.

Lato chiaro:

  1. Prevenire l'assegnazione a una variabile quando il nostro obiettivo è il confronto.

  2. Risolvere il problema del "comportamento nullo" non sicuro ( NullPointerException) // esempi da Wikipedia

  3. Senza Yoda:

    String myString = null;
    if (myString.equals("foobar")) { /* ... */ }
    // This causes a NullPointerException in Java

    Con Yoda:

    String myString = null;
    if ( "foobar".equals(myString) ) { // Результат - Ложь
       /* не выполняется */
    }

Lato oscuro:

  1. La leggibilità del codice per le persone che guarderanno il tuo codice diventa più complessa, aumentando il carico sulla percezione del codice.
  2. Ambito ristretto, viene utilizzato solo il confronto per l'uguaglianza o il confronto con una costante, controllando se è nullo.
  3. Molti compilatori già “vedono” errori di questo tipo e avvertono in anticipo della presenza di un potenziale errore.
Un'alternativa alla notazione Yoda possono essere i test unitari. Ai tempi della Vecchia Repubblica, si diceva che eseguire buoni test avrebbe garantito che il codice sarebbe stato privo di errori e avrebbe fatto solo ciò per cui era stato scritto. Quali pratiche utili conosci? Condividi le tue conoscenze nei commenti! E scrivi anche il tuo episodio preferito! E che la Forza sia con te!
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION