Kotlin là ngôn ngữ lập trình được sử dụng rộng rãi bởi các nhà phát triển Android ở mọi lĩnh vực. Trong bài viết này, chúng ta sẽ khám phá một số khía cạnh cơ bản về Kotlin để bạn có thể nhanh chóng tiếp cận và sử dụng ngôn ngữ này.
- Tự Học PHP: Hướng dẫn dễ dàng cho lập trình viên mới
- PHP Là Gì? Giới Thiệu Về Ngôn Ngữ Lập Trình PHP Newbie Cần Biết
- Có bao nhiêu ngôn ngữ lập trình? | ĐÀO TẠO CÁC KHÓA HỌC NGẮN HẠN-DÀI HẠN
- Giới thiệu chung về ngôn ngữ lập trình Scratch
- Tài liệu tự học lập trình Visual Basic 6.0 – Công cụ hoàn hảo cho việc lập trình ứng dụng Windows
Contents
Khai báo biến
Trước tiên, chúng ta cần biết cách khai báo biến trong Kotlin. Kotlin sử dụng hai từ khoá để khai báo biến: val
và var
.
Bạn đang xem: Học ngôn ngữ lập trình Kotlin: Học nhanh và hiệu quả
- Sử dụng
val
cho biến có giá trị không thay đổi. Bạn không thể gán lại giá trị cho biến đã khai báo bằngval
. - Sử dụng
var
cho biến có giá trị có thể thay đổi.
Ví dụ, để khai báo một biến count
thuộc loại Int
có giá trị ban đầu là 10, bạn có thể sử dụng cú pháp sau:
var count: Int = 10
Ngôn ngữ Kotlin cung cấp nhiều loại dữ liệu của số, như Byte
, Short
, Long
, Float
và Double
. Bạn có thể lựa chọn loại dữ liệu phù hợp với nhu cầu của mình.
Nếu bạn muốn biết biến có thể thay đổi hay không, hãy sử dụng từ khoá var
hoặc val
tùy thuộc vào trường hợp. Nếu biến cần có khả năng thay đổi giá trị, hãy sử dụng var
. Nếu không, hãy sử dụng val
.
Suy luận loại dữ liệu
Kotlin có khả năng suy ra loại dữ liệu dựa trên loại giá trị được chỉ định. Ví dụ, nếu bạn gán giá trị "Kotlin"
cho biến languageName
, trình biên dịch Kotlin sẽ suy ra languageName
cũng là một chuỗi (String). Điều này giúp mã của bạn ngắn gọn và an toàn với loại dữ liệu.
val languageName = "Kotlin"
val upperCaseName = languageName.toUpperCase()
Trong ví dụ trên, toUpperCase()
là một phương thức chỉ có thể được gọi trên chuỗi (String). Vì Kotlin đã suy ra languageName
là chuỗi (String), bạn có thể gọi phương thức này một cách an toàn.
Kiểm tra an toàn của giá trị rỗng
Trong Kotlin, biến mặc định không thể chứa giá trị rỗng. Để cho phép giá trị rỗng, bạn có thể khai báo biến với khả năng chứa giá trị rỗng (nullable). Để làm điều này, hãy thêm dấu ?
vào sau loại dữ liệu của biến. Ví dụ:
val languageName: String? = null
Với loại String?
, bạn có thể gán giá trị String
hoặc null
cho languageName
. Tuy nhiên, bạn cần phải xử lý cẩn thận các biến có khả năng chứa giá trị rỗng để tránh lỗi NullPointerException
.
Câu lệnh có điều kiện
Trong Kotlin, bạn có thể triển khai logic có điều kiện bằng nhiều cách khác nhau. Cách phổ biến nhất là câu lệnh if-else
. Nếu một biểu thức được bao quanh bởi dấu ngoặc vuông bên cạnh từ khoá if
có giá trị là true, mã trong nhánh đó sẽ được thực thi. Nếu không, mã trong nhánh else
sẽ được thực thi.
if (count == 42) {
println("Tôi có câu trả lời.")
} else {
println("Câu trả lời thoáng qua tôi.")
}
Bạn cũng có thể biểu thị nhiều điều kiện bằng cách sử dụng else if
. Cách này cho phép bạn biểu thị logic chi tiết và phức tạp hơn trong một câu lệnh có điều kiện đơn, ví dụ:
if (count == 42) {
println("Tôi có câu trả lời.")
} else if (count > 35) {
println("Câu trả lời gần đây.")
} else {
println("Câu trả lời thoáng qua tôi.")
}
Để tránh lặp lại mã, Kotlin cung cấp biểu thức có điều kiện. Bạn có thể viết lại ví dụ trên như sau:
val answerString: String = if (count == 42) {
"Tôi có câu trả lời."
} else if (count > 35) {
"Câu trả lời gần đây."
} else {
"Câu trả lời thoáng qua tôi."
}
Mỗi nhánh có điều kiện sẽ ngầm trả về kết quả của biểu thức cuối cùng, vì vậy bạn không cần sử dụng từ khoá return
. Với cùng loại dữ liệu trả về, kết quả của biểu thức if-else
cũng thuộc cùng loại dữ liệu đó. Trong ví dụ này, answerString
được gán giá trị từ biểu thức if-else
. Bạn có thể loại bỏ khai báo rõ ràng của loại của answerString
, nhưng nên làm điều đó để làm rõ ràng.
Xem thêm : Tin học 11 Bài 1: Khái niệm về lập trình và ngôn ngữ lập trình
Lưu ý: Kotlin không bao gồm toán tử ba ngôi truyền thống, thay vào đó Kotlin ưu tiên sử dụng biểu thức có điều kiện.
Hàm
Trong Kotlin, bạn có thể nhóm một hoặc nhiều biểu thức vào một hàm để tái sử dụng. Để khai báo một hàm, sử dụng từ khoá fun
trước tên hàm. Tiếp theo, xác định loại dữ liệu đầu vào (nếu có) và loại dữ liệu đầu ra của hàm. Phần thân của hàm là nơi bạn xác định các biểu thức sẽ được thực hiện khi hàm được gọi.
Dựa trên ví dụ trước, dưới đây là một hàm Kotlin hoàn chỉnh:
fun generateAnswerString(): String {
val answerString = if (count == 42) {
"Tôi có câu trả lời."
} else {
"Câu trả lời thoáng qua tôi."
}
return answerString
}
Trong ví dụ này, hàm generateAnswerString
không lấy đối số nào. Hàm này trả về một giá trị thuộc loại String
. Để gọi một hàm, sử dụng tên của hàm đó, sau đó là toán tử ()
để kích hoạt hàm. Trong ví dụ sau, biến answerString
được khởi tạo từ kết quả của generateAnswerString()
.
val answerString = generateAnswerString()
Hàm có thể lấy đối số làm dữ liệu đầu vào, ví dụ:
fun generateAnswerString(countThreshold: Int): String {
val answerString = if (count > countThreshold) {
"Tôi có câu trả lời."
} else {
"Câu trả lời thoáng qua tôi."
}
return answerString
}
Khi khai báo một hàm, bạn có thể chỉ định số lượng và loại đối số tùy ý. Trong ví dụ trên, generateAnswerString()
lấy một đối số có tên là countThreshold
thuộc loại Int
. Trong hàm, bạn có thể tham chiếu đến đối số bằng cách sử dụng tên của đối số đó.
Khi gọi hàm này, bạn cần cung cấp một đối số nằm trong dấu ngoặc đơn của lệnh gọi hàm:
val answerString = generateAnswerString(42)
Hàm ẩn danh
Đôi khi, không cần đặt tên cho một hàm. Những hàm này được gọi là hàm ẩn danh. Bạn có thể giữ lại tham chiếu đến một hàm ẩn danh và gọi lại hàm đó sau này. Bạn cũng có thể truyền tham chiếu này trong ứng dụng của mình.
val stringLengthFunc: (String) -> Int = { input -> input.length }
Giống như các hàm có tên, hàm ẩn danh có thể có nhiều biểu thức. Giá trị trả về của hàm là kết quả của biểu thức cuối cùng.
Trong ví dụ trên, stringLengthFunc
chứa tham chiếu đến một hàm ẩn danh. Hàm ẩn danh này lấy đầu vào là chuỗi (String) và trả về độ dài của chuỗi đó dưới dạng số nguyên (Int). Vì vậy, loại hàm được biểu thị là (String) -> Int
. Tuy nhiên, mã này không kích hoạt hàm. Để truy cập kết quả của hàm, bạn cần kích hoạt hàm này như cách bạn làm với hàm có tên. Bạn cần cung cấp chuỗi khi gọi stringLengthFunc
, ví dụ:
val stringLengthFunc: (String) -> Int = { input -> input.length }
val stringLength: Int = stringLengthFunc("Android")
Hàm bậc cao
Một hàm có thể nhận một hàm khác làm đối số. Các hàm sử dụng các hàm khác làm đối số được gọi là hàm bậc cao. Điều này rất hữu ích trong việc giao tiếp giữa các thành phần, giống như cách bạn sử dụng giao diện gọi lại trong Java.
Dưới đây là ví dụ về một hàm bậc cao:
fun stringMapper(str: String, mapper: (String) -> Int): Int {
// Thực thi hàm
return mapper(str)
}
stringMapper
nhận một đối số là chuỗi (String) cùng với một hàm lấy một giá trị số nguyên (Int) từ chuỗi. Bạn có thể gọi stringMapper
bằng cách truyền chuỗi và một hàm thoả mãn thông số đầu vào còn lại, tức là một hàm lấy chuỗi làm đầu vào và trả về số nguyên:
stringMapper("Android", { input -> input.length })
Xem thêm : 10 ngôn ngữ lập trình phổ biến sử dụng trong outsource và staffing- Hatonet
Nếu hàm ẩn danh là tham số cuối được xác định trong một hàm, bạn có thể truyền hàm đó bên ngoài dấu ngoặc đơn sử dụng để kích hoạt hàm, như sau:
stringMapper("Android") { input -> input.length }
Hàm ẩn danh có sẵn trong thư viện Kotlin. Điều này cho phép bạn sử dụng các hàm ẩn danh trong ứng dụng của mình.
Lớp
Kotlin cho phép bạn xác định các loại dữ liệu của riêng mình bằng cách sử dụng từ khoá class
.
Để khai báo một lớp, sử dụng từ khoá class
như ví dụ sau:
class Car
Thuộc tính
Lớp biểu thị trạng thái bằng thuộc tính. Mỗi thuộc tính là một biến ở mức lớp, nó có thể bao gồm một phương thức getter, setter và trường dự phòng. Ví dụ, để thêm danh sách các đối tượng Wheel
như một thuộc tính của Car
, bạn có thể sử dụng cú pháp sau:
class Car {
val wheels = listOf<Wheel>()
}
Lưu ý rằng wheels
là val
công khai, có nghĩa là bạn có thể truy cập vào wheels
từ bên ngoài lớp Car
và không thể chỉ định lại thuộc tính này. Để có một thực thể của Car
, bạn cần gọi hàm tạo của thực thể đó. Sau đó, bạn có thể truy cập các thuộc tính cho phép truy cập.
val car = Car() // tạo một thực thể Car
val wheels = car.wheels // nhận giá trị "wheels" từ Car
Nếu bạn muốn điều chỉnh bánh xe của mình, bạn có thể xác định một hàm tạo tùy chỉnh để chỉ định cách khởi tạo các thuộc tính trong lớp:
class Car(val wheels: List<Wheel>)
Trong ví dụ trên, hàm tạo lớp nhận List<Wheel>
làm đối số hàm tạo và sử dụng đối số đó để khởi tạo thuộc tính wheels
.
Hàm trong lớp và đóng gói lớp
Lớp sử dụng hàm để xây dựng mô hình hành vi. Hàm có thể sửa đổi trạng thái, giúp bạn chỉ cung cấp dữ liệu mà bạn muốn cung cấp. Quyền truy cập này thuộc về khái niệm rộng hơn về đóng gói trong lập trình hướng đối tượng.
Trong ví dụ sau, thuộc tính doorLock
được đặt ở chế độ riêng tư, tách khỏi bất kỳ nội dung bên ngoài lớp Car
. Để mở khóa cửa xe, bạn cần gọi hàm unlockDoor()
, hàm này truyền một chiếc chìa khóa hợp lệ, ví dụ:
class Car(val wheels: List<Wheel>) {
private val doorLock: DoorLock = ...
fun unlockDoor(key: Key): Boolean {
// Trả về true nếu chìa khóa hợp lệ cho khóa cửa, ngược lại trả về false
}
}
Nếu bạn muốn tùy chỉnh cách tham chiếu một thuộc tính, bạn có thể cung cấp phương thức getter và setter tùy chỉnh. Ví dụ: để cung cấp phương thức getter của một thuộc tính và hạn chế quyền truy cập vào phương thức setter của thuộc tính đó, bạn có thể xác định phương thức setter là private
:
class Car(val wheels: List<Wheel>) {
private val doorLock: DoorLock = ...
var gallonsOfFuelInTank: Int = 15
private set
fun unlockDoor(key: Key): Boolean {
// Trả về true nếu chìa khóa hợp lệ cho khóa cửa, ngược lại trả về false
}
}
Với sự kết hợp giữa thuộc tính và hàm, bạn có thể xây dựng lớp để tạo ra mô hình cho tất cả các loại đối tượng.
Khả năng tương thích
Một trong những tính năng quan trọng của Kotlin là khả năng tương tác linh hoạt với Java. Vì mã Kotlin được biên dịch thành mã byte VM, mã Kotlin của bạn có thể gọi trực tiếp vào mã Java và ngược lại. Điều này có nghĩa là bạn có thể sử dụng các thư viện Java hiện có ngay trên Kotlin. Ngoài ra, phần lớn API của Android được viết bằng Java và bạn có thể gọi các API đó trực tiếp trên Kotlin.
Các bước tiếp theo
Kotlin là một ngôn ngữ linh hoạt và thực tế với khả năng hỗ trợ và xu hướng phát triển ngày càng tăng. Nếu bạn chưa bao giờ sử dụng Kotlin, hãy thử ngay. Để tìm hiểu thêm về các bước tiếp theo, hãy xem tài liệu chính thức về Kotlin và hướng dẫn cách áp dụng các mẫu Kotlin phổ biến trong ứng dụng Android của bạn.
Nguồn: https://laptrinhc.edu.vn
Danh mục: Ngôn ngữ lập trình