Skip to Content
Kotlin📘 Ngôn ngữ KotlinGiá trị (Values) và Kiểu dữ liệu (Data Types)

Giá trị (Values) và Kiểu dữ liệu (Data Types) trong Kotlin

1. Giới thiệu

Kotlin là ngôn ngữ statically typed (kiểu tĩnh), nghĩa là kiểu dữ liệu của biến được xác định tại compile-time. Tuy nhiên, Kotlin có khả năng type inference (suy luận kiểu) nên bạn không phải luôn khai báo kiểu tường minh.

2. Các kiểu dữ liệu cơ bản trong Kotlin

2.1. Kiểu số (Numbers)

Kotlin cung cấp các kiểu số sau:

KiểuKích thướcGiá trị minGiá trị max
Byte8 bit-128127
Short16 bit-32,76832,767
Int32 bit-2,147,483,6482,147,483,647
Long64 bit-9,223,372,036,854,775,8089,223,372,036,854,775,807
Float32 bit~6-7 chữ số thập phân
Double64 bit~15-16 chữ số thập phân
val byteValue: Byte = 127 val shortValue: Short = 32000 val intValue: Int = 2025 val longValue: Long = 9876543210L // Chú ý chữ L ở cuối val floatValue: Float = 3.14f // Chú ý chữ f ở cuối val doubleValue: Double = 3.141592653589793

Lưu ý quan trọng:

  • Số nguyên mặc định là Int
  • Số thập phân mặc định là Double
  • Phải thêm L cho Longf cho Float

2.2. Kiểu Boolean

val isKotlinFun: Boolean = true val isPythonBetter: Boolean = false val result = (10 > 5) // true

2.3. Kiểu ký tự (Char)

val letter: Char = 'A' val digit: Char = '9' val symbol: Char = '@' // Không thể gán chuỗi cho Char // val wrong: Char = "A" // Lỗi!

2.4. Kiểu chuỗi (String)

val name: String = "Kotlin" val message: String = "Hello, Bumbii Academy!" val multiLine: String = """ Đây là chuỗi nhiều dòng trong Kotlin """.trimIndent()

3. Type Inference (Suy luận kiểu)

Kotlin tự động suy luận kiểu dữ liệu:

val age = 25 // Int val price = 99.99 // Double val name = "Alice" // String val isValid = true // Boolean val letter = 'K' // Char // Có thể khai báo tường minh nếu cần val specificLong: Long = 100 val specificFloat: Float = 100f

4. Nullable Types (Kiểu có thể null)

Một trong những tính năng quan trọng nhất của Kotlin là Null Safety. Mặc định, các biến không thể là null:

var name: String = "Kotlin" // name = null // Lỗi biên dịch! // Để cho phép null, thêm dấu ? var nullableName: String? = "Kotlin" nullableName = null // OK

Chúng ta sẽ học chi tiết về Null Safety trong bài riêng.

5. Kiểm tra kiểu dữ liệu

5.1. Sử dụng toán tử is

val value: Any = "Hello" if (value is String) { println("Đây là chuỗi: ${value.length}") } if (value !is Int) { println("Không phải số nguyên") }

5.2. Smart Casting

Kotlin tự động chuyển kiểu sau khi kiểm tra:

fun printLength(obj: Any) { if (obj is String) { // obj tự động được cast thành String println("Độ dài: ${obj.length}") } }

6. Chuyển đổi kiểu dữ liệu

Kotlin không tự động chuyển đổi kiểu số. Phải sử dụng các hàm chuyển đổi tường minh:

val intValue: Int = 10 val longValue: Long = intValue.toLong() val doubleValue: Double = intValue.toDouble() val stringValue: String = intValue.toString() // Các hàm chuyển đổi: // toByte(), toShort(), toInt(), toLong() // toFloat(), toDouble() // toChar(), toString()

Lỗi thường gặp:

val a: Int = 10 val b: Long = 20 // val sum = a + b // Lỗi: Type mismatch // Đúng: val sum = a.toLong() + b // hoặc val sum2 = a + b.toInt()

7. Kiểu Any, Unit, Nothing

7.1. Any - Kiểu cha của tất cả

Any tương tự Object trong Java hoặc object trong Python:

val anything: Any = "Hello" val number: Any = 42 val flag: Any = true

7.2. Unit - Kiểu không trả về giá trị

Unit tương tự void trong Java hoặc None trong Python:

fun printMessage(): Unit { println("Hello") } // Có thể bỏ qua Unit fun printMessage() { println("Hello") }

7.3. Nothing - Kiểu không bao giờ trả về

Nothing dùng cho các hàm luôn throw exception:

fun fail(message: String): Nothing { throw IllegalStateException(message) }

8. So sánh với Python

KotlinPythonGhi chú
IntintSố nguyên
DoublefloatSố thực
StringstrChuỗi
BooleanboolTrue/False
CharKhông cóKý tự đơn
AnyobjectKiểu cha
UnitNoneKhông trả về
String?Optional[str]Nullable

9. Ví dụ thực tế

fun main() { // Khai báo các biến với type inference val age = 25 val height = 1.75 val name = "Nguyễn Văn A" val isStudent = true println("Tên: $name") println("Tuổi: $age") println("Chiều cao: $height m") println("Là sinh viên: $isStudent") // Kiểm tra kiểu println("\nKiểu dữ liệu:") println("age là Int: ${age is Int}") println("height là Double: ${height is Double}") println("name là String: ${name is String}") // Chuyển đổi kiểu val ageAsDouble = age.toDouble() val heightAsString = height.toString() println("\nSau khi chuyển đổi:") println("age as Double: $ageAsDouble") println("height as String: $heightAsString") }

10. Best Practices

  1. Sử dụng type inference khi kiểu dữ liệu rõ ràng
  2. Khai báo kiểu tường minh khi cần làm rõ ý định
  3. Tránh sử dụng Any trừ khi thực sự cần thiết
  4. Sử dụng nullable types (?) khi giá trị có thể null
  5. Chuyển đổi kiểu tường minh thay vì dựa vào auto-casting

📝 Tóm tắt

  • Kotlin là ngôn ngữ statically typed với type inference
  • Các kiểu số: Byte, Short, Int, Long, Float, Double
  • Kiểu cơ bản khác: Boolean, Char, String
  • Null Safety: Thêm ? để cho phép null
  • Sử dụng is để kiểm tra kiểu và smart casting
  • Chuyển đổi kiểu tường minh với toXxx()
Last updated on