المتغيرات وقابلية التغيير والتظليل
افهموا كيفية التصريح عن المتغيرات وإدارة قابليتها للتغيير واستخدام التظليل لإعادة تعريف المتغيرات بمرونة.
المتغيرات وقابلية التغيير والتظليل درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 1 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 3 دروس في المجموع.
مقدمة إلى متغيرات Rust
مرحبًا! في Rust، تُعدّ المتغيرات أساسية لتخزين البيانات. فهي تشبه صناديق تحمل تسميات، تحفظ فيها المعلومات التي يحتاج إليها برنامجك.
تركّز Rust بدرجة كبيرة على الأمان، ويبدأ ذلك من طريقة تعاملها مع المتغيرات. ستتعلّم كيفية التصريح عنها، والتحكم في قابليتها للتغيير، وحتى «إعادة تعريفها» بطرق ذكية.
التصريح عن المتغيرات باستخدام `let`
لإنشاء متغير في Rust، نستخدم الكلمة المفتاحية let. يؤدي ذلك إلى إسناد اسم إلى قيمة. غالبًا ما تستنتج Rust النوع تلقائيًا، لذلك لا تحتاج دائمًا إلى تحديده.
جرّب تشغيل هذا المثال البسيط:
fn main() {
let apples = 5;
println!("I have {} apples.", apples);
}عدم قابلية التغيير الافتراضية في Rust
من المفاهيم الأساسية في Rust أن المتغيرات غير قابلة للتغيير افتراضيًا. بعد إسناد قيمة إلى متغير، لا يمكنك تغييرها لاحقًا.
قد يبدو هذا الأمر مقيّدًا، لكنه يساعد على منع الأخطاء ويجعل التعليمات البرمجية أكثر أمانًا وأسهل في الفهم، خاصةً في البرمجة المتزامنة.
جعل المتغيرات قابلة للتغيير باستخدام `mut`
إذا احتجت إلى تغيير قيمة متغير، يمكنك جعل المتغير قابلًا للتغيير صراحةً باستخدام الكلمة المفتاحية mut قبل اسم المتغير.
يُخبر ذلك Rust (والمطورين الآخرين) بأن قيمة هذا المتغير يُفترض أن تتغير.
fn main() {
let mut score = 100;
println!("Initial score: {}", score);
score = 150; // We can change it now!
println!("New score: {}", score);
}متى تستخدم `mut`
رغم أن mut أداة قوية، فمن الممارسات الجيدة استخدامها عند الحاجة فقط. اجعل عدم قابلية التغيير هو الخيار الافتراضي.
- استخدم
mutللعدادات، ومتغيرات الحالة، والقيم التي تحتاج فعلًا إلى تحديثها. - إذا لم تتغير قيمة بعد إسنادها الأولي، فأبقها غير قابلة للتغيير (من دون
mut). - الوضوح: إن وضع علامة
mutعلى المتغير صراحةً يجعل الغرض من التعليمات البرمجية أوضح.
تعريف الثوابت باستخدام `const`
الثوابت أنواع خاصة من المتغيرات غير القابلة للتغيير. يُصرَّح عنها باستخدام الكلمة المفتاحية const بدلًا من let، ويجب دائمًا إضافة تعليمة النوع إليها صراحةً.
لا يمكن إسناد الثوابت إلا إلى تعبيرات ثابتة، وليس إلى ناتج استدعاء دالة أو أي قيمة لا يمكن حسابها إلا أثناء التشغيل.
fn main() {
const MAX_USERS: u32 = 10_000; // Type annotation is required!
println!("Max users allowed: {}", MAX_USERS);
}متغيرات `let` مقابل ثوابت `const`
فيما يلي الفروقات الأساسية بين متغيرات let وثوابت const:
- قابلية التغيير: متغيرات
letغير قابلة للتغيير افتراضيًا، لكن يمكن جعلها قابلة للتغيير باستخدامmut. أما ثوابتconstفهي دائمًا غير قابلة للتغيير. - التصريح: تستخدم
letالكلمةlet. وتستخدمconstالكلمةconst. - تعليمة النوع: غالبًا ما يمكن استنتاج نوع متغيرات
let. أما ثوابتconstفيجب تحديد نوعها. - النطاق: يمكن التصريح عن ثوابت
constفي أي نطاق، بما في ذلك النطاق العام.
مقدمة إلى Shadowing
تتيح لك Rust التصريح عن متغير جديد يحمل الاسم نفسه لمتغير سابق. ويُسمى ذلك Shadowing.
يعمل المتغير الجديد على «حجب» القديم، ما يعني أن أي تعليمات برمجية لاحقة سترى قيمة المتغير الجديد. يظل المتغير القديم موجودًا في الذاكرة، لكن لا يمكن الوصول إليه مباشرةً بعد الآن.
fn main() {
let x = 5;
println!("First x: {}", x); // Outputs 5
let x = x + 1; // 'x' is shadowed by a new 'x'
println!("Second x: {}", x); // Outputs 6
{ // Inner scope
let x = x * 2; // 'x' is shadowed again
println!("Inner x: {}", x); // Outputs 12
}
println!("Outer x: {}", x); // Outputs 6 (inner x is out of scope)
}استخدام Shadowing لتحويل النوع
من الاستخدامات القوية لـ Shadowing تحويل قيمة متغير، بل ونوعه أيضًا، مع الاحتفاظ بالاسم نفسه. وهذا شائع عند الحاجة إلى تحليل سلسلة نصية وتحويلها إلى رقم.
بدلًا من إنشاء اسم متغير جديد (مثل string_val ثم num_val)، يمكنك إعادة استخدام الاسم نفسه.
fn main() {
let spaces = " ";
println!("Spaces string: '{}'", spaces);
// Shadow 'spaces' with a new variable that holds its length
let spaces = spaces.len();
println!("Spaces count: {}", spaces);
}اختبار سريع: المتغيرات وقابلية التغيير
تأمل تعليمات Rust البرمجية التالية. ما القيمة النهائية لـ y التي ستُطبع في وحدة التحكم؟
مراجعة المتغيرات وقابلية التغيير وShadowing
أحسنت! لقد تعلّمت أساسيات المتغيرات في Rust:
- استخدم
letللتصريح عن المتغيرات، وهي غير قابلة للتغيير افتراضيًا. - أضف
mutلجعل المتغير قابلًا للتغيير، مما يسمح بتغيير قيمته. - استخدم
constللثوابت، وهي دائمًا غير قابلة للتغيير وتتطلب تعيين النوع. - يتيح لك Shadowing التصريح عن متغير جديد بالاسم نفسه، ليحل محل المتغير السابق. وهذا مفيد لتحويل الأنواع.
بعد ذلك، سنتعمق في أنواع البيانات البدائية المختلفة في Rust!
الأسئلة الشائعة
هل درس «المتغيرات وقابلية التغيير والتظليل» مجاني؟
نعم — نص درس «المتغيرات وقابلية التغيير والتظليل» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 3 دروس في المجموع.
ماذا ستتعلم في «المتغيرات وقابلية التغيير والتظليل»؟
افهموا كيفية التصريح عن المتغيرات وإدارة قابليتها للتغيير واستخدام التظليل لإعادة تعريف المتغيرات بمرونة. تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟
لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 3.
كم من الوقت يستغرق درس «المتغيرات وقابلية التغيير والتظليل»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟
نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- المتغيرات وقابلية التغيير والتظليل
- أنواع البيانات البدائية والعوامل
- الدوال وتدفق التحكم