4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Flutterのリファクタリングに使えそうなDart文法

Last updated at Posted at 2020-06-12

Qiita初投稿です。

タイトルにもある通りFlutterのリファクタリング等に使えそうな?Dartの文法について書いていきます。

1. ?:

よくある3項演算子です。
bool型である変数aに対して

if(a) {
  print("a");
}else{
  print("b");
} 

こんなコードがあったときに

a ? print("a") : print("b");   

上記のように書くことができます。
FlutterではWidgetをreturnするときとかなどに用いることがあるかと思います。

return loading ? Loading() : Home();

2. ??

変数に異なる値を代入をするときに用いるやつです。

String name = user.name ?? "anon";  

とすることで
nameにuser.nameがnullだったときに"anon"という文字列を代入することができます。
この記述をif文とか3項演算子とか使って書くと記述量が増えるのでとても便利だなと思います。

3. ?.

こちらも先ほどに似ておりフィールドがnull出なかったときにその値を返し、そうでない場合にはnullを返します。
よって以下のようになります。

class User  {
      String name;
      int age;
      User( this.name, this.age );
    }

    User user;

    int age = user.age; //error
    int age = user.age ?? 0; //error
    int age = user.?age ?? 0; //OK

4. ??=

左側の変数がnullであったときのみ代入を行ます。
よって以下のような挙動をします。
rubyでいうところの||=と同じです。

int age;
//ageはnullなので代入される
age ??= 100;

//ageはnullでないため代入されない。
age ??= 50;

print(age) //100

5. ..(カスケード表記)

User user = new User();
user.name = "tom";
user.age = 30;

上記のようながあった場合に

User user = new User()
   ..name = "30"
    ..age = 30;

と記述することができます。

FlutterではSnackBarの表示の時に

Scaffold.of(context)
       ..removeCurrentSnackBar()
       ..showSnackBar(SnackBar(content: Text("aaa")));

...とこんな感じで使うことがありました。
カスケード表記に関しては他の方がいろいろ書いているので調べるといろいろでてきます。

6. ...(スプレッド構文)

JSとかにもありますね。
ある配列に対して、下記のように記述することが可能です。

List<int> list = [3,4,5,6,7];

list = [
  1,
  2,
  ...list
];
// list = [1,2,3,4,5,6,7];

参考

Simple And Bug-Free Code With Dart Operators

4
6
2

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
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?