

Điểm khác nhau thứ 1
Chúng ta cùng phân tích ví dụ bên dưới:
■ x = IIF(a, b(), c())
Trường hợp dùng IIf thì CẢ 2 hàm b() và c() đều được thực hiện, mà không quan tâm biểu thức điều kiện a là True hay False.
Trường hợp dùng If thì CHỈ 1 trong 2 hàm b() hoặc c() được thực hiện tùy theo biểu thức điều kiện a là True hay False
Một sự khác biệt rất quan trọng giữa IIf và If là việc chuyển đổi ngầm định kiểu dữ liệu đối với trường hợp kết quả trả về là Nothing
Sử dụng IIf kém an toàn hơn If(short-circuits)
Từ phân tích trên chúng ta có thể thấy sử dụng IIf có hiệu suất chậm hơn và đôi khi kém an toàn hơn so với sử dụng If
Vậy tại sao lại có IIf? Dùng IIf trong trường hợp nào?
Chúng ta cùng xem một ví dụ bên dưới:
Sau khi chạy xong đoạn lệnh trên thì chúng ta sẽ nhận được counter = 2, và str = YES.
Ở đây việc tính toán counter là không cần thiết, nhưng đôi khi có những chức năng mà bạn sẽ cần/muốn cả 2 hàm cùng chạy, không quan trọng điều kiện của IF là True hay False. Có thể kết quả từ biến counter này sẽ dùng vào một việc khác trong chương trình sau này.
Kết luận:
Như vậy chúng ta đã cùng nhau tìm hiểu sự khác nhau và những đặc điểm của 2 câu lệnh điều kiện IIf và If. Tùy vào tình huống cụ thể mà chúng ta sử dụng linh hoạt 2 câu lệnh điều kiện này.
Chúng ta cùng phân tích ví dụ bên dưới:
■ x = IIF(a, b(), c())
Trường hợp dùng IIf thì CẢ 2 hàm b() và c() đều được thực hiện, mà không quan tâm biểu thức điều kiện a là True hay False.
- Thực hiện cả 2 hàm b() và c()
- Thực hiện gán giá trị cho x
- Nếu biểu thức điều kiện a = True, thì gán x = kết quả của hàm b()
- Ngược lại, nếu biểu thức điều kiện a = False, thì gán x = kết quả của hàm c()
Trường hợp dùng If thì CHỈ 1 trong 2 hàm b() hoặc c() được thực hiện tùy theo biểu thức điều kiện a là True hay False
- Nếu biểu thức điều kiện a = True, thì thực hiện hàm b() rồi gán kết quả cho x
- Ngược lại, nếu biểu thức điều kiện a = False, thì thực hiện hàm c() rồi gán kết quả cho x
Một sự khác biệt rất quan trọng giữa IIf và If là việc chuyển đổi ngầm định kiểu dữ liệu đối với trường hợp kết quả trả về là Nothing
- IIf : Luôn return giá trị mặc định của kiểu Object là Nothing
- If : Thì return giá trị mặc định kiểu kiểu dữ liệu tương ứng ( Integer/Double là 0, Boolean là False, String/Char là Nothing,… )
Mã:
Module MinhHoangBlog
Sub Main()
' Khai báo 2 biến valIIF, valIf để nhận về kết quả tương ứng của IIf và If
Dim valIIF As Object, valIf As Object
' Khai báo biến dùng để kiểm tra
Dim val As Integer = -1
' Thực hiện kiểm tra, xong return kết quả
valIIF = IIf(val >= 0, val, Nothing)
valIf = If(val >= 0, val, Nothing)
' Trường hợp sử dụng IIf: Nothing sẽ return giá trị mặc định của kiểu Object là Nothing
Console.WriteLine("valIIF = " & valIIF) ' Output: valIIF =
' Trường hợp sử dụng If: Nothing sẽ return giá trị mặc định của kiểu Integer là 0
Console.WriteLine("valIf = " & valIf) ' Output: valIf = 0
Console.Read()
End Sub
End Module
Sử dụng IIf kém an toàn hơn If(short-circuits)
Từ phân tích trên chúng ta có thể thấy sử dụng IIf có hiệu suất chậm hơn và đôi khi kém an toàn hơn so với sử dụng If
Mã:
Module MinhHoangBlog
Sub Main()
'Dim str As String = "Hello World"
Dim str As String
' Vì biểu thức điều kiện「str Is Nothing」là True nên KHÔNG THỰC HIỆN lệnh「str.Length」
Console.WriteLine("strLength = {0}", If(str Is Nothing, "N/A", str.Length)) ' Output: strLength = N/A
' Xảy ra lỗi: System.NullReferenceException, khi thực hiện lệnh「str.Length」
Console.WriteLine("strLength = {0}", IIf(str Is Nothing, "N/A", str.Length))
Console.Read()
End Sub
End Module
Vậy tại sao lại có IIf? Dùng IIf trong trường hợp nào?
Chúng ta cùng xem một ví dụ bên dưới:
Mã:
Module MinhHoangBlog
Dim counter As Integer = 0
Sub Main()
Dim isCondition As Boolean = True
Dim str As String = IIf(isCondition, func1, func2)
Console.WriteLine("counter = {0}", counter) ' Output: counter = 2
Console.WriteLine("str = {0}", str) ' Output: str = YES
Console.Read()
End Sub
Function func1() As String
counter = counter + 1
Return "YES"
End Function
Function func2() As String
counter = counter + 1
Return "NO"
End Function
End Module
Sau khi chạy xong đoạn lệnh trên thì chúng ta sẽ nhận được counter = 2, và str = YES.
Ở đây việc tính toán counter là không cần thiết, nhưng đôi khi có những chức năng mà bạn sẽ cần/muốn cả 2 hàm cùng chạy, không quan trọng điều kiện của IF là True hay False. Có thể kết quả từ biến counter này sẽ dùng vào một việc khác trong chương trình sau này.
Kết luận:
Như vậy chúng ta đã cùng nhau tìm hiểu sự khác nhau và những đặc điểm của 2 câu lệnh điều kiện IIf và If. Tùy vào tình huống cụ thể mà chúng ta sử dụng linh hoạt 2 câu lệnh điều kiện này.
Last edited by a moderator: