0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Dart/Flutterの便利な書き方Tipsまとめ

Posted at

Dart/Flutterの便利な書き方Tipsまとめ

DartやFlutterでアプリを開発していると、知っていると役に立つシンタックスシュガーがあります。ここでは、あまり知られていないけれど便利な書き方をいくつか箇所します。

カスケード記法(..)

Dartでは、同じオブジェクトに対して複数の操作を連続して行う場合に、カスケード演算子 .. を利用することで記述を簡潔にできます。dev.toの記事では、例えば自動車クラスのインスタンスに対してプロパティの設定やメソッド呼び出しを連続して行うコードを car..color = 'red'..start()..accelerate() のように表現できると紹介されています (dev.to) 。この記法を使えば、同じオブジェクト名を何度も書かずに済み、チェーン操作が読みやすくなります。

class Car {
  String color = '';
  void start() => print('Start engine');
  void accelerate() => print('Go!');
}

void main() {
  var car = Car()
    ..color = 'red'
    ..start()
    ..accelerate();
}

Null安全関連の演算子

Dartには、Null安全をサポートするためのさまざまな演算子があります。

Null合伴演算子(??)

?? は左側の式が null の場合に右側の値を返す演算子です。GeeksforGeeksの記事では、b ?? 'Hello' と書くと bnull なら 'Hello' が返る例を紹介しています (www.geeksforgeeks.org) 。既存値を守りつつデフォルト値を設定する際に便利です。

String? b;
print(b ?? 'Hello'); // => 'Hello'
b = 'GeeksforGeeks';
print(b ?? 'Hello'); // => 'GeeksforGeeks'

Null安全スプレッド演算子(...?)

リストに他のリストを追加するとき、そのリストが null の場合は追加をスキップしたい場面があります。Dart 2.3で実装された ...? を使うと、null でない場合にのみ要素を展開することができます (www.geeksforgeeks.org) 。

List<int>? maybeNumbers;
var list = [1, 2, 3, ...?maybeNumbers];
print(list); // => [1, 2, 3]

オプショナルチェーン(?.)

既にJavaScriptの記事でも紹介しましたが、Dartでも ?. 演算子を使って null かもしれないオブジェクトのプロパティやメソッドに安全にアクセスできます。

class Person {
  String? name;
}

void main() {
  Person? p;
  print(p?.name); // => null、エラーにならない
}

おわりに

これらの演算子や記法を活用すると、Dart/Flutterのコードがより読みやすく、安全で短く書けます。特にカスケード記法やNull安全関連の演算子は、コード量を減らしつつバグを防ぐのに役立ちます。その他にも late 変数やスプレッド演算子、文字列補習など便利な機能が多くありますので、ぜひ活用して開発効率を向上させてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?