Flutterの開発言語である「Dart」の基礎文法を解説します。
その中で今回ピックアップするのは「配列」です。「配列」の使い方や種類を解説していきます。
「配列が何かわからない…」といったプログラミング初学者の方必見の内容です。ぜひ最後までご覧ください。
配列とは?
そもそも「配列」とは何なのでしょうか?
その答えを初めにお伝えしていきます。
配列とは、複数の値を管理することができる箱です。
これだけだとまだ何かあまりわからないと思います。普通のデータ型の変数との違いをみていくと違いがわかりやすいと思います。
String型の変数の場合、管理することができる値は一つだけです。
String name = '奥野'; //奥野という一つの名前だけを管理できる
今回紹介している「配列」の一種であるList型の場合、複数の値を管理することができます。
List<String> nameList = ['奥野', '田中', '佐藤']; //複数の名前を一つの変数で管理できる
次項でDartにおける「配列」の種類や活用方法を詳しく解説していきます。
Dartにおける配列の種類
Dartにおける配列には3つの種類があります。
順番に活用方法を解説していきます。
List型
List型の活用方法を解説してきます。
List型の定義方法
List型の変数の定義のフォーマットは以下です。
List<配列の中に格納するデータ型> 変数名 = [値1, 値2, 値3, ....];
変数の定義の手順は以下です。
- Listとデータ型を明示する
- 不等号記号( < > )を記述し、その中に管理する一つ一つの値のデータ型を記述する
- 変数名を記述する
- 大括弧( [ ] )を記述し、その中に管理する値を記述する
- 最後にセミコロン( ; )をつけるのを忘れずに!
これを実践した例が以下の二つです。
//Stringの値を複数管理
List<String> nameList = ['奥野', '田中', '佐藤'];
//intの値を複数管理
List<int> ageList = [24, 18, 35];
この時に、不等号記号の中に書いているデータ型と管理している値のデータ型がマッチするように定義してください。これができていないとエラーが発生します。
悪い例も記載しておきます。
List<String> nameList = ['奥野', 24, '佐藤'];
//この場合24という値はint型ですので、List<String>のStringとマッチしないためエラーが発生します
List型の値を取り出す方法
List型の管理している値を取り出して扱う方法を解説します。
値を取り出すときのフォーマットは以下です。
変数名[index番号]
index番号とは値を識別するための番号です。自動的に一つ目の値には「0」、二つ目の値には「1」と順番に番号が割り振られています。
実際に値を取り出してみます。
//まずは変数を定義する
List<String> nameList = ['奥野', '田中', '佐藤'];
//実際に値を取り出してみる
print(nameList[0]); //結果: 奥野
print(nameList[1]); //結果: 田中
print(nameList[2]); //結果: 佐藤
List型に新しい値を追加する方法
List型の変数に新しい値を追加するときは「.add」メソッドを使用します。
値を追加するときのフォーマットは以下です。
変数名.add(新しい値);
実践すると以下のようになります。
//まずは変数を定義する
List<String> nameList = ['奥野', '田中', '佐藤'];
print(nameList); //結果: ['奥野', '田中', '佐藤']
//実際に値を追加してみる
nameList.add('後藤');
print(nameList); //結果: ['奥野', '田中', '佐藤', '後藤']
この時も定義の時と同様、追加する新しい値のデータ型と不等号記号の中のデータ型がマッチするように注意する必要があります。
他にもList型のメソッドは沢山あります。そちらはまた別の記事でまとめていこうと思います。
Map型
Map型は連想配列と呼ばれる配列の一種です。
こちらもList型と同様、複数の値を管理することができるデータ型です。
Map型は、List型とは違い「key」と「value」と呼ばれる関係性で値を管理していきます。
Map型の活用方法を解説していきます。
Map型の定義方法
Map型の変数の定義のフォーマットは以下です。
Map<keyのデータ型, valueのデータ型> 変数名 = {
key名1: value名1,
key名2: value名2,
...
};
変数の定義の手順は以下です。
- Mapとデータ型を明示する
- 不等号記号( < > )を記述し、その中にkeyのデータ型とvalueのデータ型を記述する
- 変数名を記述する
- 中括弧( { } )を記述し、その中に管理する値を記述する
- 最後にセミコロン( ; )をつけるのを忘れずに!
これを実践した例が以下の二つです。
//keyのデータ型がString、valueのデータ型がStringの変数を定義
Map<String, String> stringStringMap = {
'奥野': '大阪',
'田中': '東京',
'佐藤': '福岡'
}
//keyのデータ型がString、valueのデータ型がintの変数を定義
Map<String, String> stringIntMap = {
'奥野': 24,
'田中': 19,
'佐藤': 35
}
この時に、不等号記号の中に書いている「key」と「value」のデータ型と管理している値の「key」と「value」のデータ型がマッチするように定義してください。これができていないとエラーが発生します。
悪い例も記載しておきます。
Map<String, String> stringStringMap = {
'奥野': 24,
'佐藤': 19
};
//この場合valueのデータ型はint型ですので、Map<String, String>のvalueのデータ型であるStringとマッチしないためエラーが発生します
Map型の値を取り出す方法
Map型の管理している値を取り出して扱う方法を解説します。
値を取り出すときのフォーマットは以下です。
変数名[key名]
実際に値を取り出してみます。
//まずは変数を定義する
Map<String, String> stringStringMap = {
'奥野': '大阪',
'田中': '東京',
'佐藤': '福岡'
};
//実際に値を取り出す
print(stringStringMap['奥野']); //結果: 大阪
print(stringStringMap['田中']); //結果: 東京
print(stringStringMap['佐藤']); //結果: 福岡
Map型に新しい値を追加する方法
Map型の変数に新しい値を追加する方法を解説します。
値を追加するときのフォーマットは以下です。
変数名[新しいkey名] = 新しいvalue;
実践すると以下のようになります。
//まずは変数を定義する
Map<String, String> stringStringMap = {
'奥野': '大阪',
'田中': '東京',
'佐藤': '福岡'
};
print(stringStringMap); //結果: {'奥野': '大阪', '田中': '東京', '佐藤': '福岡'}
//実際に値を追加してみる
stringStringMap['後藤'] = '北海道';
print(stringStringMap); //結果: {'奥野': '大阪', '田中': '東京', '佐藤': '福岡', '後藤': '北海道'}
この時も定義の時と同様、追加する新しいkeyとvalueの値のデータ型と不等号記号の中のデータ型がマッチするように注意する必要があります。
Map型にも色々とメソッドが沢山用意されています。こちらをまとめたものを別途記事にて作成しようと思っております。
Set型
Set型はList型に似ているデータ型です。
List型は重複する値を管理することができますが、それとは逆にSet型は重複する値を管理することができません。
Set型の活用方法を解説していきます。
Set型の定義方法
Set型の変数の定義のフォーマットは以下です。
Set<管理する値のデータ型> 変数名 = {値1, 値2, 値3, ...};
変数の定義の手順は以下です。
- Setとデータ型を明示する
- 不等号記号( < > )を記述し、その中に管理する値のデータ型を記述する
- 変数名を記述する
- 中括弧( { } )を記述し、その中に管理する値を記述する
- 最後にセミコロン( ; )をつけるのを忘れずに!
これを実践した例が以下の二つです。
//Stringの値を複数管理
Set<String> nameSet = {'奥野', '田中', '佐藤'};
//intの値を複数管理
Set<int> ageSet = {24, 18, 35};
この時に、不等号記号の中に書いているデータ型と管理している値のデータ型がマッチするように定義してください。これができていないとエラーが発生します。
悪い例も記載しておきます。
Set<String> nameSet = {'奥野', 24, '佐藤'};
//この場合24という値はint型ですので、Set<String>のStringとマッチしないためエラーが発生します
Set型の値を取り出す方法
Set型の管理している値を取り出して扱う方法を解説します。
値を取り出すときのフォーマットは以下です。
変数名.elementAt(index番号);
index番号はList型の時と同じく自動的に一つ目の値には「0」、二つ目の値には「1」と順番に番号が割り振られています。
実際に値を取り出してみます。
//まずは変数を定義する
Set<String> nameSet = {'奥野', '田中', '佐藤'};
//実際に値を取り出してみる
print(nameSet.elementAt(0)); //結果: 奥野
print(nameSet.elementAt(1)); //結果: 田中
print(nameSet.elementAt(2)); //結果: 佐藤
Set型に新しい値を追加する方法
Set型の変数に新しい値を追加するときは「.add」メソッドを使用します。
値を追加するときのフォーマットは以下です。
変数名.add(新しい値);
実践すると以下のようになります。
//まずは変数を定義する
Set<String> nameSet = {'奥野', '田中', '佐藤'};
print(nameSet); //結果: ['奥野', '田中', '佐藤']
//実際に値を追加してみる
nameSet.add('後藤');
print(nameSet); //結果: ['奥野', '田中', '佐藤', '後藤']
この時も定義の時と同様、追加する新しい値のデータ型と不等号記号の中のデータ型がマッチするように注意する必要があります。
Set型は重複する値を管理することができないため、既に管理している値を追加した際には新しく値が追加されることはありません。
//変数を定義
Set<String> nameSet = {'奥野', '田中', '佐藤'};
//重複する値を追加
nameSet.add('奥野');
print(nameSet) //結果: {'奥野', '田中', '佐藤'}
他にもSet型のメソッドは沢山あります。そちらもまた別の記事でまとめていこうと思います。
おわりに
今回は、Flutterの開発言語である「Dart」の「配列」について解説させていただきました。
特に「List」と「Map」は開発をする上で頻出するデータ型ですのでぜひ活用方法を理解していただければと思います。
他にもFlutterでのドラッグ&ドロップの実装方法の解説なども行っております。
お時間がありましたらぜひご覧ください。
今回の記事が参考になれば幸いです。
コメント