1. ホーム
  2. functional-programming

[解決済み] Dartで型付き関数をパラメータとして渡す

2023-02-22 16:41:02

質問

私は 機能 クラスは、次のように別の関数にパラメータとして渡すことができます。

void doSomething(Function f) {
    f(123);
}

しかし、関数パラメータの引数や戻り値の型を制約する方法はあるのでしょうか?

例えば、この場合 f は整数に対して直接呼び出されていますが、別の型を受け入れる関数であった場合はどうでしょうか?

として渡してみました。 Function<Integer> として渡そうとしましたが、Functionはパラメトリックな型ではありません。

パラメータとして渡される関数のシグネチャを指定する他の方法はないのでしょうか?

どのように解決するのですか?

Dart v1.23 では、関数型を記述するための新しい構文が追加され、インラインでも動作するようになりました。

void doSomething(Function(int) f) {
  f(123);
}

関数パラメータ構文と比較して、変数や型を書きたい場所にも使えるという利点があります。

void doSomething(Function(int) f) {
  Function(int) g = f;
  g(123);
}

var x = <int Function(int)>[];

int Function(int) returnsAFunction() => (int x) => x + 1;
    
int Function(int) Function() functionValue = returnsAFunction;