Kotlin Bài 2: Biến và các kiểu dữ liệu cơ bản trong Kotlin

Xin chào, mình là Dương Vũ. Hôm nay mình sẽ trình bày về các kiểu dữ liệu cơ bản trong Kotlin. Sau bài này các bạn có thể biết cách khai báo biến, hằng số. Đồng thời các bạn cũng có kiến thức về các kiểu dữ liệu cơ bản trong Kotlin (mà thực ra là trong mọi ngôn ngữ lập trình). Các bạn cũng có kiến thức về mảng, danh sách, cách thức làm việc với chúng trong Kotlin. Yeah, bắt đầu nhé!

[toc]

Biến và hằng số

Biến

Trong Kotlin, chúng ta dùng từ khoá var để khai báo 1 biến và dùng từ khoá val để khai báo 1 hằng. Biến có thể thay đổi được giá trị còn hằng số thì không. Ví dụ, ta có thể khai báo biến như sau:

var myName:String = "Duong Vu"
var myAge:Int = 25
var isMeGay:Boolean = false

Ở trên đây mình đã khai báo các biến myName, myAge, isMeGay. Mỗi biến đều được khai báo kiểu dữ liệu và giá trị ban đầu của nó. Chắc các bạn cũng dễ dàng nhận thấy cú pháp khai báo biến sẽ là:

var tên_biến:kiểu_dữ_liệu = giá_trị_khởi_tạo

Cách khai báo biến này cũng tương tự với cách khai báo bên Java:

String myName = "Duong Vu";
int myAge = 25;
boolean isMeGay = false;

Tuy nhiên ở bên Kotlin có 1 sự tiện lợi hơn Java, đó là khi khai báo biến ta có thể không cần chỉ ra kiểu dữ liệu. Ví dụ như sau:

var myName = "Duong Vu" //biến myName sẽ được hiểu là kiểu String và có giá trị là Duong Vu
var myAge = 25 // biến myAge sẽ được hiểu là kiểu Int và có giá trị là 25
var isMeGay = true //biến isMeGay sẽ được hiểu là kiểu Boolean và có giá trị là false

Có nghĩa là khi ta khai báo biến có giá trị khởi tạo, Kotlin sẽ tự động gán kiểu cho biến dựa vào giá trị khởi tạo đó.

Hằng số

Hằng số hoàn toàn tương tự như biến số. Chỉ khác là chúng không thể thay đổi giá trị như biến số. Hằng số được khai báo bởi từ khoá val:

val pi = 3.14f
val daysOfWeek = 7
val hoursOfDay = 24

Lưu ý: nếu bạn cố thay đổi giá trị của 1 hằng số, bạn sẽ nhận được thông báo sau: Val cannot be reassigned (hằng số không thể được gán lại gía trị). Ví dụ thế này

val pi = 3.14f
pi = 6.28f

Bạn sẽ nhận ngay thông báo lỗi từ IDE. Hãy tự thử nghiệm thêm nhé!

Các kiểu dữ liệu cơ bản

Kiểu dữ liệu số

Trong Kotlin có nhiều kiểu dữ liệu để biểu diễn số. Nhưng về cơ bản cũng tương tự Java thôi. Kotlin cung cấp những kiểu dữ liệu số sau:

Các kiểu số nguyên

  • Long – 64 bit
  • Int – 32 bit
  • Short – 16 bit
  • Byte – 8 bit

Các kiểu số thực

  • Double – 64 bit
  • Float – 32 bit

Ví dụ:

var varInt = 63
var varLong = 4L
var varFloat = 9.32F
var varDouble = 55.55
var varBinary = 0b000111
var varHexadecimal = 0x1F

Lưu ý: Khi khởi tạo 1 biến số thực, mặc định Kotlin sẽ hiểu biến đó có kiểu Double. Ví dụ:

var pi = 3.4 //Khi này biến pi được hiểu là kiểu Double

Nếu muốn khởi tạo 1 biến dạng Float ta cần thêm ký tự f hoặc F đằng sau giá trị:

