เมธอด Inline
inline ใน Scala 3
เมธอด 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 * 1inline 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 Stringcompiletime.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 matchtransparent 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