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}