2010-09-09 23 views
5

Nếu tôi đã sau ...Shortcircuiting: OrElse kết hợp với Hoặc

a OrElse b 

... và một là Đúng thì rõ ràng b không bao giờ được đánh giá. Nhưng nếu tôi thêm Or thì sao?

a OrElse b Or c 

/c nên được đánh giá? Và nếu tôi đặt trong một số dấu ngoặc đơn thì sao?

Xin lỗi nếu điều này là cơ bản. Tất nhiên tôi có thể tự mình kiểm tra câu trả lời nhưng tôi không thể tìm thấy câu hỏi này được trả lời ở đây hoặc ở nơi khác. Rất nhiều câu hỏi đối phó với Hoặc so OrElse nhưng không đối phó với Hoặc với OrElse

+0

Đối với một câu hỏi về tính chất này, trong khi nó có thể nhanh hơn để yêu cầu SO, một chương trình thử nghiệm đơn giản có thể xóa điều này và bạn có thể tìm hiểu thêm trong quá trình này. –

+1

@ JoelEtherton: chắc chắn, trên thực tế tôi đã viết một bài kiểm tra đơn giản từ lâu trước khi đăng câu hỏi này. vẫn còn, tôi đã quan tâm đến quan điểm chuyên gia. điểm của câu hỏi là xem câu trả lời của chuyên gia mà JoelCoehoorn đã cung cấp; không chỉ là một câu trả lời, nhưng chi tiết nền cộng với lời giải thích cộng với lời khuyên quá. – hawbsl

Trả lời

3

Đây là một vấn đề khai thác được ưu tiên. Các tài liệu có liên quan là ở đây:
http://msdn.microsoft.com/en-us/library/fw84t893.aspx?ppud=4

các trích đoạn quan trọng:

  • Các nhà khai thác có độ ưu tiên bằng được đánh giá trái sang phải theo thứ tự mà chúng xuất hiện trong biểu thức.

phân ly Inclusive (Hoặc, OrElse)

Vì vậy, những gì chúng ta học ở đây là Or và OrElse có cùng độ ưu tiên và các nhà khai thác với cùng ưu tiên được đánh giá từ trái sang phải.

Vì vậy, tôi hy vọng rằng trong trường hợp a là đúng, b không được đánh giá. Tuy nhiên, c vẫn sẽ là.Trong trường hợp a là sai, b được đánh giá và bất kể giá trị của b thì toán tử Or sẽ đánh giá c. Vì vậy, có, c luôn được đánh giá.

Thực tế, thông thường, bạn nên sử dụng OrElse trong mã của mình trừ khi bạn có lý do chính đáng để sử dụng Or. Or hiện tồn tại chủ yếu cho khả năng tương thích ngược.

+0

Tôi hơi bối rối, cho rằng, theo tài liệu, 'Và' có quyền ưu tiên cao hơn' Or'/'Orelse'. Tuy nhiên, trong chương trình của tôi khi tôi sử dụng 'test (1) OrElse test (2) và test (3)' tôi nhận được '1' và' true' là output. Bất kỳ ý tưởng? – Anax

+0

@Anax này đang được đánh giá là thử nghiệm như vậy (1) Kết quả OrElse và – msarchet

+0

@Anax Không chắc chắn. Tôi mong chờ '2,3,1, đúng' từ đó. Tôi nghi ngờ rằng đó là tối ưu hóa jitter của một số loại. –

5

OrElse mạch ngắn giữa các thông số bên trái và bên phải (chỉ có 2 thông số). Vì vậy, tôi sẽ nói rằng C sẽ luôn được đánh giá là bạn có thể coi đây là (A OrElse B) Or C.

MSDN OrElse

-1

Theo kinh nghiệm của VB cá nhân của tôi có xu hướng để có được những giá trị cho tất cả trong số họ bất kể họ được thực evaulated hay không.

Điều này chỉ hữu ích khi có thứ tự quan trọng đối với các mục tồn tại và tương tự. Chỉ muốn lưu ý nó.

+1

Ngắn mạch và orelse http://visualbasic.about.com/od/quicktips/qt/vbnetlogop.htm – diadem

3

Trong trường hợp được trình bày, c được đánh giá. Một thử nghiệm nhỏ sẽ cho bạn biết:

Debug.WriteLine(test(1) OrElse test(2) Or test(3)) 

Function test(ByVal a As Integer) As Boolean 

    Debug.WriteLine(a) 
    Return True 

End Function 

Ví dụ đầu ra ở trên:

 
1 
3 
True 
+0

+1 để thử nghiệm nó. –

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