ما الفرق بين المتغيرات غير القابلة للتغيير والثوابت في Rust؟
الاختلافات الرئيسية بين const والمتغيرات غير القابلة للتغيير let
مرحباً! بدأت تعلم لغة Rust وأصبحت مرتبكاً بشأن مفهوم أساسي. تقول الوثائق إن المتغيرات تكون غير قابلة للتغيير (immutable) بشكل افتراضي، ولتغييرها يجب استخدام mut. ولكن يوجد أيضاً كلمة مفتاحية const. ما الفرق بينهما؟
حاولت كتابة هذا الكود:
const MAX_POINTS: u32 = 100_000;
let x = 5;
x = 6; // خطأ!
ويبدو أن كلاً من MAX_POINTS و x لا يمكن تغييرهما بعد التهيئة. لكن المترجم يشتكي من x = 6، بينما لا يشتكي من الثابت. لماذا؟ وإذا كان بإمكاني تعريف متغير غير قابل للتغيير باستخدام let، فما فائدة الثوابت أصلاً؟ في أي الحالات أستخدم const، وفي أي الحالات أستخدم let؟
لاحظت أيضاً أن الثوابت يجب دائماً توضيح نوعها (type annotation)، بينما المتغيرات ليس دائماً. هل هذا مرتبط بطبيعتها؟ سأكون ممتناً لشرح مفصل مع أمثلة، لأفهم هذا الموضوع مرة واحدة وإلى الأبد.