SwiftエンジニアのためのDart変数定義解説(var/final/const)

kitoko552.hatenablog.com

この記事のおまけ。Swift書いてる人向けの別バージョン。
自分がiOSエンジニアでずっとSwiftを書いていた人間だったので、同じような人にわかりやすく説明できたらなという記事です。
雰囲気だけ伝わればと思っているので、細かいところはこの記事では説明しません(参照型・値型などなど)。

var

基本Swiftのvarと似ている。
違うのは型を定義しなくても初期値なしで定義できるのと、動的に型を変えられるところ。
Dartでも型を明記すればSwiftのvarと一緒。

// Dart

var name; // 型定義しなくても宣言できる
name = 'hoge';
name - 1; // 型を動的に変えられる

String nickname = 'hoge'; // 型を明記すればSwiftのvarと一緒。
nickname = 'fuga'; // 再代入可能
// nickname = 1; // 別の型は代入できない

final

Swiftのletに似ている。
Swiftでは値が代入されていることが保証されていればletで変数の宣言だけをすることができるが、Dartではそれができない。

// Swift

let name: String // これがDartのfinalではできない
if count == 0 {
    name = "zero"
} else {
    name = "other"
} 

また、Dartでは配列をfinalで定義してその配列を操作できるが、Swiftのletではできない。

// Dart

final list = [];
list.add(2); // 可能。Swiftではできない

const

Swiftにはない概念。
Swiftでは値が定数だろうが変数だろうがletで定義可能だが、Dartではfinalに加えてより厳格なconstがある。
代入する値が定数限定のletのようなもの(?)

// Dart

const list = [];
list.add(2); // できない。Swiftのletと一緒
// Dart

var name = 'apple';
const company = name; // できない。Swiftのletではできる。

参考

www.dartlang.org