Kotlin Bài 5: Khái Niệm Dữ Liệu, Kiểu Dữ Liệu & Khai Báo Biến

Posted by

Chào mừng các bạn đã đến với bài học Android – Kotlin thứ 5, bài học về Dữ liệu, Kiểu dữ liệu và các cách khai báo Biến. Đây là bài học trong chuỗi bài viết về lập trình ứng dụng Android bằng Kotlin của Yellow Code Books. 

Như vậy bạn đã có trong tay các công cụ cần thiết để thử nghiệm lập trình với Kotlin rồi. Và bạn cũng đã thực thi vài dòng code rồi đấy thôi. Từ bài học hôm nay, chúng ta sẽ dần hé mở các nguyên tắc của các dòng code, để giúp bạn ngày càng sáng tỏ và thông thạo hơn đối với ngôn ngữ Kotlin. Nào, hãy bắt đầu với khái niệm Dữ liệu và Kiểu dữ liệu trong lập trình nhé.

Khái Niệm: Dữ Liệu & Kiểu Dữ Liệu

Cái khái niệm về Dữ liệu hay Kiểu dữ liệu thường bị các tài liệu về lập trình bỏ qua (chính mình cũng quên không nói phần này ở các bài học Java). Nếu bạn đã rành về lập trình, thì dĩ nhiên 2 khái niệm này không xa lạ gì, bạn hiểu thấu đáo và nhuần nhuyễn như trở bàn tay vậy. Nhưng với những người mới tiếp cận lập trình, thì mình nghĩ nếu không nắm được kiến thức ban đầu về 2 khái niệm này, sẽ làm giảm đi khả năng tiếp cận với cái được gọi là Biến và khai báo Biến sắp tới.

Vậy để bắt đầu, chúng ta hãy nói về Dữ liệu. Chắc các bạn cũng biết rằng bất cứ phần mềm nào trên thế giới này, từ các application hay game, khi chạy lên các máy tính, đều tương tác hay được máy tính lưu trữ thông qua các gói Dữ liệu. Nhưng chắc cũng không hẳn bạn nào cũng hiểu rằng, các Dữ liệu mà các ứng dụng trao đổi và lưu trữ này, lại chỉ được máy tính tổ chức chúng dưới dạng Nhị phân, chính là 2 con số 01. 01 này chính là 2 trạng thái on và off trên 1 bit dữ liệu.

Trong khi đó, khi lập trình, các lập trình viên chúng ta lại rất khó code theo ngôn ngữ Nhị phân này. Nên các ngôn ngữ lập trình đã định nghĩa ra vô số loại dữ liệu rất là “con người”. Như loại số thập phân, loại ký tự, loại chuỗi,… Để rồi khi biên dịch, trình biên dịch sẽ dựa trên các logic nhất định để chuyển đổi Dữ liệu “con người” mà lập trình viên chúng ta viết ra, về thành Dữ liệu “máy” như đã nói trên kia.

Các loại số thập phân, ký tự, chuỗi,… đã nhắc đến trên kia, chính là các Kiểu dữ liệu mà ngôn ngữ lập trình đã định nghĩa. Kotlin cũng như nhiều loại ngôn ngữ lập trình khác, đều định nghĩa ra các Kiểu dữ liệu riêng biệt. Nhiệm vụ của bạn là phải làm quen và nắm hết tất cả các Kiểu dữ liệu này thì mới có thể lập trình được. Dù sao thì các Kiểu dữ liệu này cũng không nhiều, chúng rất dễ nhớ, và rất là gần gũi với “con người”, nên bạn hoàn toàn dễ dàng tiếp cận thôi. Mình sẽ nói cụ thể về từng Kiểu dữ liệu của Kotlin ở bài viết tiếp theo nhé. Giờ chúng ta qua một khái niệm khác.

Biến – Variable

Dựa vào kiến thức trên đây, bạn đã biết rằng chương trình sẽ phải lưu trữ và giao tiếp với máy thông qua các Dữ liệu. Dựa trên Dữ liệu thì chương trình lại còn chia ra thành các Kiểu dữ liệu để chúng ta dễ dàng quản lý. Và với mỗi Dữ liệu mà chương trình quản lý đó, được định danh bởi một phần tử gọi là Biến (tiếng Anh là Variable).

