🤖

【Flutter】☜触り始めた頃によくわからなかったこと

2023/12/01に公開

本記事を書いた理由

自分のため
(覚えてもすぐ忘れる…)

nullを許容する?

nullとは値が存在しない状態の事を表すデータ型。
変数によっては代入される値が「定義したデータ型」 or 「null」である場合がある。

そのような場合はデータ型の後ろに「?」を記載することで、nullを許容する変数として定義することが出来る。

final String? result = myFunction();

dynamic を使った動的型付け

dynamicというキーワードを用いた変数を定義する事で、どのような型も格納できる変数を作る事が出来る。

var dynamic anything;
anything = 'Baby';
anything = 2;
anything = 11.2;
anything = true;
anything = ['お絵かき','歌'];
anything = {'犬','猫','象'};
anything = {'ご飯':100, 'おやつ':50};
anything = myFunction;

「const」「final」の使い分け(修飾子)

keyword content
const コンパイル時に代入される定数
final インスタンス生成時に代入される定数

各修飾子を使うタイミング
(参考文献:https://minpro.net/two-types-of-const-in-dart

const
定数に対する修飾子。コンパイル時に代入されるので、動的な値を代入する事は出来ない。
例えばある関数の返り値の様なコンパイル後に計算された結果を代入する様な事は出来ない

const int data = 20;
print(data); // output:20

data = 15; // 上書きはダメ

//myFunction()はint型の値を返す関数
const int number = myFunction(); // 動的な値はダメ

final
定数に対する修飾子。コンパイル時に代入される const に対し、final はインスタンス生成時に代入される為、動的な値なども柔軟に代入する事が出来る

final int data = 20;
print(data); // output:20

data = 15; // 上書きはNG
//myFunction()はint型の値を返す関数
final int number = myFunction(); // 動的な値もOK

async/await(非同期処理)

API 通信など非同期な処理(時間がかかる処理)を行う関数では返り値がFutureというデータ型になる。

// ex. APIを呼び出し、レスポンスを受け取るまで処理を待つ関数(処理に時間がかかる関数)
Future<String> callApiFunction(int countryCode) async {
    return await getWeatherFromAPI(countryCode);
}

_(アンダースコア)でプライベート変数化

Dart では変数、関数、クラスの名前に _(アンダースコア)の接頭辞を付ける事で同一ファイル内でのみアクセス可能なプライベート変数にする事が出来る。

my_fuctions.dart
void myGlobalFunction(){
    print('This is global');
}
//プライベート化した関数
void _myPrivateFunction(){
    print('This is private');
}

void myFunction(){
        myGlobalFunction(); // OK
        _myPrivateFunction(); // OK:同一ファイル内の為アクセス可能
}

staticキーワードで静的メンバ化

静的メンバを定義する際は変数の接頭辞にstaticキーワードを用いる。
staticキーワードを付与すると、インスタンスではなく、クラス自体を通してのみアクセスする事が出来る。(つまりインスタンス化不要と認識している...)

MyClass.dart
//staticを付与したフィールド&メソッドを含むクラス
class MyClass {
  // staticメンバ
  static int myInt = 20;
  static void myFunc() {
    print('static var is $myInt');
  }
}
void main(){
    //staticを付与したフィールドを呼び出してみる(インスタンス化不要で呼び出し可能)
    print(MyClass.myInt); // output: 20
    //staticを付与したメソッドを呼び出してみる(インスタンス化不要で呼び出し可能)
    MyClass.myFunc(); // output: static var is 20
}

変数の値がnullでないことが確信的な場合は!を使用する

変数の値が文脈から判断して確実にnullではないという場合は、基本的に条件分岐などでnullの対応をせずに「 ! 」をつけることで確実にnullではありませんと明示する方が得策。

class User {
  String? name;
  User(this.title):
}

User userInstance = User('奥野');
Text(userInstance.name!); //!をつけることでnullではないことを確約する

「PATH を通す」って何?

「PATH が通っていない」状態は、flutter コマンドを実行するためのプログラムがどこにあるのかコンピューターがわかっていない状態。

https://ryamate.hatenablog.com/entry/2023/01/30/070000#2-1-PATH-を通す前にPATH-が通っていないとは

どこからでも flutter コマンドを実行するために、プログラムの場所を伝えて(PATH を通して)おこう、ということになります。

参考文献

参考コードや説明文等下記サイトのものをほぼ写経させていただきました🙏
こちらの記事はMap配列の処理等の勉強の際にとても助かった素晴らしい記事でしたので、
これからflutterを触っていこうという方には特におすすめです!
https://zenn.dev/heyhey1028/books/flutter-basics/viewer/dart_1

まとめ

(最後にソッといいねボタンやバッジを贈るボタンを押して頂けたら幸いですm(_ _)m)

Discussion