💭

関数を参照するということ

2024/06/16に公開

関数を参照するのか、呼び出すのか

下記のコードでは、エラーになってしまう。
理由は、関数を呼び出してしまうことで、処理結果が渡されてしまうからである。
Calculaterクラスでコンストラクタの値をFunction型で指定しているのに、異なる型の値が
入ってしまうためエラーが起こる。

void main() {
  int n1 = 3;
  int n2 = 4;
  // エラー → ()をつけていることで関数の処理が実行されて、異なる型の値が入るため。
  Calculater mycalculater = Calculater(function: add(n1, n2));
}

class Calculater {
  Calculater({this.function});

  Function? function;
}

void add(int n1, int n2) {
  print(n1 + n2);
}

下記は修正したものである。
関数そのものを参照したaddを渡すことでエラーを解消している。

void main() {
  int n1 = 3;
  int n2 = 4;

 // 関数自体を参照させたいため()をとる。
  Calculater mycalculater = Calculater(function: add);
  mycalculater.function!(n1,n2);
}

class Calculater {
  Calculater({this.function});

  Function? function;
}

void add(int n1, int n2) {
  print(n1 + n2);
}

なぜ、エラーのコードを書いてしまったのか。

引数を指定している関数なら、引数を書かないといけないと思い込んでいた。
関数そのものを呼び出すだけなら、引数はいらないことに気づけた。

Discussion