var pi = 3.4f //Khi này biến pi được hiểu là kiểu Float

Tương tự với biến số nguyên, mặc định sẽ được hiểu là kiểu Int:

var year = 2018 // Khi này biến year được hiểu là kiểu Int

Nếu muốn đưa nó về dạng long, ta thêm ký tự L sau giá trị:

var year = 2018L // Khi này biến year được hiểu là kiểu Long

Chuyển đổi giữa các kiểu dữ liệu số

Tất cả các kiểu dữ liệu số đều được cung cấp các hàm để chuyển đổi từ kiểu dữ liệu này sang kiểu dữ liệu khác. Ví dụ:

var myInt = 100 // Khởi tạo biến myInt với giá trị 100
var myDouble = myInt.toDouble() //chuyển đổi sang kiểu Double
var myLong = myInt.toLong() //chuyển đổi sang kiểu Long
var myFloat = myInt.toFloat() //chuyển đổi sang kiểu Float
var myByte = myInt.toByte() //chuyển đổi sang kiểu Byte

Như vậy mình có thể convert 1 biến từ kiểu này sang kiểu kia 1 cách dễ dàng.

Lưu ý: Ta không thể trực tiếp gán giá trị của 2 biến khác kiểu như sau:

val myInt = 100
val myLong: Long = myNumber // lỗi: Type mismatch

Kiểu dữ liệu Boolean

Kiểu Boolean trong Kotlin hoàn toàn giống với Java. Giá trị của kiểu dữ liệu này là true hoặc false. Các toán tử đối với kiểu Boolean cũng hoàn toàn giống Java:

  • || (hoặc)
  • && (và)
  • ! (phủ định)

Ví dụ:

val myTrue = true
val myFalse = false
 
val a = 1
val b = 3
val c = 4
val d = 6
 
val result = a < b && d > c // result có giá trị true

Kiểu dữ liệu String

String biểu diễn dữ liệu dạng chuỗi ký tự. Trong Kotlin có 2 dạng String.

  • Dạng thông thường: các ký tự trong String đc biểu diễn trong cặp ngoặc kép, dạng này khá giống với String trong Java:
var myName = "My name is Duong Vu"

Khi muốn hiển thị các ký tự đặc biệt ,ví dụ như xuống dòng, ta phải dùng cách sử dụng ký hiệu. Ví dụ để tạo 1 string chứa 3 dòng ta phải làm như sau:

var myString = "This is first line\nThis is second line\nThis is first line"
println(myString)

Lưu ý: Ở trên mình đã sử dụng câu lệnh println để in ra giá trị của chuỗi myString trên console. Hàm println có thể in ra giá trị của tất cả các biến, không riêng gì biến kiểu String.

Kết quả in ra ở console sẽ là:

This is first line
This is second line
This is first line

Như mọi người thấy ta phải dùng \n để thay cho ký tự xuống dòng. Nhưng với dạng String thứ 2 thì khác. 

  • Dạng thứ 2: các ký tự trong String được biểu diễn trong cặp dấu nháy 3 “””. Ví dụ:
var text = """
   this is first line
       this is second line
           this is third line
"""
println(text)

Kết quả:

   this is first line
       this is second line
           this is third line

Với dạng này ta có thể sử dụng xuống dòng, tab hay bất kỳ 1 ký tự đặc biệt nào 1 cách thoải mái. Cứ như kiểu ta đang soạn thảo văn bản vậy :3

  • String template

Nếu trong Java, để hiển thị giá trị của 1 biến số trong 1 chuỗi thì ta phải dùng phép cộng chuỗi hoặc String.format. Thì ở Kotlin, mọi việc đơn giản và trực quan hơn rất nhiều. String trong Kotlin cho phép ta gắn giá trị của 1 biến vào thân chuỗi chỉ với ký tự $. Ví dụ:

var numberOfApples = 4
var numberOfBananas = 5
var numberOfOrange = 2

