Lập trình Dart - Generics
Phi tiêu là một optionally typed language. Các bộ sưu tập trong Dart không đồng nhất theo mặc định. Nói cách khác, một bộ sưu tập Dart duy nhất có thể lưu trữ các giá trị thuộc nhiều loại khác nhau. Tuy nhiên, một bộ sưu tập Dart có thể được thực hiện để giữ các giá trị đồng nhất. Khái niệm Generics có thể được sử dụng để đạt được điều tương tự.
Việc sử dụng Generics thực thi một giới hạn đối với kiểu dữ liệu của các giá trị mà bộ sưu tập có thể chứa. Các bộ sưu tập như vậy được gọi là bộ sưu tập kiểu an toàn. An toàn kiểu là một tính năng lập trình đảm bảo rằng một khối bộ nhớ chỉ có thể chứa dữ liệu của một kiểu dữ liệu cụ thể.
Tất cả các bộ sưu tập Dart đều hỗ trợ triển khai an toàn kiểu thông qua generic. Một cặp dấu ngoặc nhọn chứa kiểu dữ liệu được sử dụng để khai báo một tập hợp kiểu an toàn. Cú pháp để khai báo tập hợp kiểu an toàn như được đưa ra bên dưới.
Cú pháp
Collection_name <data_type> identifier= new Collection_name<data_type>
Các cách triển khai Danh sách, Bản đồ, Tập hợp và Hàng đợi an toàn kiểu được đưa ra bên dưới. Tính năng này cũng được hỗ trợ bởi tất cả các triển khai của các loại bộ sưu tập nêu trên.
Ví dụ: Danh sách chung
void main() {
List <String> logTypes = new List <String>();
logTypes.add("WARNING");
logTypes.add("ERROR");
logTypes.add("INFO");
// iterating across list
for (String type in logTypes) {
print(type);
}
}
Nó sẽ tạo ra những thứ sau output -
WARNING
ERROR
INFO
Nỗ lực chèn một giá trị khác với kiểu đã chỉ định sẽ dẫn đến lỗi biên dịch. Ví dụ sau đây minh họa điều này.
Thí dụ
void main() {
List <String> logTypes = new List <String>();
logTypes.add(1);
logTypes.add("ERROR");
logTypes.add("INFO");
//iterating across list
for (String type in logTypes) {
print(type);
}
}
Nó sẽ tạo ra những thứ sau output -
1
ERROR
INFO
Ví dụ: Tập hợp chung
void main() {
Set <int>numberSet = new Set<int>();
numberSet.add(100);
numberSet.add(20);
numberSet.add(5);
numberSet.add(60);
numberSet.add(70);
// numberSet.add("Tom");
compilation error;
print("Default implementation :${numberSet.runtimeType}");
for(var no in numberSet) {
print(no);
}
}
Nó sẽ tạo ra những thứ sau output -
Default implementation :_CompactLinkedHashSet<int>
100
20
5
60
70
Ví dụ: Hàng đợi Chung
import 'dart:collection';
void main() {
Queue<int> queue = new Queue<int>();
print("Default implementation ${queue.runtimeType}");
queue.addLast(10);
queue.addLast(20);
queue.addLast(30);
queue.addLast(40);
queue.removeFirst();
for(int no in queue){
print(no);
}
}
Nó sẽ tạo ra những thứ sau output -
Default implementation ListQueue<int>
20
30
40
Bản đồ chung
Một khai báo bản đồ an toàn kiểu chỉ định các kiểu dữ liệu của -
- Chìa khóa
- Giá trị
Cú pháp
Map <Key_type, value_type>
Thí dụ
void main() {
Map <String,String>m={'name':'Tom','Id':'E1001'};
print('Map :${m}');
}
Nó sẽ tạo ra những thứ sau output -
Map :{name: Tom, Id: E1001}