高階関数とカリー化
関数を渡し、返し、部分適用します
「高階関数とカリー化」は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フィードバックを取得できます。ローカル設定は不要です。