Trong bài này, bạn sẽ tìm hiểu về các biến, cách tạo chúng và các kiểu dữ liệu cơ bản mà ngôn ngữ lập trình Kotlin hỗ trợ để tạo biến.

Như ta đã biết, biến là một vị trí trong bộ nhớ (vùng lưu trữ) để chứa dữ liệu.

Để chỉ ra vùng lưu trữ, mỗi biến phải được đặt một tên duy nhất (mã định danh). Tìm hiểu thêm về Cách đặt tên một biến trong Kotlin.

1. Làm thế nào để khai báo một biến trong Kotlin?

Để khai báo một biến trong Kotlin, từ khóa var hoặc val được sử dụng. Sau đây là một ví dụ:

var language = "French"
val score = 95

Sự khác biệt trong việc sử dụng var và val sẽ được đề cập sau trong bài viết. Bây giờ, hãy tập trung vào phần khai báo biến.

Đây, language là một biến kiểu String, và score là biến kiểu Int. Bạn không phải chỉ định loại biến; Kotlin sẽ làm điều đó giúp bạn. Trình biên dịch biết điều này là nhờ biểu thức khởi tạo (“French” là một String, và 95 là một giá trị nguyên trong chương trình trên). Điều này được gọi là suy luận kiểu trong lập trình.

Tuy nhiên, bạn có thể chỉ định rõ kiểu dữ liệu nếu bạn muốn:

var language: String = "French"
val score: Int = 95

Chúng ta đã khởi tạo biến trong quá trình khai báo trong các ví dụ trên. Tuy nhiên, không nhất thiết lúc nào cũng phải làm như vậy. Bạn có thể khai báo biến và chỉ định kiểu dữ liệu của nó trong một câu lệnh và khởi tạo biến trong câu lệnh khác ở phần sau trong chương trình.

/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

var language: String      // variable declaration of type String
... .. ...
language = "French"       // variable initialization

val score: Int          // variable declaration of type Int 
... .. ...
score = 95             // variable initialization 

Dưới đây là một vài ví dụ mà máy báo lỗi.

var language           // Error 
language = "French"

Đây, kiểu dữ liệu của biến language  không được chỉ định rõ ràng, đây cũng không phải là biến được khởi tạo trong quá trình khai báo.

var language: String
language = 14         // Error

Ở đây, chúng ta đang cố gắng gán 14 (giá trị số nguyên) cho một biến có kiểu dữ liệu khác ( String).

Sự khác biệt giữa var và val

  • val (Tham chiếu không thay đổi ) – Biến được khai báo sử dụng từ khóa val không thể thay đổi sau khi nó được gán cho một giá trị. Nó tương tự như biến cuối cùng trong Java .
  • var (Tham chiếu có thể thay đổi) – Biến được khai báo bằng từ khóa var có thể được thay đổi sau này trong chương trình. Nó tương ứng với biến Java thông thường.

Dưới đây là một vài ví dụ:

var language = "French"
language = "German"    

Ở đây, biến language được gán lại với giá trị German. Vì biến được khai báo sử dụng từ khóa var, đoạn code này hoạt động bình thường.

val language = "French"
language = "German"      // Error

Bạn không thể gán lại giá trị German cho biến language trong ví dụ trên vì biến được khai báo sử dụng từ khóa val.

Bây giờ, khi đã biết biến trong Kotlin là gì, đã đến lúc tìm hiểu các giá trị khác nhau mà một biến trong Kotlin có thể chứa.

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

Kotlin là một ngôn ngữ được gõ tĩnh như Java. Điều này có nghĩa là, kiểu dữ liệu của biến được trình biên dịch biết trong thời gian biên dịch. Ví dụ,

val language: Int
val marks = 12.3

Ở đây, trình biên dịch biết rằng biến language thuộc kiểu dữ liệu Int, và biến marks thuộc kiểu dữ liệu Double trước khi biên dịch.

Các kiểu dữ liệu tích hợp trong Kotlin có thể được phân loại thành:

  • Số
  • Kí tự
  • Booleans
  • Mảng

2.1 Kiểu dữ liệu số

Các số trong Kotlin tương tự như Java. Có 6 kiểu dữ liệu tích hợp đại diện cho số.

  • Byte
  • Short
  • Int
  • Long
  • Float
  • Double

2.1.1. Byte

  • Kiểu dữ liệu Byte có thể chứa các giá trị từ -128 đến 127 (số nguyên bù hai 8 bit có dấu).
  • Nó được sử dụng thay cho kiểu int hoặc các kiểu dữ liệu số nguyên khác để tiết kiệm bộ nhớ nếu giá trị của biến chắc chắn nằm trong khoảng [-128, 127].
  •  Thí dụ:
/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

fun main(args : Array<String>) {
    val range: Byte = 112
    println("$range")

    // The code below gives error. Why?
    // val range1: Byte = 200
}

Khi bạn chạy chương trình, kết quả sẽ là:

112

2.1.2. Short

  • Kiểu dữ liệu Short có thể có các giá trị từ -32768 đến 32767 (số nguyên bù 2 16 bit có dấu).

Nó được sử dụng thay cho các loại dữ liệu số nguyên khác để tiết kiệm bộ nhớ nếu giá trị của biến chắc chắn nằm trong khoảng [-32768, 32767].

  •  Thí dụ:
