Bỏ qua để đến nội dung

⚖️ Toán tử Quan hệ/So sánh

🎯 Mục tiêu: Nắm vững các toán tử so sánh trong Kotlin - nền tảng cho điều kiện và logic.


Toán tử so sánh dùng để so sánh hai giá trị, kết quả luôn là Boolean (true hoặc false).

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

val x = 10
val y = 20
println(x < y) // true
println(x > y) // false
println(x == 10) // true
println(y != 20) // false
val intVal = 10
val longVal = 10L
val doubleVal = 10.0
// So sánh giá trị, tự động convert
println(intVal == longVal.toInt()) // true
println(intVal.toDouble() == doubleVal) // true
// Cẩn thận với floating point!
println(0.1 + 0.2 == 0.3) // false! (do precision)

So sánh nội dung:

val s1 = "Kotlin"
val s2 = "Kotlin"
val s3 = "kotlin"
println(s1 == s2) // true (cùng nội dung)
println(s1 == s3) // false (khác case)
// Không phân biệt hoa/thường
println(s1.equals(s3, ignoreCase = true)) // true

So sánh reference (cùng object trong memory):

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

compareTo() trả về:

  • Số âm: Nhỏ hơn
  • 0: Bằng
  • Số dương: Lớn hơn
val a = "apple"
val b = "banana"
println(a.compareTo(b)) // -1 (a < b theo alphabet)
println(a < b) // true
println(a > b) // false

val age = 25
// Kiểm tra trong range
println(age in 18..65) // true (18 <= age <= 65)
println(age !in 0..17) // true (không trong 0-17)
// Với collections
val fruits = listOf("apple", "banana", "orange")
println("apple" in fruits) // true
println("mango" in fruits) // false

data class User(val name: String, val age: Int)
val user1 = User("Alice", 25)
val user2 = User("Alice", 25)
val user3 = User("Bob", 30)
println(user1 == user2) // true (cùng giá trị)
println(user1 === user2) // false (khác reference)
println(user1 == user3) // false
class Person(val name: String)
val p1 = Person("Alice")
val p2 = Person("Alice")
println(p1 == p2) // false! (khác reference)
println(p1 === p2) // false

Implement Comparable để dùng với <, >, etc:

data class Product(val name: String, val price: Double) : Comparable<Product> {
override fun compareTo(other: Product): Int {
return this.price.compareTo(other.price)
}
}
fun main() {
val phone = Product("Phone", 15000000.0)
val laptop = Product("Laptop", 25000000.0)
println(phone < laptop) // true
println(phone > laptop) // false
println(phone == laptop) // false
}

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

fun main() {
val age = 17
val hasParentConsent = true
// TODO: In ra có được đăng ký không
// Điều kiện: >= 18 tuổi HOẶC < 18 có sự đồng ý của phụ huynh
}

Lời giải:

fun main() {
val age = 17
val hasParentConsent = true
val canRegister = age >= 18 || (age < 18 && hasParentConsent)
println("Tuổi: $age")
println("Có đồng ý của phụ huynh: $hasParentConsent")
println("Được đăng ký: $canRegister") // true
}

Bài tập 2: So sánh điểm

fun main() {
val scores = listOf(85, 92, 78, 65, 98)
val passingScore = 75
// TODO: Đếm số lượng đạt và không đạt
}

Lời giải:

fun main() {
val scores = listOf(85, 92, 78, 65, 98)
val passingScore = 75
val passed = scores.count { it >= passingScore }
val failed = scores.count { it < passingScore }
println("Đạt: $passed") // 4
println("Không đạt: $failed") // 1
}

Bài tập 3: Xếp loại học lực

fun main() {
val score = 85.5
// TODO: Xếp loại:
// >= 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 = when {
score >= 90 -> "Xuất sắc"
score >= 80 -> "Giỏi"
score >= 70 -> "Khá"
score >= 50 -> "Trung bình"
else -> "Yếu"
}
println("Điểm: $score - Xếp loại: $grade")
// Output: Điểm: 85.5 - Xếp loại: Giỏi
}

// Kiểm tra API level
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Sử dụng feature cho Android 8.0+
}
// So sánh versions
val currentVersion = "2.1.0"
val minVersion = "2.0.0"
if (currentVersion >= minVersion) {
// OK để tiếp tục
}
// Filter list
val users = listOf(
User("Alice", 25),
User("Bob", 17),
User("Charlie", 30)
)
val adults = users.filter { it.age >= 18 }


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

  • Sử dụng 6 toán tử so sánh: ==, !=, <, >, <=, >=
  • Phân biệt == (structural equality) và === (referential equality)
  • So sánh String không phân biệt hoa/thường với equals(ignoreCase = true)
  • Sử dụng in để kiểm tra phạm vi
  • Implement Comparable cho custom class
  • Cẩn thận khi so sánh floating-point numbers

Tiếp theo: Cấu trúc rẽ nhánh (if-else)