Skip to Content
Kotlin📘 Ngôn ngữ Kotlin✅ Boolean và Toán tử Logic

Boolean và Toán tử Logic trong Kotlin

🎯 Mục tiêu: Hiểu kiểu Boolean và các toán tử logic - nền tảng cho điều kiện và control flow.


💡 Khái niệm

Boolean là kiểu dữ liệu chỉ có 2 giá trị: true hoặc false. Đây là nền tảng cho mọi quyết định trong lập trình.

val isActive = true val isCompleted = false if (isActive) { println("Đang hoạt động") }

📝 Khai báo Boolean

// Gán trực tiếp val isStudent = true val hasPermission = false // Từ biểu thức so sánh val age = 25 val isAdult = age >= 18 // true val canDrink = age >= 21 // true // Từ method val name = "Kotlin" val startsWithK = name.startsWith("K") // true val isEmpty = name.isEmpty() // false

⚖️ Toán tử So sánh (Comparison Operators)

Kết quả của so sánh luôn là Boolean:

Toán tửÝ nghĩaVí dụKết quả
==Bằng5 == 5true
!=Khác5 != 3true
>Lớn hơn5 > 3true
<Nhỏ hơn3 < 5true
>=Lớn hơn hoặc bằng5 >= 5true
<=Nhỏ hơn hoặc bằng3 <= 5true
val a = 10 val b = 20 println(a == b) // false println(a != b) // true println(a < b) // true println(a >= 10) // true

So sánh String

val s1 = "Kotlin" val s2 = "Kotlin" val s3 = "kotlin" println(s1 == s2) // true (nội dung) println(s1 == s3) // false (case-sensitive) println(s1.equals(s3, ignoreCase = true)) // true

🔗 Toán tử Logic (Logical Operators)

AND (&&) - Và

Trả về true khi cả hai điều kiện đều true:

val age = 25 val hasLicense = true val canDrive = age >= 18 && hasLicense println(canDrive) // true // Truth table // true && true = true // true && false = false // false && true = false // false && false = false

OR (||) - Hoặc

Trả về true khi ít nhất một điều kiện true:

val isWeekend = true val isHoliday = false val dayOff = isWeekend || isHoliday println(dayOff) // true // Truth table // true || true = true // true || false = true // false || true = true // false || false = false

NOT (!) - Phủ định

Đảo ngược giá trị Boolean:

val isActive = true println(!isActive) // false println(!false) // true val isEmpty = false if (!isEmpty) { println("Có dữ liệu") }

⚡ Short-circuit Evaluation

Kotlin dùng lazy evaluation cho &&||:

// && dừng ngay khi gặp false val result1 = false && expensiveFunction() // Không gọi expensiveFunction() // || dừng ngay khi gặp true val result2 = true || expensiveFunction() // Không gọi expensiveFunction()

Ứng dụng thực tế:

// Kiểm tra null trước khi gọi method val name: String? = null val isLong = name != null && name.length > 10 // Safe! // ❌ Nếu đổi thứ tự sẽ crash // val isLong = name.length > 10 && name != null // NullPointerException!

🎯 Kết hợp nhiều điều kiện

Sử dụng dấu ngoặc để rõ ràng

val age = 25 val hasTicket = true val isVIP = false // Không rõ ràng val canEnter = age >= 18 && hasTicket || isVIP // Rõ ràng hơn val canEnter1 = (age >= 18 && hasTicket) || isVIP // true val canEnter2 = age >= 18 && (hasTicket || isVIP) // true

[!TIP] Luôn dùng dấu ngoặc () khi kết hợp &&|| để code dễ đọc và tránh lỗi.

Thứ tự ưu tiên

! (NOT) > && (AND) > || (OR)
val result = !true || false && true // = false || false // = false

🔧 Boolean methods hữu ích

val list = listOf(1, 2, 3, 4, 5) // any - ít nhất một phần tử thỏa điều kiện println(list.any { it > 3 }) // true // all - tất cả phần tử thỏa điều kiện println(list.all { it > 0 }) // true println(list.all { it > 3 }) // false // none - không phần tử nào thỏa điều kiện println(list.none { it > 10 }) // true

🛠️ Thực hành

Bài tập 1: Kiểm tra năm nhuận

fun main() { val year = 2024 // TODO: Năm nhuận nếu: // - Chia hết cho 4 VÀ không chia hết cho 100 // - HOẶC chia hết cho 400 }

Lời giải:

fun main() { val year = 2024 val isLeapYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) println("Năm $year ${if (isLeapYear) "là" else "không là"} năm nhuận") // Output: Năm 2024 là năm nhuận }

Bài tập 2: Kiểm tra đủ điều kiện đăng ký

fun main() { val age = 20 val hasID = true val hasParentConsent = false // TODO: Đủ điều kiện nếu: // - >= 18 tuổi VÀ có CMND // - HOẶC < 18 tuổi VÀ có CMND VÀ có phụ huynh đồng ý }

Lời giải:

fun main() { val age = 20 val hasID = true val hasParentConsent = false val isEligible = (age >= 18 && hasID) || (age < 18 && hasID && hasParentConsent) println("Đủ điều kiện: $isEligible") // true }

Bài tập 3: Validate form đăng nhập

fun main() { val username = "bumbii" val password = "Kotlin123!" // TODO: Valid nếu: // - Username: 4-20 ký tự, không rỗng // - Password: >= 8 ký tự, có chữ hoa, có số }

Lời giải:

fun main() { val username = "bumbii" val password = "Kotlin123!" val isUsernameValid = username.isNotBlank() && username.length in 4..20 val isPasswordValid = password.length >= 8 && password.any { it.isUpperCase() } && password.any { it.isDigit() } val isFormValid = isUsernameValid && isPasswordValid println("Username valid: $isUsernameValid") // true println("Password valid: $isPasswordValid") // true println("Form valid: $isFormValid") // true }

📱 Trong Android

// Visibility condition binding.errorText.isVisible = errorMessage.isNotBlank() // Enable/disable button binding.submitButton.isEnabled = emailEditText.text.isNotBlank() && passwordEditText.text.length >= 8 // Compound conditions trong when val userState = when { !isNetworkAvailable -> UserState.Offline !isLoggedIn -> UserState.NotAuthenticated isAdmin -> UserState.Admin else -> UserState.RegularUser }

⚠️ Lưu ý quan trọng

[!WARNING] == so sánh nội dung, === so sánh reference:

val a = "hello" val b = "hello" val c = String("hello".toCharArray()) println(a == b) // true (nội dung giống) println(a === b) // true (cùng string pool) println(a == c) // true (nội dung giống) println(a === c) // false (khác reference)

[!CAUTION] Không so sánh Float/Double bằng ==:

val a = 0.1 + 0.2 val b = 0.3 println(a == b) // false! (do floating-point precision) // Dùng epsilon comparison val epsilon = 0.0001 println(kotlin.math.abs(a - b) < epsilon) // true

✅ Checklist - Tự kiểm tra

Sau bài học này, bạn có thể:

  • Khai báo và sử dụng Boolean
  • Sử dụng toán tử so sánh: ==, !=, <, >, <=, >=
  • Sử dụng toán tử logic: &&, ||, !
  • Hiểu short-circuit evaluation
  • Kết hợp nhiều điều kiện với dấu ngoặc
  • Phân biệt == (equality) và === (identity)

Tiếp theo: Null Safety

Last updated on