fun main(args : Array<String>) {

    val temperature: Short = -11245
    println("$temperature")
}

Khi bạn chạy chương trình, kết quả sẽ là:

-11245

2.1.3. Int

  • Kiểu dữ liệu Int có thể có các giá trị từ-231 đến 231-1 (số nguyên bù 2 32 bit có dấu). Thí dụ:
fun main(args : Array<String>) {

    val score: Int =  100000
    println("$score")
}

Khi bạn chạy chương trình, kết quả sẽ là:

100000
  • Nếu bạn gán một số nguyên trong khoảng từ-231 đến 231-1 cho một biến mà không chỉ định rõ kiểu dữ liệu của nó, biến đó sẽ thuộc kiểu Int. Ví dụ
fun main(args : Array<String>) {

   // score is of type Int
    val score = 10
    println("$score")
}
  • Nếu bạn đang sử dụng IntelliJ IDEA, bạn có thể đặt con trỏ bên trong biến và nhấn tổ hợp phím Ctrl + Shift + P để xem kiểu dữ liệu của nó.

2.1.4.  Long

  • Kiểu dữ liệu Long có thể có các giá trị từ -263  đến 263-1 (số nguyên bù hai 64 bit có dấu).
  • Thí dụ:
fun main(args : Array<String>) {

    val highestScore: Long = 9999
    println("$highestScore")
}
  • Khi bạn chạy chương trình, kết quả sẽ là:
9999
  • Nếu bạn gán một giá trị số nguyên lớn hơn 231-1 hoặc nhỏ hơn -231  cho một biến (mà không chỉ định rõ kiểu dữ liệu của nó), biến sẽ có kiểu Long. Ví dụ,
val distance = 10000000000  // distance variable of type Long
  • Tương tự, bạn có thể sử dụng chữ in hoa L để xác định rằng biến thuộc kiểu dữ liệu Long. Ví dụ,
val distance = 100L    // distance value of type Long

2.1.5.  Double

  • Kiểu dữ liệu double là dấu phẩy động 64 bit chính xác kép. Thí dụ:  
fun main(args : Array<String>) {

    // distance is of type Double
    val distance = 999.5
    println("$distance")
}
  • Khi bạn chạy chương trình, Kết quả sẽ là:
999.5

2.1.6. Float

/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

fun main(args : Array<String>) {

    // distance is of type Float
    val distance = 19.5F
    println("$distance")
}

Khi bạn chạy chương trình, kết quả sẽ là:

19.5
  • Lưu ý rằng, chúng ta đã sử dụng 19.5F thay vì 19.5 trong chương trình trên. Đó là bởi vì 19.5 là một Double literal và bạn không thể gán một giá trị kiểu Double cho một biến thuộc kiểu Float.
  • Để ra lệnh cho trình biên dịch coi 19.5 như một Float, bạn cần sử dụng chữ F ở cuối cùng.
  • Nếu bạn không chắc chắn về việc giá trị số nào mà một biến có thể chứa trong chương trình, bạn có thể chỉ định rằng nó thuộc kiểu Number. Điều này cho phép bạn gán cả giá trị số nguyên và dấu phẩy động cho biến (mỗi lần một giá trị). Ví dụ:

/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

fun main(args : Array<String>) {

    var test: Number = 12.2
    println("$test")

    test = 12
    // Int smart cast from Number
    println("$test")

    test = 120L
    // Long smart cast from Number
    println("$test")
}

Khi bạn chạy chương trình, kết quả sẽ là:

12.2
12
120

Để tìm hiểu thêm, hãy truy cập: phôi thông minh trong Kotlin

2.2. Char

  • Để thể hiện một kí tự trong Kotlin, ta sử dụng kiểu Char.
  • Không giống như trong Java, kiểu Char không được coi là số. Truy cập trang này để tìm hiểu thêm về Kiểu char trong Java .
fun main(args : Array<String>) {

    val letter: Char
    letter = 'k'
    println("$letter")
}

Khi bạn chạy chương trình, kết quả sẽ là:

k

Trong Java, bạn có thể làm như sau:

char letter = 65;

Thế nhưng, đoạn code dưới đây sẽ bị báo lỗi trong Kotlin.

var letter: Char = 65  // Error

2.3. Boolean

  • Kiểu dữ liệu Boolean  có thể có hai giá trị,  true hoặc  false.
  • Thí dụ:
fun main(args : Array<String>) {

    val flag = true
    println("$flag")
}
  • Booleans được sử dụng trong các câu lệnh ra quyết định (sẽ được thảo luận trong chương sau).

2.4. Mảng trong Kotlin

  • Mảng là một thùng chứa dữ liệu (giá trị) của một kiểu dữ liệu duy nhất. Ví dụ: bạn có thể tạo một mảng có thể chứa 100 giá trị kiểu  Int .
  • Trong Kotlin, mảng được đại diện bởi  class Array . Class này có các hàm get và các  set , thuộc tính size  và một vài hàm member hữu ích khác.

Để tìm hiểu chi tiết về mảng, hãy truy cập: Mảng trong Kotlin

2.5. Chuỗi trong Kotlin

  • Trong Kotlin, các chuỗi được đại diện bởi class String. Các chuỗi ký tự như “this is a string” được triển khai như một instance của class này.

Để tìm hiểu chi tiết về chuỗi, hãy truy cập: Chuỗi Kotlin

Tài liệu từ cafedev:

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!