Vậy nói tóm lại, Biến là các định nghĩa từ bạn, nó giúp hệ thống tạo ra các vùng nhớ để lưu giữ các Dữ liệu trong ứng dụng. Mỗi Biến phải có một cái tên, phải được khai báo một Kiểu dữ liệu. Kiểu dữ liệu của Biến sẽ báo cho hệ thống biết Biến đó có “độ lớn” bao nhiêu. Độ lớn của Biến sẽ cho biết khả năng lưu trữ giá trị của biến. Bạn sẽ được nắm rõ về độ lớn lưu trữ của mỗi loại Biến ở bài học sau luôn. Còn tên của Biến sẽ giúp hệ thống có thể quản lý, truy xuất nhanh chóng đến Dữ liệu trong vùng nhớ của Biến đó. Bạn đã hiểu chưa nào.

Mình ví dụ một số Biến cho bạn dễ hiểu hơn. Chẳng hạn như với ứng dụng tính lương, bạn khai báo một Biến có tên tongLuong để lưu trữ lương của nhân viên. Hay ứng dụng thư viện bạn có Biến bookTitle để lưu trữ tên của từng loại sách. Vậy thì tongLuong, bookTitle, chính là các tên của các Biến. Nếu bạn muốn biết nguyên tắc để đặt tên cho Biến, đặt như thế nào thì hệ thống mới chấp nhận, hay như thế nào mới đúng chuẩn của lập trình viên, thì bạn có thể đọc mục này bên Java sẽ rõ nhé.

Các Loại Biến Trong Kotlin

Bạn đã biết cách đặt tên Biến. Giờ chúng ta cùng đến với các loại Biến trong Kotlin.

Trước tiên, lại phải so sánh với Java một chút. Ở Java hay các ngôn ngữ lập trình khác đều đưa ra 2 khái niệm Biến, đó là BiếnHằng. Trong đó Biến sẽ là nơi lưu trữ dữ liệu, và cho phép thay đổi dữ liệu trên Biến một cách thoải mái. Thì Hằng lại là một “Biến đặc biệt”, sau khi lưu trữ dữ liệu lên Hằng bạn sẽ không thể nào thay đổi dữ liệu của nó được. Trong khi Biến giúp lưu trữ các dữ liệu là các kết quả tính toán, hay các dữ liệu có thể thay đổi khác, thì Hằng thích hợp cho các trường hợp định nghĩa các dữ liệu tĩnh. Ví dụ như nếu bạn định nghĩa 5 là số Sao tối đa mà một khách sạn được đánh giá, thì thay vì sử dụng con số 5 trong suốt chương trình, bạn định nghĩa một Hằng maxStar = 5 và sử dụng tên maxStar này trong toàn bộ chương trình của bạn, sẽ rất trực quan.

Quay lại Kotlin. Kotlin cũng chia biến làm 2 loại tương tự, nhưng được gọi khác đi một chút so với Java. Tương ứng với Biến bên Java thì Kotlin gọi là Mutable Variable (Biến có thể thay đổi), và gọi HằngImmutable Variable (Biến không thể thay đổi). Và vì tên của chúng ở cả tiếng Anh và Việt đều khá dài, nên mình tạm dùng đến từ BiếnHằng ở bài học này để mô tả về 2 em này nhé.

Khai Báo Biến Và Hằng

Biến, hay bạn đã biết là Mutable Variable, được khai báo trong Kotlin bắt đầu bằng từ khóa var. Còn Hằng, chính là Immutable Variable thì được khai báo bắt đầu bằng val. Cấu trúc sau là cấu trúc cho var, nhưng val sẽ tương tự, bạn chỉ việc thay thế var bằng val mà thôi.

var tên_biến: kiểu_dữ_liệu

Hoặc

var tên_biến: kiểu_dữ_liệu = giá_trị

Hoặc

var tên_biến = giá_trị

Trong đó.

  • var (hay val) – Từ khóa khi bạn dùng để khai báo Biến (hay Hằng).
  • tên_biến – Chính là tên của biến, tên_biến được đặt theo quy tắc mà mình có nói ở link trỏ qua bài học Java trên kia.
  • kiểu_dữ_liệu – Là các Kiểu dữ liệu mà mình sẽ nói rõ hơn ở bài học tiếp theo. Ví dụ dưới đây cũng “hé mở” một chút về các Kiểu dữ liệu này.
  • giá_trị – Khi khai báo Biến, bạn có thể “gán” cho Biến một giá_trị ban đầu, việc gán giá trị này sẽ làm cho Biến lưu trữ dữ liệu ban đầu ngay khi được tạo ra. Bạn có thể gán dữ liệu cho Biến lúc khai báo này, hoặc về sau cũng được. Nhưng có một lưu ý, là với Biến bạn có thể gán hay thay đổi dữ liệu sau này tùy ý, còn với Hằng nếu khi nào bạn gán giá trị cho nó, thì giá trị đó vĩnh viễn không thể thay đổi trên Hằng đó nữa. Một lưu ý thú vị tiếp theo là, nếu bạn gán giá trị cho Biến hay Hằng ngay khi khai báo nó, thì bạn có thể bỏ qua kiểu_dữ_liệu trong quá trình khai báo này, vì Kotlin rất hay, nó dựa vào giá_trị của Biến hay Hằng mà đoán biết được kiểu_dữ_liệu của chúng luôn.

