Perché WordPress inverte le istruzioni condizionali?

5 gen 2013, 01:40:24
Visualizzazioni: 611
Voti: 7

Nel codice core di WordPress, spesso vedi questo:

if (1 == $someVar)

invece di questo:

if ($someVar == 1)

Non so se il primo modo sia uno stile di codifica specifico di WordPress, ma l'ho notato solo nel codice WP (sia core che di terze parti).

20
Commenti

Condizioni Yoda queste sono.

fuxia fuxia
5 gen 2013 01:44:51

Il secondo modo è più facile da leggere; il primo aiuterà a prevenire l'errore del singolo =

shea shea
5 gen 2013 01:50:01

Mmm... come mai questo è fuori tema? Ho poi scoperto dai commenti aggiunti alla mia domanda che è consigliato programmare per WP usando le condizioni Yoda secondo il [Codex] ( http://codex.wordpress.org/WordPress_Coding_Standards#Yoda_Conditions)

akTed akTed
5 gen 2013 03:01:47

@AKTed È fuori tema perché non è specifico per WordPress, è una domanda su PHP. Dal FAQ: non specifico per WordPress (anche se avviene nel suo contesto)

Milo Milo
5 gen 2013 03:28:21

@Milo: All'inizio pensavo lo stesso, ma è specifico per WordPress nel contesto che WordPress lo include nel loro Codex come il modo in cui vogliono che venga fatto. Si qualifica come una domanda su PHP, ma la mia domanda era specificamente sul notarlo molto nel codice di WP.

akTed akTed
5 gen 2013 04:56:20

@toscho & Milo: La mia domanda rispetta le [faq] in questi due aspetti: 1. Soddisfa la sezione "WordPress - Stack Exchange è per sviluppatori e amministratori di WordPress per porre domande su:"... sviluppo e best practice di gestione 2. Poiché WordPress elenca le condizioni Yoda nella sezione Coding Standards del Codex come metodo di codifica preferito, non rientra nella sezione faq "non specifica per WordPress (anche se avviene nel suo contesto)"

akTed akTed
5 gen 2013 05:12:06

@AKTed Per favore usa [meta] per discutere del nostro ambito.

fuxia fuxia
5 gen 2013 06:23:02

@toscho: Non ho abbastanza Rep per chiedere su Meta. Inoltre, la tua affermazione "chiuso come off topic..." mi dice di lasciare "commenti..." proprio qui! Sono sicuro che sia la dichiarazione standard di StackExchange per chiudere questa domanda, ma in pratica sei tu a dirlo. Quindi, qual è la mia soluzione? Non posso ancora usare WP Meta, e a quanto pare non dovrei discuterne qui (anche se "tu" me l'hai detto!)?

akTed akTed
6 gen 2013 06:20:15

@AKTed Ti servono 5 punti. Non dirmi che sono troppi. :)

fuxia fuxia
6 gen 2013 06:23:11

Sono così nuovo qui che non li ho ancora :(

akTed akTed
6 gen 2013 06:23:45

E a chi ha votato negativamente la mia domanda, perché? Perché sapevi qualcosa che io non sapevo? Se è così, ogni domanda dovrebbe essere votata negativamente. Meh, ho perso tempo con questa stupidaggine.

akTed akTed
6 gen 2013 06:25:49

A volte le persone votano negativamente se la domanda non è particolarmente utile per il sito. Non prenderla troppo sul personale; non è che tu abbia reputazione da perdere ;)

shea shea
6 gen 2013 06:30:41

@bungeshea Scusa, ma quel tag non è lì per quello. In effetti, non dovrebbe nemmeno essere qui.

kaiser kaiser
6 gen 2013 06:54:58

Questa domanda è pertinente perché riguarda gli standard di codifica documentati di WordPress. Riaperta e risposta in quanto tale.

EAMann EAMann
7 gen 2013 18:38:49

Ecco qui, bel Titolo, bella Risposta, voti positivi, La Via dello Stack ;)

brasofilo brasofilo
7 gen 2013 18:51:39

@brasofilo Avevo l'impressione che la "Via dello Stack" fosse illustrata in questo thread di commenti, almeno fino a quando EAMann ha dato una Risposta. :)

akTed akTed
7 gen 2013 18:54:37

@EAMann Il formato ZIP è menzionato anche su Codex, quindi è in tema qui, giusto?

fuxia fuxia
8 gen 2013 02:16:07

@toscho Il formato ZIP in sé, no. Ma domande sulla compressione/decompressione all'interno di WordPress potenzialmente sì.

EAMann EAMann
8 gen 2013 02:22:27

Ok, di solito sono io il "Poliziotto dell'ambito", e questo è troppo pedante persino per me. Direi che una domanda che si adatta così precisamente agli Standard di Codifica WordPress non solo è in tema per WPSE, ma offre anche un'ottima opportunità per approfondire lo Standard di Codifica WordPress in questione. Era una palla facile da colpire; per fortuna @EAMann l'ha riconosciuta e ha dato il massimo.

Chip Bennett Chip Bennett
9 gen 2013 01:43:16
Mostra i restanti 15 commenti
Tutte le risposte alla domanda 1
1
12

Questo stile di codifica è noto come Condizione Yoda, e non è specifico di WordPress. L'ho utilizzato anche in codice C++, C# e persino JavaScript.

Il vantaggio principale di una Condizione Yoda è che previene l'assegnazione accidentale di valori a causa di un errore di battitura. Considera il seguente errore (spesso visto in codice reale):

if ( $some_variable = 1 ) {
    // ...
}

Questa condizione restituirà sempre true, ma ha l'effetto collaterale di assegnare il valore 1 alla variabile $some_variable. A volte però questo è intenzionale. In WordPress in particolare, spesso si vedrà codice come:

if ( $post = some_function( $_POST['id'] ) ) {
    // ...
} else {
    // ...
}

Lo scopo di questo codice è proprio assegnare un nuovo valore alla variabile $post, e funziona perché la some_function() utilizzata restituirà false in caso di errore.

Le Condizioni Yoda (invertendo l'ordine dell'operatore di uguaglianza ==) proteggono dall'assegnazione accidentale di valori quando non era nelle intenzioni. Se commetti un errore e inserisci un solo = nel codice, otterrai un errore perché non puoi assegnare un valore a una costante:

if ( 1 = $some_variable ) {
    // ...
}

Come ho detto, questo non è esclusivo di WordPress, né tantomeno di PHP, tuttavia fa parte degli standard di codifica obbligatori di WordPress. Se stai scrivendo un plugin o un tema per la distribuzione generale, o contribuendo al core, devi sapere sia cosa sono le Condizioni Yoda che come utilizzarle.

7 gen 2013 18:38:07
Commenti

Grazie per la risposta molto descrittiva, davvero apprezzato.

akTed akTed
7 gen 2013 18:50:04