2012-06-26 69 views
6

Chúng ta có thể kết hợp hai hoặc nhiều điều kiện trong một câu lệnh if không? Tôi biết rằng trong C# chúng ta có thể kết hợp hai hoặc nhiều điều kiện trong một câu lệnh IF. Chúng ta có thể làm điều đó ở Delphi không?kết hợp hai hoặc nhiều điều kiện trong một câu lệnh if

Tôi phải kiểm tra xem người dùng đã nhập giá trị cho ba Chỉnh sửa điều khiển trong biểu mẫu chưa. Cảm ơn tất cả sự giúp đỡ

+1

Mọi ngôn ngữ lập trình mà tôi biết và hơn 200, có một dạng logic boolean, liên quan đến các phép toán AND, OR và NOT. Nếu bạn chưa từng thấy, bạn thực sự cần đọc một cuốn sách. Trong thực tế, nếu bạn đã làm nó trong C# tại sao không chỉ thử nó trong delphi? Sự khác biệt duy nhất là trong dấu ngoặc đơn Delphi không phải lúc nào cũng được yêu cầu với câu lệnh IF. Nhưng khi thực hiện so sánh bình đẳng, bạn nên viết 'if (a = b) hoặc (c = d)' chẳng hạn. –

+0

Bổ sung. bạn cũng cần xem xét rằng có một số điều kiện cần phải được nhóm trong dấu ngoặc đơn như ((a = x1) và (b = y1)) hoặc ((a = x2) và (a = y2)) sau đó làm điều gì đó. – XBasic3000

Trả lời

10

Tất nhiên. Bạn có thể làm một cái gì đó như:

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

Hoặc cho các điều khiển Edit:

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

hoặc, nếu đó là những gì bạn muốn:

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

etc.etc. Có thể có ích khi đọc một cuốn sách về Delphi, ví dụ Hướng dẫn ngôn ngữ Delphi, kèm theo mỗi phiên bản của Delphi (trong phần trợ giúp, trong phần Tài liệu tham khảo) hoặc can be found online.

Đối với câu hỏi: nói chung, bạn có thể kết hợp các điều kiện khác nhau bằng cách sử dụng and, ornot. Để tránh các vấn đề với ưu tiên toán tử, bạn thường nên đặt từng điều kiện trong dấu ngoặc đơn, như tôi đã làm ở trên.

+0

Chúng có thể đi vào một câu lệnh rất phức tạp với dấu ngoặc đơn, ví dụ, 'if ((A> 7) hoặc ((B = 'abc') và không (C = 'def')) hoặc (D <> 8)) và (R> 8) sau đó ... '(Phát biểu trong đó' <> 'cũng giống như'! = 'trong các ngôn ngữ khác như C#) –

+0

Cảm ơn bạn đã liên kết – user1469630

+5

Cá nhân tôi luôn sử dụng() khi hoạt động logic là có tính liên quan. Nó an toàn hơn là cố giữ các quy tắc thẳng giữa nhiều ngôn ngữ. Trình biên dịch sẽ tạo ra cùng mã đó, không có hại khi sử dụng chúng khi chúng không cần thiết. –

7

Bạn phải sử dụng các nhà khai thác AndOr để kết hợp điều kiện trong một if sentence

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

Dạng tổng quát của câu lệnh điều kiện là:

NẾU "logic biểu" THEN. .. ELSE ...

"Biểu thức logic" là bất kỳ biểu thức boolean boolean. Biểu thức boolean là một biểu thức có thể được đánh giá là TRUE hoặc FALSE.

Biểu thức boolean có thể được tạo bằng cách sử dụng toán tử so sánhtoán tử boolean.

Toán tử so sánh:

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

Set Toán tử so sánh:

= 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 

toán tử Boolean:

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

Ví dụ:

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 và E có thể được thay thế bằng bất kỳ biểu thức logic, ví dụ:

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

Lưu ý rằng biểu thức logic có thể được xây dựng từ các biểu thức logic đơn giản hơn bằng cách sử dụng các toán tử logic, ví dụ:

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

Lỗi thường gặp khi viết biểu thức logic không chú ý đến ưu tiên của toán tử (toán tử nào được đánh giá đầu tiên). Các toán tử logic có độ ưu tiên cao hơn toán tử so sánh, ví dụ:

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

Trên đây là sai vì Delphi cố gắng để đánh giá

10 OR A đầu tiên, thay vì

A = 10. Nếu bản thân A không phải là một biểu thức logic, thì lỗi xảy ra.

Giải pháp là bằng cách sử dụng dấu ngoặc, vì vậy trên NẾU ... THÌ ... nên được viết như sau:

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

Đối với kiểm tra 3 chỉnh sửa điều khiển, báo cáo kết quả điều kiện trở thành:

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

Lưu ý: Chủ đề hơi tắt, nhưng có liên quan. Các thành phần miễn phí TJvValidators, TJvValidationSummary và TJvErrorIndicator từ Jedi JVCL project cung cấp một cơ chế xác nhận hợp lệ.

+7

+1 để giải thích, nhưng vui lòng không sử dụng tất cả mũ cho từ khóa. Đó là những năm 1950. –

+0

Tôi đã thêm '<>' vào danh sách các toán tử của bạn. –

+0

'in' nên có ở đó quá, nhưng tôi không biết làm thế nào để tóm tắt nó trong ít hơn 3 từ ... –

5

Điều quan trọng cần nhớ là các biểu thức được đánh giá từ trái sang phải.

trong ví dụ này

if False and SomeFunction() then 

SomeFunction sẽ không được đánh giá. Nếu bạn xoay chúng xung quanh

if SomeFunction() and False then 

SomeFunction() sẽ được đánh giá.

+1

Đây là câu trả lời quan trọng , tất cả các câu trả lời khác đều rất rõ ràng. –

+1

Điều này phụ thuộc vào [Đánh giá ngắn mạch Boolean] (http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/compdirsbooleanshortcircuitevaluation_xml.html) '{$ B}'/'{$ BOOLEVAL} 'theo mặc định, nó được đặt thành' OFF'. nhưng nếu nó được đặt thành 'ON',' SomeFunction' sẽ được đánh giá trong ví dụ đầu tiên. – kobik

+0

@kobik bạn nói đúng. Nhưng nếu bất cứ lúc nào một nhà phát triển sẽ thiết lập điều này, tôi sẽ săn lùng anh ta và đặt câu hỏi về sự tỉnh táo của anh ấy. –

0

Tuy nhiên, nếu sử dụng "nếu không" thì:

nếu không muốn nói ((edit1.Text = '2') hoặc (edit2.Text = '3')) sau đó ...

Các vấn đề liên quan