في لغة البرمجة Rust، يُسمح بتحديد طول الصفيف (Array) بوضوح كما هو موضح في الكود الأول الذي قدمته:
rustlet a: [f32; 3] = [0.0, 1.0, 2.0];
ومن خلال هذا الكود، يتم تعريف صفيف من الأرقام العائمة بالحجم الثابت الذي يساوي 3 عناصر.
ومع ذلك، في الكود الثاني الذي قدمته:
rustlet a: [f32; _] = [0.0, 1.0, 2.0];
تلاحظ أن الطول المحدد بشكل واضح مستبدل بعلامة التسطير (_)، وهذا لا يتم دعمه في Rust. يعتبر طول الصفيف جزءًا أساسيًا من نوع البيانات، وبالتالي لا يمكن تركه غير محدد.
ومع ذلك، يمكن تحقيق الترابط بين الطول وحجم الصفيف بوسائل أخرى، على سبيل المثال، باستخدام الحلقات (Loops) لحساب عدد العناصر في الصفيف ومن ثم إنشاء صفيف بحجم محدد بناءً على العدد المحسوب، كما هو موضح في الكود التالي:
rustlet arr: [f32; 3] = [0.0, 1.0, 2.0]; // يمكن استخدام الحجم الثابت الذي تم تحديده بوضوح
let mut count = 0;
for _ in &arr {
count += 1;
}
let a: [f32; count] = [0.0, 1.0, 2.0]; // إنشاء صفيف جديد بحجم تم تحديده بناءً على العدد المحسوب
في هذا المثال، يتم حساب عدد العناصر في الصفيف “arr” باستخدام حلقة (Loop)، ومن ثم يتم إنشاء صفيف “a” بحجم محدد بناءً على العدد المحسوب.
بالنهاية، يعكس تحديد طول الصفيف بوضوح في Rust ميزة هامة من ميزات اللغة التي تعزز السلامة والوضوح في البرمجة، حيث يتيح للمطورين فهمًا أفضل لهيكل البيانات وتحديد الحجم المتوقع لها مسبقًا.
المزيد من المعلومات
في بعض الأحيان، قد يكون من المفيد تجنب الحاجة إلى تحديد الطول بوضوح وترك هذه المهمة للمترجم (Compiler)، خاصةً عندما يكون الطول واضحًا وسهل التنبؤ به. ولحسن الحظ، توفر Rust طرقًا بديلة لتحقيق ذلك دون الحاجة إلى التضحية بالوضوح أو الأمان.
إحدى الطرق لتجنب تحديد الطول بوضوح هي استخدام الـ”Slices”، والتي تسمح لك بتمثيل قسمٍ من الصفيف بدلاً من الصفيف بأكمله. هذا يعني أنه يمكنك إنشاء صفيف بحجم لا محدود واختيار قسم منه حسب الحاجة. هذا مثال على كيفية استخدام الـ”Slices” بدلاً من تحديد الطول بوضوح:
rustlet a: &[f32] = &[0.0, 1.0, 2.0];
في هذا المثال، لم يتم تحديد طول الصفيف بوضوح بل استخدمنا الـ”Slices”، والتي تشير إلى قسم من الصفيف. يمكن استخدام الـ”Slices” بمرونة في Rust وتعتبر وسيلة شائعة لتجنب تحديد الطول بوضوح في الحالات التي يكون طول الصفيف متغيرًا أو غير معروف.
بالإضافة إلى ذلك، يمكنك أيضًا استخدام الكولكشنز (Collections) في Rust مثل “Vec” بدلاً من الصفائف الثابتة. فالـ”Vec” تُمثل مجموعةً قابلة للتوسيع من العناصر، ويمكنك إضافة وإزالة العناصر منها بحرية دون الحاجة إلى تحديد الحجم بوضوح. إليك كيفية استخدام “Vec” بدلاً من الصفائف الثابتة:
rustlet a: Vec<f32> = vec![0.0, 1.0, 2.0];
في هذا المثال، تم إنشاء “Vec” من الأرقام العائمة بدلاً من الصفيف الثابت، مما يتيح لك إضافة وإزالة العناصر بحرية دون الحاجة إلى تحديد الطول بوضوح.
باختصار، في Rust، يمكنك تجنب تحديد الطول بوضوح عن طريق استخدام الـ”Slices” أو الكولكشنز (مثل “Vec”)، وهذا يعزز المرونة والوضوح في الكود ويساعد في تجنب الأخطاء الناتجة عن تحديد الطول بشكل غير صحيح.