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

การแยกโครงสร้าง

ดึงข้อมูลจากข้อมูลต้นทาง

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

การแยกโครงสร้างคืออะไร

การแยกโครงสร้าง หรือที่เรียกว่าการแยกส่วน หมายถึงการดึงส่วนประกอบของโครงสร้างข้อมูลออกมาโดยตรงภายในรูปแบบ

แทนที่จะเรียกเมธอดเข้าถึงข้อมูล คุณจะอธิบายรูปร่างของโครงสร้างและตั้งชื่อส่วนที่ต้องการ

การแยกทูเพิล

ทูเพิลใช้จัดกลุ่มค่าหลายค่าเข้าด้วยกัน คุณสามารถแยกค่าเหล่านั้นออกมาในการผูกค่าเพียงครั้งเดียว โดยเขียนชื่อไว้ในวงเล็บ

object Main {
  def main(args: Array[String]): Unit = {
    val pair = ("Ada", 1815)
    val (name, year) = pair
    println(s"$name was born in $year")
  }
}

ทูเพิลใน match

คุณสามารถแยกโครงสร้างทูเพิลภายใน match โดยตั้งชื่อหรือจับคู่ส่วนประกอบแต่ละส่วนได้

object Main {
  def quadrant(p: (Int, Int)): String = p match {
    case (0, 0) => "origin"
    case (x, 0) => s"on x-axis at $x"
    case (0, y) => s"on y-axis at $y"
    case (x, y) => s"point ($x, $y)"
  }
  def main(args: Array[String]): Unit = {
    println(quadrant((0, 0)))
    println(quadrant((3, 0)))
    println(quadrant((2, 5)))
  }
}

การแยกส่วนหัวของรายการ

ตัวดำเนินการ :: หรือ cons จะแยกรายการออกเป็นสมาชิกตัวแรก (ส่วนหัว) และส่วนที่เหลือ (ส่วนหาง)

รูปแบบ head :: tail จะจับคู่กับรายการที่ไม่ว่างทุกรายการ

object Main {
  def first(xs: List[Int]): String = xs match {
    case head :: tail => s"head=$head, rest=$tail"
    case Nil          => "empty"
  }
  def main(args: Array[String]): Unit = {
    println(first(List(10, 20, 30)))
    println(first(Nil))
  }
}

การจับคู่รูปร่างรายการแบบตรงทั้งหมด

คุณสามารถจับคู่รายการที่มีความยาวเจาะจงได้โดยระบุสมาชิก เช่น List(a, b) สำหรับรายการที่มีสมาชิกสองรายการพอดี

object Main {
  def shape(xs: List[Int]): String = xs match {
    case List()        => "none"
    case List(a)       => s"one: $a"
    case List(a, b)    => s"two: $a, $b"
    case _             => "many"
  }
  def main(args: Array[String]): Unit = {
    println(shape(List()))
    println(shape(List(1)))
    println(shape(List(1, 2)))
    println(shape(List(1, 2, 3)))
  }
}

การเรียกซ้ำด้วยส่วนหัวและส่วนหาง

การแยกส่วนหัวออกจากส่วนหางช่วยให้เรียกซ้ำกับรายการได้อย่างสะอาด

ในที่นี้ เราหาผลรวมของรายการโดยบวกส่วนหัวเข้ากับผลรวมของส่วนหาง

object Main {
  def sum(xs: List[Int]): Int = xs match {
    case Nil          => 0
    case head :: tail => head + sum(tail)
  }
  def main(args: Array[String]): Unit = {
    println(sum(List(1, 2, 3, 4)))
  }
}

การแยกโครงสร้างที่ซ้อนกัน

รูปแบบสามารถซ้อนกันได้ คุณสามารถแยกทูเพิลภายในรายการ หรือแยกรายการภายในทูเพิลได้ในครั้งเดียว

object Main {
  def main(args: Array[String]): Unit = {
    val data = List(("a", 1), ("b", 2))
    data match {
      case (key, value) :: _ => println(s"first key=$key value=$value")
      case Nil               => println("empty")
    }
  }
}

การละเว้นส่วนต่าง ๆ ด้วย _

ใช้ _ กับส่วนประกอบที่คุณไม่สนใจ วิธีนี้ช่วยให้รูปแบบมุ่งเน้นเฉพาะข้อมูลที่ต้องใช้จริง

object Main {
  def main(args: Array[String]): Unit = {
    val triple = (1, 2, 3)
    val (_, middle, _) = triple
    println(s"middle = $middle")
  }
}

การผูกสองสมาชิกแรกและเก็บส่วนที่เหลือ

คุณสามารถตั้งชื่อให้สมาชิกแรก ๆ และเก็บทุกอย่างหลังจากนั้นด้วยรูปแบบส่วนหาง

object Main {
  def main(args: Array[String]): Unit = {
    val xs = List(1, 2, 3, 4, 5)
    xs match {
      case a :: b :: rest => println(s"a=$a b=$b rest=$rest")
      case _              => println("too short")
    }
  }
}

เหตุใดจึงใช้การแยกโครงสร้าง

การแยกโครงสร้างทำให้การเข้าถึงข้อมูลมีลักษณะดังนี้:

  • เชิงประกาศ: อธิบายรูปร่างของข้อมูลแทนขั้นตอนการทำงาน
  • ปลอดภัย: ตรวจสอบโครงสร้างขณะดึงข้อมูล
  • กระชับ: ผูกค่าหลายค่าในรูปแบบเดียว

การแยกโครงสร้างจะทรงพลังยิ่งขึ้นเมื่อใช้กับคลาสกรณี

นำทุกอย่างมารวมกัน

ตัวอย่างนี้แยกรายการทูเพิลและตอบสนองตามรูปร่างของข้อมูล

object Main {
  def report(scores: List[(String, Int)]): String = scores match {
    case Nil                  => "no scores"
    case (name, pts) :: Nil   => s"only $name with $pts"
    case (name, pts) :: rest  => s"top $name=$pts plus ${rest.size} more"
  }
  def main(args: Array[String]): Unit = {
    println(report(Nil))
    println(report(List(("Ann", 90))))
    println(report(List(("Ann", 90), ("Bo", 80))))
  }
}

ตรวจสอบอย่างรวดเร็ว

ทดสอบความเข้าใจของคุณเกี่ยวกับการแยกโครงสร้าง

สรุปทบทวน

คุณได้เรียนรู้การแยกข้อมูลในรูปแบบ:

  • แยกทูเพิลด้วย (a, b)
  • แยกรายการด้วย head :: tail หรือรูปร่างที่กำหนดแน่นอน เช่น List(a, b)
  • Nil จับคู่กับรายการว่าง
  • ใช้ _ เพื่อละเว้นส่วนต่าง ๆ และซ้อนรูปแบบสำหรับโครงสร้างเชิงลึก
  • การแยกส่วนหัวและส่วนหางช่วยให้เรียกซ้ำได้อย่างสะอาด

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

บทเรียน “การแยกโครงสร้าง” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การแยกโครงสร้าง”

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

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

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

บทเรียน “การแยกโครงสร้าง” ใช้เวลานานแค่ไหน

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

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

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

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

  1. นิพจน์ match
  2. การจับคู่ชนิดและค่า
  3. การ์ดและการผูกค่า
  4. การแยกโครงสร้าง
← กลับไปที่ Scala for Backend Engineering & Functional Programming