Lập trình Android Kotlin - Khái niệm Biến, Hàm và Null Safety và bài tập thực hành

Duy Lê
Duy Lê

Khi bắt đầu học thiết lập Android với Kotlin , có ba khái niệm nền tảng mà bất kỳ trình cài đặt nào cũng cần nắm chắc, đó là: biến, hàm và Null Safety. Đây không chỉ là khởi động theo kiến ​​trúc mà còn là nền tảng cho tất cả các ứng dụng mà bạn sẽ xây dựng sau này. Trong bài viết này, chúng tôi sẽ cùng đi sâu vào từng khái niệm, giải thích kỹ năng cân bằng và có ví dụ minh họa rõ ràng bằng mã Kotlin thực tế.

Biến trong Kotlin

Trong quá trình cài đặt, biến là đại diện cho một vùng nhớ được sử dụng để lưu trữ thông tin. Mỗi biến trong Kotlin đều mang theo loại dữ liệu và khả năng không thể thay đổi hoặc có thể thay đổi, cảnh báo khai báo tùy chọn.

Kotlin cung cấp hai cách khai báo chính: valvar. Trong đó:

  • valdùng để khai báo hằng số – một biến được định giá trị chỉ một lần duy nhất. Điều này mang lại sự an toàn trong cài đặt, tránh những thay đổi mà bạn không mong muốn.
  • varcho phép gán lại giá trị nhiều lần, thích hợp cho các biến mà giá trị sẽ thay đổi trong quá trình chạy chương trình.

Ví dụ minh họa:

fun main() 
{val pi = 3.14
var soLuong = 1
println("Pi = $pi")
println("Số lượng ban đầu = $soLuong")

soLuong = 20 // có thể gán lại vì là var
println("Số lượng sau khi cập nhật = $soLuong") }

Ngoài ra, Kotlin vẫn hỗ trợ thảo luận về kiểu dữ liệu – nghĩa là bạn không cần định nghĩa chỉ loại nếu trình biên dịch có thể tự động hiểu. Tuy nhiên, bạn vẫn có thể khai báo Tường minh để mã nguồn dễ đọc hơn:

  • val ten: String = "Android"
  • var diem: Float = 9.5f

Hàm trong Kotlin – Xây dựng logic, tổ chức chương trình

Hàm là thành phần của tổng hợp nguồn mã theo từng khối chức năng riêng biệt. Nhờ có chức năng, chương trình trở nên gọn gàng, dễ sử dụng và bảo trì.

Trong Kotlin, hàm được định nghĩa bằng từ khóa fun, theo cấu trúc:

fun tenHam(thamSo1: Kieu1, thamSo2: Kieu2): KieuTraVe { // nội dung    return giaTri }

Phân tích sâu về các loại hàm:

  • Hàm trả giá trị: Đây là một biến phổ biến, giúp nhận đầu vào, xử lý và trả kết quả.
  • Hàm không trả về bất cứ điều gì (trả về Unit): Thường được sử dụng để thực hiện một hành động, hạn chế trên màn hình.
  • Hàm một dòng (hàm biểu thức đơn giản): Rút gọn cho các hàm đơn giản, giúp mã hóa rút gọn.
  • Tham số mặc định: Cho phép gán giá trị mặc định cho tham số nếu người dùng không truyền vào.
  • Hàm với số lượng tham số không giới hạn ( vararg): Phù hợp khi bạn không biết trước số lượng giá trị truyền vào.
  • Hàm bậc cao hơn: Hàm có thể nhận biết các hàm khác làm tham số, đặc trưng của hàm hiện đại.

Ví dụ tổng hợp:

fun chao(name: String = "Người dùng") {
    println("Xin chào, $name!")
}

fun binhPhuong(x: Int): Int {
    return x * x
}

fun tinhTong(vararg so: Int): Int {
    return so.sum()
}

fun xuLy(x: Int, hamXuLy: (Int) -> Int): Int {
    return hamXuLy(x)
}

fun main() {
    chao()
    println("4^2 = ${binhPhuong(4)}")
    println("Tổng = ${tinhTong(1, 2, 3)}")

    val ketQua = xuLy(5) { it * 10 }
    println("Kết quả xử lý: $ketQua")
}

Null Safety – Bảo vệ ứng dụng khỏi lỗi thường gặp nhất

Một trong những sản phẩm nổi bật nhất Kotlin được ưa chuộng là khả năng xử lý null một cách an toàn và rõ ràng. Trong Java, lỗi NullPointerException(NPE) là nguyên nhân chính gây ra sự cố cho ứng dụng Android. Kotlin đã quyết định giải quyết vấn đề này bằng hệ thống Null Safety.

Khái niệm cốt lõi:

Mỗi biến trong Kotlin phải được khai báo rõ ràng có thể trống hoặc không. Nếu biến không được phép rỗng, trình biên dịch sẽ cảnh báo ngay khi bạn cố gắng chuyển giá trị rỗng.

  • val ten: String = "Kotlin"
  • var email: String? = null // có thể null vì có dấu ?

Công cụ xử lý null an toàn:

  • Cuộc gọi an toàn ( ?.) : Dùng để gọi thuộc tính/phương thức một cách an toàn. Nếu biến là null, kết quả trả về cũng là null thay vì gây ra lỗi.
  • Toán tử Elvis ( ?:) : Cho phép gán giá trị mặc định nếu biến là null.
  • Khẳng định không null ( !!) : Ép buộc biến không thể rỗng. Nếu null, chương trình sẽ bị lỗi. Chỉ sử dụng khi giá trị chắc chắn không có giá trị rỗng.

Ví dụ thực tế:

// Safe call
val doDai = email?.length
println("Chiều dài email: $doDai")

// Elvis operator
val doDaiFix = email?.length ?: 0
println("Chiều dài email (fix): $doDaiFix")

// Not-null assertion (cẩn thận!)
// println("Chiều dài email (ép): ${email!!.length}") // crash nếu email là null

Biến, hàm và Null Safety là ba khái niệm nền tảng không thể thiếu trong quá trình học Kotlin nói chung và lập trình riêng cho Android . Biết rõ từng phần không chỉ giúp bạn viết mã sạch và hiệu quả, nhưng cũng giảm thiểu lỗi logic cũng như rút ngắn thời gian phát triển ứng dụng.

Nếu bạn mới bắt đầu, hãy kiểm tra tập tin các chương trình sử dụng biến nhỏ, định nghĩa hàm đơn giản và biến xử lý null. Đây là bước đệm quan trọng trước khi bạn tiếp cận các khái niệm cao hơn như class, object, coroutine hay MVVM trong Android.

Nếu bạn đang tìm kiếm khóa học Lập trình Android, hãy truy cập liên kết ngay để Đăng ký ngay tại đây .

Đừng quên theo dõi CodeFresher để cập nhật thông tin mới nhất về các khóa học lập trình!

Link đăng ký khóa học: https://laptrinh-online.vn/courses/tat-ca-khoa-hoc

Địa chỉ: Trung tâm CodeFresher – Số 104 Hoàng Ngân, Cầu Giấy, Hà Nội.

SĐT: Ms Nga – 0968089175 , Ms Diệu – 0332026803 (zalo/call)

Duy Lê

Thầy Duy - Thạc sĩ CNTT Đại học Bách khoa Hà Nội Chuyên gia lập trình Web, Mobile, ứng dụng AI Github: https://github.com/DuyLeHong Youtube: https://www.youtube.com/@LeHongDuyCNTT