[Bài 6] Ép kiểu trong kotlin
Chúng ta hãy xét qua một ví dụ:
Như các bạn đã thấy ở ví dụ trên, tôi đã thực hiện việc ép kiểu chuyển từ Double sang Int.
Khi các bạn học lập trình thì việc ép kiểu đã không còn xa lại đối với các bạn, đây là cách chuyển đổi một biến từ kiểu giá trị này sang kiểu giá trị khác.
Vậy vì sao chúng ta phải ép kiểu?
- Trong các ngôn ngữ lập trình thì mỗi kiểu dữ liệu có một cách lưu trữ khác nhau (có một kích thước khác nhau). Cho nên cần phải ép kiểu về một kiểu.
- ví dụ: int*int thì ra kiểu int. nhưng có khi kết quả trả về của phép toán trên vượt khỏi phạm vi kích thước của kiểu int. cho nên có yêu cầu là đưa nó về kiểu nào khác ví như kiểu long chẳng hạn.
1. Ép kiểu ngầm định (implicit type conversion)
2. Ép kiểu rõ ràng (explicit type conversion)
Tổng kết:
Việc ép kiểu nên được hạn chế sử dụng, vì bất cứ khi nào thực hiện hành vi ép kiểu cũng tiềm ẩn khả năng xảy ra vấn đề với chương trình. Và trong một số trường hợp cụ thể chúng ta bắt buộc phải sử dụng ép kiểu.
Như các bạn đã thấy ở ví dụ trên, tôi đã thực hiện việc ép kiểu chuyển từ Double sang Int.
Khi các bạn học lập trình thì việc ép kiểu đã không còn xa lại đối với các bạn, đây là cách chuyển đổi một biến từ kiểu giá trị này sang kiểu giá trị khác.
Vậy vì sao chúng ta phải ép kiểu?
- Trong các ngôn ngữ lập trình thì mỗi kiểu dữ liệu có một cách lưu trữ khác nhau (có một kích thước khác nhau). Cho nên cần phải ép kiểu về một kiểu.
- ví dụ: int*int thì ra kiểu int. nhưng có khi kết quả trả về của phép toán trên vượt khỏi phạm vi kích thước của kiểu int. cho nên có yêu cầu là đưa nó về kiểu nào khác ví như kiểu long chẳng hạn.
Và trong khi ép kiểu chúng ta gặp 2 trường hợp đó là sau khi ép kiểu sẽ bị mất mát dữ liệu.
- Ví dụ như chúng ta có kiểu Double như trên ví dụ. Sau khi chúng ta ép về kiểu Int chúng ta đã bị mất 0.5 phía sau. Và đương nhiên việc mất mát nhỏ này sẽ không ảnh hưởng gì với chúng ta, nhưng hãy tưỡng tượng với một số khổng lồ mà việc tiêu hao như vậy thì hậu quả sẽ khôn lường.
Các mức tăng dần trong ép kiểu: Byte=>Short=>Int=>Long=>Float=>Double
Ở trường hợp 2, chúng ta sẽ mở rộng được kiểu dữ liệu:
- Ví dụ từ Int sang Double sẽ có thêm .0 phía sau.
Các định mức sẽ ngược lại đối với phía trên: Double=>Float=>Long=>Int=>Short=>Byte
Cuối cùng chúng ta sẽ có 2 loại ép kiểu:
Ép kiểu ngầm định (implicit type conversion) được thực hiện bất cứ khi nào một kiểu dữ liệu cơ bản được sử dụng, nhưng giá trị được cung cấp thuộc kiểu dữ liệu cơ bản khác, và người dùng không nói cho compiler biết cách để thực hiện việc chuyển đổi này.
Ví dụ:
var X=1L+1
println(X)
1L có kiểu LONG, 1 có kiểu Int ==> Kotlin tự lấy kiểu dữ liệu lớn nhất làm chuẩn và gán cho t==>t có kiểu Long
2. Ép kiểu rõ ràng (explicit type conversion)
Ép kiểu rõ ràng (explicit type conversion) là việc chuyển đổi kiểu dữ liệu một cách rõ ràng bởi yêu cầu của lập trình viên.
Trong kotlin chúng ta có phương thức như sau:
- toByte(): Byte
- toShort(): Short
- toInt(): Int
- toLong(): Long
- toFloat(): Float
- toDouble(): Double
- toChar(): Char
Tổng kết:
Việc ép kiểu nên được hạn chế sử dụng, vì bất cứ khi nào thực hiện hành vi ép kiểu cũng tiềm ẩn khả năng xảy ra vấn đề với chương trình. Và trong một số trường hợp cụ thể chúng ta bắt buộc phải sử dụng ép kiểu.
Cảm ơn các bạn đã theo dõi....! Hẹn gặp lại các bạn ở trong các bài sau.
Nhận xét
Đăng nhận xét