Dart Academy · レッスン

高階関数とカリー化

関数を渡し、返し、部分適用します

レッスン 1/413 ステップ

「高階関数とカリー化」はCoddyKit上の無料Dart Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDart Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Dart Academyコースには全4レッスンが含まれています。

関数は値である

Dartでは、関数は変数に格納できる単なる値です。この考え方1つで、functional patternsの世界全体が開けます。🎯

int square(int x) => x * x;
var op = square;
print(op(4)); // 16

高階関数とは

higher-order functionとは、関数を引数に受け取るか、関数を返す関数です。リストのメソッドですでに使ったことがあるはずです。

関数を渡す

動作を引数として渡すと、呼び出し側が何をするかを決められます。ここではapplyが受け取った関数を実行します。

int apply(int v, int Function(int) f) => f(v);
print(apply(5, (x) => x + 1)); // 6

関数型の構文

int Function(int)という型は、intを受け取りintを返す関数を意味します。型によって意図が明確になります。

void run(String Function(String) format) {
  print(format('hi'));
}

関数を返す

高階関数は関数をreturnすることもできます。返された関数は、作成時に周囲にあった値を記憶しています。

Function makeAdder(int n) {
  return (int x) => x + n;
}

返された関数を使う

まず作成用の関数を1回呼び出して専用の関数を作り、その後で再利用します。それぞれの結果が、独自にconfiguredされた小さなツールになります。

var add10 = makeAdder(10);
print(add10(5)); // 15
print(add10(1)); // 11

カリー化

Curryingは、複数の引数を取る関数を、引数を1つずつ取る関数の連鎖に変換します。値を1つずつ渡していきます。

int Function(int) add(int a) => (int b) => a + b;
print(add(3)(4)); // 7

部分適用

最初の引数を今固定し、残りを後で渡します。これがpartial applicationで、再利用できる事前設定済みのヘルパーを作れます。

var add3 = add(3);
print(add3(10)); // 13
print(add3(20)); // 23

なぜカリー化するのか

カリー化を使うと、ロジックを書き直さずに汎用関数から専用関数を作れます。小さなpipelinesを組み合わせるときに特に効果を発揮します。

関数を引数に取る型

typedefを使うと複雑な関数型に名前を付けられ、コード全体でシグネチャを読みやすく保てます。

typedef IntOp = int Function(int);
int apply(int v, IntOp f) => f(v);

tear-offの簡略構文

メソッドをlambdaでラップする代わりに、その名前を直接渡します。このtear-offにより、呼び出しをすっきり保てます。

['1', '2', '3'].map(int.parse).forEach(print);

クイックチェック

高階関数についての理解度を確認しましょう。

まとめ

関数は値なので、渡したり返したりできます。Curryingと部分適用によって、汎用関数を専用ツールに変えられます。よくできました!🚀

無料で開始

AI チューターと学ぶ Dart — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「高階関数とカリー化」レッスンは無料ですか?

はい。「高階関数とカリー化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Dart Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Dart Academyコースには全4レッスンが含まれています。

「高階関数とカリー化」で何を学びますか?

関数を渡し、返し、部分適用します ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Dart Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDart Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「高階関数とカリー化」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDart Academyレッスンでコードを書いて実行できますか?

はい。すべてのDart Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 高階関数とカリー化
  2. fold、reduce、expand
  3. sync* による遅延 Iterable とジェネレーター
  4. 純粋関数パイプラインの合成
← Dart Academyに戻る