- vừa được xem lúc

Cơ bản về các Null-aware Operators trong cơ chế Null Safety của Dart và Flutter.

0 0 29

Người đăng: Đỗ Cao Minh

Theo Viblo Asia

1. Null Safety

Kể từ phiên bản Dart 2.12Flutter 2.0 trở đi các biến Non-Nullable như String, int, ... sẽ mặc định là không thể null để tránh trường hợp các lỗi xảy ra ở runtime, khi bạn sử dụng Null Safety bạn có thể cho phép các biến ở trên trở thành biến Nullable types. Sau đây mình sẽ giới thiệu cho các bạn cơ bản các Null-aware Operators.

2. Question Mark: ?

Chúng ta không thể truy cập vào các thuộc tính hay phương thức của một biến không có giá trị( null), toán tử Question Mark: ? giúp ta khai báo một biến Nullable Type, khi này giá trị của biến là null và ta có thể truy cập được thuộc tính cũng như phương thức của biến.

Ví dụ:

Với cú pháp String? ta đã có thể khai báo biến testNull mà không cần gán giá trị cho nó, testNull hiện tại chính là một biến Nullable. Nhưng vì là null nên ta không thể sử dụng phương thức hay thuộc tính của nó được, để làm điều này đơn giản chúng ta chỉ cần thêm dấu ? vào sau tên biến.

Lúc này khi thực thi, code không còn bị lỗi mà trả về hai giá trị null.

3. Double Questions Mark: ??

Với Double Questions Mark: ?? chúng ta có thể so sánh giá trị của biến Nullable với một biểu thức khác.

Ví dụ:

Với điều kiện biến testNull là null thì hệ thống sẽ trả về giá trị được so sánh là Other value.

Còn với điều kiện biến testNull có giá trị, kết quả sẽ trả về giá trị của biến là Value.

4. Double Questions + Equal Mark: ??=

Với Double Questions + Equal Mark: ??= chúng ta sẽ có được giá trị của biến Nullable sau khi so sánh điều kiện biến có null hay không.

Ví dụ:

Khi testNull không có giá trị, hệ thống sẽ gán giá trị của testNull là Other value sau đó in ra màn hình.

Còn khi testNull đã có giá trị từ trước, hệ thống sẽ in ra giá trị của testNullValue.

5. Null-aware Spread Operator: ...?

Với toán tử này chúng ta sẽ nhìn vào ví dụ để dễ hình dung cách thức nó hoạt động.

Ví dụ:

Khi insert một Nullable List như testNull vào một List khác thì ta sẽ bị lỗi như trên hình, vì vậy để fix lỗi này chúng ta chỉ cần thêm ? vào sau ... tạo thành Null-aware Spread Operator: ...?

Và nếu testNull có giá trị thì finalList vẫn sẽ nhận giá trị một cách bình thường.

6. Exclamation Mark: !

Exclamation Mark: ! hiểu đơn giản thì nó sẽ chuyển một thằng Nullable thành Non-Nullable hoặc dùng nó để check một biến nào đó sẽ không null khi runtime.

Ví dụ

Ta thấy rằng null + ! = crash vì biến có giá trị null sẽ bị lỗi ở runtime vì vậy chỉ nên sử dụng ! khi bạn biết chắc rằng giá trị của biến sẽ không bao giờ là null.

Nếu biến đã là Non-Nullable thì sẽ ra kết quả một cách bình thường thôi, ! không chuyển thằng Non-Nullable ngược lại thành Nullable đâu nhé!.

7. Late Keyword: late

Nếu bạn muốn khai báo một biến phải mang giá trị có ý nghĩa khi runtime chứ không phải là null như khi dùng Question Mark: ? và ta sẽ khởi tạo giá trị cho nó sau chứ không phải ngay lúc này thì ta có thể dùng keyword late trước khai báo biến. Với late, nếu bạn quên khởi tạo giá trị cho biến, nó sẽ có giá trị null dẫn đến crash chương trình của bạn khi runtime.

Ví dụ:

Tên của thứ gì đó thì nên có cái tên cụ thể vì vậy ta nên dùng late thay cho ?.

Chương trình ở trên sẽ crash vì biến name chưa được khởi tạo giá trị. Nếu chúng ta khởi tạo giá trị cho nó, chương trình sẽ chạy một cách bình thường( hình dưới).

Tổng kết

Vậy là mình đã giới thiệu cho các bạn những kiến thức cơ bản về các Null-aware Operators trong Dart và Flutter. Mình cũng chỉ mới tìm hiểu về Dart và Flutter gần đây thôi và kiến thức ở trên là thứ mà mình cóp nhặt được trên mạng, nó có thể đúng có thể sai vì vậy có gì sai sót mong các bạn có thể comment ở phía dưới nhé!.

Tham khảo:
Flutter Null Safety - Johannes Milke: https://youtu.be/5Ro-CZ8Msno
Understanding null safety - Dart.dev: https://dart.dev/null-safety/understanding-null-safety

Bình luận

Bài viết tương tự

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 1: Làm quen cô nàng Flutter

Lời mở đầu. Gần đây, Flutter nổi lên và được Google PR như một xu thế của lập trình di động vậy.

0 0 254

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 3: Lột trần cô nàng Flutter, BuildContext là gì?

Lời mở đầu. Màn làm quen cô nàng FLutter ở Phần 1 đã gieo rắc vào đầu chúng ta quá nhiều điều bí ẩn về nàng Flutter.

0 0 189

- vừa được xem lúc

Dart Cheat Sheet - Full bộ "bỏ túi" các syntax trong ngôn ngữ Dart

Dart là một ngôn ngữ mới dùng cho cả Mobile và Web với Flutter Framework, thậm chí dùng cho Backend. Để giúp mọi người dễ dàng nắm bắt ngôn ngữ này hơn, 200lab Education đã tổng hợp thành bộ "bí tịch" dưới đây để tra cứu nhanh, tăng tốc phát triển phần mềm.

0 0 40

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 2: StatefulWidget vs StatelessWidget. Khi nào thì cần sử dụng cái nào?

Lời mở đầu. Ở bài trước, chúng ta đã dừng lại ở một kết thúc mở.

0 0 86

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 4: Lột trần InheritedWidget

Lời mở đầu. Trong đoạn kết của phần 2, chúng ta đã đối mặt với 1 bài toán: Làm thế nào để truyền data từ một widget cha nào đó xuống thẳng widget chắt mà không phải sử dụng constructor để truyền xuống

0 0 55

- vừa được xem lúc

Chinh phục RxDart Flutter trong 3 nốt nhạc. Nốt thứ nhất: Stream và giải thích các thuật ngữ

Lời mở đầu. Mình viết series này với mục đích chia sẻ kiến thức về RxDart trong Flutter.

0 0 63