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

เมธอด Inline

inline ใน Scala 3

บทเรียน 1 จาก 413 ขั้นตอน

เมธอด Inline เป็นบทเรียน 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 บทเรียน

inline คืออะไร

คีย์เวิร์ด inline ใน Scala 3 บอกให้คอมไพเลอร์ขยายนิยาม ณ จุดที่เรียกใช้ระหว่างการคอมไพล์ ซึ่งเป็นจุดเริ่มต้นของเมตาโปรแกรมมิงก่อนเข้าสู่มาโครเต็มรูปแบบ

เมธอด Inline

กำกับเมธอดด้วย inline แล้วส่วนเนื้อหาของเมธอดจะถูกแทนที่ในทุกจุดที่มีการเรียกใช้ วิธีนี้ช่วยลดค่าใช้จ่ายในการเรียกใช้และเปิดให้ปรับเฉพาะทางระหว่างการคอมไพล์

inline def square(x: Int): Int = x * x

val r = square(5) // compiles to 5 * 5

พารามิเตอร์ Inline

พารามิเตอร์ inline จะบังคับให้อาร์กิวเมนต์ของพารามิเตอร์นั้นถูกอินไลน์ด้วย หากอาร์กิวเมนต์เป็นค่าคงที่ คอมไพเลอร์สามารถพับค่าให้เป็นลิเทอรัลได้

inline def power(x: Int, inline n: Int): Int =
  if (n == 0) 1 else x * power(x, n - 1)

การพับค่าคงที่

เมื่อพารามิเตอร์ Inline เป็นลิเทอรัล แขนงการทำงานและการเรียกซ้ำสามารถคลี่คลายได้ทั้งหมดระหว่างการคอมไพล์ เหลือเพียงนิพจน์สุดท้ายในไบต์โค้ด

inline def power(x: Int, inline n: Int): Int =
  if (n == 0) 1 else x * power(x, n - 1)

val c = power(2, 3) // expands to 2 * 2 * 2 * 1

inline if และ inline match

ภายในเมธอด Inline inline if และ inline match จะได้รับการแก้ไขระหว่างการคอมไพล์เมื่อค่าที่ใช้พิจารณาเป็นที่ทราบแน่ชัดแบบสถิต ทำให้ตัดแขนงที่ไม่มีการใช้งานออกได้

inline def label(inline b: Boolean): String =
  inline if (b) "yes" else "no"

Inline แบบโปร่งใส

transparent inline ช่วยให้ชนิดที่ส่งคืนของเมธอดถูกปรับให้เฉพาะเจาะจงตามจุดที่เรียกใช้ได้ คอมไพเลอร์อาจอนุมานชนิดที่เฉพาะเจาะจงกว่าชนิดที่ประกาศไว้

transparent inline def first(inline b: Boolean): Any =
  inline if (b) 1 else "x" // type can be Int or String

compiletime.error

แพ็กเกจ scala.compiletime มีเครื่องมืออย่าง error สำหรับทำให้การคอมไพล์ล้มเหลวพร้อมข้อความที่กำหนดเอง ซึ่งมีประโยชน์สำหรับตรวจสอบอาร์กิวเมนต์ Inline

import scala.compiletime.error

inline def positive(inline n: Int): Int =
  inline if (n <= 0) error("n must be positive") else n

ค่า Inline

inline val เป็นค่าคงที่แท้จริงในเวลาคอมไพล์ สามารถใช้ในตำแหน่งที่ต้องการลิเทอรัลได้ เช่น ในการคำนวณ Inline อื่น ๆ

inline val MaxRetries = 3

inline def retries: Int = MaxRetries

ประสิทธิภาพเทียบกับขนาดโค้ด

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

ทำงานได้โดยไม่ใช้ Inline

นี่คือตรรกะการยกกำลังสองแบบเดียวกันในโปรแกรมทั่วไปที่ทำงานได้ในตัวเอง รุ่น Inline จะให้ผลลัพธ์เหมือนกัน โดยขยายการคูณ ณ จุดที่เรียกใช้

object Main {
  def square(x: Int): Int = x * x
  def main(args: Array[String]): Unit = {
    println(square(5)) // 25
  }
}

Inline คือรากฐาน

มาโครสร้างต่อยอดจากเมธอด Inline: def แบบ Inline สามารถเรียกมาโครเพื่อสร้างโค้ดได้ การทำความเข้าใจ inline ก่อนจะช่วยให้เรียนรู้ชั้นของมาโครได้ง่ายขึ้นมาก

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

การเพิ่ม transparent ให้เมธอด Inline เปลี่ยนแปลงอะไร

สรุปทบทวน

คุณได้เรียนรู้การอินไลน์ใน Scala 3:

  • inline def จะขยายที่จุดเรียกใช้
  • พารามิเตอร์ inline และการพับค่าคงที่
  • inline if / inline match
  • transparent inline, inline val, compiletime.error

ถัดไป: พื้นฐานมาโคร

เริ่มต้นได้ฟรี

เรียนรู้ Scala ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
39
บทเรียน
143

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

บทเรียน “เมธอด Inline” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “เมธอด Inline”

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

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

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

บทเรียน “เมธอด Inline” ใช้เวลานานแค่ไหน

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

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

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

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

  1. เมธอด Inline
  2. พื้นฐานมาโคร
  3. เครื่องหมายอัญประกาศและการแทรกโค้ด
  4. มาโครเชิงปฏิบัติ
← กลับไปที่ Scala for Backend Engineering & Functional Programming