Programowanie w rzutkach - typy ogólne
Dart to optionally typed language. Kolekcje w Dart są domyślnie heterogeniczne. Innymi słowy, pojedyncza kolekcja Dart może zawierać wartości różnych typów. Jednak kolekcję Dart można utworzyć tak, aby zawierała jednorodne wartości. Aby osiągnąć to samo, można użyć koncepcji Generics.
Użycie opcji Generics wymusza ograniczenie typu danych wartości, które mogą być zawarte w kolekcji. Takie kolekcje są nazywane kolekcjami bezpiecznymi dla typów. Bezpieczeństwo typów to funkcja programowania, która zapewnia, że blok pamięci może zawierać tylko dane określonego typu.
Wszystkie kolekcje Dart obsługują implementację bezpieczeństwa typu za pośrednictwem typów generycznych. Para nawiasów kątowych zawierająca typ danych jest używana do deklarowania kolekcji z bezpiecznym typem. Składnia deklarowania kolekcji bezpiecznej dla typów jest podana poniżej.
Składnia
Collection_name <data_type> identifier= new Collection_name<data_type>
Poniżej podano bezpieczną implementację list, mapy, zbioru i kolejki. Ta funkcja jest również obsługiwana przez wszystkie implementacje wyżej wymienionych typów kolekcji.
Przykład: lista ogólna
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);
}
}
Powinien dać następujący wynik output -
WARNING
ERROR
INFO
Próba wstawienia wartości innej niż określony typ spowoduje błąd kompilacji. Poniższy przykład ilustruje to.
Przykład
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);
}
}
Powinien dać następujący wynik output -
1
ERROR
INFO
Przykład: zestaw ogólny
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);
}
}
Powinien dać następujący wynik output -
Default implementation :_CompactLinkedHashSet<int>
100
20
5
60
70
Przykład: kolejka ogólna
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);
}
}
Powinien dać następujący wynik output -
Default implementation ListQueue<int>
20
30
40
Mapa ogólna
Deklaracja mapy bezpiecznej typu określa typy danych -
- Klucz
- Wartość
Składnia
Map <Key_type, value_type>
Przykład
void main() {
Map <String,String>m={'name':'Tom','Id':'E1001'};
print('Map :${m}');
}
Powinien dać następujący wynik output -
Map :{name: Tom, Id: E1001}