Scala for Backend Engineering & Functional Programming · درس

المسافات البادئة الدالّة

أقواس اختيارية

الدرس 1 من 413 خطوة

المسافات البادئة الدالّة درس مجاني في 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 دروس في المجموع.

الأقواس الاختيارية

تقدّم Scala 3 المسافة البادئة الدالّة، وتُسمّى أيضًا صياغة الأقواس الاختيارية. فبدل إحاطة الكتل بـ { }، يمكنك استخدام المسافة البادئة لتحديدها.

  • لا تزال الأقواس المعقوفة تعمل وهي صالحة تمامًا.
  • الكود المعتمد على المسافة البادئة أنظف ويشبه Python.
object Main:
  def main(args: Array[String]): Unit =
    println("No braces needed")

أجسام الدوال ذات المسافة البادئة

يمكن أن يكون جسم الدالة الذي يلي = كتلة ذات مسافة بادئة. ينتمي كل تصريح في مستوى المسافة البادئة نفسه إلى ذلك الجسم.

يمثّل التعبير الأخير قيمة الإرجاع.

object Main:
  def square(x: Int): Int =
    val result = x * x
    result

  def main(args: Array[String]): Unit =
    println(square(5))

تعبيرات if ذات المسافة البادئة

تستخدم بنى التحكم الصياغة الهادئة الجديدة. بعد if cond then، اكتب الفرع بمسافة بادئة، واجعل else بمحاذاة if.

  • تكون then مطلوبة في النمط الخالي من الأقواس.
  • لا حاجة إلى وضع الشرط بين قوسين.
object Main:
  def main(args: Array[String]): Unit =
    val n = 7
    val label =
      if n % 2 == 0 then "even"
      else "odd"
    println(label)

حلقات for ذات المسافة البادئة

تستخدم حلقة for الكلمة do للتأثيرات الجانبية أو yield لإنشاء المجموعات، مع استخدام المسافة البادئة في كلتا الحالتين.

object Main:
  def main(args: Array[String]): Unit =
    for i <- 1 to 3 do
      println(s"line $i")

    val doubled =
      for i <- 1 to 3 yield i * 2
    println(doubled)

حلقات while ذات المسافة البادئة

تستخدم حلقة while الكلمة do متبوعة بكتلة ذات مسافة بادئة في نمط الأقواس الاختيارية.

object Main:
  def main(args: Array[String]): Unit =
    var i = 0
    while i < 3 do
      println(s"i = $i")
      i += 1

تعبيرات match ذات المسافة البادئة

تتوافق مطابقة الأنماط طبيعيًا مع المسافة البادئة. تُكتب فروع case بمسافة بادئة تحت match.

object Main:
  def describe(n: Int): String =
    n match
      case 0 => "zero"
      case 1 => "one"
      case _ => "many"

  def main(args: Array[String]): Unit =
    println(describe(1))
    println(describe(9))

أجسام الأصناف وTraits

يمكن للأصناف وTraits والكائنات حذف الأقواس أيضًا. يفتح الرمز : بعد الرأس الجسم ذي المسافة البادئة.

class Point(x: Int, y: Int):
  def show: String = s"($x, $y)"

object Main:
  def main(args: Array[String]): Unit =
    println(Point(2, 3).show)

علامة end

بالنسبة إلى الكتل الطويلة ذات المسافة البادئة، يمكنك إضافة علامة end لتوضيح موضع انتهاء التعريف. وهذا يحسّن قابلية قراءة الدوال أو الأصناف الكبيرة.

  • الصيغة: end <name> أو end if أو end while وما شابه ذلك.
  • وهي اختيارية ويتحقق منها المصرّف.
object Main:
  def greet(name: String): String =
    val msg = s"Hello, $name"
    msg
  end greet

  def main(args: Array[String]): Unit =
    println(greet("Ada"))
  end main
end Main

الخلط بين الأقواس والمسافة البادئة

يمكنك الخلط بين النمطين بحرية. وتُبقي بعض الفرق على الأقواس لتوضيح الحالات المتداخلة. ولا تُفرض قواعد المسافة البادئة إلا عند غياب الأقواس.

object Main:
  def main(args: Array[String]): Unit = {
    val xs = List(1, 2, 3)
    val total =
      xs.foldLeft(0)((acc, x) => acc + x)
    println(total)
  }

المشكلات الشائعة في المسافة البادئة

للمسافة البادئة دلالة، لذا احرص على الاتساق.

  • استخدم المسافات، ولا تخلط علامات الجدولة بالمسافات.
  • قد يؤدي سطر غير محاذٍ إلى خروجه بصمت من الكتلة.
  • يلزم الرمز : لأجسام القوالب (الأصناف والكائنات)، لكنه لا يلزم لأجسام الدوال بعد =.
object Main:
  def main(args: Array[String]): Unit =
    val items = List("a", "b")
    items.foreach: item =>
      println(item.toUpperCase)

صياغة الوسائط ذات الأقواس الأقل

تسمح Scala 3 أيضًا بتمرير وسيط كتلي بعد نقطتين. يفتح items.foreach: x => جسم lambda ذي المسافة البادئة، متجنبًا الأقواس المتداخلة والأقواس المعقوفة.

object Main:
  def main(args: Array[String]): Unit =
    val nums = List(1, 2, 3, 4)
    val evens = nums.filter: n =>
      n % 2 == 0
    println(evens)

تحقق سريع

اختبر فهمك للمسافة البادئة الدالّة.

مراجعة

لقد تعلّمت المسافة البادئة الدالّة في Scala 3.

  • يمكن للكتل استخدام المسافة البادئة بدلًا من { }.
  • تستخدم بنى التحكم then وdo وyield.
  • تُفتح أجسام الأصناف والكائنات وTraits بالرمز :.
  • توضّح علامات end الكتل الطويلة.
  • يمكن خلط النمطين؛ حافظ على اتساق المسافات.
object Main:
  def main(args: Array[String]): Unit =
    for i <- 1 to 2 do
      if i == 1 then println("first")
      else println("second")
  end main
end Main
البدء مجانًا

تعلم Scala مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
39
الدروس
143

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

هل درس «المسافات البادئة الدالّة» مجاني؟

نعم — نص درس «المسافات البادئة الدالّة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Scala for Backend Engineering & Functional Programming، انتقل إلى CoddyKit PRO. تتضمن دورة Scala for Backend Engineering & Functional Programming 4 دروس في المجموع.

ماذا ستتعلم في «المسافات البادئة الدالّة»؟

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

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

  1. المسافات البادئة الدالّة
  2. Enums في Scala 3
  3. الأنواع المعتمة
  4. أنواع الاتحاد والتقاطع
← العودة إلى Scala for Backend Engineering & Functional Programming