Thực Hành Khai Báo Biến Và Hằng

Thật sự là không cam tâm nếu như chỉ biết về lý thuyết mà không thực hành đúng không nào. Vậy thì bạn hãy mở Kotlin Playground lên, chúng ta cùng thử viết ứng dụng chuyển đổi Inch thành Centimet nhé. Bạn cũng biết 1 in bằng 2,54 cm. Vậy thì sẽ như thế nào nếu chương trình giúp chuyển đổi 5 in sang cm? Hãy xem code của chương trình chuyển đổi như sau.

fun main() {
    val inchToCentimet = 2.54
	var fromIn = 5.0
    var toCm: Double
    
    toCm = fromIn * inchToCentimet
    
    println("$fromIn inches = $toCm centimeteres")
}

Bạn có thể thấy, inchToCentimet là một Hằng, vì bắt đầu của nó là từ khóa val. Hằng này được gán giá trị 2.54 luôn, có nghĩa chúng ta định nghĩa một giá trị bất di bất dịch, là 1 in bằng 2.54 cm, và vì đã định nghĩa giá trị của Hằng rồi nên bạn không cần khai báo thêm Kiểu dữ liệu cho Hằng nữa, tuy nhiên, nếu bạn thích, bạn vẫn có thể khai báo Kiểu dữ liệu đàng hoàng cho Hằng này, như code ở dưới đây. Tương tự vậy, fromIn là một Biến, có giá trị là 5, cũng không cần khai báo Kiểu dữ liệu. Biến toCm không khai báo giá trị, nên chúng ta cần khai báo Kiểu dữ liệuDouble cho nó. Dòng code tiếp theo chúng ta tiến hành tính toán, rồi lưu lại giá trị mới vào toCm. Rồi cuối cùng in kết quả ra. Nếu bạn không hiểu lắm câu lệnh in giá trị println cuối cùng cũng không sao. Bạn có thể nhấn nút thực thi chương trình để xem kết quả được rồi, những gì còn thiếu thì các bài sau mình sẽ bổ sung đầy đủ nhé.

Như đã nói, mình sẽ viết lại bài trên nhưng có diễn đạt ra đầy đủ các Kiểu dữ liệu cho từng BiếnHằng. Nhưng bạn nhớ, do Kotlin đã hỗ trợ, nên chúng ta cứ viết như code trên kia sẽ đẹp đẽ hơn cách viết sau đây nhé.

fun main() {
    val inchToCentimet: Double = 2.54
	var fromIn: Double = 5.0
    var toCm: Double
    
    toCm = fromIn * inchToCentimet
    
    println("$fromIn inches = $toCm centimeteres")
}

Bạn sẽ nhận được kết quả tương tự khi thực thi code này thôi. Đến đây thì bạn có thể nghĩ ra nhiều ứng dụng để mà vọc chơi với Kotlin được rồi đấy. Thậm chí bạn không cần phải biết cụ thể các Kiểu dữ liệu ở Kotlin. Chẳng hạn bạn có thể viết một ứng dụng tính bình phương của 30.

fun main() {
    val aNumber = 30
	var powerNumber = aNumber * aNumber
    
    println("Result is $powerNumber")
}

Hay chương trình chuyển đổi độ C sang độ F (bạn tự viết nhé).

Cảm ơn bạn đã đọc các bài viết của Yellow Code Books. Bạn hãy ủng hộ blog bằng cách:

Đánh giá 5 sao bên dưới mỗi bài nếu thấy thích.
Comment bên dưới mỗi bài nếu có thắc mắc.
Để lại địa chỉ email của bạn ở thanh bên phải để nhận được thông báo sớm nhất khi có bài viết mới.
Chia sẻ các bài viết của Yellow Code Books đến nhiều người khác.

Bài Kế Tiếp

Bài sau mình sẽ trình bày cụ thể từng Kiểu dữ liệu mà Kotlin hỗ trợ.

Kotlin Bài 6: Đang được viết tiếp… →

Gửi phản hồi