2012-06-26 18 views
6

È possibile combinare due o più condizioni in una istruzione if? So che in C# possiamo combinare due o più condizioni in un'istruzione IF. Possiamo farlo a Delfi?combina due o più condizioni in una istruzione if

Devo verificare se l'utente ha immesso un valore per i tre controlli di modifica nel modulo. Grazie per tutto l'aiuto

+1

Ogni linguaggio di programmazione che conosco, e questo è oltre 200, ha una qualche forma di logica booleana, che coinvolge le operazioni AND, OR e NOT. Se non li hai ancora visti, hai davvero bisogno di leggere un libro. Infatti se lo hai fatto in C# perchè non provarlo solo in delphi? L'unica differenza è che nella parentesi di Delphi non è sempre richiesta una dichiarazione IF. Ma quando si fanno confronti multipli di uguaglianza, si dovrebbe scrivere 'if (a = b) o (c = d)' per esempio. –

+0

aggiuntivo. è necessario considerare anche che ci sono alcune condizioni che devono essere raggruppate in una parentesi come se ((a = x1) e (b = y1)) o ((a = x2) e (a = y2)) quindi fare qualcosa. – XBasic3000

risposta

10

Naturalmente. Si può fare qualcosa di simile:

if (A > 7) and (B < 13) or (C in [2, 4, 7]) then 

O per i controlli di modifica:

if (Edit1.Text <> '') and (Edit2.Text <> '') and (Edit3.Text <> '') then 

o, se questo è ciò che si vuole:

if (Edit1.Text = '') or (Edit2.Text = '') or (Edit3.Text = '') then 

ecc.ecc.

Potrebbe essere utile leggere effettivamente un libro su Delphi, ad esempio la guida della lingua di Delphi, fornita con ciascuna versione di Delphi (nella guida, nella parte Riferimenti) o can be found online.

Per la domanda: in generale, è possibile combinare condizioni diverse utilizzando and, or e not. Per evitare problemi con la precedenza degli operatori, di solito dovresti porre ogni condizione tra parentesi, come ho fatto sopra.

+0

Possono entrare in un'istruzione molto complessa con parentesi anche, ad esempio, 'if ((A> 7) o ((B = 'abc') e non (C = 'def')) o (D <> 8)) e (R> 8) poi ... '(Parlare di' '> 'è come'! = 'in altre lingue come C#) –

+0

Grazie per il collegamento – user1469630

+5

Personalmente uso sempre() s quando le operazioni logiche sono coinvolti. È più sicuro che cercare di mantenere le regole dirette tra più lingue. Il compilatore produrrà comunque lo stesso codice, non c'è nulla di male nel usarli quando non sono necessari. –

7

è necessario utilizzare gli operatori And e Or combinare condizioni in un if sentence

if (Edit1.Text<>'') and (Edit2.Text<>'') and (Edit3.Text<>'') then 
16

La forma generale di istruzione condizionale è:

SE "espressione logica" ALLORA. .. ELSE ...

Il "Espressione logica" è qualsiasi espressione booleana. Un'espressione booleana è un'espressione che può essere valutata come VERO o FALSO.

un'espressione booleana può essere costruito utilizzando operatori di confronto e operatori booleani.

operatori di confronto:

= equals 
<> not equals 
> greater than 
>= greater than or equals 
< less than 
<= less than or equals 

Set Operatori di confronto:

= equals 
<= returns true, if set1 is a subset of set2 
>= returns true, if set1 is a superset of set2 
in returns true, if an element is in the set 

operatori booleani:

AND logical and 
OR  logical or 
NOT logical not 
XOR logical exclusive disjucntion 

Esempi:

IF A = 10 THEN ... 
IF A >= B THEN ... 
IF C or D THEN ... (Note: C and D have to be logical, i.e. TRUE or FALSE) 
IF NOT E THEN ... (Note: E has to be logical, i.e. TRUE or FALSE) 

C, D ed E possono essere sostituire con qualsiasi espressione logica, ad esempio:

IF (edit1.text = '') OR (ISEMPTY(edit2.text)) THEN ... 
IF NOT checkbox1.checked THEN ... 

Si noti che l'espressione logica può essere costruito da espressioni logiche più semplici utilizzando operatori booleani, per gli esempi:

IF (A = 10) AND (A >= B) THEN ... 
IF NOT ((A = 10) AND (A >= B)) THEN ... 

Un errore comune nella scrittura dell'espressione logica non presta attenzione alla precedenza dell'operatore (che l'operatore ha valutato per primo). Gli operatori booleani hanno la precedenza maggiore di operatori di confronto, ad esempio:

IF A = 10 OR A >= B THEN ... 

Quanto sopra è sbagliato, perché Delphi cerca di valutare

10 OR A prima, invece di

A = 10. Se A stesso non è un'espressione logica, allora si verifica un errore.

La soluzione è quello di utilizzare le staffe, in modo che il sopra IF ... THEN ... dovrebbe essere scritto come:

IF (A = 10) OR (A >= B) THEN ...

Per il controllo 3 controlli di modifica, l'istruzione condizionale diventa:

IF (Edit1.text <> '') AND (Edit2.text <> '') AND (Edit3.text <> '') THEN ...

Nota: leggermente fuori tema, ma correlato. I componenti gratuiti TJvValidators, TJvValidationSummary e TJvErrorIndicator da Jedi JVCL project forniscono un valido meccanismo di convalida.

+7

+1 per la spiegazione, ma per favore non usare maiuscole per le parole chiave. È così negli anni '50. –

+0

Ho aggiunto '<>' al tuo elenco di operatori. –

+0

'in' dovrebbe essere lì, ma non so come sintetizzarlo in meno di 3 parole ... –

5

È molto importante ricordare che le espressioni vengono valutate da sinistra a destra.

in questo esempio

if False and SomeFunction() then 

SomeFunction non sarà valutata. Se li si gira intorno

if SomeFunction() and False then 

SomeFunction() saranno valutate.

+1

Questa è una risposta importante , tutte le altre risposte sono molto ovvie. –

+1

Dipende dalla [valutazione di cortocircuito booleano] (http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/compdirsbooleanshortcircuitevaluation_xml.html) '{$ B}'/'{$ BOOLEVAL} 'di default è impostato su' OFF'. ma se è impostato su 'ON' la' SomeFunction' sarà valutata nel primo esempio. – kobik

+0

@kobik hai ragione. Ma se in qualsiasi momento uno sviluppatore lo mettesse in pratica, lo darei a scovare e mettere in discussione la sua sanità mentale. –

0

Tuttavia, se si utilizza "se non" allora:

se non ((edit1.Text = '2') o (edit2.Text = '3')), allora ...

Problemi correlati