Học nhanh ngôn ngữ Dart (Flutter) nhờ ngôn ngữ Kotlin (Phần 2)

Tram Ho

1. Lời mở đầu

Series này được viết nhằm mục đích giúp những bạn đã hiểu biết về ngôn ngữ Kotlin hoặc Java có thể học nhanh ngôn ngữ Dart để code Flutter. Nếu bạn chưa đọc phần 1, bạn có thể đọc lại phần 1 tại đây

2. Toán tử

Đa số là giống Kotlin. Tuy nhiên có 1 vài điểm khác thì mình đã gạch đỏ và chú thích vào trong code.

Ngoài các toán tử trên ra thì:

  • Toán tử gọi hàm (function call) cũng giống Kotlin là (). Ví dụ: print(3)
  • Toán tử gọi member function hoặc property của object cũng là .. Ví dụ: student.goToSchool() hoặc student.age
  • Trong Dart chỉ có as chứ không có as? như Kotlin.
  • Toán tử * cũng có ích trong trường hợp mình cần sinh ra chuỗi string với độ dài mong muốn. print('a' * 3); // Output là: aaa

3. If else

Giống y Kotlin

hoặc trong trường hợp trong block { } chỉ có 1 câu lệnh:

4. For loop

Trông Kotlin có vẻ dễ nhớ cú pháp hơn. Còn Dart thì hơi khó nhớ nhỉ?. Nhưng đừng lo, vì qua phần 2 mình sẽ giới thiệu biểu thức lambda (lambda expression), dễ dùng hơn thế này nhiều. Biến list trong ảnh bị lỗi do mình chưa khai báo biến list đó. Qua phần 2 mình sẽ giới thiệu kiểu List luôn nhé.

5. While loop

Giống y Kotlin:

while

do-while

6. Break and continue

Công dụng của breakcontinue giống y Kotlin.

7. Switch and case

Chính là when trong Kotlin

8. String template, String raw

String template thì giống hệt Kotlin. Nó cũng dùng $a${a.func}

String raw thì khác Kotlin, Kotlin sử dụng tripple quote """ """, còn Dart sử dụng double quote " " (nháy kép)

Để ý, mình không sử dụng escape trước ký tự '. Tức là nếu các bạn in câu trên mà sử dụng nháy đơn thì phải như thế này:

9. Exceptions

Giống Kotlin, tất cả các Exceptions trong Dart đều là unchecked exceptions, tức là bạn sẽ không bị ép phải try catch bắt cứ dòng code nào.

Dart cung cấp 2 lớp là Exception (là class cha của tất cả các exception) và lớp Error. ExceptionError không có ai kế thừa ai nhé. 2 thằng này về bản chất khác nhau hoàn toàn. Nếu như Exception là những trường hợp ngoại lệ không lường trước và nên try/catch những trường hợp này để đề phòng các case không mong muốn. Còn nếu app bạn gặp Error thì chứng tỏ code bạn bị fail, code tệ, code lỗi và bạn buộc phải sửa chứ không nên try/catch.

Cách throw một Exception cũng giống như Kotlin:

Ngoài ra, bạn có thể ném một Exception bất kỳ không cần biết class nào luôn:

10. try / catch / finally


Tương đối giống Kotlin, chỉ có 2 điểm khác:

  • Cách bắt cụ thể 1 exception nào đó: on FormatException catch (e) { }
  • Để throw lại một exception thì Dart cung cấp cho ta keyword là rethrow

11. Kiểu Null

Class Null rất là đặc biệt, nó chỉ có 1 instance duy nhất chính là null. Chính vì vậy mà so sánh null trong Dart sẽ có 2 kiểu thế này.

hoặc

Khi khai báo biến mà chưa có giá trị khởi tạo thì biến đó sẽ có kiểu là Null, cũng chính vì vậy mà ở bài 1 mình có nói nếu không có giá trị khởi tạo thì mọi biến đều có giá trị default là null

Output:

12.Toán tử 3 ngôi

Giống hệt Java. Toán tử này thì Kotlin không có.

Giải thích: Nếu biến isPublic == null thì biến visibility được gán giá trị là 1, ngược lại gán là 0

13. Toán tử null-aware

Toán tử ??

Output:

Toán tử này giống với toán tử Elvis ?: trong Kotlin. Nghĩa là nếu xnull thì in vế sau ra

Toán tử ??=

Output:

Nếu biến xnull thì gán giá trị bằng vế sau cho x

Toán tử ?.

?. dùng để check null trước khi gọi function hoặc property giống Kotlin. Ví dụ student?.goToSchool() hoặc student?.age.

14. Kiểu List và Array

Trong Dart nó gộp kiểu Array vs List lại chung một kiểu là List. Cú pháp tạo ra một List[value, value, value, ...]

Hàm add, set, remove và get

Collection if, collection for

Collection if này Kotlin không có hỗ trợ.

Collection for này Kotlin cũng không có hỗ trợ.

Output:

Nó duyệt hết phần tử trong list listOfInts rồi add vào list listOfStrings

Toán tử spread (spread operator và null-aware spread operator)

Toán tử spread ... này Kotlin không có, nó giúp mình addAll một list B vào một list A một cách nhanh chóng.

Tương tự null-aware spread operator ...? cũng giống vậy nhưng khác ở chỗ nó sẽ check null trước khi addAll.

15. Immutable và Mutable List

Thật sự trong Dart không tồn tại khái niệm Immutable List. Nó chỉ có một kiểu gọi là List, mà kiểu này cho phép add, setremove phần tử ra khỏi list nên nó là kiểu mutable. Tuy nhiên cũng có 3 cách để lách luật tạo ra một immutable list :v

Cách 1: sử dụng List.unmodifiable truyền vào 1 biến kiểu List

Nếu immutable list Kotlin nó sẽ báo lỗi compile ngay dòng code a.add(3) và tất nhiên bạn sẽ không thể chạy được chương trình thì ở Dart hơi khác một chút, nó không báo lỗi compile nhưng khi run nó sẽ xảy ra lỗi ở Runtime:

Ngoài hàm add ra, thì hàm set, remove cũng sẽ xảy ra Exception:

Cách 2 và 3: sử dụng từ khóa const

16. Set

Set chứa những phần tử không duplicate. Cú pháp tạo ra một Set{value, value, value, ...}

Set cũng support spread operator ... and the null-aware spread operator ...?

17. Map

Cú pháp tạo ra một Map là: {key: value, key: value, key: value, ....}

Chú ý: Vì cả SetMap đều dùng dấu { } cho nên khi ta viết code thế này nó sẽ suy đoán kiểu ra kiểu Map:

Nếu chúng ta muốn tạo ra một Set rỗng có thể làm như sau:

Kết luận

Như vậy là chúng ta đã đi được hơn nửa chặng đường rồi. Hy vọng các bạn tiếp tục theo dõi những phần tiếp theo

Tham khảo: https://dart.dev/guides

Đọc tiếp phần 3: Học nhanh ngôn ngữ Dart (Flutter) nhờ ngôn ngữ Kotlin (Phần 3)

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo