Tải bản đầy đủ (.docx) (157 trang)

Ngôn ngữ lập trình dart cơ bản

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.93 MB, 157 trang )

Biến và kiểu dữ liệu trong Dart
1.

Biến là gì ?
Theo Wikipedia: “ Trong lập trình máy tính, một biến(variable) là một vị trí lưu trữ gắn
liền với một tên tượng trưng(Định dạng) liên quan, chứa một số lượng thông tin được
biết bến đến hay được biết đến mà gọi là giá trị. ” (-_-)
=> Thôi hãy hiểu biến là nơi lưu trữ chứa đựng các thông tin. Các thông tin này sẽ được
chương trình máy tính sử dụng sau này.

Hãy tưởng tượng bạn đang xây dựng một kệ sách bằng gỗ. Bạn cần ván gỗ, đinh, và
những dụng cụ khác để hoàn thành kệ sách. Để sắp xếp vật liệu tốt hơn, mày quyết định
những thứ tương tự với nhau vào một hộp. => Nó giúp mày dễ tìm vật liệu hơn khi cần
thì mày sẽ tiết kiệm được nhiều thời gian hơn. Mày sẽ có một hộp đựng ván gỗ, một hộp
đinh và một hộp đựng dụng cụ :).

Tuy nhiên, đời đéo như mơ. Ờ gỗ có nhiều loại, ngắn dài, gỗ xoan, gỗ vải, gỗ lim,... đinh
với dụng cụ cũng thế. Ôi !! đm làm thế nào bây giờ ?? ....
Thế thì lại chia nó ra vậy chia để riêng biệt hơn nhé. Một hộp gỗ lim, một hộp gỗ xoan,
một hộp gỗ vải,.... Bây giờ chúng ta có quá nhiều hộp cần gán nhãn để dễ phân biệt và
tìm kiếm chúng. Tới đây thì mày đã có một cách sắp xếp vật các vật liệu hiệu quả và thể
dễ dàng tìm kiếm khi cần rồi phải khơng ? => Đúng mẹ rồi cịn gì :P


=> Đấy nó sẽ như hình bên trên đấy.

Tương tự như vậy, một biến giống một cái hộp nhỏ dùng để chứa dữ liệu. Khi chúng ta
cần gán một giá trị cho một biến => giống như mày gán nhãn cho cái hộp đựng gỗ ý. Vậy
nên hành động khai báo biến chính là hành động gán nhãn cho cái hộp. Khi chúng ta khai
báo biến chính là hành động gán nhãn vào hộp đó và cho nó một cái tên riêng để hay là
một nhận dạng, xác định kiểu dữ liệu nó có thể chứa và thiết lập giá trị ban đầu của nó.



1.1 Khai báo biến trong ngơn ngữ Dart
“Mỗi ngơn ngữ mà chúng ta nói thơng thường đều có một bộ quy luật cách cấu trúc
câu. Những quy tắc này được gọi là cú pháp ngôn ngữ. Trong lập trình máy tính, những
cú pháp(syntax) cũng phục chung một mục đích như vậy.”
-

Cú pháp khai báo biến của Dart.

Chúng ta khai báo bằng cách đề cập đến kiểu dữ liệu mà biến của chúng sẽ chứa,
chẳng hạn như số nguyên. Sau đó đặt riêng của biến, tiếp theo là dấu “=” và giá trị
ban đầu. Và dấu chấm phẩy nữa
“Một kiểu quy ước đặt tên trong Dart đó là viết hoa các chữ cái đầu của mỗi từ
ngoại trừ từ đâu tiên và các từ đều viết liên với nhau và khơng sử dụng dấu phân
cách.Ví dụ: vanTuyen”
=> Trong Dart khai báo biến sẽ:


Trong đoạn code ở trên chúng ta vừa khai báo biến với tên:
myFirstDartVariable. myFirstVariable có thể chứa kiểu dữ liệu int(integer - số
ngun)

1.2 In biến ra ngồi màn hình:
-

2.

Syntax cơ bản của câu lệnh print như sau: Print(variableName)
Ví dụ: Print(myFirstDartVariable) => Output = 5


