Domanda

Scusate se questa è una domanda comp-sci 101. Non sono sicuro se mi manchi qualcosa di ovvio.

Quindi supponiamo che alcuni input dell'utente generino un errore e voglio catturarlo e restituire un feedback. L'errore sarà un numero, 0 - 8. 0 significa "Nessun errore". Voglio dare all'utente un feedback molto specifico se l'errore è 3 (Nessun numero consentito, diciamo). Per le altre 7 possibilità, voglio solo terminare lo script ed echeggiare l'errore.

Stavo lavorando su questo e ho deciso di andare con questo:

$no_errors (

Scusate se questa è una domanda comp-sci 101. Non sono sicuro se mi manchi qualcosa di ovvio.

Quindi supponiamo che alcuni input dell'utente generino un errore e voglio catturarlo e restituire un feedback. L'errore sarà un numero, 0 - 8. 0 significa "Nessun errore". Voglio dare all'utente un feedback molto specifico se l'errore è 3 (Nessun numero consentito, diciamo). Per le altre 7 possibilità, voglio solo terminare lo script ed echeggiare l'errore.

Stavo lavorando su questo e ho deciso di andare con questo:

<*>

Comunque, stavo notando l'operatore OR in prima linea e pensavo che potesse essere migliore / più sicuro per l'utente di un operatore AND. Ma più contemplo, meno vedo una differenza.

Quindi la vera domanda è, se si desidera eliminare due possibilità di una specifica variabile, AND e OR sono identici o uno logicamente / funzionalmente più ottimale?

error != 0 ||

Scusate se questa è una domanda comp-sci 101. Non sono sicuro se mi manchi qualcosa di ovvio.

Quindi supponiamo che alcuni input dell'utente generino un errore e voglio catturarlo e restituire un feedback. L'errore sarà un numero, 0 - 8. 0 significa "Nessun errore". Voglio dare all'utente un feedback molto specifico se l'errore è 3 (Nessun numero consentito, diciamo). Per le altre 7 possibilità, voglio solo terminare lo script ed echeggiare l'errore.

Stavo lavorando su questo e ho deciso di andare con questo:

<*>

Comunque, stavo notando l'operatore OR in prima linea e pensavo che potesse essere migliore / più sicuro per l'utente di un operatore AND. Ma più contemplo, meno vedo una differenza.

Quindi la vera domanda è, se si desidera eliminare due possibilità di una specifica variabile, AND e OR sono identici o uno logicamente / funzionalmente più ottimale?

error != 3) ? FALSE : TRUE; if (!$no_errors) echo $error_msg['

Scusate se questa è una domanda comp-sci 101. Non sono sicuro se mi manchi qualcosa di ovvio.

Quindi supponiamo che alcuni input dell'utente generino un errore e voglio catturarlo e restituire un feedback. L'errore sarà un numero, 0 - 8. 0 significa "Nessun errore". Voglio dare all'utente un feedback molto specifico se l'errore è 3 (Nessun numero consentito, diciamo). Per le altre 7 possibilità, voglio solo terminare lo script ed echeggiare l'errore.

Stavo lavorando su questo e ho deciso di andare con questo:

<*>

Comunque, stavo notando l'operatore OR in prima linea e pensavo che potesse essere migliore / più sicuro per l'utente di un operatore AND. Ma più contemplo, meno vedo una differenza.

Quindi la vera domanda è, se si desidera eliminare due possibilità di una specifica variabile, AND e OR sono identici o uno logicamente / funzionalmente più ottimale?

error']; $error_3 ($no_errors &&

Scusate se questa è una domanda comp-sci 101. Non sono sicuro se mi manchi qualcosa di ovvio.

Quindi supponiamo che alcuni input dell'utente generino un errore e voglio catturarlo e restituire un feedback. L'errore sarà un numero, 0 - 8. 0 significa "Nessun errore". Voglio dare all'utente un feedback molto specifico se l'errore è 3 (Nessun numero consentito, diciamo). Per le altre 7 possibilità, voglio solo terminare lo script ed echeggiare l'errore.

Stavo lavorando su questo e ho deciso di andare con questo:

<*>

Comunque, stavo notando l'operatore OR in prima linea e pensavo che potesse essere migliore / più sicuro per l'utente di un operatore AND. Ma più contemplo, meno vedo una differenza.

Quindi la vera domanda è, se si desidera eliminare due possibilità di una specifica variabile, AND e OR sono identici o uno logicamente / funzionalmente più ottimale?

error == 3) ? TRUE : FALSE; if ($error_3) bunch of stuff happens; else bunch of other stuff;

Comunque, stavo notando l'operatore OR in prima linea e pensavo che potesse essere migliore / più sicuro per l'utente di un operatore AND. Ma più contemplo, meno vedo una differenza.

Quindi la vera domanda è, se si desidera eliminare due possibilità di una specifica variabile, AND e OR sono identici o uno logicamente / funzionalmente più ottimale?

È stato utile?

Soluzione

logicamente i seguenti sono identici (scusa il mio pseudo codice)

(! expression_one || ! expression_two) /** this is the same as the one below **/
! (expression_one && expression_two)

