0Pricing
Scala for Backend Engineering & Functional Programming · درس

الدوال Inline

inline في Scala 3

الدوال Inline درس مجاني في Scala for Backend Engineering & Functional Programming على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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 قيمًا حرفية، يمكن حل الفروع والاستدعاء الذاتي بالكامل وقت الترجمة، فلا يبقى في bytecode إلا التعبير النهائي.

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"

Transparent 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

الأداء مقابل حجم الشفرة

تستبدل عملية التضمين حجم الشفرة بـالسرعة وضمانات وقت الترجمة. وقد يؤدي الإفراط في استخدامها مع الأجسام الكبيرة إلى تضخيم bytecode، لذا احصرها في الدوال الصغيرة أو كثيرة الاستخدام أو الحرجة للتخصيص.

قابل للتشغيل من دون Inline

إليك منطق التربيع نفسه في برنامج عادي مستقل. ستنتج نسخة inline النتائج نفسها، مع توسيع عملية الضرب في موضع الاستدعاء.

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

Inline هو الأساس

تُبنى وحدات الماكرو على دوال inline: إذ يمكن لـ inline def استدعاء ماكرو لتوليد الشفرة. وإتقان inline أولًا يجعل طبقة الماكرو أسهل بكثير.

تحقق سريع

ما الذي يتغير عند إضافة transparent إلى دالة inline؟

مراجعة

لقد تعلمت التضمين في Scala 3:

  • يتوسع inline def في موضع الاستدعاء
  • معاملات inline وطيّ الثوابت
  • inline if / inline match
  • transparent inline وinline val وcompiletime.error

التالي: أساسيات الماكرو.

الأسئلة الشائعة

هل درس «الدوال Inline» مجاني؟

نعم — نص درس «الدوال Inline» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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 مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الدوال Inline
  2. أساسيات Macros
  3. الاقتباسات والدمج
  4. Macros عملية
← العودة إلى Scala for Backend Engineering & Functional Programming