2019/12/19 Dart 真偽値型( Booleans ) , リスト ( Lists ) , collection if , collection for の訳

真偽値(bool型)

真偽値を表すためにDartにはbool型が用意されています。bool型のリテラルはtrueとfalseです。どちらもコンパイル時定数です。

//空文字列であればtrueを返すisEmptyプロパティ
var fullName = '';
print(fullName.isEmpty);  //true

var hitPoints = 0;
print(hitPoints<=0);  //true

var unicorn;
print(unicorn == null);  //true

リスト(List)

ほぼ全てのプログラミング言語において最も一般的なコレクションは配列(array)、あるいは順序づけられたオブジェクトのグループですが、Dartではリストオブジェクトです。

リストリテラルはjavascriptの配列リテラルの記述法と似ています。sample2-1はシンプルなリストの定義です。

var list = [1, 2, 3];

上記で変数listはList<int>型と型推定されます。もしこのlistに整数値以外のオブジェクトを追加しようとすると実行時エラーとなります。

リストは0から始まるインデックスが使われます。インデックス0はリストの最初の要素を指し、list.length-1はリストの最後の要素を指します。

var list = [1, 2, 3];
print(list.length == 3);  //true
print(list[1] == 2);    //true

list[1] = 1;
print(list[1] == 1);    //true

list[0]

赤文字の部分がインデックス。

Dart2.3ではスプレッド演算子とnull-awareスプレッド演算子が導入されました。

sample2-3(スプレッド構文の例)

var list = [1, 2, 3];
var list2 = [0, ...list];
print(list2);  //[0, 1, 2, 3]

スプレッド演算子は

…list

のように記述し、すでにあるリストを一部とする新しいリストを簡単に作れます。sample2-3ではスプレッド演算子を用いて、すでにあるlistを要素の一部とする新しいリストlist2を生成しています。


sample2-3ではスプレッド演算子の右側は変数listで、listは配列リテラルで初期化されていました。この場合何も問題はありませんが、スプレッド演算子の右側の値がnullである可能性がある時は、例外発生を避けるためnull-awareスプレッド演算子(…?)を用いてください。

sample2-4

var list;  //初期化してないのでnullがセットされる。
var list2 = [0, ...?list];
print(list2);  //[0]
print(list2.length);  //1
void main(){
  var list1=[];
  //↓空のリストに対してスプレッド演算子を使っても
  //問題ない。
  var list2=[2,...list1];

  print(list2);  //←[2]
}
void main(){
  var list1; //←初期化してないので自動的にnullで初期化される。
  //nullに対してスプレッド演算子を使うとエラーとなるので、
  //nullの可能性がある場合は...?を使う。
  var list2=[2,...list1];

  print(list2);
}
/*
Uncaught TypeError: Cannot read property 'get$iterator' of nullError: TypeError: Cannot read property 'get$iterator' of null
*/

 

 


collection if

配列定義時に条件により要素の有無を条件分けして定義する方法です。(sample2-5)

sample2-5

var promoActive=true;
  
var nav = [
  'Home',
  'Furniture',
  'Plants',
  if (promoActive) 'Outlet'
];
print(nav);  //[Home, Furniture, Plants, Outlet]

promoActive=false;
var nav2 = [
  'Home',
  'Furniture',
  'Plants',
  if (promoActive) 'Outlet'
];
print(nav2);  //[Home, Furniture, Plants]

collection for

sample2-6はcollection forを用いたリスト定義です。リスト定義内で繰り返しにより要素を生成します。

sample2-6

var listOfInts = [1, 2, 3, 4];
var listOfStrings = [
  '#0',
  for (var i in listOfInts) '#$i'
];
print(listOfStrings);  //[#0, #1, #2, #3, #4};

 

 

参考

https://dart.dev/guides/language/language-tour#built-in-types

https://dart.dev/guides/language/language-tour#booleans

https://dart.dev/guides/language/language-tour#lists

コメントを残す

メールアドレスが公開されることはありません。