0Pricing
Scala for Backend Engineering & Functional Programming · レッスン

Cats の型クラス

Functor、Monad などです。

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

型クラスとは

型クラスは、アドホック多相性のためのパターンです。型自体を変更せずに、その型へ振る舞いを追加できます。Catsは、関数型プログラミング向けに豊富な型クラス階層を提供するScalaライブラリです。

  • Functor — mapを適用できるもの
  • Applicative — 独立したエフェクトを組み合わせるもの
  • Monad — 依存関係のあるエフェクトを順番に実行するもの

Functor:map

Functor[F]はmapを提供します。コンテキストの構造を変えずに、その内部の値を変換します。

import cats.Functor
import cats.instances.option._

val f = Functor[Option].map(Some(2))(_ + 1)
println(f) // Some(3)

Functorの法則

正しいFunctorは、次の2つの法則に従う必要があります。

  • 恒等性: fa.map(x => x) == fa
  • 合成: fa.map(f).map(g) == fa.map(f.andThen(g))

これらの保証により、mapのチェーンを安全にリファクタリングできます。

Applicative: pureとap

Applicative[F]はFunctorを拡張し、pure(値をコンテキストに持ち上げる)と、mapNによって独立した値を結合する機能を追加します。

import cats.Applicative
import cats.instances.option._

val lifted = Applicative[Option].pure(42)
println(lifted) // Some(42)

mapNによる結合

mapN構文は、複数の独立したエフェクト付きの値を1つに結合し、すべての値がそろった時点で関数を適用します。

import cats.syntax.apply._
import cats.instances.option._

val result = (Option(1), Option(2), Option(3)).mapN(_ + _ + _)
println(result) // Some(6)

Monad: flatMap

Monad[F]はApplicativeを拡張し、依存する計算を順番に実行するflatMapを追加します。各ステップは、直前のステップの結果に依存できます。

import cats.Monad
import cats.instances.option._

val m = Monad[Option].flatMap(Some(3))(x => Some(x * 10))
println(m) // Some(30)

Monadの法則

Monadは次の3つの法則に従う必要があります。

  • 左恒等性: pure(a).flatMap(f) == f(a)
  • 右恒等性: m.flatMap(pure) == m
  • 結合性: ネストしたflatMapはグループ化を変更できます

SemigroupとMonoid

Semigroup[A]はcombine(結合則を満たす)を定義します。Monoid[A]はさらに単位元emptyを追加します。これらは畳み込みや累積処理の基盤になります。

import cats.syntax.semigroup._
import cats.instances.int._
import cats.instances.string._

println(3 |+| 4)       // 7
println("foo" |+| "bar") // foobar

Foldable

Foldable[F]は、構造に対する畳み込みを抽象化します。Monoidと組み合わせると、combineAllによってコレクションを1つの値にまとめられます。

import cats.Foldable
import cats.instances.list._
import cats.instances.int._

val total = Foldable[List].combineAll(List(1, 2, 3, 4))
println(total) // 10

Traverse

Traverse[F]を使うと、各要素をエフェクトにマッピングして結果を集め、List[F[A]]をF[List[A]]に変換できます。

import cats.syntax.traverse._
import cats.instances.list._
import cats.instances.option._

val r = List(1, 2, 3).traverse(x => Option(x * 2))
println(r) // Some(List(2, 4, 6))

型クラスが重要な理由

型クラスを使うと、必要な振る舞いを提供する任意の型で動作するコードを書けます。Monad[F]の制約を持つ関数は、Option、List、IOなどで動作します。一度書けば、どこでも再利用できます。

import cats.Monad
import cats.syntax.flatMap._
import cats.syntax.functor._

def twice[F[_]: Monad, A](fa: F[A])(f: A => A): F[A] =
  fa.flatMap(a => Monad[F].pure(f(f(a))))

クイックチェック

依存する計算を順番に実行するためのflatMapを追加する型クラスはどれですか?

まとめ

ここでは、コアとなるCatsの型クラス階層を学びました。

  • Functor — map
  • Applicative — pureとmapN
  • Monad — flatMap
  • Semigroup/Monoid — combine/empty
  • Foldable/Traverse — 畳み込みとエフェクトの収集

次は、エフェクトを純粋にモデル化するIOモナドを学びます。

よくある質問

「Cats の型クラス」レッスンは無料ですか?

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

「Cats の型クラス」で何を学びますか?

Functor、Monad などです。 ブラウザで直接実行するハンズオンコードでScala for Backend Engineering & Functional Programmingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Scala for Backend Engineering & Functional Programmingを始めるのに経験は必要ですか?

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

「Cats の型クラス」レッスンにはどのくらい時間がかかりますか?

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

このScala for Backend Engineering & Functional Programmingレッスンでコードを書いて実行できますか?

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

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

  1. Cats の型クラス
  2. IO モナド
  3. IO の合成
  4. IO のエラー処理
← Scala for Backend Engineering & Functional Programmingに戻る