Biến và kiểu dữ liệu
Dart là một ngôn ngữ hướng đối tượng có kiểu dữ liệu tĩnh (static typed). Một biến không gán giá trị khi khởi tạo sẽ có giá trị null
theo mặc định. Chúng ta cũng có thể gán giá trị null
một cách tường minh cho một biến tại thời điểm khai báo biến, hoặc tại bất kỳ thời điểm nào đó trong chương trình.
Các kiểu dữ liệu cơ bản
Dart có các kiểu dữ liệuint
, double
, bool
, String
là kiểu dữ liệu Cơ bản trong dart. Trong suốt thời gian tồn tại của một biến, nó chỉ dùng với đúng kiểu dữ liệu mà nó đã được định nghĩa ban đầu. Mọi nỗ lực gán dữ liệu khác kiểu sẽ dẫn đến lỗi biên dịch.
Giá trị infinity
là một thuộc tính static củadouble
class và nó có thể được truy cập bằng cách sử dụngdouble.infinity
. Một số thuộc tính quan trọng hơn mà bạn nên tham khảo ở đây.
Từ khóa var
Chúng ta có thể gán bất kỳ giá trị nào cho một biến được khai báo kiểu var
và Dart sẽ tự động suy ra kiểu của nó từ giá trị khởi tạo. Kiểu dữ liệu tự suy (Type-inference) là một tính năng được tích hợp sẵn của Dart.
Kiểu dữ liệu num
Từ khóa num
cũng có sẵn trong dart cho phép chúng ta tạo các biến có thể chứa cả giá trị int
và double
. Trường hợp sử dụng của nó có thể là nơi một biến có thể chứa các giá trị kiểu int
hoặc kiểu kép
( double
) tại bất kỳ thời điểm nào.
Chuỗi (String)
Một chuỗi có thể được khai báo bằng cách sử dụng dấu nháy đơn ' '
hoặc dấu nháy kép " "
tương tự như Javascript. Bạn cũng có thể sử dụng dấu ngoặc kép đơn '''
hoặc dấu ngoặc kép "
để ngắt một dòng đơn thành nhiều dòng code.
Kiểu dữ liệu động
(dynamic
)
Bạn có thể khai báo một biến dynamic
một cách rõ ràng bằng cách sử dụng từ khóa dynamic
hoặc nó được tự động gán bằng dart khi kiểu dữ liệu không được khai báo rõ ràng.
Lưu ý:
Luôn sử dụng kiểu dữ liệu dynamic
một cách thận trọng và khai báo kiểu dữ liệu của bạn một cách rõ ràng thường xuyên nhất có thể. Nếu không làm như vậy có thể tạo ra một số lỗi nhất định trong code của bạn. Lưu ý – Chỉ sử dụng dynamic
khi bạn biết rõ mình đang làm gì.
Hàm (function)
Dart là một typed language có nghĩa là mọi thứ trong Dart đều có một kiểu (type), hàm cũng vậy! Hãy xem xét một ví dụ về hàm main
bên dưới.
Hàm main
Hàm này có kiểu trả về là void
. Dart tự động gọi hàm main
(){…} cho bạn khi ứng dụng của bạn khởi động. Đây là một vòng lặp for đơn giản thực thi khi hàm main
này được gọi.
Nói chung, bạn có thể đặt tên cho bất kỳ chức năng nào bằng bất kỳ tên nào bạn muốn nhưng main
là một tên đặc biệt vì nó là điểm khởi động của bất kỳ ứng dụng Dart nào.
Chú ý:
Bạn nên tuân theo quy ước về camel-case để đặt tên cho các hàm của mình, tức là yourFunctionName(){}
.
Cách dùng hàm (function)
Xác định các chức năng cho hàm của bạn
Như đã thảo luận ở trên, bạn có thể xác định hàm của mình và đặt tên cho nó bằng cách sử dụng camel-case. Nếu bạn đang trả về giá trị từ hàm thì kiểu trả về của hàm phải được khai báo. Nó không bắt buộc nhưng nếu bạn không làm điều đó thì Dart sẽ không báo lỗi mà thực hiện nó với một cảnh báo. Chúng ta hãy xem xét ví dụ này về các hàm có kiểu trả về và không có kiểu trả về,
Bây giờ, chúng ta hãy xem xét hàm đầu tiên addTwoNumbers(...){...}
. Hàm này không có kiểu trả về và kiểu đối số được khai báo rõ ràng. Vì vậy, Dart vẫn sẽ phân tích cú pháp và thực thi chức năng này như,
Dart tự động gán kiểu dynamic
cho hàm và các đối số. Bạn có thể chuyển bất kỳ loại dữ liệu nào làm đối số cho hàm này và dart sẽ cố gắng thêm chúng. Nhưng kiểu khai báo hàm này dễ xảy ra lỗi hơn vì việc bạn có thể thêm kiểu int
và bool
sẽ không gây ra lỗi biên dịch mà là lỗi runtime!
Hàm thứ hai void addTwoIntegerNumbers(int num1, int num2){...}
ít bị lỗi hơn vì chúng ta đã khai báo rõ ràng kiểu trả về và các kiểu đối số, tức là void
và int
. Ngay sau khi bạn chuyển bất kỳ dữ liệu nào khác không phải là int
vào hàm này, trình biên dịch sẽ bắt cảnh báo bạn.
Hàm thứ ba int sumOfTwoNumbers(int num1, int num2){...}
có kiểu trả về là int
bởi vì thay vì in tổng, chúng ta trả về nó từ hàm.
Trong hàm main
, chúng ta gọi các phương thức này bằng tên của chúng và để thực thi chúng, chúng ta thêm () dấu ngoặc đơn
.
Tôi nhắc lại lần nữa! Bạn hãy tránh dynamic type!
Dart là sự kết hợp của ngôn ngữ strongly-typed cũng như ngôn ngữ loosely-typed nhưng bạn nên tránh dynamic type càng nhiều càng tốt như tôi đã minh họa cho bạn bằng ví dụ trên. Điều này sẽ giúp code ổn định hơn và không có lỗi.