Дарт — необязательный типизированный язык . Коллекции в Dart по умолчанию неоднородны. Другими словами, одна коллекция Dart может содержать значения различных типов. Тем не менее, коллекция Dart может быть сделана для хранения однородных значений. Концепция Generics может быть использована для достижения того же.
Использование Generics налагает ограничение на тип данных значений, которые могут содержаться в коллекции. Такие коллекции называются типобезопасными коллекциями. Безопасность типов — это функция программирования, которая гарантирует, что блок памяти может содержать данные только определенного типа.
Все коллекции Dart поддерживают реализацию безопасности типов посредством обобщений. Пара угловых скобок, содержащих тип данных, используется для объявления безопасной для типов коллекции. Синтаксис для объявления типобезопасной коллекции приведен ниже.
Синтаксис
Collection_name <data_type> identifier= new Collection_name<data_type>
Типобезопасные реализации List, Map, Set и Queue приведены ниже. Эта функция также поддерживается всеми реализациями вышеупомянутых типов коллекций.
Пример: общий список
пустая функция() { List <String> logTypes = new List <String> (); logTypes.add ( "ВНИМАНИЕ"); logTypes.add ( "ERROR"); logTypes.add ( "INFO"); // перебираем список for (строковый тип в logTypes) { печать (тип); } }
Он должен произвести следующий вывод —
WARNING ERROR INFO
Попытка вставить значение, отличное от указанного типа, приведет к ошибке компиляции. Следующий пример иллюстрирует это.
пример
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); } }
Он должен произвести следующий вывод —
1 ERROR INFO
Пример: общий набор
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); } }
Он должен произвести следующий вывод —
Default implementation :_CompactLinkedHashSet<int> 100 20 5 60 70
Пример: общая очередь
импорт «дартс: коллекция»; пустая функция() { Queue <int> queue = новая очередь <int> (); print ("Реализация по умолчанию $ {queue.runtimeType}"); queue.addLast (10); queue.addLast (20); queue.addLast (30); queue.addLast (40); queue.removeFirst (); для (int нет в очереди) { печать (нет); } }
Он должен произвести следующий вывод —
Default implementation ListQueue<int> 20 30 40
Общая карта
Безопасное объявление типа определяет типы данных —
- Ключ
- Значение
Синтаксис
Map <Key_type, value_type>
пример
пустая функция() { Карта <String, String> m = {'name': 'Tom', 'Id': 'E1001'}; print ('Карта: $ {m}'); }
Он должен произвести следующий вывод —