2012-06-26 18 views
6

Können wir zwei oder mehr Bedingungen in einer if-Anweisung kombinieren? Ich weiß, dass wir in C# zwei oder mehr Bedingungen in einer IF-Anweisung kombinieren können. Können wir das in Delphi machen?Kombinieren Sie zwei oder mehr Bedingungen in einer if-Anweisung

Ich muss überprüfen, ob der Benutzer einen Wert für die drei Edit-Steuerelemente im Formular eingegeben hat. Danke für die Hilfe

+1

Jede Programmiersprache, die ich kenne, und das ist mehr als 200, hat eine Art boolesche Logik, die die Operationen AND, OR und NOT beinhaltet. Wenn Sie diese noch nicht gesehen haben, müssen Sie wirklich ein Buch lesen. In der Tat, wenn Sie es in C# getan haben, warum versuchen Sie es nicht einfach in Delphi? Der einzige Unterschied ist, dass in Delphi Klammern nicht immer mit einer IF-Anweisung benötigt werden. Aber wenn Sie mehrere Gleichheitsvergleiche anstellen, sollten Sie zum Beispiel 'if (a = b) oder (c = d)' schreiben. –

+0

Zusätzliche. Sie müssen auch berücksichtigen, dass es eine Bedingung gibt, die in einer Klammer gruppiert werden muss, wie if ((a = x1) und (b = y1)) oder ((a = x2) und (a = y2)) dann etwas tun. – XBasic3000

Antwort

10

Natürlich.

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

Oder für die Edit Controls: Sie können so etwas wie tun

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

oder, wenn es das ist, was Sie wollen:

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

etc.etc.

Es könnte nützlich sein, ein Buch über Delphi zu lesen, zum Beispiel das Delphi Language Guide, das mit jeder Version von Delphi (in der Hilfe, im Teil "Referenzen") oder can be found online geliefert wird.

Für die Frage: im Allgemeinen können Sie verschiedene Bedingungen kombinieren mit and, or und not. Um Probleme mit der Vorrangstellung des Operators zu vermeiden, sollten Sie normalerweise jede Bedingung in Klammern setzen, wie oben beschrieben.

+0

Sie können auch mit Klammern in eine sehr komplexe Aussage gehen, zum Beispiel, wenn ((A> 7) oder ((B = 'abc') und nicht (C = 'def')) oder (D <> 8)) und (R> 8) dann ... '(Apropos,' <> 'ist genau wie'! = 'in anderen Sprachen wie C#) –

+0

Danke für den Link – user1469630

+5

Persönlich verwende ich immer() s wenn logische Operationen sind beteiligt. Es ist sicherer als zu versuchen, die Regeln zwischen mehreren Sprachen zu halten. Der Compiler wird den gleichen Code sowieso erzeugen, es ist nicht schaden, sie zu verwenden, wenn sie nicht benötigt werden. –

7

Sie müssen die And und Or Operatoren Bedingungen in einem if sentence

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

Die allgemeine Form der bedingten Anweisung kombinieren:

IF "Logischer Ausdruck" DANN. .. ELSE ...

Die "Logische Ausdruck" ist eine boolesche Ausdruck. Ein boolescher Ausdruck ist ein Ausdruck, der als TRUE oder FALSE ausgewertet werden kann.

Ein boolean Ausdruck kann Vergleichsoperatoren und Booleschen Operatoren mit konstruiert werden.

Vergleichsoperatoren:

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

Set Vergleichsoperatoren:

= 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 

Boolesche Operatoren:

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

Beispiele:

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 und E können mit jedem logischen Ausdruck ersetzen, zum Beispiel:

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

Beachten Sie, dass logischer Ausdruck kann mit Booleschen Operatoren aus einfacherer logischer Ausdrücken konstruiert werden, für Beispiele:

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

Häufiger Fehler beim Schreiben eines logischen Ausdrucks berücksichtigt nicht die Priorität des Operators (welcher Operator zuerst ausgewertet wurde). Die Booleschen Operatoren haben höhere Priorität als Vergleichsoperatoren, zum Beispiel:

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

Die oben falsch ist, weil Delphi

10 OR A erste, statt

A = 10 zu bewerten versucht. Wenn A selbst kein logischer Ausdruck ist, tritt ein Fehler auf.

Die Lösung unter Verwendung von Klammern ist, so dass die oben WENN ... DANN ... soll geschrieben werden als:

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

Zur Überprüfung 3 Edit-Steuerelemente, die bedingte Anweisung wird:

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

Hinweis: Etwas abseits des Themas, aber verwandt. Kostenlose Komponenten TJvValidators, TJvValidationSummary und TJvErrorIndicator von Jedi JVCL project bieten einen schönen Validierungsmechanismus.

+7

+1 für die Erklärung, aber bitte nicht alle Großbuchstaben für Keywords verwenden. Das ist so in den 1950er Jahren. –

+0

Ich habe '<>' zu Ihrer Liste von Operatoren hinzugefügt. –

+0

'in' sollte auch da sein, aber ich weiß nicht, wie man es in weniger als 3 Worten zusammenfasst ... –

5

Es ist sehr wichtig, daran zu denken, dass Ausdrücke von links nach rechts ausgewertet werden.

in diesem Beispiel

if False and SomeFunction() then 

Einefunktion wird nicht ausgewertet. Wenn Sie sie um

if SomeFunction() and False then 

Einefunktion() drehen wird ausgewertet.

+1

Dies ist eine wichtige Antwort Alle anderen Antworten sind sehr offensichtlich. –

+1

Dies hängt von der [booleschen Kurzschlussauswertung] ab (http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/compdirsbooleshortcircuitevaluation_xml.html) '{$ B}'/'{$ BOOLEVAL} 'Standardmäßig ist es auf 'OFF' gesetzt. wenn es jedoch auf 'ON' gesetzt ist, wird die 'SomeFunction' im ersten Beispiel ausgewertet. – kobik

+0

@kobik hast du recht. Aber wenn ein Entwickler das jemals anstellen würde, würde ich ihn jagen und seinen Verstand in Frage stellen. –

0

Wenn jedoch unter Verwendung von "wenn nicht", dann:

Wenn nicht ((Edit1.Text = '2') oder (edit2.Text = '3')) then ...

Verwandte Themen