Dartプログラミング-ジェネリック

ダーツは optionally typed language。Dartのコレクションは、デフォルトでは異種です。つまり、単一のDartコレクションでさまざまなタイプの値をホストできます。ただし、Dartコレクションは同種の値を保持するように作成できます。ジェネリックスの概念は、同じことを達成するために使用できます。

Genericsを使用すると、コレクションに含めることができる値のデータ型に制限が適用されます。このようなコレクションは、タイプセーフコレクションと呼ばれます。型安全性は、メモリブロックに特定のデータ型のデータのみを含めることができるようにするプログラミング機能です。

すべてのDartコレクションは、ジェネリックスを介した型安全性の実装をサポートしています。データ型を含む角括弧のペアは、タイプセーフなコレクションを宣言するために使用されます。タイプセーフコレクションを宣言するための構文は次のとおりです。

構文

Collection_name <data_type> identifier= new Collection_name<data_type>

List、Map、Set、およびQueueのタイプセーフな実装を以下に示します。この機能は、上記のコレクションタイプのすべての実装でもサポートされています。

例:ジェネリックリスト

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); 
   } 
}

次のようになります output

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); 
   } 
}

次のようになります output

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); 
   } 
}

次のようになります output

Default implementation :_CompactLinkedHashSet<int> 
100 
20 
5 
60 
70

例:汎用キュー

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); 
   } 
}

次のようになります output

Default implementation ListQueue<int> 
20 
30 
40

ジェネリックマップ

タイプセーフなマップ宣言は、-のデータ型を指定します

  • キー

構文

Map <Key_type, value_type>

void main() { 
   Map <String,String>m={'name':'Tom','Id':'E1001'}; 
   print('Map :${m}'); 
}

次のようになります output

Map :{name: Tom, Id: E1001}