الحساب
fn interproduct(a: i32, b: i32, c: i32) -> i32 { return a * b + b * c + c * a; } fn main() { println!("النتيجة: {}", interproduct(120, 100, 248)); }
هذه هي المرة الأولى التي نرى فيها دالة غير main
، ولكن يجب أن يكون المعنى واضحًا: إنها تأخذ ثلاثة أعداد صحيحة (integers)، وتعيد عددًا صحيحًا (integer). سيتم تغطية الدوال (functions) بمزيد من التفصيل لاحقًا.
الحساب مشابه جدًا للغات الأخرى، مع أسبقية مشابهة.
ماذا عن تجاوز السعة للأعداد الصحيحة (integer overflow)؟ في C و C++، تجاوز السعة للأعداد الصحيحة الموقعة (signed) غير معرف فعليًا، وقد يقوم بأشياء غير معروفة أثناء التشغيل. في Rust، هو معرف.
قم بتغيير i32
إلى i16
لرؤية تجاوز السعة للأعداد الصحيحة، والذي يسبب (panic) (panic) في بناء التصحيح (debug build) ويلتف في بناء الإصدار (release build). هناك خيارات أخرى، مثل التجاوز (overflowing)، التشبع (saturating)، والحمل (carrying). يتم الوصول إليها باستخدام صيغة الدالة (method syntax)، مثل (a * b).saturating_add(b * c).saturating_add(c * a)
.
في الواقع، سيكتشف المترجم (compiler) تجاوز السعة (overflow) للتعابير الثابتة (constant expressions)، وهذا هو السبب في أن المثال يتطلب دالة منفصلة.