คลาสของชนิดที่พบบ่อย
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.byNumeric[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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- รูปแบบคลาสของชนิด
- การกำหนดอินสแตนซ์
- คลาสของชนิดที่พบบ่อย
- การอนุมานคลาสของชนิด