12/08/2018, 16:26

Kotlin cơ bản - Bài 1: Kiểu dữ liệu cơ bản

Trong bài này, chúng ta sẽ cùng tìm hiểu về các kiểu dữ liệu cơ bản trong Kotlin, và sự khác nhau giữa các kiểu dữ liệu cơ bản của Kotlin so với Java. Các kiểu dữ liệu cơ bản bao gồm những nhóm sau: số (numbers), kí tự (characters), logic (boolean), mảng (arrays) và chuỗi (string) Về cơ bản thì ...

Trong bài này, chúng ta sẽ cùng tìm hiểu về các kiểu dữ liệu cơ bản trong Kotlin, và sự khác nhau giữa các kiểu dữ liệu cơ bản của Kotlin so với Java. Các kiểu dữ liệu cơ bản bao gồm những nhóm sau: số (numbers), kí tự (characters), logic (boolean), mảng (arrays) và chuỗi (string)

Về cơ bản thì dữ liệu kiểu số hầu như tương tự so với Java, nhưng không phải là giống một cách hoàn toàn. Sau đây là những kiểu cơ bản:

Kiểu dữ liệu Tên Độ lớn bit
Số thực (lớn) Double 64
Số thực Float 32
Số nguyên (lớn) Long 64
Số nguyên Int 32
Số nguyên (nhỏ) Short 16
Số nhị phân Byte 8

Literal Constants

Literal là một giá trị mà nó thể hiện chính nó (vd: 3.14, "Hello World", 'c' là những literal) Đây là ví dụ về những dạng literal constants trong Kotlin (và hầu hết các ngôn ngữ khác):

Thập phân: 123 Thập phân lớn (Long - thêm l hoặc L ở cuối các số thập phân): 123L Thập lục phân: 0x0F Nhị phân: 0b00001011

Kotlin cũng hỗ trợ những literal constants với các kiểu số thực:

Double: 123.5, 123.5e10 Float (thêm l hoặc F ở cuối các số thập phân): 123.5f

Dấu gạch chân giữa các số

Trong Kotlin, bạn có thể thêm các dấu gạch dưới vào giữa các số để khiến nó trở nên dễ đọc hơn khi nhìn vào code mà không ảnh hưởng đến giá trị của số đó. Dưới đây là các ví dụ về gán giá trị đã được thêm gạch dưới cho biến (cách khai báo biến, gán giá trị sẽ được nói chi tiết ở những bài sau)

val motTrieu = 1_000_000 // Giá trị thật vẫn là 1000000
val theTinDung = 1234_5678_9012_3456L
val maSoAnNinh = 999_99_9999L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010

Dữ liệu kiểu kí tự có từ khóa là Char. Dữ liệu kiểu kí tự không thể sử dụng trực tiếp dưới dạng số, nhưng có thể ép về kiểu dạng số bằng một số hàm hỗ trợ (mình sẽ nói rõ hơn ở những bài sau). Ví dụ bạn không thể so sánh một kí tự với một số:

if ('b' == 1) { // Lỗi: không cùng kiểu dữ liệu
    // ...
}

Kí tự được đặt trong cặp dấu nháy đơn: 'e'. Một số các kí tự đặc biệt (như tab, dấu cách, xuống dòng, dấu nháy, dấu đô-la) không thể hiển thị đơn giản bằng cách gõ vào, mà phải được escape bằng dấu sổ chéo để tránh gây nhầm lẫn với các kí tự của ngôn ngữ.

Những kí tự được phép sử dụng: , , , , ', ", và *$$ . Để thể hiện các kí tự đặc biệt khác, bạn phải sử dụng mã encode Unicode của các kí tự đó. Vd kí tự ❤ dưới dạng Unicode là 'u2764'.

Bạn có thể tham khảo bảng kí tự Unicode tại đây

Kiểu dữ liệu logic có từ khóa là Boolean, và có 2 giá trị là true (đúng) và false (sai). Kiểu dữ liệu logic thường được sử dụng trong các câu điều kiện (if, else if, while, ...), và là kết quả của những toán tử so sánh như: || (hoặc), && (và), ! (phủ định) - mình sẽ nói chi tiết ở các bài sau

Mảng chỉ đơn giản là một tập hợp các giá trị có cùng (hoặc khác) kiểu với nhau.

Thông thường, mảng dùng để lưu trữ các giá trị có cùng một mối liên quan nào đó. Ví dụ như một mảng các học sinh, một mảng các bảng chữ cái tiếng Anh,...

Mảng khi được tạo ra sẽ có một kích cỡ nhất định, bạn hãy tưởng tượng nó như một chiếc hộp có nhiều ngăn trống. Bạn có thể đặt đồ vào những ngăn chứa trống, hoặc bỏ đồ từ ngăn chứa ra, hoặc thay đồ này bằng đồ khác, nhưng bạn không thể thêm hay bớt một ngăn chứa đi).

Một dạng khác của mảng đó là danh sách (Collections) có thể thay đổi, thêm bớt số lượng phần tử một cách thoải mái. Collections sẽ được áp dụng rất nhiều khi chúng ta làm việc với các đối tượng cao hơn.

Dữ liệu kiểu chuỗi có từ khóa là String. String thực chất là một mảng các kí tự (Char), nhưng có điều mảng đó không thể thay đổi một phần tử bất kì nào (những mảng/danh sách mà không thể thay đổi phần tử trong nó được gọi là immutable). Nếu bạn thay đổi bất kì một kí tự nào, nó sẽ không còn là nó nữa mà trở thành một chuỗi mới hoàn toàn!

Vì String thực chất chỉ là mảng các kí tự, nên nó hoàn toàn có thể sử dụng các kí tự đặc biệt như tab, xuống dòng giống như kiểu Char (và các kí tự đặc biệt này phải được escape bằng dấu sổ chéo)

Với một số trường hợp, bạn muốn gõ một đoạn văn bản như này hoặc phức tạp hơn:

 lorem ipsum dolor sit amet abc
     lorem ipsum dolor sit
             lorem ipsum dolor

Với java:

String text = "lorem ipsum dolor sit amet abc 
" +
    "	 lorem ipsum dolor sit 
" +
    "		 lorem ipsum dolor 
";

Với 3 dòng thì chắc không vấn đề gì, nhưng với rất nhiều dòng, chẳng lẽ cứ phải rồi lại để xuống dòng và tab sao? Đừng lo, Kotlin sẽ giúp bạn làm điều đó cực kì đơn giản

val text = """
lorem ipsum dolor sit amet abc
     lorem ipsum dolor sit
             lorem ipsum dolor
"""

Ơ thế nhỡ code mình đang tab rất sâu, giờ lại phải cho text ra sát lề à? Nhìn code chả đẹp tí nào cả? Đừng lo, chỉ cần dùng hàm trimMargin() viết sẵn (bạn có thể truyền vào hàm trimMargin kí tự mà bạn muốn dùng làm lề, mặc định là | )

    val text = """
            |lorem ipsum dolor sit amet abc
            |     lorem ipsum dolor sit
            |             lorem ipsum dolor
    """.trimMargin()

Trong String bạn còn có thể truyền thẳng biến vào mà không phải dùng String.format() hay cộng chuỗi như Java nữa. Thật tuyệt!

val price = 5
val resultText = "Total: $price" // Total: 5

val arr = arrayOf(1, 2, 3, 4, 5)
val resultText2 = "Length: ${arr.length}" //Length: 5
0