let وقابلية التغيير
الربط والتغيير
let وقابلية التغيير درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.
Binding Values with let
في لغة Rust، تقوم بإنشاء متغير باستخدام الكلمة المفتاحية let. هذا الإجراء يقوم بـ ربط اسم بقيمة معينة.
بشكل افتراضي، يكون كل ربط غير قابل للتغيير (immutable) — بمجرد إعطائه قيمة، لا يمكنك تغييرها.
fn main() {
let x = 5;
println!("The value of x is: {}", x);
}Immutable by Default
تجعل لغة Rust المتغيرات غير قابلة للتغيير بشكل متعمد. وهذا يمنع التغييرات غير المقصودة ويجعل فهم الكود أسهل.
تؤدي محاولة إعادة تعيين رابط غير قابل للتغيير إلى حدوث خطأ في الترجمة (compile error)، وليس انهيارًا أثناء التشغيل.
let x = 5;ثمx = 6;لن يتم تجميعها (compile).
fn main() {
let x = 5;
// x = 6; // this would cause a compile error
println!("x stays {}", x);
}Making Variables Mutable
عندما تحتاج إلى تغيير قيمة، أضف الكلمة المفتاحية mut. هذا يحدد الرابط على أنه قابل للتغيير.
الآن يمكنك إعادة تعيينها عدة مرات كما تشاء.
fn main() {
let mut count = 0;
count = count + 1;
count += 1;
println!("count is {}", count);
}Type Inference
عادةً ما تكتشف لغة Rust نوع المتغير من قيمته. يُطلق على هذا اسم استنتاج النوع (type inference).
تُعطي التعليمة let x = 5; المتغير x النوع i32 تلقائياً.
fn main() {
let n = 42; // inferred as i32
let pi = 3.14; // inferred as f64
println!("{} and {}", n, pi);
}Type Annotations
يمكنك أيضاً تحديد النوع بشكل صريح باستخدام نقطتين متبوعتين باسم النوع. يُعرف هذا بـ تنويه النوع.
تُعد التنويهات مفيدة عندما لا يستطيع المترجم استنتاج النوع، أو من أجل الوضوح.
fn main() {
let age: u32 = 30;
let price: f64 = 9.99;
println!("age {} price {}", age, price);
}Constants
ثابت const غير قابل للتغيير دائمًا ويجب أن يحتوي على تعليق توضيحي للنوع. يجب أن تكون قيمته معروفة في وقت الترجمة.
حسب الاصطلاح، تستخدم الثوابت تنسيق SCREAMING_SNAKE_CASE.
fn main() {
const MAX_POINTS: u32 = 100_000;
println!("Max is {}", MAX_POINTS);
}const vs let
الاختلافات الرئيسية بين const و let:
- لا يمكن لـ
constأن تكونmutأبداً. - تتطلب
constتحديد نوع البيانات (type annotation). - يجب أن تكون
constتعبيراً ثابتاً وقت الترجمة (compile-time constant). - يمكن حساب قيم
letأثناء وقت التشغيل (runtime).
fn main() {
const SECONDS_PER_HOUR: u32 = 60 * 60;
let hours = 3;
println!("{} seconds", SECONDS_PER_HOUR * hours);
}Mutating in a Loop
المتغيرات القابلة للتعديل شائعة في الحلقات التكرارية حيث تتراكم القيمة بمرور الوقت.
هنا نقوم بجمع الأرقام باستخدام مجمع من النوع mut.
fn main() {
let mut total = 0;
for i in 1..=5 {
total += i;
}
println!("Sum is {}", total);
}Underscore for Unused
إذا قمت بربط قيمة ولكنك لم تستخدمها أبداً، فسيقوم Rust بتحذيرك. ضع علامة شرطة سفلية قبل الاسم لإسكات هذا التحذير.
- يخبر
let _unused = 10;المترجم أن هذا الأمر مقصود.
fn main() {
let _temp = 99;
let used = 1;
println!("{}", used);
}Multiple Bindings
يمكنك الإعلان عن عدة متغيرات في أسطر منفصلة، بحيث يكون لكل منها let خاص بها.
كل رابط مستقل وغير قابل للتغيير ما لم يتم تمييزه بـ mut.
fn main() {
let name = "Rust";
let year = 2010;
let mut version = 1;
version += 1;
println!("{} born {} v{}", name, year, version);
}Why Immutability Helps
تعد خاصية عدم القابلية للتغيير (Immutability) ميزة أمان. فعندما يعرف المترجم أن القيمة لا يمكن أن تتغير، فإنه يستطيع تقديم ضمانات أقوى ومنع فئات كاملة من الأخطاء البرمجية.
لا تستخدم التغيير (mutation) عبر الكلمة المفتاحية mut إلا عند الحاجة الفعلية لذلك.
fn main() {
let config = "production";
// config is guaranteed not to change
println!("Running in {}", config);
}Quick Check
ما هي الكلمة المفتاحية التي تجعل متغير Rust قابلاً للتغيير؟
Recap
لقد تعلمت أساسيات الربط (bindings) في لغة Rust:
- يقوم
letبربط اسم بقيمة، وهو غير قابل للتغيير افتراضيًا. - يجعل
mutالربط قابلاً للتغيير. - تستنتج Rust الأنواع تلقائيًا، ولكن يمكنك إضافة توضيحات للأنواع باستخدام
:. - يُستخدم
constللقيم التي يتم تحديدها في وقت الترجمة، وهو غير قابل للتغيير دائمًا، ويتطلب تحديد النوع.
fn main() {
let mut score: u32 = 0;
const BONUS: u32 = 10;
score += BONUS;
println!("Final score: {}", score);
}الأسئلة الشائعة
هل درس «let وقابلية التغيير» مجاني؟
نعم — نص درس «let وقابلية التغيير» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.
ماذا ستتعلم في «let وقابلية التغيير»؟
الربط والتغيير تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟
لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «let وقابلية التغيير»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟
نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- let وقابلية التغيير
- الأنواع العددية
- الأنواع المركبة
- حجب الأسماء