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

ฟังก์ชันในฐานะค่า

ฟังก์ชันชั้นหนึ่ง

ฟังก์ชันในฐานะค่า เป็นบทเรียน 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 บทเรียน

ฟังก์ชันคือค่า

ใน Scala ฟังก์ชันเป็นค่าชั้นหนึ่ง คุณสามารถเก็บฟังก์ชันไว้ในตัวแปร ส่งเป็นอาร์กิวเมนต์ และคืนค่าจากฟังก์ชันอื่นได้ เช่นเดียวกับตัวเลขหรือข้อความ

object Main {
  def main(args: Array[String]): Unit = {
    val increment: Int => Int = x => x + 1
    println(increment(5))
  }
}

ไวยากรณ์ชนิดฟังก์ชัน

ชนิด Int => String หมายถึงฟังก์ชันที่รับ Int และคืนค่าเป็น String หากมีพารามิเตอร์หลายตัว ให้ใช้วงเล็บ: (Int, Int) => Int

object Main {
  def main(args: Array[String]): Unit = {
    val add: (Int, Int) => Int = (a, b) => a + b
    val label: Int => String = n => s"value=$n"
    println(add(3, 4))
    println(label(7))
  }
}

ไวยากรณ์แลมบ์ดา (ฟังก์ชันไม่ระบุชื่อ)

ฟังก์ชันไม่ระบุชื่อ หรือแลมบ์ดา เขียนเป็น (params) => body ฟังก์ชันนี้ไม่มีชื่อ และมักส่งให้ฟังก์ชันอื่นโดยตรง

object Main {
  def main(args: Array[String]): Unit = {
    val square = (x: Int) => x * x
    println(square(6))
  }
}

ฟังก์ชันลำดับสูง

ฟังก์ชันลำดับสูงคือฟังก์ชันที่รับฟังก์ชันเป็นพารามิเตอร์ หรือคืนค่าฟังก์ชัน ตัวอย่างคลาสสิกคือ map และ filter

object Main {
  def applyTwice(f: Int => Int, x: Int): Int = f(f(x))
  def main(args: Array[String]): Unit = {
    println(applyTwice(_ + 3, 10))
  }
}

การส่งฟังก์ชันให้เมธอด

เมธอดของคอลเลกชันรับฟังก์ชันได้ คุณสามารถส่งแลมบ์ดาแบบเขียนในบรรทัดนั้น หรือส่งค่าฟังก์ชันที่มีชื่อแล้วก็ได้

object Main {
  def main(args: Array[String]): Unit = {
    val triple = (x: Int) => x * 3
    println(List(1, 2, 3).map(triple))
    println(List(1, 2, 3).map(x => x * 3))
  }
}

การคืนค่าฟังก์ชัน

ฟังก์ชันสามารถคืนค่าฟังก์ชันอื่นได้ ในที่นี้ multiplier คืนค่าฟังก์ชันที่คูณด้วยตัวคูณคงที่ ซึ่งเป็นโรงงานฟังก์ชันขนาดเล็ก

object Main {
  def multiplier(factor: Int): Int => Int = x => x * factor
  def main(args: Array[String]): Unit = {
    val timesTen = multiplier(10)
    println(timesTen(5))
  }
}

เมธอดเทียบกับฟังก์ชัน

def ใช้กำหนดเมธอด คุณสามารถเปลี่ยนเมธอดให้เป็นค่าฟังก์ชันด้วยขีดล่างสำหรับการขยายแบบเอทา: methodName _ หรือเพียงใช้เมธอดในตำแหน่งที่ต้องการฟังก์ชัน

object Main {
  def doubleIt(x: Int): Int = x * 2
  def main(args: Array[String]): Unit = {
    val f: Int => Int = doubleIt
    println(f(8))
    println(List(1, 2, 3).map(doubleIt))
  }
}

ฟังก์ชันที่ไม่มีพารามิเตอร์

ฟังก์ชันสามารถไม่รับอาร์กิวเมนต์ได้ ชนิดของฟังก์ชันเขียนเป็น () => T ซึ่งมีประโยชน์สำหรับเลื่อนเวลาการคำนวณออกไป

object Main {
  def main(args: Array[String]): Unit = {
    val greeting: () => String = () => "Hello!"
    println(greeting())
  }
}

การเก็บฟังก์ชันในคอลเลกชัน

เนื่องจากฟังก์ชันเป็นค่า คุณจึงเก็บฟังก์ชันไว้ในรายการหรือแมป แล้วค้นหาแบบไดนามิกได้ ทำให้สร้างตัวกระจายคำสั่งขนาดเล็กได้

object Main {
  def main(args: Array[String]): Unit = {
    val ops: Map[String, (Int, Int) => Int] = Map(
      "add" -> (_ + _),
      "mul" -> (_ * _)
    )
    println(ops("add")(3, 4))
    println(ops("mul")(3, 4))
  }
}

ฟังก์ชันในฐานะการกำหนดค่า

การส่งฟังก์ชันช่วยให้ผู้เรียกกำหนดพฤติกรรมเองได้ ในที่นี้ transformAll แบบทั่วไปจะใช้ฟังก์ชันใดก็ได้กับสมาชิกทุกตัวในรายการ

object Main {
  def transformAll(xs: List[Int], f: Int => Int): List[Int] = xs.map(f)
  def main(args: Array[String]): Unit = {
    println(transformAll(List(1, 2, 3), _ + 100))
    println(transformAll(List(1, 2, 3), _ * 10))
  }
}

ตัวอย่างการปรับแต่งที่อ่านง่ายขึ้น

นี่คือตัวอย่างแนวคิดเดียวกันที่เขียนให้สะอาดขึ้น โดยผู้เรียกเป็นผู้จัดเตรียมการแปลง ทำให้ตัวช่วยยังคงเป็นแบบทั่วไปและนำกลับมาใช้ใหม่ได้

object Main {
  def transformAll(xs: List[Int], f: Int => Int): List[Int] = xs.map(f)
  def main(args: Array[String]): Unit = {
    println(transformAll(List(1, 2, 3), x => x + 100))
    println(transformAll(List(1, 2, 3), x => x * x))
  }
}

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

ฟังก์ชันลำดับสูงคืออะไร

สรุปทบทวน

คุณได้เรียนรู้ว่าฟังก์ชันเป็นค่าชั้นหนึ่ง:

  • เก็บฟังก์ชันไว้ใน val รายการ และแมป
  • ชนิดฟังก์ชัน เช่น Int => String
  • แลมบ์ดา: (x) => body และรูปแบบย่อด้วย _
  • ฟังก์ชันลำดับสูงรับหรือคืนค่าฟังก์ชัน
  • เมธอดกลายเป็นค่าฟังก์ชันผ่านการขยายแบบเอทา

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

บทเรียน “ฟังก์ชันในฐานะค่า” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ฟังก์ชันในฐานะค่า” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ 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 ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 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