Kiểu dữ liệu là gì ?

- Kiểu dữ liệu của một phần tử hay một biến là một thuộc tính cho chúng ta biết loại dữ
liệu nào mà biến có thể chứa được. Điều này tương tự với việc ta chọn loại vật liệu nào
để có thể bỏ vào hộp trong vị dụ giá sách trên.
- Kiểu dữ liệu có thể là những thứ mà chúng đã gặp hàng ngày như số, chữ cái, những
ký tự được phân loại dựa trên thuộc tính tương tự chúng.


2.1 Những kiểu dữ liệu được tích hợp sẵn trong Dart
“Numbers,Strings,Booleans,Lists,Sets,Maps,Symbols”
Trong bài viết này chúng ta sẽ tập chung vào những kiểu dữ liệu sau: numbers,
strings, booleans, lists, sets và maps. Cịn runes và symbols sẽ khơng được đề cập
đến.
Trước khi tìm hiểu chi tiết từ kiểu dữ liệu, có hai khái niệm mà mày cần phải làm
quen trước.

2.2 Tham trị (values) và tham chiếu(references)
Kiểu dữ liệu có thể chia thành hai loại:
1. Kiểu tham chiếu (Reference type)
2. Kiểu tham trị (Value type)

Những thông tin được cung cấp bởi kiểu tham trị thì chính những thơng tin đó là
giá trị ln. Cịn đối với kiểu tham chiếu, những thơng tin nó cung cấp là một tham
chiếu đến một vài đối tượng(Cái này nói sau), tức là địa chỉ bộ nhớ nơi mà đối tượng
đó được lưu trữ. ~~ (Khó hiểu vl)
Tưởng tượng mày có một mẩu giấy. Mày muốn mẩu giấy của mày chứa một vài
thông tin, như là tên của mày. => Mày viết tiên của mày lên mẩu giấy, do đó giá trị
của mẩu giấy chính là thơng tin mà nó đang có. Đấy kiểu tham trị cũng thế :)
Lại tưởng tượng tiếp, nếu mày muốn mẩu giấy đó chứa nhà của mày thì sao ? Vơ

lý vl nhỉ ? Do đó, mày sẽ viết địa chỉ nhà của mày lên tờ giấy => tờ giấy là một tham
chiếu đến đến thông tin được yêu cầu. Đấy tham chiếu đấy :). Nếu ai muốn đi tới nhà
mày thì cần phải đọc tờ giấy rồi mới tìm được đường tới nhà mày và đi đến.
Tương tự như vậy, kiểu tham chiếu chứa vị trí địa chỉ của bộ nhớ của dữ liệu, trong
khi kiểu tham trị thì chứa chính thơng tin giá trị đó ln.

2.3 Kiểu dữ liệu là đối tượng
Trong hầu hết các ngôn ngữ, kiểu dữ liệu gốc là kiểu tham trị, nhưng trong Dart, tất
cả kiểu dữ liệu đều là đối tượng. Điều này nghĩa là dữ liệu gốc trong ngôn ngữ Dart là


kiểu tham chiếu. Do đó, chúng ta có thể nói rằng, trong ngôn ngữ Dart tất cả các biến
đều chứa tham chiếu và đang tham chiếu đến đến một đối tượng.

2.3 Giá trị mặc định
Các biến chứa được giá trị đều có một giá trị ban đầu của null . Ngay cả các biến
với kiểu số đều là null ban đầu. Bởi vì số(numbers) - giống như hầu hết các thứ khác
trong ngôn ngữ Dart - đều là đối tượng. null đơn giản có nghĩa là một biến khơng
tham chiếu đến một đối tượng, nó cũng khơng tham chiếu đến bất kỳ thứ gì khác.

3.

Khai báo literal
Chúng ta sẽ sử dụng từ “Khai báo literal” trong những bài sau. Khai báo literal là việc
khai báo trực tiếp các giá trị cố định khi chúng xuất hiện trong source code.
Ví dụ: việc khai báo “Hello World”,5 và ‘A’ đều là khai báo literal.

Classes
1.


