0Pricing
Scala for Backend Engineering & Functional Programming · บทเรียน

คลาสของชนิดที่พบบ่อย

Show, Ordering, Numeric

คลาสของชนิดที่พบบ่อย เป็นบทเรียน Scala for Backend Engineering & Functional Programming ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Scala for Backend Engineering & Functional Programming และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Scala for Backend Engineering & Functional Programming มีบทเรียนทั้งหมด 4 บทเรียน

คลาสประเภทมาตรฐาน

ไลบรารีมาตรฐานของ Scala มีคลาสประเภทหลายแบบที่คุณใช้ทุกวัน บางครั้งโดยไม่รู้ตัว:

  • Ordering[A] — วิธีเปรียบเทียบค่า
  • Numeric[A] — การคำนวณทางคณิตศาสตร์กับตัวเลข
  • การแสดงผลรูปแบบ Show (แบบกำหนดเอง หรือ Show ของ Cats)

Ordering เพิ่มพลังให้ sorted

List.sorted ต้องการ Ordering[A] แบบอิมพลิซิต ไลบรารีมาตรฐานมีอินสแตนซ์สำหรับตัวเลข สตริง และชนิดอื่น ๆ

@main def run(): Unit = {
  println(List(3, 1, 2).sorted)
  println(List("pear", "apple", "fig").sorted)
}

Ordering แบบกำหนดเอง

ส่ง Ordering อย่างชัดเจนเพื่อจัดเรียงในรูปแบบอื่น เช่น เรียงจากมากไปน้อย หรือเรียงตามคีย์ที่คำนวณได้

@main def run(): Unit = {
  val nums = List(3, 1, 2)
  println(nums.sorted(Ordering.Int.reverse))
  val words = List("bbb", "a", "cc")
  println(words.sortBy(_.length))
}

Ordering สำหรับคลาสกรณี

จัดหาอินสแตนซ์ Ordering สำหรับชนิดข้อมูลของคุณเอง เพื่อให้คอลเลกชันของชนิดนั้นจัดเรียงได้ Ordering.by จะสร้างอินสแตนซ์จากคีย์

case class Person(name: String, age: Int)

object Main {
  implicit val byAge: Ordering[Person] = Ordering.by(_.age)

  def main(args: Array[String]): Unit = {
    val people = List(Person("A", 30), Person("B", 20))
    println(people.sorted)
  }
}

Numeric นามธรรมการคำนวณ

Numeric[A] ช่วยให้คุณเขียนฟังก์ชันที่ทำงานกับชนิดตัวเลขใด ๆ ได้ ฟังก์ชัน sum บนรายการอาศัยสิ่งนี้

@main def run(): Unit = {
  println(List(1, 2, 3).sum)
  println(List(1.5, 2.5).sum)
}

การเขียนโค้ดตัวเลขทั่วไป

ด้วยขอบเขตบริบท [A: Numeric] คุณสามารถบวกหรือคูณชนิดตัวเลขใด ๆ ได้แบบทั่วไป ใช้การดำเนินการของอินสแตนซ์ผ่าน Numeric[A]

object Main {
  def addAll[A: Numeric](xs: List[A]): A = {
    val num = implicitly[Numeric[A]]
    xs.foldLeft(num.zero)(num.plus)
  }

  def main(args: Array[String]): Unit = {
    println(addAll(List(1, 2, 3)))
    println(addAll(List(1.0, 2.0, 3.5)))
  }
}

ตัวดำเนินการ Numeric

การนำเข้า Implicits ของอินสแตนซ์จะทำให้คุณใช้ตัวดำเนินการทั่วไป (+, *) กับชนิดตัวเลขทั่วไปได้ ทำให้โค้ดอ่านเป็นธรรมชาติ

object Main {
  def square[A](a: A)(implicit num: Numeric[A]): A = {
    import num._
    a * a
  }

  def main(args: Array[String]): Unit = {
    println(square(5))
    println(square(2.5))
  }
}

คลาสประเภท Show

Show แสดงค่าเป็นข้อความอย่างปลอดภัยตามชนิดข้อมูล ซึ่งต่างจาก toString ที่มีอยู่ในทุกสิ่ง Cats มีสิ่งนี้ให้ และในที่นี้คือรุ่นอย่างง่าย

trait Show[A] { def show(a: A): String }

object Show {
  implicit val intShow: Show[Int] = n => s"Int($n)"
  def apply[A](implicit s: Show[A]): Show[A] = s
}

object Main {
  def main(args: Array[String]): Unit = {
    println(Show[Int].show(42))
  }
}

Ordering กับ max/min

เมธอดอย่าง max, min และ maxBy บนคอลเลกชัน ล้วนใช้ Ordering อยู่เบื้องหลัง

@main def run(): Unit = {
  val xs = List(4, 9, 1, 7)
  println(xs.max)
  println(xs.min)
  println(List("a", "abc", "ab").maxBy(_.length))
}

การรวม Ordering

คุณสามารถสร้าง Ordering แบบประกอบด้วย Ordering.by บนทูเพิล โดยจัดเรียงตามฟิลด์หนึ่งก่อน แล้วจึงตามอีกฟิลด์หนึ่ง

case class Rec(group: String, score: Int)

object Main {
  implicit val ord: Ordering[Rec] = Ordering.by(r => (r.group, -r.score))

  def main(args: Array[String]): Unit = {
    val data = List(Rec("b", 5), Rec("a", 1), Rec("a", 9))
    data.sorted.foreach(println)
  }
}

เหตุผลที่ใช้คลาสประเภทในที่นี้

เนื่องจากการเปรียบเทียบและการคำนวณเป็นคลาสประเภท sorted หรือ sum เดียวกันจึงทำงานได้กับชนิดข้อมูลในตัวและชนิดข้อมูลของคุณเอง เพียงจัดหาอินสแตนซ์ให้ นี่คือตัวอย่างการใช้พหุรูปแบบเฉพาะกิจในไลบรารีมาตรฐาน

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความรู้เกี่ยวกับคลาสประเภทมาตรฐานของคุณ

สรุปทบทวน

คุณได้รู้จักคลาสประเภทมาตรฐานที่พบบ่อย:

  • Ordering[A] ควบคุม sorted, max, min และสร้างได้ด้วย Ordering.by
  • Numeric[A] ทำให้คำนวณแบบทั่วไปได้ และอยู่เบื้องหลัง sum
  • คลาสรูปแบบ Show แสดงค่าโดยรักษาความปลอดภัยตามชนิดข้อมูล

คำถามที่พบบ่อย

บทเรียน “คลาสของชนิดที่พบบ่อย” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “คลาสของชนิดที่พบบ่อย” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Scala for Backend Engineering & Functional Programming ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Scala for Backend Engineering & Functional Programming มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “คลาสของชนิดที่พบบ่อย”

Show, Ordering, Numeric คุณปฏิบัติ Scala for Backend Engineering & Functional Programming ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Scala for Backend Engineering & Functional Programming หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Scala for Backend Engineering & Functional Programming บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “คลาสของชนิดที่พบบ่อย” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Scala for Backend Engineering & Functional Programming นี้ได้ไหม

ได้ บทเรียน Scala for Backend Engineering & Functional Programming ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. รูปแบบคลาสของชนิด
  2. การกำหนดอินสแตนซ์
  3. คลาสของชนิดที่พบบ่อย
  4. การอนุมานคลาสของชนิด
← กลับไปที่ Scala for Backend Engineering & Functional Programming