Contents
Chào mừng bạn đến với Fx Studio. Chúng ta lại tiếp tục với chuyến du lịch Dart Tour. Chủ đề lần này là Variables & Constant trong ngôn ngữ lập trình Dart. Giới thiệu lại cho bạn về các biến số và hằng số, cũng như các kiểu dữ liệu cơ bản được dùng trong Dart.
Nếu mọi việc đã ổn rồi, thì …
Bắt đầu thôi!
Chuẩn bị
Về mặt công cụ editor thì khá đơn giản:
- TextEditor
- Visual Studio Code (nên dùng)
Hoặc bạn vào trang https://dartpad.dev/ để tiến hành code luôn. Khá là giống với Playground của Swift.
Để bắt đầu tìm hiểu về Variables & Constant, bạn tham khảo lại việc viết biểu thức trong Dart nhóe. À, còn nếu bạn chưa biết về Dart, thì có thể tham khảo link sau:
Variables
Variables được gọi với cái tên thân thương là Biến số.
Nó là những phần tử có thể thay đổi được giá trị. Và chúng ta xem qua ví dụ khai báo một biến số trong Dart nhoé!
int number = 20;
Để khai báo một biến số, bạn cần:
- Khai báo kiểu dữ liệu trước
- Sau đó là tên biến
- Gán giá trị cho biến
Phần int
được xem là chú thích kiểu dữ liệu cho number
. Khá đơn giản phải không nào. Và dấu =
là toán tử gán, dành cho bạn nào quên sách bài vở, thì ==
mới là toán tử so sánh. Vì là biến số, nên bạn có thể tuỳ ý gán lại giá trị cho chúng.
int number = 20; number = 999;
int
là kiểu số nguyên và bạn sẽ có kiểu số thực là double
. Cũng tương tự như khai báo với int
ở trên thôi.
double pi = 3.14159;
Và int
& double
hay các kiểu số nào cũng xuất phát từ một thuỷ tổ.
Đó là
num
.
num myNumber;
Ngoài ra, bạn có thể áp dụng một vài toán tử với các số hay các biến. Vì mặc dù số nhưng cũng là những đối tượng trong chương trình.
10.isEven // true 3.14159.round() // 3
Trong đó:
isEven
là có phải số chẳn hay không?round90
là làm tròn số thực về số nguyên.
Còn rất nhiều thứ hay ho nữa, bạn từ từ khám phá nhoé.
Type safety
Dart is a type-safe language.
Câu này nghe rất quen nhĩ. Hình như Swift cũng là ngôn ngữ an toàn. Và Dart cũng giống Swift khi an toàn được hiểu ở đây là:
Bạn phải cho biết kiểu giá trị của biến và bạn sẽ không thay đổi nó sau này.
Ví dụ nhoé:
int myInteger = 10; myInteger = 3.14159; // No, no, no. That's not allowed.
Khi bạn đã khai báo myInteger
là một kiểu int
thì không thể nào gán giá trị double
cho nó nữa. Điều này giúp cho Dart tiết kiệm thời gian biên dịch và debug giúp bạn.
Tuy nhiên, ta sẽ có một số kiểu ngoại lệ. Như với num
dùng để khai báo một kiểu số chung chung, thì bạn có thể chuyển đổi qua lại được.
num myNumber;
myNumber = 10; // OK
myNumber = 3.14159; // OK
myNumber = 'ten'; // No, no, no.
Hay lắm Dart!
Còn nếu bạn thích máu choá và thử thách bản thân thêm, thì có thể dùng kiểu dynamic
để khai báo một biến số. Điều này giúp bạn chỉ định bất kỳ loại kiểu dữ liệu nào cũng được hết. Trình biên dịch sẽ không cảnh báo cho bạn về nó.
dynamic myVariable;
myVariable = 10; // OK
myVariable = 3.14159; // OK
myVariable = 'ten'; // OK
Okay! I’m fine.
Type inference
Cái này có thể gọi là kiểu nội suy. Khi Dart có thể tự động suy luận ra đúng kiểu dữ liệu dựa vào giá trị mà bạn gán lúc khai báo một biến số. Và sử dụng với từ khoá là var
Haha, giống Swift nữa rồi.
var someNumber = 10;
Khi khai báo như vậy, thì someNumber
sẽ được hiểu là kiểu int
và một type safety
được tạo ra. Và bạn cố gắng gán cho nó một giá trị kiểu khác thì sẽ báo lỗi.
var someNumber = 10;
someNumber = 15; // OK
someNumber = 3.14159; // No, no, no.
Tới đây, bạn sẽ thấy một điều là các ngôn ngữ lập trình ra đời sau, sẽ kế thừa các tinh hoa của các ngôn ngữ lập trình trước đó. Và Dart cũng không ngoại lệ. Nó sẽ giúp cho bạn linh hoạt hơn và dễ tiếp cận hơn cho nhiều đối tượng người học khác nhau.
Constants
Constants hay còn gọi với tên thân thương là Hằng số.
Trong Dart, bạn sẽ có loại 2 loại khai báo 1 biến số, mà không bao giờ thay đổi giá trị. Hay còn gọi là hằng số.
const
Đầu tiên, bạn sẽ có các hằng số được khai báo bằng từ khoá const
. Nó cũng được hiểu là các biến số không thể thay đổi giá trị (immutable) trong toàn bộ chương trình.
Ví dụ:
const myConst = 30;
Cũng tương tự như var
, hằng số khai báo với const
, thì cũng là một kiểu nội suy dựa vào giá trị ban đầu gán cho nó. Nhưng bạn cũng không thể gán lại giá trị khác cho hằng số.
Nó được xem như một biến số không đổi giá trị.
final
Tiếp theo, là một hằng số với khai báo là final
. Nó có nghĩa như sau:
- Bạn không thể biết giá trị của nó lúc biên dịch (complie)
- Chỉ khi chương trình thực thi tới đó (run-time), thì giá trị của nó mới được xác định
Loại này được gọi là hằng số run-time.
Bạn có thể nghe vô lý, nhưng đôi lúc bạn sẽ không biết được giá trị tại thời điểm bạn code là như thế nào. Xem ví dụ nhóe!
final hoursSinceMidnight = DateTime.now().hour;
Với DateTime.now()
chính là thời điểm run-time tại dòng lệnh thực thi. Khi đó, bạn mới lấy được giá trị cho hằng số của bạn. Chính là ngày giờ hiện tại. Còn lúc khai báo, bạn sẽ không xác định ngày giờ hiện tại ngay lúc đó được.
Tóm tắt
- Khái báo hằng số với
const
trước, nếu trình biên dịch báo lỗi - Bạn sẽ thay đổi thành
final
Như vậy là okay!
Naming
Cách đặt tên cho Variables & Constant rất quan trọng. Nên bạn hãy áp dụng các nguyên tắt trước đây với các ngôn ngữ khác mà bạn đã từng làm việc. Ví dụ như:
- Các quy tắt đặt tên cơ bản trong lập trình
- Quy tắc lạc đà
- Tên phải có ý nghĩa, tránh các từ chung chung không rõ nghĩa
Ví dụ:
dogAge // ok
totalComputer // ok
a // not ok
temp // not ok
Increment & decrement
Phần này sẽ tăng và giảm giá trị của các biến số là kiểu số. Cũng tương tự như các ngôn ngữ lập trình khác, ta có một số toán tử như sau:
+=
,-=
Toán tử này được hiểu là sẽ lấy giá trị của biến và cộng hoặc trừ với giá trị phía bên phải. Sau đó, kết quả được gán lại cho biến đó. Ví dụ:
var counter = 0;
counter += 1;
counter -= 1;
Ví dụ trên tương tự với biểu thức sau:
var counter = 0;
counter = counter + 1;
counter = counter - 1;
EZ, phải không!
++
,--
Toán tử này tăng và giảm trực tiếp giá trị biến lên hoặc xuống 1 đơn vị. Xem tiếp ví dụ nhóe!
var counter = 0;
counter++;
counter--;
Swift đã bỏ 2 toán tử này rồi. Ahuhu!
*=
,/=
Có thể áp dụng cách này cho nhân và chia với một giá trị nào đó. Ví dụ:
double myNumber = 30;
myNumber *= 4;
myNumber /= 10;
Cũng không có gì quá khó ở đây hết. Mọi thứ vẫn đơn giản nhoé!
Tạm kết
- Tìm hiểu về Variables & Constant trong Dart
- Khai báo trực tiếp kiểu giá trị cho biến số
- Sử dụng kiểu nội suy cho biến số với khai báo
var
- Hai cách khai báo một hằng số, với 2 từ khóa
const
&final
- Kiểu dữ liệu chung về số, với khai báo
num
- Cách đặt tên cơ bản cho Variables & Constant
- Các toán tử tăng giảm đối với biến số
Okay! Tới đây, mình xin kết thúc bài viết về Variables & Constant trong series Dart Tour. Nếu có gì thắc mắc hay góp ý cho mình thì bạn có thể để lại bình luận hoặc gởi email theo trang Contact.
Cảm ơn bạn đã đọc bài viết này!
Related Posts:
Written by chuotfx
Hãy ngồi xuống, uống miếng bánh và ăn miếng trà. Chúng ta cùng nhau đàm đạo về đời, về code nhóe!
Leave a Reply Cancel reply
Fan page
Tags
Recent Posts
- Charles Proxy – Phần 1 : Giới thiệu, cài đặt và cấu hình
- Complete Concurrency với Swift 6
- 300 Bài code thiếu nhi bằng Python – Ebook
- Builder Pattern trong 10 phút
- Observer Pattern trong 10 phút
- Memento Pattern trong 10 phút
- Strategy Pattern trong 10 phút
- Automatic Reference Counting (ARC) trong 10 phút
- Autoresizing Masks trong 10 phút
- Regular Expression (Regex) trong Swift
You may also like:
Archives
- September 2024 (1)
- July 2024 (1)
- June 2024 (1)
- May 2024 (4)
- April 2024 (2)
- March 2024 (5)
- January 2024 (4)
- February 2023 (1)
- January 2023 (2)
- November 2022 (2)
- October 2022 (1)
- September 2022 (5)
- August 2022 (6)
- July 2022 (7)
- June 2022 (8)
- May 2022 (5)
- April 2022 (1)
- March 2022 (3)
- February 2022 (5)
- January 2022 (4)
- December 2021 (6)
- November 2021 (8)
- October 2021 (8)
- September 2021 (8)
- August 2021 (8)
- July 2021 (9)
- June 2021 (8)
- May 2021 (7)
- April 2021 (11)
- March 2021 (12)
- February 2021 (3)
- January 2021 (3)
- December 2020 (3)
- November 2020 (9)
- October 2020 (7)
- September 2020 (17)
- August 2020 (1)
- July 2020 (3)
- June 2020 (1)
- May 2020 (2)
- April 2020 (3)
- March 2020 (20)
- February 2020 (5)
- January 2020 (2)
- December 2019 (12)
- November 2019 (12)
- October 2019 (19)
- September 2019 (17)
- August 2019 (10)