Class là những bản vẽ thiết kế


Bản vẽ thiết kế là một hướng dẫn nó sẽ chỉ dẫn chúng ta tạo ra một cái gì đó. Trong thực tế, các
bản vẽ thiết kế thường là kế hoạch xây dựng các tịa nhà. Bạn có thể tạo ra nhiều tòa nhà bằng
cách sử dụng một bản thiết kế. Với mỗi toàn nhà là duy nhất nhưng lại có kiến trúc cơ bản
giống nhau.

Ví dụ, một bản thiết kế có thể chỉ định số phịng mà một ngơi nhà nên có. Mỗi ngơi nhà được
xây dựng chung một bản thiết kế sẽ có số phịng giống nhau, nhưng nội thất, màu sơn, trang trí
bên trong khác nhau. Khiến chúng trở nên đa dạng nhưng vẫn giữ được nét liên quan thơng qua
bản thiết kế.
Classes có thể được coi như là một bản vẽ thiết kế vậy. Nó giúp chúng ta tạo nên một object(đối
tượng). Một object là một thứ được dùng trong chương trình. Tương tự như một ngôi nhà là một
instance của một bản vẽ thiết kế ở trên. Bản vẽ chỉ là những tờ giấy còn ngơi nhà mới chính là
đại diện vật lý của bản vẽ và có thể dùng để ở được.
Bản thiết kế sẽ chỉ định các thuộc tính mà đối tượng sẽ có và cũng sẽ chỉnh định các hoạt động/
phương thức mà đối tượng có thể sử dụng. Các thuộc tính trong Dart được gọi là các biến
instance vì chúng là các biến được khởi tạo khi một đối tượng được tạo ra, tức là một instance
của một lớp.
Bạn sẽ dễ hiểu thơng qua ví dụ sau đây!
Chúng ta sẽ tạo ra lớp (class) của con người nhé


Mỗi người đều có một cái tên, giới tính và tuổi đó được gọi là một thuộc tính hay biến. Và con
người cũng thực hiện những hoạt động như đi bộ và nói chuyện,... đó được gọi là phương thức.
Class của con người sẽ bao gồm những phương thức và thuộc tính đó. Để tạo instance thì chúng
ta cần thuộc tính và phương thức riêng biệt cho từng người. Ví dụ: Tên: Sarah, tuổi: 25, giới
tính: nữ có thể thực hiện những hoạt động như đi lại, nói chuyện,...
2.


Classes tích hợp sẵn và classes do người dùng tự định nghĩa.
Classes trong Scala được định nghĩa thành 2 loại: các classes tích hợp sẵn và classes do người
dùng tự định nghĩa.
Bạn còn nhớ khi chúng ta thảo luận về list? Tất cả các phương thức mà chúng ta đã thảo luận
thực sự là phần của class List tích hợp sẵn của ngôn ngữ Dart.

Khi chúng ta định nghĩa một danh sách thực ra chúng ta đang tạo một instance, tức là đối tượng,
của lớp List.
Mọi đối tượng là một instance của một classes và tất cả các class đề đi xuongs từ class cao nhất
trong hệ thống phân cấp class, class Object.
3.

Tạo một Class trong Dart


Từ khóa class sẽ được sử dụng định nghĩa một class trong ngơn ngữ Dart. Sau từ khốn là một
phân dạng, một cái tên do bạn tự chọn. Nội dung của class sẽ nằm bên trong dấu ngoặc
nhọn {}

Nội dung của class sẽ bao gồm các biến instance và các phương thức.

3.1 Các biến instance
Class Person của chúng ta có 3 biến instance. Đây là cách mà bạn sẽ khai báo biến instance
trong ngôn ngữ Dart.

Tất cả các biến instance khơng được gán giá trị đều có giá trị là null

3.2 Các phương thức instance
Có rất nhiều kiểu của phương thức mà bạn có thể sử dụng trong class tuy nhiên trong series

này chúng ta chỉ tập trung vào phương thức instance.
Các phương thức instance tập trung vào các đối tượng có thể truy cập các biến instance.
Phương thức của chúng ta là walking và talking sẽ chỉ in tên của người đang đi bơ hoặc nói
chuyện tương ứng.


