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