🔀 Cấu trúc rẽ nhánh (if-else)
🎯 Mục tiêu: Hiểu cách sử dụng if-else trong Kotlin, đặc biệt là tính năng if as expression - điểm khác biệt lớn so với Java.
💡 Khái niệm
Phần tiêu đề “💡 Khái niệm”Trong Kotlin, if không chỉ là statement mà còn là expression - nghĩa là nó có thể trả về giá trị!
// Statement (như Java)if (x > 0) { println("Dương")}
// Expression (Kotlin đặc biệt) - trả về giá trịval result = if (x > 0) "Dương" else "Không dương"📝 Cú pháp cơ bản
Phần tiêu đề “📝 Cú pháp cơ bản”if đơn giản
Phần tiêu đề “if đơn giản”val age = 20
if (age >= 18) { println("Bạn đã đủ tuổi")}if-else
Phần tiêu đề “if-else”val score = 75
if (score >= 50) { println("Đậu")} else { println("Rớt")}if-else if-else
Phần tiêu đề “if-else if-else”val score = 85
if (score >= 90) { println("Xuất sắc")} else if (score >= 80) { println("Giỏi")} else if (score >= 70) { println("Khá")} else if (score >= 50) { println("Trung bình")} else { println("Yếu")}⭐ if as Expression - Tính năng đặc biệt
Phần tiêu đề “⭐ if as Expression - Tính năng đặc biệt”Đây là điểm khác biệt quan trọng nhất của Kotlin so với Java:
val a = 10val b = 20
// if trả về giá trịval max = if (a > b) a else bprintln(max) // 20
// Tương đương với ternary operator trong Java/C// Java: int max = (a > b) ? a : b;Với blocks
Phần tiêu đề “Với blocks”val score = 85
val grade = if (score >= 90) { println("Excellent!") "A" // Giá trị cuối cùng được trả về} else if (score >= 80) { println("Good!") "B"} else if (score >= 70) { "C"} else { "D"}
println("Grade: $grade") // Grade: B🔍 So sánh với Ternary Operator
Phần tiêu đề “🔍 So sánh với Ternary Operator”Kotlin không có ternary operator ? : vì if-else expression đã đủ ngắn gọn:
// Kotlinval max = if (a > b) a else b
// Java (ternary)// int max = a > b ? a : b;
// Kotlin one-linerval status = if (isOnline) "Online" else "Offline"val displayName = if (name.isNotBlank()) name else "Guest"🧩 Kết hợp với các operators
Phần tiêu đề “🧩 Kết hợp với các operators”Elvis operator thay thế if-else cho null check
Phần tiêu đề “Elvis operator thay thế if-else cho null check”val name: String? = null
// if-elseval displayName = if (name != null) name else "Guest"
// Elvis operator (ngắn gọn hơn)val displayName2 = name ?: "Guest"Kết hợp với logical operators
Phần tiêu đề “Kết hợp với logical operators”val age = 25val hasTicket = trueval isVIP = false
val canEnter = if (age >= 18 && hasTicket || isVIP) { "Được vào"} else { "Không được vào"}📋 Nested if (if lồng nhau)
Phần tiêu đề “📋 Nested if (if lồng nhau)”val age = 25val hasID = true
if (age >= 18) { if (hasID) { println("Được đăng ký") } else { println("Cần có CMND") }} else { println("Chưa đủ tuổi")}
// Viết gọn hơn với &&if (age >= 18 && hasID) { println("Được đăng ký")} else if (age >= 18) { println("Cần có CMND")} else { println("Chưa đủ tuổi")}🛠️ Thực hành
Phần tiêu đề “🛠️ Thực hành”Bài tập 1: Kiểm tra số chẵn/lẻ
fun main() { val number = 7
// TODO: In ra "Chẵn" hoặc "Lẻ"}Lời giải:
fun main() { val number = 7
val result = if (number % 2 == 0) "Chẵn" else "Lẻ" println("$number là số $result") // 7 là số Lẻ}Bài tập 2: Xếp loại học lực
fun main() { val score = 85.5
// TODO: Xếp loại theo thang điểm: // >= 90: Xuất sắc // >= 80: Giỏi // >= 70: Khá // >= 50: Trung bình // < 50: Yếu}Lời giải:
fun main() { val score = 85.5
val grade = if (score >= 90) { "Xuất sắc" } else if (score >= 80) { "Giỏi" } else if (score >= 70) { "Khá" } else if (score >= 50) { "Trung bình" } else { "Yếu" }
println("Điểm: $score → Xếp loại: $grade")}Bài tập 3: Tính giá vé xem phim
fun main() { val age = 15 val isStudent = true val dayOfWeek = "Tuesday" // Thứ 3 giảm giá
// TODO: Tính giá vé // Giá gốc: 100,000 // Dưới 12 tuổi: 50% // Sinh viên: 30% // Thứ 3: thêm 20%}Lời giải:
fun main() { val age = 15 val isStudent = true val dayOfWeek = "Tuesday"
val basePrice = 100_000
var discount = if (age < 12) { 0.5 } else if (isStudent) { 0.3 } else { 0.0 }
// Cộng thêm giảm giá thứ 3 if (dayOfWeek == "Tuesday") { discount += 0.2 }
val finalPrice = basePrice * (1 - discount)
println("Giá gốc: ${"%,d".format(basePrice)} VNĐ") println("Giảm giá: ${(discount * 100).toInt()}%") println("Thành tiền: ${"%,.0f".format(finalPrice)} VNĐ")}📱 Trong Android
Phần tiêu đề “📱 Trong Android”// Xử lý visibilitybinding.errorText.visibility = if (hasError) View.VISIBLE else View.GONE
// Set text colorbinding.statusText.setTextColor( if (isOnline) Color.GREEN else Color.RED)
// Conditional navigationval destination = if (isLoggedIn) { R.id.homeFragment} else { R.id.loginFragment}navController.navigate(destination)
// Jetpack Compose@Composablefun Greeting(name: String?) { Text( text = if (name != null) "Hello, $name!" else "Hello, Guest!", color = if (name != null) Color.Blue else Color.Gray )}⚠️ Lưu ý quan trọng
Phần tiêu đề “⚠️ Lưu ý quan trọng”✅ Checklist - Tự kiểm tra
Phần tiêu đề “✅ Checklist - Tự kiểm tra”Sau bài học này, bạn có thể:
- Sử dụng if, if-else, if-else if-else
- Hiểu và sử dụng if as expression
- Biết rằng Kotlin không có ternary operator
? : - Kết hợp if với logical operators
- Tránh nested if bằng cách dùng
&&hoặcwhen
Tiếp theo: When Expression