คลาสของชนิดใน Cats
Functor, Monad และอื่น ๆ
คลาสของชนิดใน Cats เป็นบทเรียน Scala for Backend Engineering & Functional Programming ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน 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 ที่เป็นไปตามกฎต้องปฏิบัติตามกฎสองข้อ:
- เอกลักษณ์:
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 รวมค่าที่มีผลกระทบหลายค่าซึ่งเป็นอิสระต่อกันเป็นค่าเดียว โดยเรียกใช้ฟังก์ชันเมื่อค่าทั้งหมดพร้อมแล้ว
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 ต้องปฏิบัติตามกฎสามข้อ:
- เอกลักษณ์ด้านซ้าย:
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") // foobarFoldable
Foldable[F] ทำให้การพับโครงสร้างเป็นนามธรรม เมื่อใช้ร่วมกับ Monoid แล้ว combineAll จะลดคอลเลกชันให้เหลือค่าเดียว
import cats.Foldable
import cats.instances.list._
import cats.instances.int._
val total = Foldable[List].combineAll(List(1, 2, 3, 4))
println(total) // 10Traverse
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—mapApplicative—pureและmapNMonad—flatMapSemigroup/Monoid—combine/emptyFoldable/Traverse— พับและรวบรวมผลกระทบ
ถัดไป คุณจะได้พบกับมอนาด IO สำหรับจำลองผลกระทบอย่างบริสุทธิ์
คำถามที่พบบ่อย
บทเรียน “คลาสของชนิดใน Cats” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “คลาสของชนิดใน Cats” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Scala for Backend Engineering & Functional Programming ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Scala for Backend Engineering & Functional Programming มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “คลาสของชนิดใน Cats”
Functor, Monad และอื่น ๆ คุณปฏิบัติ Scala for Backend Engineering & Functional Programming ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Scala for Backend Engineering & Functional Programming หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Scala for Backend Engineering & Functional Programming บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “คลาสของชนิดใน Cats” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Scala for Backend Engineering & Functional Programming นี้ได้ไหม
ได้ บทเรียน Scala for Backend Engineering & Functional Programming ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คลาสของชนิดใน Cats
- โมนาด IO
- การประกอบ IO
- การจัดการข้อผิดพลาดใน IO