Scala for Backend Engineering & Functional Programming · درس

val مقابل var

الربوط غير القابلة للتغيير والقابلة للتغيير

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

val مقابل var درس مجاني في 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، تربط اسمًا بقيمة باستخدام val أو var.

ينشئ val ارتباطًا غير قابل للتغيير: فبعد إسناده، لا يمكنه الإشارة إلى قيمة أخرى. أما var فينشئ ارتباطًا قابلًا للتغيير يمكنك إعادة إسناده لاحقًا.

يُعد اختيار أحدهما من أولى العادات التي يكتسبها مهندس الواجهة الخلفية الذي يعمل بـ Scala.

val name = "Ada"
var score = 10

تعريف val

إن val للقراءة فقط. تسند إليه قيمة مرة واحدة، ويضمن المترجم بقاءه كما هو.

وهذا يجعل فهم الشيفرة أسهل: فلا يفاجئك val أبدًا بتغيّر قيمته في موضع آخر.

object Main extends App {
  val pi = 3.14
  println(pi)
}

تفشل إعادة إسناد val

تؤدي محاولة إعادة إسناد val إلى خطأ في الترجمة، وليس إلى تعطل وقت التشغيل. يوقفك المترجم قبل أن يبدأ البرنامج بالعمل.

سيفشل المقطع أدناه برسالة reassignment to val.

val country = "Turkey"
country = "Spain" // error: reassignment to val

تعريف var

يمكن إعادة إسناد var أي عدد من المرات، ما دام للقيمة الجديدة نوع متوافق.

استخدم var عندما تحتاج القيمة فعلًا إلى التغير بمرور الوقت، مثل عدّاد داخل حلقة.

object Main extends App {
  var count = 0
  count = count + 1
  count = count + 1
  println(count)
}

يحافظ var على نوعه

على الرغم من إمكانية إعادة إسناد var، فإن نوعه ثابت منذ تعريفه.

إذا بدأ level بنوع Int، فلا يمكنك تخزين String فيه لاحقًا. سيرفض المترجم عدم التطابق.

var level = 1
level = 5        // ok, still an Int
level = "high"  // error: type mismatch

فضّل val افتراضيًا

تفضّل Scala الاصطلاحية استخدام val في معظم المواضع. وتتفادى قابلية عدم التغيير فئات كاملة من الأخطاء، وتجعل الشيفرة المتزامنة أكثر أمانًا.

  • ابدأ باستخدام val.
  • انتقل إلى var فقط عندما تحتاج فعلًا إلى التغيير.

إعادة كتابة var على هيئة val

يمكن التعبير عن كثير من الحلقات التي تبدو محتاجة إلى var باستخدام val وتعبير بدلًا منه.

يُحسب هنا مجموع باستخدام نطاق وsum، من دون الحاجة إلى تغيير قيمة.

object Main extends App {
  val total = (1 to 5).sum
  println(total)
}

نطاق الارتباط

يعيش كل من val وvar داخل الكتلة { ... } التي عُرّفا فيها.

لا يكون الارتباط المعلن داخل كتلة مرئيًا خارجها. وهذا يحافظ على ترتيب الأسماء ويمنع إعادة استخدامها عرضًا.

object Main extends App {
  val outer = 1
  {
    val inner = 2
    println(outer + inner)
  }
  // inner is not visible here
}

lazy val

يُحسب lazy val عند استخدامه للمرة الأولى فقط، ثم تُخزّن قيمته مؤقتًا.

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

object Main extends App {
  lazy val greeting = { println("computing"); "Hi" }
  println("before")
  println(greeting)
  println(greeting)
}

val مع نوع صريح

يمكنك تحديد نوع الارتباط بعد نقطتين. يوثّق ذلك القصد، وقد يوسّع النوع عمدًا.

يُعلن هنا عن amount على أنه Double رغم أن 10 يبدو من نوع Int.

val amount: Double = 10
val label: String = "price"

مقارنة val وvar جنبًا إلى جنب

يتصرفان بالطريقة نفسها إلى أن تحاول إعادة الإسناد.

  • val x: إسناد مرة واحدة وثبات دائم.
  • var y: إسناد وإعادة إسناد بحرية.

يزيد البرنامج أدناه قيمة var فقط.

object Main extends App {
  val base = 100
  var bonus = 0
  bonus = bonus + 25
  println(base + bonus)
}

اختبار سريع

اختبر مدى فهمك لـ val وvar.

مراجعة

تعلّمت الطريقتين لربط الأسماء بالقيم في Scala.

  • ‏val غير قابل للتغيير وهو الخيار الافتراضي.
  • ‏var قابل للتغيير ويُحجز للقيم التي يجب أن تتغير.
  • إعادة إسناد val خطأ في الترجمة.
  • الأنواع ثابتة لكليهما، بينما يؤجل lazy val الحساب.
البدء مجانًا

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

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

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

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

هل درس «val مقابل var» مجاني؟

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

ماذا ستتعلم في «val مقابل var»؟

الربوط غير القابلة للتغيير والقابلة للتغيير تتمرن على Scala for Backend Engineering & Functional Programming مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Scala for Backend Engineering & Functional Programming؟

لا تُشترط خبرة سابقة. Scala for Backend Engineering & Functional Programming على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

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

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

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

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

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

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