هل توجد عملية أخذ المعامل (وليس باقي القسمة) في Rust؟
مرحبًا بالجميع! لقد بدأت مؤخرًا في تعلم Rust، وانتقلت من Python، وواجهت مشكلة غير متوقعة. في Python، اعتدت أن العامل `%` يعيد دائمًا نتيجة غير سالبة، أي المعامل الرياضي للعدد. على سبيل المثال، `(-5) % 3` في Python يعطي `1`. هذا مريح جدًا للفهارس الدورية، والعمل مع الساعات، وأيام الأسبوع، وأي حساب حلقي.
لكن في Rust، العامل `%` كما اكتشفت، يعيد باقي القسمة (remainder) وليس المعامل. وبالنسبة للأعداد السالبة، يتصرف بشكل مختلف: `(-5) % 3` في Rust يعطي `-2`. هذا يكسر كل منطقي! أكتب دالة بسيطة لتحريك فهرس في مصفوفة:
```rust
fn shift_index(current: usize, delta: i32, len: usize) -> usize {
let new_index = (current as i32 + delta) % len as i32;
new_index as usize
}
```
عندما يكون `delta` سالبًا، يتعطل الكود بخطأ أو يعطي نتيجة خاطئة. أفهم أن هذه عمليات حسابية مختلفة، لكني أحتاج تحديدًا إلى المعامل الكلاسيكي (بحيث تكون النتيجة دائمًا في النطاق `[0