概要
どうも、@daiki1003です!Flutter
楽しんでますか?
僕は相変わらず楽しんでます笑
さて、皆様は自分が書くFlutter
のコードに満足していますか?
満足している方はこのブログは読まなくても大丈夫だと思います笑
むしろ僕に教えてください!
満足していない方に向けて、本記事を含む以降8つの記事で初心者を脱するために重要と思っている要素を解説していきたいと思います!
段々とレベルも上がって行ってるんじゃないかなと思います。
このシリーズを全部マスターする頃にはFlutter
中級者にはなっているかも?
それでは行ってみましょー!
メソッド内メソッドとは?
Dart
では、メソッド内にメソッドを定義することが出来ます。
void hoge() { void fuga() { } fuga(); // hoge内で定義したメソッドを呼び出す事が出来る }
というコードが書けるということです。
どんなうまみがあるの?
Dart
では、Lexical Scope
と言って、今いるスコープより”外側”の変数にはすべてアクセスできます。
void hoge() { const a = 10; void fuga() { print(a); // コンパイル通る } fuga(); // 10が出力される }
どうやって活用するの?
9割以上はbuild
メソッド内で活用しています。
いや、10割かな笑
実際の活用方法
以下のコードを見てみましょう。
(注意: ref.watch
が分からなくてもとりあえずなんらかの方法でmusicId
とvolume
を取得してるんだなーくらいの認識でOKです)
何らかの音楽を再生するサンプルコードなのですが、_playMusic
の引数が
多くちょっとごちゃっとした印象を受けます。
またこの_playMusic
からメソッドを呼びたい場合引数のバケツリレーになる可能性もありますね。
build内にplayMusicメソッドを定義してみよう
build
メソッドにplayMusic
メソッドを定義してみます。
BuildContext
やWidgetRef
など様々な要素がLexical Scope
でアクセス可能です。playMusic
メソッドの引数がなくなり、かなり見通し良くなりましたね!
コールバックがたくさんのウィジェット
Button
やGestureDetector
、ListTile
などユーザアクションのコールバックを持つウィジェットは多いですよね。
そんなウィジェットを複数個含んだウィジェットを構築する際に、すべてインラインで処理を記述してしまうとスタイリングのコードとアクションのコードが入り混ざってしまい
可読性の低下を招いてしまいます。
そんな時に、build
メソッド内にメソッドを定義してみてください。
かなり読みやすそうなコードではないでしょうか?
最後に
この様に、メソッド内でのメソッド定義を活用するだけで可読性が向上することがあるのでぜひ活用してみださいね!
誰かのお役に立てば。Twitterフォローお願いします
「次回以降も記事を読んでみたい!」「この辺分からなかったから質問したい!」
そんな時は、是非Twitter (@daiki1003)やInstagram (@ashdik_flutter)のフォローお願いします♪
Twitterコミュニティ参加お願いします
Twitterコミュニティ「Flutter lovers」を開設しました!参加お待ちしております😁
☕️ Buy me a coffee
また、記事がとても役に立ったと思う人はコーヒーを奢っていただけると非常に嬉しいです!
コメント