Và chúng ta đã tạo được class đầu tiên với 3 biến instance và hai phương thức.
4.

Đối tượng của một class
Sau khi một class được định nghĩa, bạn có thể tạo một đối tượng bằng cách sử dụng từ khóa
new theo sao là nhận dạng của class

Chúng ta tạo ra các đối tượng vì muốn làm việc với chúng theo một cách nào đó. Vì lý do này,
chúng ta gán cho đối tượng một biến.
Hãy khởi tạo lớp Person nhé!


4.1 Sử dụng class member
Bây giờ chúng ta đã có đối tượng firstPerson. Tiếp theo chúng ta sẽ tìm hiểu cách sử dụng
các biến và phương thức instance. Trong ngôn ngữ Dart, hãy sử dụng ( . ) để tham chiếu
đến một biến hoặc phương thức instance

Nếu bạn khởi tạo biến instance ở nơi nó được khai báo, giá trị sẽ được đặt khi instance
được tạo. Vì vậy, ngay sau khi firstPerson được tạo, giá trị của age đã được đặt bằng 0.
Hãy đặt giá trị của name và gender bằng toán tử dấu chấm trong khi chỉ định lại age một
giá trị mới.


Output:

Sarah
female
25
Khi bạn gọi một phương thức tức là bạn gọi trên một đối tượng. Phương thức đó có quyền
truy cập vào các phương thức và biến instance của đối tượng đó. Chúng ta hãy gọi phương
thức walking và talking và xem điều gì sẽ xảy ra.


Output:
Sarah is walking
Sarah is talking
walking() được gọi trên đối tượng firstPerson và in cùng biến name. Vì phương thức được
gọi trên một đối tượng nên nó xác định xem biến được sử dụng có phải là một trong các
biến instance của đối tượng firstPerson, Phương thức sẽ in ra giá trị của nó.
Trong đoạn code trên, firstPerson.walking() lấy giá trị của Sarah và in ra Sarah is
walking. firstPerson.talking() cũng thực hiện tương tự và in ra Sarah is talking

4.2 Nhiều đối tượng trên cùng một class
Vì các class cung cấp code có thể sử dụng lại, nên có nghĩa là chúng ta có thể tạo nhiều đối
tượng bằng cách sử dụng cùng một class. Cùng với firstPerson, tạo thêm các đối tượng
của class Person.



Output:
Sarah
Ben
Martin
Hanah
Mặc dù có nhiều biến name, nhưng tất cả chúng đều được tham chiếu bởi đối tượng khác

nhau, do đó, việc sửa đổi một biến sẽ không không sửa đổi các biến khác.Đây là lý do tại
sao các thuộc tính được gọi là các biến instance, bởi vì mỗi đối tượng có một tập hợp các
biến đó riêng mình.

5.

Constructors
Trong ngơn ngữ Dart, constructor là những hàm đặc biệt của một class có nhiệm vụ khởi tạo
các biến instance của class đó.
Một constructor phải có tên cùng với tên class mà nó đang được khai báo và vì nó là một hàm
nên nó có thể được tham số hóa.
Tuy nhiên, khơng giống như các hàm thơng thường, các constructor khơng có giá trị trả về, do
đó khơng thể có kiểu trả về.
Dart cung cấp nhiều loại constructor. Trong series này chúng ta sẽ tìm hiểu về hai trong số
chúng
1. Generative Constructor
2. Named Constructor

5.1 Generative Constructor


Dạng phổ biến nhất của một constructor đó chính là generative constructor, tạo ra một
instance mới của một class.

Output:
Sarah
Female
25
Như đã thảo luận ở trên, chúng ta có thể tạo nhiều instance của một class duy nhất. Từ khóa
this đề cập đến instance hiện tại.

Trên dòng 8(this.name = nameC;), chúng ta gán giá trị nameC cho biến instance name của
instance hiện tại.


Ở dòng 18, chúng ta đang tạo một instance của class Person bằng cách sử dụng generative
constructor. Bây giờ thay vì gán riêng từng giá trị cho các biến instance, tất cả những gì
chúng ta phải làm là chuyển chúng cho constructor và nó sẽ

