Bài tập thực hành: Kiến thức cơ bản về Kotlin

1. Trước khi bạn bắt đầu

Bạn đã rất nỗ lực để học hỏi kiến thức cơ bản về cách lập trình bằng Kotlin. Giờ đây, bạn đã có thể vận dụng kiến thức đã học vào thực tế.

Các bài tập này kiểm tra mức độ hiểu biết của bạn về những khái niệm mà bạn đã học. Các bài tập này được sắp xếp theo chủ đề, xoay quanh các trường hợp sử dụng thực tế mà có thể bạn đã gặp phải trước đây.

Hãy làm theo hướng dẫn để tìm giải pháp cho từng vấn đề. Nếu bạn gặp khó khăn, một số bài tập sẽ cung cấp gợi ý để trợ giúp bạn. Mã giải pháp sẽ xuất hiện ở phần cuối bài tập. Tuy nhiên, bạn nên giải bài tập trước khi kiểm tra đáp án.

Hãy xem các giải pháp như một cách để giải quyết vấn đề và tuỳ ý thử nghiệm. Bạn có thể giải một số bài tập theo nhiều cách, đồng thời sử dụng các tên khác nhau cho các hàm và biến.

Giải quyết các vấn đề theo tốc độ mà bạn cảm thấy thoải mái. Thời lượng để hoàn thành bài tập sẽ được nêu rõ, nhưng bạn không cần phải tuân thủ vì đó chỉ là thông tin ước tính. Bạn nên tận dụng thời gian cần thiết để giải quyết từng vấn đề một cách cẩn thận.

Bạn nên sử dụng Kotlin Playground để giải các bài tập này.

Điều kiện tiên quyết

Bạn cần có

  • Một chiếc máy tính có kết nối Internet và trình duyệt web

2. In thông báo

Chia sẻ với bạn bè về những kiến thức bạn đã học được trong lộ trình này.

  • Bạn có thể viết hàm main() in các thông báo này trên 4 dòng riêng biệt không?
Use the val keyword when the value doesn't change.
Use the var keyword when the value can change.
When you define a function, you define the parameters that can be passed to it.
When you call a function, you pass arguments for the parameters.

3. Sửa lỗi biên dịch

Chương trình này in thông báo để báo cho người dùng rằng họ đã nhận được tin nhắn trò chuyện từ một người bạn.