Funzionalmente quale è più ottimale? Sono entrambi ottimali l'uno rispetto all'altro. Entrambi i modi (& amp; & amp; e ||) consentono il corto circuito se la prima espressione è vera (nel caso ||) o falsa (nel caso & amp; & amp;)

Altri suggerimenti

Sarà molto più leggibile se usi un'istruzione switch:

switch (

Sarà molto più leggibile se usi un'istruzione switch:

<*>error) { case 0; nothing happens; break; case 3: bunch of stuff happens; break; default: bunch of other stuff; break; }

Prima di tutto, penso che consiglierei di usare un altro modo di identificare gli errori rispetto all'uso di "numeri magici". Sono difficili da mantenere, poiché dimentichi facilmente cosa " 3 " significava. Sembra che la tua lingua sia PHP, che supporta le eccezioni. Raccomanderei invece di usarli, puoi leggere di più qui: http://dk.php.net/ eccezioni

Per quanto riguarda gli operatori logici, in realtà non ce ne sono quelli considerati "buone pratiche". Usa quello che vuoi. Se hai difficoltà a capire quando la tua espressione è vera / falsa, prova a creare una tabella di verità: http: // en.wikipedia.org/wiki/Truth_table

Per quanto riguarda le prestazioni, tieni presente che la valutazione sarà pigra nella maggior parte delle lingue. Utilizzando OR, se la prima condizione è vera, verrà restituito vero senza valutare la seconda condizione. Per AND, restituirà false se le prime condizioni sono false, senza valutare la seconda.

Altrimenti, le prestazioni degli operatori stessi non sono molto diverse. Usa ciò che è più leggibile per te.

Il migliore è quello che aiuta tu a leggere il codice più velocemente. È l'unica vera ottimizzazione che puoi realizzare qui, e possibilmente in milioni di altri luoghi.

Questo sembrerebbe più semplice da leggere:

  if(

Questo sembrerebbe più semplice da leggere:

<*>

Nessuno nota i microsecondi che potresti vincere.

error==3) do stuff; else if(

Questo sembrerebbe più semplice da leggere:

<*>

Nessuno nota i microsecondi che potresti vincere.

error>0) do some other stuff else do normal stuff

Nessuno nota i microsecondi che potresti vincere.

  1. Personalmente eliminerei l'uso di quei numeri e userei invece le costanti. Oltre ad essere più facili da mantenere, rendono la codifica stessa molto più semplice e ti consente di aggiornare i valori domani, ad es. se alcune circostanze ti costringono a cambiare il numero da 3, devi praticamente esaminare tutto il tuo codice
  2. Come suggerito da gkrogers, un interruttore pur realizzando la stessa cosa è molto più facile da leggere e mantenere

Per quanto riguarda le prestazioni, credo che siano molto simili (vedi post di wvanbergen), tuttavia ci sono evidenti differenze nel comportamento. Penso che il tuo attuale post potrebbe non fare quello che speri. Nella prima riga se $ _error = 3, allora avrai $ no_errors = false. Dato che stai verificando due condizioni che entrambe devono essere soddisfatte, forse una e sarebbe più appropriata.

A volte trovo che il modo più semplice per verificare la mia logica sia effettivamente dire ciò che voglio ad alta voce. Ad esempio, " Non abbiamo errori se il codice di errore è non 0 e non 3 "

In genere trovo che in situazioni come queste con solo poche variabili, il modo in cui scriverei la frase in inglese mi fornisce il metodo più intuitivo (e preciso) per determinare gli operatori logici.

Se ritieni che il codice appaia disordinato dopo questo processo, potresti trovare this link utile sulle leggi di De Morgan

(A || B) =! (A & amp; & amp; B). Quindi non fa davvero la differenza

EDIT: (A || B) =! (A & amp; & amp; B) è errato. Tks per il commento. La forma corretta è (! A ||! B) =! (A & amp; & amp; B).

Le mie scuse

Se si utilizza:

$no_errors (

Se si utilizza:

<*>

Ciò significa che $ error! = 0 AND $ error! = 3 che è una logica non valida perché $ error non può essere == a 3 e 0 può essere 3 OR 0 ma non entrambi.
Nell'esempio sopra se $ error = 0 allora valuterebbe FALSE perché non è 3 & amp; & amp; 0 stai cercando che sia 3 || 0.

error != 0 &&

Se si utilizza:

<*>

Ciò significa che $ error! = 0 AND $ error! = 3 che è una logica non valida perché $ error non può essere == a 3 e 0 può essere 3 OR 0 ma non entrambi.
Nell'esempio sopra se $ error = 0 allora valuterebbe FALSE perché non è 3 & amp; & amp; 0 stai cercando che sia 3 || 0.

error != 3) ? FALSE : TRUE;

Ciò significa che $ error! = 0 AND $ error! = 3 che è una logica non valida perché $ error non può essere == a 3 e 0 può essere 3 OR 0 ma non entrambi.
Nell'esempio sopra se $ error = 0 allora valuterebbe FALSE perché non è 3 & amp; & amp; 0 stai cercando che sia 3 || 0.

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