5.2 Named Constructor
Chúng ta có thể tạo nhiều constructor trong Dart dựa trên các tình huống khác nhau. Trong
những tình huống khác nhau. Trong những trường hợp như vậy, tốt hơn hết là đặt tên cho
các constructor để rõ ràng hơn.
Syntax như sau:

Ví dụ:


Output: 0
Nếu bạn không khai báo một constructor, một constructor mặc định sẽ được cung cấp cho
bạn.
Một constructor mặc định sẽ khơng có tham số. Nó tạo một instance của một class mà
không cần khởi tạo các biến instance của nó.
6.

Getter và Setter
Getter và setters là các phương thức đặc biệt cung cấp quyền truy cập đọc và ghi vào các thuộc
tính của một đối tượng. Bạn có nhớ các chúng ta có thể truy xuất và đặt giá trị của các biến
instance bằng tốn tử dấu chấm (.) khơng ?. Mỗi biến instance có một setters và một getter
ngầm mà chúng ta sử dụng cho đến bây giờ.


6.1 Getter


Getter là các hàm được sử dụng để truy xuất các giá trị thuộc tính của một đối tượng và
được định nghĩa bằng các sử dụng từ khóa get.
Syntax như sau:

Ví dụ:

Output: Sarah
Trên dịng String get personName => name; Chúng ta đang tạo một hàm getter trả về giá
trị name của phiên bản hiện tại.


Trên dòng print(firstPerson.personName);, chúng ta đang gọi hàm getter và output sẽ
hiển thị Sarah.

6.2 Setters
Setters là các hàm được sử dụng để viết các giá trị thuộc tính của một đối tượng và được
định nghĩa bằng cách sử dụng từ khóa set
Syntax như sau:

Ví dụ:


Output:
Age cannot be negative
null
Từ dòng 9 đến dòng 15, chúng ta đang tạo một hàm setter để đặt giá trị cho age. Setter có
một điều kiện đảm bảo rằng người dùng khơng nhập đội tuổi âm.

Ở dịng firstPerson.personAge = -5;, chúng ta đang đặt giá trị tuổi của firstPerson bằng
cách sử dụng hàm setter personAge.


Hãy xem ví dụ phức tạp hơn

Class Figure có 4 thuộc tính là left,top,with và height. Chúng ta sẽ tạo hai hàm getter tính
tốn giá trị của hai thuộc tính mới, right và bottom.
Chúng ta sẽ tạo một hàm setter cho right. Các thuộc tính right và left phụ thuộc lẫn nhau.
Có nghĩa là dựa trên giá trị được đặt cho right, giá trị của bên left cần được sửa đổi. Điều
này đang được xử lý bởi hàm setter.
Tương tự như vậy, bottom và height phụ thuộc lẫn nhau. Do đó, setter cho bottom sửa đổi
giá trị height theo giá trị của bottom

Output:
3
23


-8
Trên dòng 15, giá trị của left là 3. Tuy nhiên, khi chúng ta gọi hàm setter right trên dòng
fig.right = 12;, giá trị của left được sửa đổi thành -8 và được hiển thị trên dòng
print(fig.left);.
7.

Inheritance
Bây giờ bạn đã làm quen với các đối tượng class, chúng ta hay nói về inheritance, một trong
những khái niệm cốt lõi của lập trình hướng đối tương.
Inheritance là một khái niệm mà qua đó bạn có thể tạo một class mới từ class đã tồn tại. Class
mới kế thừa từ các thuộc tính(biến instance) và các phương thức của lớp hiện có. Class kế thừa

được gọi là subclass, trong khi lớp đang kế thừa được gọi là superclass.
“Mỗi class là một subclass của superclass object. Nó nằm ở đầu của hệ thống phân cấp lớp
và khơng có superclass và khơng có superclass của chính nó ”
Bạn có thể sẽ đặt ra câu hỏi là khi nào chúng ta sử dụng inheritance? Câu trả lời là bất cứ khi
nào chúng ta bắt gặp mối quan hệ “IS A” giữa các đối tượng thì chúng ta có thể sử dụng
inheritance.

