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

التعبيرات بدلًا من العبارات

كل شيء تعبير

التعبيرات بدلًا من العبارات درس مجاني في Scala for Backend Engineering & Functional Programming على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Scala for Backend Engineering & Functional Programming، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Scala for Backend Engineering & Functional Programming 4 دروس في المجموع.

التعبيرات مقابل العبارات

تنفّذ العبارة شيئًا ما، لكنها لا تعيد شيئًا مفيدًا. أما التعبير فيُقيّم إلى قيمة.

في Scala، كل شيء تقريبًا تعبير. وهذه فكرة أساسية تؤثر في طريقة كتابة الشيفرة.

‏if تعبير

في كثير من اللغات، تكون if عبارة. أما في Scala، فإن if/else تعيد قيمة، لذا يمكنكم إسنادها مباشرةً إلى val.

لا حاجة إلى متغير منفصل يُسنَد في كل فرع.

object Main {
  def main(args: Array[String]): Unit = {
    val temp = 30
    val label = if (temp > 25) "hot" else "mild"
    println(label)
  }
}

الكتل تعبيرات

الكتلة { ... } تعبير أيضًا. وقيمتها هي قيمة سطرها الأخير.

لذلك يمكنكم حساب قيم وسيطة ثم إنهاء الكتلة بالنتيجة.

object Main {
  def main(args: Array[String]): Unit = {
    val result = {
      val a = 2
      val b = 3
      a * b
    }
    println(result)
  }
}

‏match تعبير

تعيد مطابقة الأنماط باستخدام match قيمةً أيضًا. ينتج كل فرع نتيجة، ويعطي التعبير بأكمله قيمة الفرع المطابق.

object Main {
  def main(args: Array[String]): Unit = {
    val day = 3
    val name = day match {
      case 1 => "Mon"
      case 2 => "Tue"
      case 3 => "Wed"
      case _ => "Other"
    }
    println(name)
  }
}

نوع Unit

توجد بعض التعبيرات فقط لتنفيذ أثر جانبي، مثل println. وهي تعيد Unit، الذي يُكتب ().

يشبه Unit النوع void في اللغات الأخرى، لكنه يظل قيمة حقيقية.

object Main {
  def main(args: Array[String]): Unit = {
    val nothing: Unit = println("side effect")
    println(nothing)
  }
}

إعادة القيم من الدوال

بما أن جسم الدالة تعبير، فإن التعبير الأخير فيه هو قيمة الإرجاع. ونادرًا ما تحتاجون إلى الكلمة المفتاحية return.

جسم الدالة هنا عبارة عن تعبير واحد.

object Main {
  def max(a: Int, b: Int): Int = if (a > b) a else b
  def main(args: Array[String]): Unit = {
    println(max(7, 4))
  }
}

الدوال المتمحورة حول التعبيرات

يمكن أن تكون الدالة تعبير كتلة يكون سطره الأخير هو النتيجة. ويحافظ ذلك على اختصار المنطق ويتجنب القيم المؤقتة القابلة للتغيير.

object Main {
  def discount(price: Double): Double = {
    val rate = if (price > 100) 0.2 else 0.1
    price * (1 - rate)
  }
  def main(args: Array[String]): Unit = {
    println(discount(150.0))
  }
}

لا حاجة إلى التغيير

بما أن if وmatch تعبيران، يمكنكم إسناد نتيجتهما إلى val بدلًا من تغيير var.

ويؤدي ذلك إلى شيفرة أنظف وأكثر وظيفية.

object Main {
  def main(args: Array[String]): Unit = {
    val score = 85
    val grade = if (score >= 90) "A"
      else if (score >= 80) "B"
      else "C"
    println(grade)
  }
}

تركيب التعبيرات

بما أن كل شيء يعيد قيمة، يمكن تداخل التعبيرات وتركيبها بحرية. ويصبح ناتج أحدها مُدخلًا للآخر.

وتُعد قابلية التركيب هذه سببًا رئيسيًا في شعوركم بأن Scala لغة غنية بالتعبير.

object Main {
  def main(args: Array[String]): Unit = {
    val n = 7
    val message = "n is " + (if (n % 2 == 0) "even" else "odd")
    println(message)
  }
}

لماذا يهم ذلك؟

الشيفرة المتمحورة حول التعبيرات:

  • تقلل الحاجة إلى المتغيرات القابلة للتغيير
  • تجعل تدفق القيم واضحًا
  • تُركّب طبيعيًا ضمن برامج أكبر
  • تتوافق تمامًا مع عدم قابلية التغيير

كل العناصر معًا

تحتوي كتلة تعبير هنا على تعبير if، ويُسنَد كل ذلك إلى نتيجة واحدة غير قابلة للتغيير.

object Main {
  def main(args: Array[String]): Unit = {
    val total = {
      val items = 3
      val each = 12
      val raw = items * each
      if (raw > 30) raw - 5 else raw
    }
    println(total)
  }
}

تحقق سريع

تحققوا من مدى استيعابكم للتعبيرات.

مراجعة

تعلّمتم أن كل شيء تقريبًا في Scala هو تعبير:

  • تعيد if/else وmatch والكتل قيمًا
  • قيمة الكتلة هي تعبيرها الأخير
  • تعيد التعبيرات ذات الآثار الجانبية Unit (())
  • التعبير الأخير في الدالة هو قيمة إرجاعها
  • يقلل ذلك التغيير ويحسّن قابلية التركيب

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

هل درس «التعبيرات بدلًا من العبارات» مجاني؟

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

كم من الوقت يستغرق درس «التعبيرات بدلًا من العبارات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Scala for Backend Engineering & Functional Programming هذا؟

نعم. كل درس في Scala for Backend Engineering & Functional Programming يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

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

  1. استخدام REPL
  2. val وvar والأنواع
  3. التعبيرات بدلًا من العبارات
  4. إقحام السلاسل
← العودة إلى Scala for Backend Engineering & Functional Programming