fun main() {
    println("New chat message from a friend'}
}
  1. Bạn có thể tìm ra căn nguyên của các lỗi biên dịch trong chương trình này và khắc phục chúng không?
  2. Mã này có sử dụng các ký hiệu phù hợp để cho biết phần mở và đóng của đối số chuỗi và hàm không?

Gợi ý: Bạn có thể dùng Kotlin Playground để chạy mã và xem các lỗi biên dịch.

Sau khi bạn sửa lỗi, chương trình sẽ biên dịch mà không bị lỗi và in kết quả này:

New chat message from a friend

4. Mẫu chuỗi

Chương trình này thông báo cho người dùng về chương trình khuyến mãi sắp tới dành cho một mặt hàng cụ thể. Chương trình có một mẫu chuỗi dựa trên biến discountPercentage để áp dụng chiết khấu theo phần trăm và biến item cho mặt hàng đang giảm giá. Tuy nhiên, vẫn có lỗi biên dịch trong mã.

fun main() {
    val discountPercentage: Int = 0
    val offer: String = ""
    val item = "Google Chromecast"
    discountPercentage = 20
    offer = "Sale - Up to $discountPercentage% discount on $item! Hurry up!"

    println(offer)
}
  1. Bạn có thể tìm ra căn nguyên của lỗi và khắc phục chúng không?
  2. Bạn có thể xác định kết quả của chương trình này trước khi chạy mã trong Kotlin Playground không?

Gợi ý: Bạn có thể gán lại một giá trị cho biến chỉ đọc không?

Sau khi bạn sửa lỗi, chương trình sẽ biên dịch mà không bị lỗi và in kết quả này:

Sale - Up to 20% discount on Google Chromecast! Hurry up!

5. Ghép chuỗi

Chương trình này hiển thị tổng số người tham dự bữa tiệc. Có người lớn và trẻ em tại bữa tiệc. Biến numberOfAdults chứa số người lớn và biến numberOfKids chứa số trẻ em tham dự bữa tiệc.

fun main() {
    val numberOfAdults = "20"
    val numberOfKids = "30"
    val total = numberOfAdults + numberOfKids
    println("The total party size is: $total")
}

Bước 1

  • Bạn có thể xác định kết quả của chương trình này trước khi chạy mã trong Kotlin Playground không?

Sau khi bạn xác định kết quả, hãy chạy mã trong Kotlin Playground rồi kiểm tra xem kết quả của bạn có khớp với kết quả hiển thị hay không.

Gợi ý: Điều gì xảy ra khi bạn sử dụng toán tử + trên 2 chuỗi?

Bước 2

Mã này hoạt động và in một số kết quả, nhưng kết quả không cho biết tổng số người tham dự bữa tiệc.

  • Bạn có tìm thấy vấn đề trong mã và khắc phục vấn đề để in kết quả này không?
The total party size is: 50

6. Định dạng thông báo

Chương trình này hiển thị tổng tiền lương mà một nhân viên nhận được trong tháng này. Tổng tiền lương được chia thành 2 phần: biến baseSalary là số tiền nhân viên nhận được hằng tháng và biến bonusAmount là tiền thưởng tặng thêm cho nhân viên.

fun main() {
    val baseSalary = 5000
    val bonusAmount = 1000
    val totalSalary = "$baseSalary + $bonusAmount"
    println("Congratulations for your bonus! You will receive a total of $totalSalary (additional bonus).")
}
  1. Bạn có thể tìm ra kết quả của mã này trước khi chạy mã trong Kotlin Playground không?
  2. Khi bạn chạy mã trong Kotlin Playground, mã này có in ra kết quả mà bạn mong đợi không?

7. Triển khai các phép toán cơ bản

Trong bài tập này, bạn sẽ viết một chương trình thực hiện các phép toán cơ bản và in kết quả.

Bước 1

Hàm main() này có một lỗi biên dịch:

fun main() {
    val firstNumber = 10
    val secondNumber = 5

    println("$firstNumber + $secondNumber = $result")
}
  • Bạn có thể khắc phục lỗi để chương trình in ra kết quả này không?
10 + 5 = 15

Bước 2

Mã này hoạt động, nhưng logic để thêm 2 số nằm trong biến kết quả, khiến mã của bạn ít linh hoạt hơn để sử dụng lại. Thay vào đó, bạn có thể trích xuất phép cộng vào hàm add() để có thể sử dụng lại mã. Để thực hiện việc này, hãy cập nhật mã bên dưới cho mã của bạn. Lưu ý rằng mã này hiện có val mới tên là thirdNumber và in kết quả của biến mới này bằng firstNumber.

fun main() {
    val firstNumber = 10
    val secondNumber = 5
    val thirdNumber = 8

    val result = add(firstNumber, secondNumber)
    val anotherResult = add(firstNumber, thirdNumber)

    println("$firstNumber + $secondNumber = $result")
    println("$firstNumber + $thirdNumber = $anotherResult")
}

// Define add() function below this line
  • Bạn có thể xác định hàm add() để chương trình in ra kết quả này không?
10 + 5 = 15
10 + 8 = 18

Bước 3

Bây giờ, bạn đã có một hàm có thể sử dụng lại để cộng 2 số.

  • Bạn có thể triển khai hàm subtract() giống như cách bạn triển khai hàm add() không? Ngoài ra hãy sửa đổi hàm main() để sử dụng hàm subtract(), nhờ đó bạn có thể xác minh việc hàm này có hoạt động như mong đợi không.

Gợi ý: Hãy nghĩ về sự khác biệt giữa phép cộng, phép trừ và các phép toán khác. Hãy bắt đầu xử lý mã giải pháp từ đó.

8. Tham số mặc định

Gmail có tính năng gửi thông báo cho người dùng bất cứ khi nào họ cố gắng đăng nhập trên một thiết bị mới.

Trong bài tập này, bạn sẽ viết một chương trình hiển thị thông báo cho người dùng bằng mẫu thông báo sau:

There's a new sign-in request on operatingSystem for your Google Account emailId.

Bạn cần triển khai một hàm chấp nhận tham số operatingSystem và tham số emailId, tạo một thông báo theo định dạng cho sẵn, đồng thời trả về thông báo đó.

Ví dụ: nếu hàm được gọi bằng "Chrome OS" đối với operatingSystem và "sample@gmail.com" đối với emailId, thì hàm phải trả về chuỗi sau:

There's a new sign-in request on Chrome OS for your Google Account sample@gmail.com.

Bước 1

  1. Bạn có thể triển khai hàm displayAlertMessage()() trong chương trình này để in ra kết quả hiển thị không?
fun main() {
    val operatingSystem = "Chrome OS"
    val emailId = "sample@gmail.com"

    println(displayAlertMessage(operatingSystem, emailId))
}

// Define your displayAlertMessage() below this line.
  1. Chương trình của bạn có in ra kết quả này không?
There's a new sign-in request on Chrome OS for your Google Account sample@gmail.com.

Bước 2

Xuất sắc! Bạn đã hiển thị thông báo. Tuy nhiên, trong một số trường hợp, bạn sẽ thấy rằng mình không thể xác định hệ điều hành của người dùng. Trong những trường hợp như vậy, bạn cần chỉ định tên hệ điều hành là Unknown OS. Bạn có thể tối ưu hoá mã nhiều hơn nữa để không cần phải truyền đối số Unknown OS mỗi khi hàm được gọi.

  1. Bạn có thể tìm cách tối ưu hoá mã bằng thông tin này để in ra kết quả này không?
There's a new sign-in request on Unknown OS for your Google Account user_one@gmail.com.

There's a new sign-in request on Windows for your Google Account user_two@gmail.com.

There's a new sign-in request on Mac OS for your Google Account user_three@gmail.com.
  1. Để in thông báo ở trên, hãy thay thế cách triển khai hàm main() bằng thông báo sau:
fun main() {
    val firstUserEmailId = "user_one@gmail.com"

    // The following line of code assumes that you named your parameter as emailId.
    // If you named it differently, feel free to update the name.
    println(displayAlertMessage(emailId = firstUserEmailId))
    println()

    val secondUserOperatingSystem = "Windows"
    val secondUserEmailId = "user_two@gmail.com"

    println(displayAlertMessage(secondUserOperatingSystem, secondUserEmailId))
    println()

    val thirdUserOperatingSystem = "Mac OS"
    val thirdUserEmailId = "user_three@gmail.com"

    println(displayAlertMessage(thirdUserOperatingSystem, thirdUserEmailId))
    println()
}

9. Máy đếm bước

Máy đếm bước là thiết bị điện tử đếm số bước đã thực hiện. Ngày nay, hầu hết các loại điện thoại di động, đồng hồ thông minh và thiết bị tập thể dục đều tích hợp sẵn máy đếm bước. Ứng dụng sức khoẻ và thể dục dùng máy đếm bước tích hợp sẵn để tính số bước đã thực hiện. Hàm này tính lượng calo mà người dùng đốt cháy dựa trên số bước của người dùng.

  • Dựa trên các phương pháp hay nhất, bạn có thể đổi tên các hàm, tham số hàm và biến trong chương trình này không?
fun main() {
    val Steps = 4000
    val caloriesBurned = PEDOMETERstepsTOcalories(Steps);
    println("Walking $Steps steps burns $caloriesBurned calories")
}

fun PEDOMETERstepsTOcalories(NumberOFStepS: Int): Double {
    val CaloriesBURNEDforEachStep = 0.04
    val TotalCALORIESburned = NumberOFStepS * CaloriesBURNEDforEachStep
    return TotalCALORIESburned
}

10. So sánh 2 số

Các loại điện thoại di động hiện đại có tích hợp sẵn tính năng theo dõi thời gian sử dụng thiết bị hoặc thời gian bạn sử dụng điện thoại mỗi ngày.

Trong bài tập này, bạn sẽ triển khai một hàm so sánh thời gian (tính bằng phút) mà bạn đã sử dụng điện thoại trong hôm nay với thời gian sử dụng vào ngày hôm qua. Hàm này chấp nhận 2 tham số số nguyên và trả về một giá trị boolean.

Tham số đầu tiên chứa số phút bạn đã sử dụng điện thoại trong hôm nay và tham số thứ hai chứa số phút bạn đã sử dụng điện thoại vào hôm qua. Hàm sẽ trả về giá trị true nếu thời gian bạn sử dụng điện thoại hôm nay nhiều hơn so với hôm qua. Nếu không, hàm này sẽ trả về giá trị false.

Ví dụ: nếu bạn đã gọi hàm chứa các đối số có tên như sau:

  • timeSpentToday = 300timeSpentYesterday = 250, hàm sẽ trả về giá trị true.
  • timeSpentToday = 300timeSpentYesterday = 300, hàm sẽ trả về giá trị false.
  • timeSpentToday = 200timeSpentYesterday = 220, hàm sẽ trả về giá trị false.

Gợi ý: Toán tử so sánh > sẽ trả về giá trị true nếu giá trị trước toán tử lớn hơn giá trị sau toán tử. Nếu không, toán tử này sẽ trả về giá trị false.

11. Di chuyển mã trùng lặp vào một hàm

Chương trình này hiển thị thông tin thời tiết của nhiều thành phố. Thông tin này bao gồm tên thành phố, nhiệt độ cao và thấp trong ngày, khả năng có mưa.

fun main() {
    println("City: Ankara")
    println("Low temperature: 27, High temperature: 31")
    println("Chance of rain: 82%")
    println()

    println("City: Tokyo")
    println("Low temperature: 32, High temperature: 36")
    println("Chance of rain: 10%")
    println()

    println("City: Cape Town")
    println("Low temperature: 59, High temperature: 64")
    println("Chance of rain: 2%")
    println()

    println("City: Guatemala City")
    println("Low temperature: 50, High temperature: 55")
    println("Chance of rain: 7%")
    println()
}

Có nhiều mục tương tự nhau trong mã này in thông tin thời tiết của từng thành phố. Ví dụ: có những cụm từ lặp lại nhiều lần, chẳng hạn như "City:""Low temperature:". Việc lặp lại mã tương tự sẽ gây ra rủi ro về lỗi trong chương trình của bạn. Bạn có thể mắc lỗi chính tả hoặc quên thông tin thời tiết của một thành phố trong số đó.

  1. Bạn có thể tạo một hàm in thông tin thời tiết của một thành phố để giảm tình trạng lặp lại trong hàm main() rồi làm tương tự cho các thành phố còn lại không?
  2. Bạn có thể cập nhật hàm main() để gọi hàm bạn đã tạo cho mỗi thành phố và truyền vào thông tin thời tiết thích hợp làm đối số không?

12. Mã giải pháp

Giải pháp này dùng hàm println() để in thông báo trên mỗi dòng.

fun main() {
    println("Use the val keyword when the value doesn't change.")
    println("Use the var keyword when the value can change.")
    println("When you define a function, you define the parameters that can be passed to it.")
    println("When you call a function, you pass arguments for the parameters.")
}

Sửa lỗi biên dịch

Mã này có 2 lỗi biên dịch:

  1. Chuỗi phải kết thúc bằng một dấu ngoặc kép thay vì một dấu ngoặc đơn.
  2. Đối số hàm phải kết thúc bằng dấu ngoặc đơn thay vì dấu ngoặc nhọn.
fun main() {
    println("New chat message from a friend")
}

Mẫu chuỗi

Lỗi biên dịch là kết quả của việc chỉ định biến discountPercentageoffer chỉ đọc cho các giá trị mới; bài tập này không được phép.

fun main() {
    val discountPercentage = 20
    val item = "Google Chromecast"
    val offer = "Sale  - Up to $discountPercentage% discount off $item! Hurry Up!"

    println(offer)
}

Thay vào đó, bạn có thể khai báo số nguyên discountPercentage và chuỗi offer bằng từ khoá var. Tuy nhiên, giá trị của những biến này không thể thay đổi được trong ngữ cảnh của chương trình, vì vậy, bạn có thể dùng từ khoá val.

Ghép chuỗi

Bước 1

Chương trình in kết quả này:

The total party size is: 2030

Đây là một câu hỏi mẹo. Khi sử dụng toán tử + trên String, giá trị này sẽ tạo ra một chuỗi nối. Số nguyên được đặt trong dấu ngoặc kép nên được coi là chuỗi chứ không phải là số nguyên, do đó, kết quả là 2030.

Bước 2

Bạn có thể xoá dấu ngoặc kép xung quanh biến numberOfAdultsnumberOfKids để chuyển đổi chúng thành biến Int.

fun main() {
    val numberOfAdults = 20
    val numberOfKids = 30
    val total = numberOfAdults + numberOfKids
    println("The total party size is: $total")
}

Như bạn đã biết, trình biên dịch Kotlin có thể dự đoán loại biến dựa trên giá trị được gán cho chúng. Trong trường hợp này, trình biên dịch suy luận rằng biến numberOfAdultsnumberOfKids thuộc loại Int.

Định dạng thông báo

Chương trình in kết quả này:

Congratulations for your bonus! You will receive a total of 5000 + 1000 (additional bonus).

"$baseSalary + $bonusAmount" sử dụng cú pháp biểu thức mẫu. Trong biểu thức mẫu, mã được đánh giá trước tiên, sau đó kết quả được nối với nhau trong một chuỗi.

Trong câu hỏi, biến $baseSalary được đánh giá theo giá trị 5000 và biến $bonusAmount được đánh giá theo giá trị 1000. Sau đó, kết quả này được nối với nhau để tạo ra "5000 + 1000" và gán cho biến result.

Triển khai các phép toán cơ bản

Bước 1

Xác định biến result không thể thay đổi bằng từ khoá val, sau đó chỉ định kết quả của thao tác bổ sung cho biến đó:

fun main() {
    val firstNumber = 10
    val secondNumber = 5

    val result = firstNumber + secondNumber
    println("$firstNumber + $secondNumber = $result")
}

Bước 2

  1. Tạo một hàm add() chấp nhận tham số firstNumber và tham số secondNumber, cả hai đều thuộc loại Int và trả về một giá trị Int.
  2. Nhập mã cho phép cộng trong nội dung hàm add() rồi dùng từ khoá return để trả về kết quả của phép tính.
fun add(firstNumber: Int, secondNumber: Int): Int {
    return firstNumber + secondNumber
}

Bước 3

  1. Xác định hàm subtract() chấp nhận tham số firstNumbersecondNumber, cả hai đều thuộc loại Int và trả về một giá trị Int.
  2. Nhập mã cho phép trừ trong nội dung hàm subtract() rồi dùng từ khoá return để trả về kết quả của phép tính.
fun subtract(firstNumber: Int, secondNumber: Int): Int {
    return firstNumber - secondNumber
}
  1. Sửa đổi hàm main() để sử dụng hàm subtract() mới. Một giải pháp ví dụ có thể trông như bên dưới:
fun main() {
    val firstNumber = 10
    val secondNumber = 5
    val thirdNumber = 8

    val result = add(firstNumber, secondNumber)
    val anotherResult = subtract(firstNumber, thirdNumber)

    println("$firstNumber + $secondNumber = $result")
    println("$firstNumber - $thirdNumber = $anotherResult")
}

fun add(firstNumber: Int, secondNumber: Int): Int {
    return firstNumber + secondNumber
}

fun subtract(firstNumber: Int, secondNumber: Int): Int {
    return firstNumber - secondNumber
}

Tham số mặc định

Bước 1

  1. Tạo một hàm displayAlertMessage() chấp nhận tham số operatingSystem và tham số emailId, cả hai đều thuộc loại String và trả về một giá trị String.
  2. Trong nội dung hàm, hãy dùng một biểu thức mẫu để cập nhật và trả về thông báo.
fun displayAlertMessage(operatingSystem: String, emailId: String): String {
    return "There is a new sign-in request on $operatingSystem for your Google Account $emailId."
}

Bước 2

  • Chỉ định giá trị "Unknown OS" cho thông số operatingSystem.
fun displayAlertMessage(
    operatingSystem: String = "Unknown OS",
    emailId: String
): String {
    return "There is a new sign-in request on $operatingSystem for your Google Account $emailId."
}

Máy đếm bước

Tên hàm và tên biến phải tuân theo quy ước viết hoa Camel.

Nếu tên chứa nhiều từ thì viết thường chữ cái đầu tiên của từ đầu tiên, viết hoa chữ cái đầu tiên của từ tiếp theo và xoá mọi dấu cách giữa các từ.

Ví dụ về tên hàm:

  • calculateTip
  • displayMessage
  • takePhoto

Ví dụ về tên biến:

  • numberOfEmails
  • cityName
  • bookPublicationDate

Để tìm hiểu thêm về tên, hãy xem Quy tắc đặt tên.

Tránh dùng từ khoá Kotlin làm tên hàm vì các từ đó đã được gán nghĩa cụ thể trong ngôn ngữ Kotlin.

Mã giải pháp của bạn sẽ trông giống như đoạn mã sau:

fun main() {
    val steps = 4000
    val caloriesBurned = pedometerStepsToCalories(steps);
    println("Walking $steps steps burns $caloriesBurned calories")
}

fun pedometerStepsToCalories(numberOfSteps: Int): Double {
    val caloriesBurnedForEachStep = 0.04
    val totalCaloriesBurned = numberOfSteps * caloriesBurnedForEachStep
    return totalCaloriesBurned
}

So sánh 2 số

  • Tạo một hàm compareTime() chấp nhận tham số timeSpentToday và tham số timeSpentYesterday, cả hai đều thuộc loại Int và trả về một giá trị Boolean.

Giải pháp này dựa vào toán tử so sánh >. Toán tử đánh giá cho một giá trị Boolean, do đó, hàm compareTime() chỉ trả về kết quả là timeSpentToday > timeSpentYesterday.

Ví dụ: nếu bạn truyền một đối số 300 tới tham số timeSpentToday và đối số 250 tới tham số timeSpentYesterday, nội dung hàm sẽ đánh giá theo 300 > 250 và trả về một giá trị true vì 300 lớn hơn 250.

fun main() {
    println("Have I spent more time using my phone today: ${compareTime(300, 250)}")
    println("Have I spent more time using my phone today: ${compareTime(300, 300)}")
    println("Have I spent more time using my phone today: ${compareTime(200, 220)}")
}

fun compareTime(timeSpentToday: Int, timeSpentYesterday: Int): Boolean {
    return timeSpentToday > timeSpentYesterday
}
Have I spent more time using my phone today: true
Have I spent more time using my phone today: false
Have I spent more time using my phone today: false

Di chuyển mã trùng lặp vào một hàm

  1. Tạo một hàm in thông tin thời tiết của thành phố Ankara sau hàm main().

Đối với tên hàm, bạn có thể sử dụng printWeatherForCity() hoặc tên tương tự.

  1. Gọi hàm này từ hàm main().

Chương trình sẽ in thông tin thời tiết của Ankara.

fun main() {
    printWeatherForCity()
}

fun printWeatherForCity() {
    println("City: Ankara")
    println("Low temperature: 27, High temperature: 31")
    println("Chance of rain: 82%")
    println()
}

Bây giờ, bạn có thể tạo một hàm khác linh hoạt hơn để có thể in thông tin thời tiết của các thành phố khác.

  1. Thay thế các phần dành riêng cho Ankara trong câu lệnh println() bằng các biến.

Hãy nhớ quy ước viết hoa Camel cho tên biến và ký tự $ trước biến để giá trị của biến được sử dụng thay cho tên biến. Đây là các mẫu chuỗi mà bạn đã tìm hiểu trong một lớp học lập trình trước.

fun printWeatherForCity() {
    println("City: $cityName")
    println("Low temperature: $lowTemp, High temperature: $highTemp")
    println("Chance of rain: $chanceOfRain%")
    println()
}
  1. Hãy thay đổi định nghĩa hàm để các biến đó là các tham số phải được truyền vào hàm khi hàm được gọi và chỉ định loại dữ liệu cho mỗi tham số.

Tham số cityName thuộc loại String, còn tham số lowTemp, highTempchanceOfRain thuộc loại Int.

Không cần có giá trị return trong định nghĩa hàm vì các thông báo được in ra trong kết quả.

fun printWeatherForCity(cityName: String, lowTemp: Int, highTemp: Int, chanceOfRain: Int) {
    println("City: $cityName")
    println("Low temperature: $lowTemp, High temperature: $highTemp")
    println("Chance of rain: $chanceOfRain%")
    println()
}
  1. Cập nhật hàm main() để gọi hàm printWeatherForCity() và truyền vào thông tin thời tiết của Ankara.

Tên thành phố là "Ankara", nhiệt độ thấp là 27, nhiệt độ cao là 31 và khả năng có mưa là 82.

fun main() {
    printWeatherForCity("Ankara", 27, 31, 82)
}

fun printWeatherForCity(cityName: String, lowTemp: Int, highTemp: Int, chanceOfRain: Int) {
    println("City: $cityName")
    println("Low temperature: $lowTemp, High temperature: $highTemp")
    println("Chance of rain: $chanceOfRain%")
    println()
}
  1. Chạy chương trình để xác minh rằng kết quả cho biết thông tin thời tiết của Ankara.
  2. Gọi hàm printWeatherForCity() bằng thông tin thời tiết của các thành phố khác.
fun main() {
    printWeatherForCity("Ankara", 27, 31, 82)
    printWeatherForCity("Tokyo", 32, 36, 10)
    printWeatherForCity("Cape Town", 59, 64, 2)
    printWeatherForCity("Guatemala City", 50, 55, 7)
}

fun printWeatherForCity(cityName: String, lowTemp: Int, highTemp: Int, chanceOfRain: Int) {
    println("City: $cityName")
    println("Low temperature: $lowTemp, High temperature: $highTemp")
    println("Chance of rain: $chanceOfRain%")
    println()
}
  1. Chạy chương trình.

Chương trình sẽ in cùng kết quả như chương trình gốc, nhưng giờ đây mã của bạn ngắn gọn hơn và không chứa các mục lặp lại không cần thiết! Tất cả mã để in thông tin thời tiết của một thành phố đều được tập trung ở một nơi duy nhất: hàm printWeatherForCity(). Nếu muốn thay đổi cách hiển thị thông tin thời tiết, bạn có thể thay đổi các thông tin này ở một nơi duy nhất áp dụng cho tất cả các thành phố.

13. Thực hành bổ sung

Để thực hành thêm về ngôn ngữ Kotlin, hãy xem kênh Kotlin Basics (Kiến thức cơ bản về Kotlin) tại JetBrains Academy. Để tìm chính xác một chủ đề cụ thể, hãy chuyển đến bản đồ tri thức để xem danh sách các chủ đề được đề cập trong kênh.