👌

【Flutter】入門!Dart基本「arrow、typedef」

に公開

arrow

Dartにおける「arrow」は、主にラムダ式(無名関数やクロージャ)の短縮記法として使われます。アロー関数(Arrow function)とも呼ばれ、コードをより簡潔に表現するために使用されます。アロー関数は、単一の式を返す場合に特に便利です。

以下に、アロー記法の説明とコード例を示します。

アロー記法を使用せずに関数を定義する例

dart
int add(int a, int b) {
  return a + b;
}

同じ関数をアロー記法で短縮して定義する例

dart
int add(int a, int b) => a + b;

アロー記法の特徴:
アロー => の左側にはパラメータを、右側には式を記述します。
アロー関数は通常1つの式のみを含み、その式の評価結果が関数の戻り値となります。
アロー関数の場合、return キーワードは省略されます。
アロー関数を使用すると、関数の定義が簡潔になります。特に、単純な式を返す関数の場合に便利です。

以下は、アロー記法を使用して関数を定義する例です。

dart
void main() {
  // 通常の関数定義
  int multiply(int a, int b) {
    return a * b;
  }

  // アロー記法での関数定義
  int divide(int a, int b) => a ~/ b;

  print('Result of multiplication: ${multiply(3, 5)}');
  print('Result of division: ${divide(10, 2)}');
}

上記の例では、multiply関数は通常の関数定義で、divide関数はアロー記法で定義されています。どちらも正常に動作し、関数の結果を返します。

アロー記法は、シンプルで明快なコードを実現するためのツールとして活用されます。

typedef

Dartのtypedef(型別名)は、関数型やクラス型などの型に別名をつけるための仕組みです。typedefを使用することで、関数やクラスの型を簡潔な名前で参照できます。これは特に、コールバック関数やコンパクトな型定義を作成する場合に便利です。

以下に、typedefの詳細とコード例を示します。

関数型別名(Function Type Alias)

関数型別名は、関数の型を別名で指定するために使用されます。これにより、複雑な型を簡潔な名前で表現できます。

dart
typedef String StringTransformer(String input);

String uppercase(String input) {
  return input.toUpperCase();
}

String lowercase(String input) {
  return input.toLowerCase();
}

void main() {
  StringTransformer transform = uppercase;
  print(transform('Hello')); // 出力: HELLO

  transform = lowercase;
  print(transform('WORLD')); // 出力: world
}

上記の例では、StringTransformerという関数型別名を定義しています。uppercase関数とlowercase関数はこの関数型に適合するため、StringTransformer型の変数に代入できます。

クラス型別名(Class Type Alias)

クラス型別名は、クラスの型を別名で指定するために使用されます。これにより、長いクラス名を簡潔な名前で参照できます。

dart
class LongClassName {
  // クラスの定義
}

typedef ShortName = LongClassName;

void main() {
  final instance = ShortName();
}

上記の例では、LongClassNameというクラスに対して、ShortNameというクラス型別名を作成しています。これにより、ShortNameを使用してLongClassNameのインスタンスを作成できます。

typedefは、コードを読みやすくし、型の再利用性を高めるための便利な手段です。関数型やクラス型の別名を使用することで、コードの可読性と保守性を向上させることができます。

operation

Dartのtypedefは、関数型(Function Type)やクラス型(Class Type)などの型に別名をつけるための機能です。typedefを使用して操作(operation)を型に割り当てることで、特定の操作の型を簡潔に定義し、コードをより理解しやすくすることができます。

以下に、操作型別名(Operation Type Alias)の詳細とコード例を示します。

操作型別名(Operation Type Alias)の例

操作型別名は、特定の操作を行う関数に別名をつける場合に使用されます。これにより、関数型をより具体的な名前で表現できます。

dart
typedef Operation<T> = T Function(T a, T b);

int add(int a, int b) {
  return a + b;
}

int subtract(int a, int b) {
  return a - b;
}

void main() {
  Operation<int> addition = add;
  Operation<int> subtraction = subtract;

  print('Addition result: ${addition(5, 3)}');       // 出力: 8
  print('Subtraction result: ${subtraction(10, 7)}'); // 出力: 3
}

上記の例では、Operationという操作型別名を定義しています。add関数とsubtract関数はこの操作型に適合するため、Operation<int>型の変数に代入できます。これにより、変数名からどの操作を実行するかが明確になり、コードの可読性が向上します。

typedefを使用して操作型別名を定義することで、操作の種類や目的が分かりやすくなり、関数型をより具体的に表現できます。

Discussion