0Pricing
Dart Academy · レッスン

純粋関数パイプラインの合成

変換を予測どおりに連鎖させます

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

純粋関数とは

pure functionは、同じ入力に対して同じ出力を返し、自分の外部にあるものを何も変更しません。予測しやすく、テストも簡単です。✨

int double(int x) => x * 2; // pure

副作用を見つける

side effectsのある関数は、出力を表示したりグローバルな値を変更したりするなど、外部の状態に影響を与えます。そのため、推論が難しくなります。

var log = [];
void impure(int x) => log.add(x); // side effect

純粋性がパイプラインに役立つ理由

純粋関数は各ステップが入力だけに依存するため、安全に連結できます。予期しない動作なしにcomposeできます。

mapとwhereを連結する

パイプラインとは、変換を連鎖させたものです。whereでフィルタリングし、mapで形を変える処理を、上から下へ読むように記述できます。

var r = [1, 2, 3, 4]
  .where((n) => n.isEven)
  .map((n) => n * 10);

各ステップはlazy

whereとmapはlazyなIterableを返すため、消費されるまで連鎖全体は実行されません。結果を具体化するにはtoListを追加します。

print(r.toList()); // [20, 40]

foldで仕上げる

集約してパイプラインを終えます。ここではfoldを使って、フィルタリングと変換を終えた値を1つの数値に合計します。

var sum = [1, 2, 3, 4]
  .where((n) => n.isEven)
  .fold(0, (a, b) => a + b);

2つの関数を合成する

一方の結果をもう一方に渡すことで、新しい関数を作れます。このcompositionは、「fを実行し、その後gを実行する」という意味になります。

int Function(int) compose(
    int Function(int) f, int Function(int) g) =>
  (x) => g(f(x));

合成した関数を使う

小さな純粋関数を合成して、再利用可能な1つの関数を作ります。結果は、整理された単一目的のtransformerのように動作します。

var f = compose((x) => x + 1, (x) => x * 2);
print(f(3)); // 8

各ステップを小さく保つ

名前を付けた小さな純粋関数を使うと、パイプライン自体が説明になります。各ステップが1つの処理を担うため、連鎖がrecipeのように読めます。

入力を変更しない

引数をその場で変更するのではなく、新しい値を返します。入力をunchangedに保つことが、信頼できるパイプラインを作ります。

List<int> bump(List<int> xs) =>
  xs.map((x) => x + 1).toList();

完全なパイプライン

まとめると、フィルタリング、変換、そして集約です。読みやすい1つのpipelineで、生データを最終的な答えに変換できます。

var avgx10 = [2, 4, 6]
  .map((n) => n * 10)
  .reduce((a, b) => a + b);

クイックチェック

関数を純粋にする条件を確認しましょう。

まとめ

Pure functionsを組み合わせると、フィルタリング、map、集約という明確でlazyなパイプラインを作れます。小さなステップから、予測可能な大きな結果を生み出せます。🎯

よくある質問

「純粋関数パイプラインの合成」レッスンは無料ですか?

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

「純粋関数パイプラインの合成」で何を学びますか?

変換を予測どおりに連鎖させます ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「純粋関数パイプラインの合成」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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