Trong hình minh họa trên, chúng ta có thể thấy các đối tượng có mối quan hệ “IS A” giữa
chúng:
Circle is a shape
Dart is a programing language
Car is a vehicle
Class trước “is a” là subclass và class sau “is a” là superclass




Superclass

Subclass


8.

Shape

Circle

Programing Language


Dart

Vehicle

Car

Extending class
Trong ngôn ngữ Dart, chúng ta sử dụng extends để tạo ra một subclass

Hãy xem một ví dụ về máy bán hàng tự động. Trong máy bán đồ ăn tự đơng, chúng ta có một số
sản phẩm như beverage, chocolate, cookie,... Điều đáng chú ý ở đây là chúng ta luôn thực hiện
một quan hệ inheritance giữa các lớp khi chúng ta có thuộc tính chung.Ví dụ, trong trường hợp
product, tất cả các product trong máy bán hàng tự động đều có tên cả, giá cả, ngày hết hạn, v.v.
Ngồi ra, mối quan hệ IS A cũng có thể thể hiện giá trị.
A beverage is a product
Chocolate is a product
A cookie is a product.
Vì vậy, từ thảo luận trên, chúng ta có thể kết luận rằng nếu có một SupperClass có tên là
product, chúng ta có thể lấy ra các subClass là Beverage,Chocolate,Cookie,v.v từ superclass.




Ví dụ:


Output:
Name: Minute Maid
Price: 3.5
Expiration Date: 01/01/2020

Type: Orange Juice

8.1 Phân tích Code
Class Product có 3 biến instance, _name,_price và _expDate. Product có một phương
thức generative constructor và một phương thức đơn giản là in các thuộc tính của product.


Ở dòng class Beverage extends Product{, chúng ta đang tạo subclass, Beverage. Để gán
ba tham số đầu tiên của constructor Beverage, chúng ta đang sử dụng constructor Product.
super được sử dụng bởi một subclass để tham chiếu đến superclass của nó.
beverageDetails() đang sử dụng phương thức Product printDetails(), để in các giá trị của
các thuộc tính _name, _price và _expDate. Nó tự hiển thị các thuộc tính của chính nó.
Trong hàm main(), Chúng ta đang tạo một instance của lớp Beverage.
Bạn có thể nhận thấy rằng chúng ta đã khai báo tất cả các biến instance bắt đầu bằng dấu
gạch dưới (_). Dấu gạch dưới đảm bảo rằng instance là riêng tư. Điều này có nghĩa là một
subclass khơng thể kế thừa biến instance cụ thể đó.
Đây là lý do tại sao chúng ta không thế sử dụng biến _name trực tiếp trong class Beverage.

Collection của ngôn ngữ Dart
1.

Ngôn ngữ Dart: Hàm và phương thức
1.1 Hàm (Functions)
Trong lập trình máy tính, khi ta nói đến một hàm hay một phương thức tức là ta đang nói đến một
block code có thể thực hiện một nhiệm vụ cụ thể. Block code đó được đặt tên và hàm sẽ gọi bằng
cachs sử dụng các tên bất cứ khi nào 1 tác vụ cần được thực hiện. Điều này giúp đỡ mất công ngồi
viết đi viết lại những dòng code giống nhau, bạn chỉ đơn giản chỉ cần gọi tên hàm đó lên thơi

1.2 Cách hàm hoạt động
Giống như các hàm tốn học, các hàm lập trình sẽ lấy một input, được biết như là tham số để thực

hiện một vài phép toán trên tham số đó rồi trả lại kết quả ra output

Nó gần giống như một bằng chuyền trong một nhà máy. Các mặt hàng đi vào máy từ đầu này và đi
ra ở đầu kia của băng chuyên. Chúng được sửa đổi hồn tồn thơng qua q trình đó. Ví máy khơng
thay đổi trong suốt vịng đời của nó cho nên nó sẽ sửa đổi mọi mặt hàng đi vào theo cùng một cách
giống nhau


×