var fruitDescription = "There are $numberOfApples apples, $numberOfBananas bananas, $numberOfOrange oranges"
print(fruitDescription)

Thế là giá trị của các biến numberOfApples ,numberOfBananas, numberOfOrange được gắn vào String cực kỳ gọn nhẹ. Ví dụ 2:

var numberOfRedCar = 2
var numberOfBlueCar = 3

var carDescription = "There are ${numberOfBlueCar+numberOfRedCar} cars"
print(carDescription)

Ví dụ này cho thấy, khi muốn biểu diễn giá trị của 1 biểu thức (hoặc là hàm số) thì biểu thức (hàm số) đó phải được bao bởi cặp {}. Như ví dụ trên mình đã dùng ${numberOfBlueCar+numberOfRedCar} để biểu diễn tổng của 2 biến numberOfBlueCarnumberOfRedCar đó. Ví dụ nữa :

var myString = "Hello, I am Mr.Rain"
print("String length = ${myString.length}")

Kiểu dữ liệu mảng

Mảng (Array) là 1 tập hợp các phần tử. Trong Kotlin có 2 cách để tạo ra mảng, đó là sử dụng phương thức

arrayOf()

hoặc dùng hàm khởi tạo:

Array()

Ví dụ, ta thử tạo 1 mảng chứa các số nguyên và số thực sử dụng phương thức arrayOf()

val firstArray = arrayOf(1, 3, 5, 7, 9, 11f, 13f)

Ta vừa khởi tạo 1 mảng có số phần tử là 7 và các phần tử như trên. Nếu muốn tất cả các phần tử của mảng phải có cùng kiểu dữ liệu, ta cần khai báo kiểu dữ liệu bằng cách sau:

val intArray = arrayOf<Int>(4, 5, 7, 3, 1, 0)

Như ở ví dụ trên ta đã khai báo kiểu Int cho array cần khởi tạo. Có 1 cách khác như thế này:

val intArray = intArrayOf(4, 5, 7, 3, 1, 0)

Kotlin cũng cung cấp cho ta các hàm để tạo mảng chứa kiểu dữ liệu cơ bản khác:

charArrayOf()
booleanArrayOf()
longArrayOf()
shortArrayOf()
byteArrayOf()

Giờ ta sẽ thử dùng hàm khởi tạo Array() để tạo ra 1 mảng. Hàm này yêu cầu truyền vào size (số phần tử) và 1 lambda function. Mình sẽ tìm hiểu về lambda function trong những bài viết sau, giờ ta chỉ cần hiểu đơn giản đó là 1 hàm không có tên, và thực hiện thao tác với tham số đầu vào là chỉ số của mảng:

val numbersArray = Array(4, { i -> i * 3 })

Trong đoạn code trên, ta đã truyền vào size của mảng là 4. Và 1 lambda function sử dụng tham số đầu vào là chỉ số của mảng để tính toán giá trị của phần tử ứng với chỉ số đó (giá trị bằng 3 lần chỉ số). Mảng numbersArray trên có cùng giá trị với mảng:

val numbersArray = arrayOf<Int>(0, 3, 6, 9)

Đơn giản đúng không?

Comment – Chú thích

Comment là những đoạn code không được biên dịch, có vai trò ghi chú, chú thích trong code. Comment trong Kotlin giống hệt với Java:

/*
 This is a multiple lines comment
 This is first line.
 This is seconde line
*/
 
// 1 line comment

Kết luận

Ở bài này mình đã giới thiệu về biến, hằng số, các kiểu dữ liệu cơ bản của Kotlin, mảng, comment. Bài sau mình sẽ giới thiệu 1 kiến thức cực kỳ thú vị (và quan trọng) trong lập trình Kotlin. Đó là cách kiểm tra biến null an toàn trong Kotlin. Các bạn hãy đọc và cho ý kiến nhé.

 

One thought on “Kotlin Bài 2: Biến và các kiểu dữ liệu cơ bản trong Kotlin”

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *