Dovrei usare AND o dovrei usare OR [chiuso]

-2

Un ordine può essere nello "stato" di Completato, corretto o in qualche altro stato.

Ho visto un codice che lo controlla in questo modo, lo scopo è disabilitare alcune cose quando lo stato è in stato Completato o Corretto.

 if (model.CurrentStatus != DSRHelper.OrderStatusEnum.Complete && model.CurrentStatus != DSRHelper.OrderStatusEnum.Corrected)

Non riesco a capire perché l'ingegnere abbia usato "AND" per questo, non dovrebbe essere un "OR"?

    
posta Blake 29.10.2012 - 17:39
fonte

3 risposte

5

No, E sembra essere corretto qui. Se lo hai commutato su OR, la condizione sarebbe sempre stata vera. Se era Completato, allora la seconda condizione sarebbe vera. Se fosse corretto, allora il primo sarebbe vero.

Tieni presente che la condizione correntemente utilizzata è equivalente a

!(model.CurrentStatus == DSRHelper.OrderStatusEnum.Complete || model.CurrentStatus == DSRHelper.OrderStatusEnum.Corrected)
    
risposta data 29.10.2012 - 17:46
fonte
3

No, la AND è corretta: se metti OR , otterrai una condizione sempre true , perché lo stato non può essere Complete e Corrected allo stesso tempo.

Per capire perché, usa le leggi di De Morgan per convertire la tua condizione proposta in un equivalente. Inizi con

NOT(status is complete) OR NOT(status is corrected)

e convertire in

NOT((status is complete) AND (status is corrected))

questo è sempre false .

    
risposta data 29.10.2012 - 17:46
fonte
3

Se la condizione fosse usata OR, la condizione sarebbe sempre vera. In inglese, la condizione corrente indica "Se lo stato corrente non è completo e non è corretto allora ...", il che implica che qualsiasi stato tranne questi due farà sì che la condizione sia vera.

Se hai usato OR, allora assolutamente qualsiasi stato farebbe sì che la condizione sia vera. Se lo stato corrente è Completato, la prima metà della condizione sarà falsa, ma la seconda metà sarà vera, quindi la condizione è vera. Se lo stato corrente è corretto, la prima metà della condizione sarà vera, quindi senza nemmeno controllare la seconda metà, l'intera condizione è vera (alcune lingue o controllerà ancora la seconda metà, ma la condizione sarà ancora vera se lo fanno ). Se si utilizza OR e lo stato corrente non è né completo né corretto, allora entrambe le metà della condizione sono vere. Così OR sarà sempre vero.

    
risposta data 29.10.2012 - 17:47
fonte

Leggi altre domande sui tag