Bài 7 – Ép kiểu dữ liệu trong Kotlin

[polldaddy poll=9764234]

Trong bài 6 ta đã nắm rõ về các kiểu dữ liệu cũng như cách khai báo biến, trong bài này chúng ta qua phần Ép kiểu dữ liệu trong Kotlin.

Vì sao phải ép kiểu?

Trong quá trình tính toán đôi khi kết quả trả về không còn giống với kiểu dữ liệu chỉ định ban đầu nên ta cần ép kiểu

Khi ép kiểu thường ta gặp 2 trường hợp:

Ép kiểu rộng

Đưa từ kiểu có vùng lưu trữ nhỏ lên kiểu có vùng lưu trữ lớn==>không sợ mất mát dữ liệu.

Ví dụ: Byte=>Short=>Int=>Long=>Float=>Double

Ép kiểu hẹp

Đưa từ kiểu có vùng lưu trữ lớn về kiểu có vùng lưu trữ nhỏ==>có thể bị mất mát dữ liệu

Ví dụ:  Double=>Float=>Long=>Int=>Short=>Byte

Vậy thì Ép như thế nào?

Trong Kotlin, bất kỳ kiểu dữ liệu number nào cũng có sẵn các phương thức :

  • toByte(): Byte
  • toShort(): Short
  • toInt(): Int
  • toLong(): Long
  • toFloat(): Float
  • toDouble(): Double
  • toChar(): Char

Các phương thức trên thường được gọi là ép kiểu tường minh (chỉ đích danh kiểu dữ liệu nào sẽ được ép về), còn gọi tiếng anh cho nó sang miệng là Explicit Conversion.

Ta thử chạy đoạn ép kiểu sau:

[code language=”java”]

var X:Int=10
var D:Double=X.toDouble()

println(“X=”+X)
println(“D=”+D)

[/code]

Kết quả X =10, và D là 10.0 vì 10 được đưa về số Double là 10.0

Trường hợp này là ép kiểu rộng ==> Đưa từ kiểu có vùng lưu trữ nhỏ hơn lên kiểu dữ liệu có vùng lưu trữ lớn hơn

Xét tiếp ví dụ sau:

[code language=”java”]
var F:Double=10.5
var Y:Int = F.toInt()
println(“F=”+F)
println(“Y=”+Y)
[/code]

Kết quả F=10.5 và Y=10 ==> bị mất mát dữ liệu, trường hợp này chính là Ép hẹp, đưa từ kiểu dữ liệu có vùng lưu trữ lớn hơn == > về kiểu dữ liệu có vùng lưu trữ nhỏ hơn . Việc Ép Hẹp này rất nguy hiểm vì nó làm mất mát dữ liệu, đặc biệt các bài toán liên quan tới sai số yêu cầu tối thiểu, hay chuyển khoản ngân hàng. Cần tránh trường hợp này.

Ngoài ra Kotlin còn hỗ trợ một trường hợp là Ép kiểu không tường minh (gọi sang miệng bên tiếng anh làm Implicit Conversion), tức là Kotlin tự nội suy ra kiểu dữ liệu để gán cho biến, thường do các phép toán số học tạo ra, ví dụ:

[code language=”java”]
var t=13L+1
println(t)
[/code]

13L 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

Như vậy Tui đã trình bày xong cách ép kiểu trong Kotlin, bài này rất quan trọng. Chúng ta cần nắm chắc quy tắc ép kiểu để lựa chọn giải pháp ép kiểu cho đúng. Và chắc chắn trong quá trình lập trình ta phải gặp thường xuyên với các trường hợp ép kiểu.

Soure code : http://www.mediafire.com/file/g6bp1c7og2sqzee/HocEpKieu.rar

Hẹn gặp lại các bạn ở bài tiếp theo

Chúc các bạn thành công

Trần Duy Thanh (http://ssoftinc.com/)

One thought on “Bài 7 – Ép kiểu dữ liệu trong Kotlin”

Leave a Reply