|
HỒ LÔ BIẾN |
AI VB.NET HÔNG?
KIỂU BOOLEAN
[Chương Can Chíp] |
Kiểu Boolean của VB.NET có thể mang một trong 3 trị: 2 trị dành cho
True và 1 trị dành cho False. Sở dĩ có 2 trị dành cho True (1
và -1) là vì VB6 sử dụng trị -1, còn các ngôn ngữ khác thì xài trị 1. Để dân lập
trình khỏi kiểm tra mỗi biểu thức Boolean, VB.NET xài luôn 2 trị này.
Rắc rối nằm ở chỗ: khi sử dụng trị True trong biểu thức lô-gích, nó bằng
-1. Nhưng nếu trị này được chuyển đổi thành bất kỳ dạng thức nào khác, nó lại là
1.
Phần khai báo như đoạn mã 1 là cách lập trình không tốt. Nếu mần như vậy, điều
kiện if trở nên mập mờ: cho trị True ngay cả khi biến blnMot
đã được gán trị là 1. |
|
Đoạn mã 1 |
Dim blnTrue As Boolean = True
Dim blnMot As Boolean = 1
Dim blnTruMot As Boolean = -1
Dim blnFalse As Boolean = False
...
If
blnMot = -1 Then
Debug.WriteLine(blnTrue)
Debug.WriteLine(blnMot.ToString)
Debug.WriteLine(Convert.ToString(Convert.ToInt32(blnTruMot)))
End If |
|
Tốt nhất, ta chuyển trị của biến
blnTruMot ra trị nguyên rồi mới so sánh. Việc chuyển đổi này luôn trả về một
trị dương, bất chấp biến đã được gán trị trước đó là gì (đoạn mã 2). |
|
Đoạn mã 2 |
If Convert.ToInt16(blnTruMot) = 1 Then
Debug.WriteLine(blnFalse)
Debug.WriteLine(Convert.ToString(Convert.ToInt32(blnFalse)))
End If |
|
Bạn cần biết thêm: hành vi ToInt16 và ToInt32 của lớp Convert
dùng để chuyển đổi một trị Boolean thành một số nguyên, trị trả về là 1
nếu trị Boolean là True, ngược lại trị trả về là 0. Hình 1 là kết
quả khi cho chạy thử đoạn mã 1 cùng đoạn mã 2. |
|
Hình 1: Kết quả minh họa |
|
 |
|
Để tạo những đoạn mã có thể dùng lâu dài, bạn nên tránh sự chuyển đổi trị thiếu
rõ ràng. Trong trường hợp các trị Boolean, nếu cần kiểm tra đối chiếu với
một trị nguyên, ta nên dùng cách ước lượng tường minh (dùng hành vi ToInt16)
để tránh những kết quả không mong đợi. |
|
|