2011-01-13 29 views
8

câu hỏi rất đơn giản, có một hàm tương đương với hàm iif nổi tiếng trong java?Java Tương đương với hàm iif

Ví dụ:

IIf (vData = "S", True, False) 

Cảm ơn trước.

+1

JJnguy: Không, 'iif' là một hàm inline-if nhận giá trị boolean như tham số đầu tiên của nó, và khi true trả về tham số thứ hai, và khi false trả về tham số thứ ba. – Gabe

+1

Đối với hậu thế: Xin lưu ý rằng câu trả lời được chấp nhận không thực sự chính xác đối với việc đoản mạch. Đọc http://stackoverflow.com/questions/822810/iif-equivalent-in-c thay vì ... – dkarp

Trả lời

20
vData.equals("S") ? true : false 

hoặc trong trường hợp đặc biệt này rõ ràng là một trong những chỉ có thể viết

vData.equals("S") 
+1

** Đặc biệt là ** bit thứ hai. Điều đó không quá rõ ràng với nhiều người. –

+1

Đây không phải là điều tương tự. Sử dụng 'IIF (x, y, z)' sẽ luôn luôn đánh giá 'y' và' z' (gây ra các tác dụng phụ của cả hai để hiển thị), trong khi 'x?y: z' sẽ chỉ evaulate 'y' xor' z' (gây ra các tác dụng phụ của chỉ có một được hiển thị). – Gabe

+0

@Gabe: VB không hỗ trợ đánh giá ngắn mạch nói chung. Mặc dù VB.NET không – sblundy

5

Yeah, các op ternary ? :

vData.equals("S") ? true : false 
+0

cảm ơn phản hồi nhanh ... – seba123neo

2

nếu là giống như khi và chỉ khi logic.

boolean result; 
if (vData.equals("S")) 
    result = true; 
else 
    result = false; 

hoặc

boolean result = vData.equals("S") ? true : false; 

hoặc

boolean result = vData.equals("S"); 

EDIT: Tuy nhiên nó rất có thể bạn không cần một biến thay vào đó bạn có thể hoạt động trên kết quả. ví dụ.

if (vData.equals("S")) { 
    // do something 
} else { 
    // do something else 
} 

BTW nó có thể được coi là thực hành tốt để sử dụng

if ("S".equals(vData)) { 

Sự khác biệt được đó là vData là null ví dụ đầu tiên sẽ ném một ngoại lệ trong khi thứ hai sẽ là sai lầm. Bạn nên tự hỏi mình sẽ thích điều gì hơn.

+0

cảm ơn bạn đã trả lời. – seba123neo

3

Sự khác biệt chính giữa các nhà điều hành ternary Java và IIfIIf đánh giá cả giá trị trả về và giá trị unreturned, trong khi các nhà điều hành ternary ngắn mạch và chỉ đánh giá giá trị trả về. Nếu có những tác dụng phụ đối với việc đánh giá, hai tác dụng phụ không tương đương.

Bạn có thể, tất nhiên, triển khai lại IIf làm phương pháp Java tĩnh. Trong trường hợp đó, cả hai thông số sẽ được đánh giá vào thời gian gọi, giống như với IIf. Nhưng không có tính năng ngôn ngữ Java được xây dựng nào tương đương chính xác với IIf.

public static <T> T iif(boolean test, T ifTrue, T ifFalse) { 
    return test ? ifTrue : ifFalse; 
} 

(Lưu ý rằng ifTrueifFalse luận phải được cùng loại trong Java, hoặc sử dụng các nhà điều hành ternary hoặc sử dụng thay thế chung này.)

+0

cảm ơn, tôi hiểu, tương tự như chức năng AndAlso, OrElse trong VB NET, phải không? – seba123neo

+0

Vâng, đó là một ví dụ khác về đoản mạch. – dkarp

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