التعبيرات بدلًا من العبارات
كل شيء يعيد قيمة
التعبيرات بدلًا من العبارات درس مجاني في Scala for Backend Engineering & Functional Programming على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Scala for Backend Engineering & Functional Programming، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Scala for Backend Engineering & Functional Programming 4 دروس في المجموع.
كل شيء عبارة عن تعبير
في كثير من اللغات، تكون if والكتل تعليمات تنفّذ شيئًا لكنها لا تنتج قيمة. أما في Scala فهي تعبيرات تُقيَّم إلى قيمة.
هذا التحول هو جوهر البرمجة الوظيفية في Scala.
val max = if (3 > 2) 3 else 2if كتعبير
تعيد if/else في Scala قيمة الفرع الذي يُنفَّذ. ويمكنك إسناد هذه النتيجة مباشرةً إلى val.
لا حاجة إلى متغير قابل للتغيير تضبط قيمته داخل الفروع.
object Main extends App {
val temp = 18
val label = if (temp > 20) "warm" else "cool"
println(label)
}تعيد الكتل سطرها الأخير
الكتلة { ... } هي تعبير بحد ذاتها. وقيمتها هي قيمة آخر تعبير بداخلها.
هنا تُقيَّم الكتلة إلى 30، التي تصبح قيمة result.
object Main extends App {
val result = {
val a = 10
val b = 20
a + b
}
println(result)
}لا حاجة إلى return صريحة
بما أن جسم الأسلوب تعبير، فقيمته هي ببساطة قيمة آخر تعبير جرى تقييمه. ونادرًا ما تُستخدم الكلمة المفتاحية return.
يعمل الأسلوبان أدناه بالطريقة نفسها، لكن الأسلوب الاصطلاحي يحذف return.
def double(x: Int) = x * 2
// instead of: def double(x: Int) = { return x * 2 }match تعبير أيضًا
تنتج مطابقة الأنماط باستخدام match قيمةً أيضًا، مما يجعلها مناسبةً جدًا لتحويل المدخلات إلى نتائج.
ينتج كل فرع من فروع الحالة قيمة ذلك الفرع.
object Main extends App {
val day = 3
val name = day match {
case 1 => "Mon"
case 3 => "Wed"
case _ => "Other"
}
println(name)
}تتكوّن التعبيرات معًا
بما أن التعبيرات تعيد قيمًا، يمكنك تعشيقها ودمجها بحرية.
يمكن أن يكون if وسيطًا لدالة أو جزءًا من عملية حسابية أكبر، من دون الحاجة إلى متغيرات مؤقتة.
object Main extends App {
val n = 7
println("sign: " + (if (n >= 0) "+" else "-"))
}لا تزال التعليمات موجودة
لا ينتج كل شيء قيمة مفيدة. فالعمليات التي تُنفَّذ فقط من أجل آثارها الجانبية، مثل println أو الإسناد، تُقيَّم إلى Unit.
هذه هي التعبيرات الشبيهة بالتعليمات في Scala.
val x: Unit = println("hello") // value is ()تجنّب var مع التعبيرات
يتيح لك أسلوب التعبيرات استبدال أنماط var القابلة للتغيير. فبدلًا من تعريف var وإسناد قيمة إليه داخل الفروع، أسند تعبير if بأكمله إلى val.
object Main extends App {
val score = 85
val grade = if (score >= 90) "A" else if (score >= 80) "B" else "C"
println(grade)
}تنتج for قيمًا
يُعد for مع yield تعبيرًا ينشئ مجموعة جديدة، بدلًا من الاقتصار على التكرار لتنفيذ آثار جانبية.
وهذا يحوّل التكرار إلى تحويل ينتج قيمة.
object Main extends App {
val squares = for (i <- 1 to 4) yield i * i
println(squares)
}لماذا يهم ذلك في الشيفرة الخلفية
تميل الشيفرة القائمة على التعبيرات إلى أن تكون أقصر، وتحتوي على عناصر أقل متحركة، وأسهل في الاختبار.
- عدد أقل من المتغيرات القابلة للتغيير يعني أخطاء أقل.
- تتدفق النتائج طبيعيًا من المدخلات.
- تتوافق جيدًا مع المكتبات الوظيفية في Scala.
أسلوب التعليمات في مقابل أسلوب التعبيرات
قارن بين الطريقتين في التفكير. يغيّر أسلوب التعليمات قيمة متغير، بينما يعيد أسلوب التعبيرات قيمةً مباشرةً.
تتيح لك Scala استخدام الأسلوبين، لكنها تفضّل أسلوب التعبيرات.
var s = "" // statement style
if (true) s = "yes" else s = "no"
val e = if (true) "yes" else "no" // expression styleتحقق سريع
إلى ماذا تُقيَّم if/else في Scala؟
مراجعة
تفضّل Scala التعبيرات التي تنتج قيمًا على التعليمات التي لا تغيّر إلا الحالة.
- تعيد
ifوmatchوالكتل وfor/yieldقيمًا. - تعيد أجسام الأساليب قيمة آخر تعبير فيها؛ ونادرًا ما تكون
returnمطلوبة. - تعيد الشيفرة ذات الآثار الجانبية
Unit. - يقلل هذا الأسلوب استخدام
varوعدد الأخطاء.
تعلم 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 منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «التعبيرات بدلًا من العبارات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Scala for Backend Engineering & Functional Programming هذا؟
نعم. كل درس في Scala for Backend Engineering & Functional Programming يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- val مقابل var
- الأنواع الأساسية والقيم الحرفية
- استنتاج النوع
- التعبيرات بدلًا من العبارات