Chào mừng độc giả Cafedev đến với chia sẻ về “Kotlin với các kiểu số nguyên không dấu.” Trong thế giới lập trình hiện đại, Kotlin mang đến những kiểu số nguyên không dấu như `UByte`, `UShort`, `UInt`, và `ULong`, mở ra những cơ hội mới cho việc biểu diễn dữ liệu dương. Hãy cùng khám phá cách sử dụng và những ứng dụng thú vị của chúng trong bài viết dưới đây. Cafédev hy vọng rằng thông tin này sẽ giúp các bạn hiểu rõ hơn về sức mạnh và linh hoạt của Kotlin trong lập trình số nguyên.

Ngoài các kiểu số nguyên, Kotlin cung cấp các loại sau đây cho các số nguyên không dấu:
* UByte: số nguyên 8 bit không dấu, giới hạn từ 0 đến 255
* UShort: số nguyên 16 bit không dấu, giới hạn từ 0 đến 65535
* UInt: số nguyên 32 bit không dấu, giới hạn từ 0 đến 2^32 – 1
* ULong: số nguyên 64 bit không dấu, giới hạn từ 0 đến 2^64 – 1
Các kiểu không dấu hỗ trợ hầu hết các phép toán của các đối tác có dấu của chúng.

Số không dấu được triển khai như các lớp trong-line với thuộc tính lưu trữ đơn của kiểu đối tác có dấu tương ứng cùng chiều rộng. Tuy nhiên, việc thay đổi từ kiểu không dấu sang kiểu có dấu (và ngược lại) là một sự thay đổi không tương thích nhị phân.

1. Mảng và dãy không dấu

Mảng không dấu và các hoạt động trên chúng đang ở Beta. Chúng có thể thay đổi không tương thích vào bất kỳ thời điểm nào. Yêu cầu opt-in
Tương tự như cho nguyên liệu, mỗi kiểu không dấu có kiểu tương ứng đại diện cho mảng của kiểu đó:
* UByteArray: mảng các byte không dấu
* UShortArray: mảng các số nguyên không dấu
* UIntArray: mảng các số nguyên không dấu
* ULongArray: mảng các số nguyên không dấu
Tương tự như cho các mảng số nguyên có dấu, chúng cung cấp API tương tự như lớp Array mà không có chi phí đóng gói.
Khi bạn sử dụng mảng không dấu, bạn sẽ nhận được cảnh báo cho biết tính năng này chưa ổn định. Để loại bỏ cảnh báo, hãy chấp nhận chú thích @ExperimentalUnsignedTypes. Việc quyết định liệu khách hàng của bạn có phải chấp nhận một cách rõ ràng để sử dụng API của bạn hay không là do bạn quyết định, nhưng hãy nhớ rằng mảng không dấu không phải là một tính năng ổn định, nên API sử dụng chúng có thể bị ảnh hưởng bởi các thay đổi trong ngôn ngữ.Tìm hiểu thêm về yêu cầu opt-in.
Dãy số và tiến triển được hỗ trợ cho UIntULong bởi các lớp UIntRange,UIntProgression,ULongRange, và ULongProgression. Cùng với các kiểu số nguyên không dấu, những lớp này là ổn định.

2. Ký tự số nguyên không dấu

Để làm cho việc sử dụng số nguyên không dấu dễ dàng hơn, Kotlin cung cấp khả năng đánh dấu số nguyên chữ số với một hậu tố cho biết một kiểu không dấu cụ thể (tương tự như Float hoặc Long):
* Ký tự uU là cho số nguyên không dấu. Loại chính xác được xác định dựa trên kiểu dữ kiện mong đợi. Nếu không có kiểu mong đợi nào được cung cấp, trình biên dịch sẽ sử dụng UInt hoặc ULong tùy thuộc vào kích thước của số nguyên chữ số:

val b: UByte = 1u // UByte, expected type provided
val s: UShort = 1u // UShort, expected type provided
val l: ULong = 1u // ULong, expected type provided

val a1 = 42u // UInt: no expected type provided, constant fits in UInt
val a2 = 0xFFFF_FFFF_FFFFu // ULong: no expected type provided, constant doesn’t fit in UInt

* Ký tự uLUL đánh dấu chữ số cụ thể là số nguyên không dấu dài:

val a = 1UL // ULong, even though no expected type provided and constant fits into UInt

3. Các trường hợp sử dụng

Trường hợp sử dụng chính của số nguyên không dấu là tận dụng phạm vi bit đầy đủ của số nguyên để biểu diễn giá trị dương. Ví dụ, để biểu diễn hằng số hexa không vừa trong các kiểu có dấu như màu trong định dạng 32-bit AARRGGBB:

data class Color(val representation: UInt)

val yellow = Color(0xFFCC00CCu)

Bạn có thể sử dụng số nguyên không dấu để khởi tạo mảng byte mà không cần chuyển đổi rõ ràng sang toByte():

val byteOrderMarkUtf8 = ubyteArrayOf(0xEFu, 0xBBu, 0xBFu)

Một trường hợp sử dụng khác là tương thích với API native. Kotlin cho phép biểu diễn các khai báo native chứa các kiểu không dấu trong chữ ký. Bản đồ sẽ không thay thế số nguyên không dấu bằng số có dấu giữ nguyên bản.

3.1 Mục tiêu không phải

Trong khi số nguyên không dấu chỉ có thể biểu diễn số dương và số không, nó không phải là mục tiêu sử dụng chúng ở nơi lĩnh vực ứng dụng yêu cầu số nguyên không âm. Ví dụ, như một kiểu của kích thước bộ sưu tập hoặc giá trị chỉ mục bộ sưu tập.
Có một số lý do:
* Sử dụng số nguyên có dấu có thể giúp phát hiện lỗi tràn số nguyên ngẫu nhiên và thông báo điều kiện lỗi, chẳng hạn như List.lastIndex là -1 cho một danh sách trống.
* Số nguyên không dấu không thể được xem xét như là một phiên bản có giới hạn phạm vi của số nguyên có dấu vì phạm vi giá trị của chúng không phải là một

Chúng tôi hy vọng rằng bài chia sẻ về “Kotlin với các kiểu số nguyên không dấu” đã giúp độc giả Cafedev hiểu sâu hơn về tiềm năng và ứng dụng của các kiểu số nguyên mới trong Kotlin. Đây chỉ là một bước nhỏ trong hành trình không ngừng khám phá của cộng đồng lập trình. Hãy tiếp tục đồng hành và chia sẻ kiến thức tại Cafedev để cùng nhau xây dựng một cộng đồng lập trình vững mạnh và đầy động lực. Cảm ơn bạn đã đọc và đồng hành cùng Cafedev!

Các nguồn kiến thức MIỄN PHÍ VÔ GIÁ từ cafedev tại đây

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của Cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!