الدوال وتدفق التحكم
تعلّموا تعريف الدوال واستخدام تعبيرات `if`/`else` و`loop` و`while` و`for` للتحكم في تدفق تنفيذ البرنامج.
الدوال وتدفق التحكم درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 3 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 3 دروس في المجموع.
ما الدوال؟
الدوال كتل برمجية تحمل أسماء وتنفذ مهمة محددة. وهي أساسية لتنظيم التعليمات البرمجية وجعلها قابلة لإعادة الاستخدام.
- إعادة استخدام التعليمات البرمجية: اكتب جزءًا من المنطق مرة واحدة واستخدمه عدة مرات.
- النمطية: قسّم المشكلات المعقدة إلى أجزاء أصغر يسهل التعامل معها.
- سهولة القراءة: امنح كتل التعليمات البرمجية أسماءً معبرة لتحسين الفهم.
دالتك الأولى في Rust
في Rust، تعرّف دالة باستخدام الكلمة المفتاحية fn. وتُعد الدالة main نقطة الدخول لكل برنامج Rust.
إليك كيفية التصريح عن دالة بسيطة واستدعائها:
fn say_hello() {
println!("Hello from a function!");
}
fn main() {
say_hello(); // Call the function
println!("Back in main.");
}الدوال ذات المعاملات
يمكن للدوال استقبال قيم إدخال تُسمى المعاملات. وتتيح هذه المعاملات للدالة معالجة بيانات مختلفة في كل مرة تُستدعى فيها.
تُعرَّف المعاملات باستخدام اسم ونوع يفصل بينهما نقطتان.
fn greet(name: &str) {
println!("Hello, {}!", name);
}
fn main() {
greet("Alice");
greet("Bob");
}الدوال ذات القيم المرجعة
يمكن للدوال أيضًا إرجاع قيمة إلى المستدعي. وتحدد نوع القيمة المرجعة بعد سهم (->).
يُرجع التعبير الأخير في جسم الدالة ضمنيًا. ولا تحتاج القيمة المرجعة إلى فاصلة منقوطة!
fn add_numbers(x: i32, y: i32) -> i32 {
x + y // No semicolon: this expression is returned
}
fn main() {
let sum = add_numbers(5, 7);
println!("The sum is: {}", sum);
}اتخاذ القرارات: `if`/`else`
يسمح تعبير if لبرنامجك بتنفيذ كتل تعليمات برمجية مختلفة استنادًا إلى شرط. ويجب أن تكون الشروط دائمًا من النوع bool (true/false).
- استخدم
ifللشرط الأول. - استخدم
else ifللشروط الإضافية. - استخدم
elseكخيار بديل عند عدم تحقق أي شرط آخر.
يُعد if في Rust تعبيرًا، ما يعني أنه يمكنه إرجاع قيمة!
تطبيق تعبيرات If-Else
إليك كيفية استخدام if وelse لإسناد قيمة استنادًا إلى شرط. لاحظ أنه يتصرف مثل العامل الثلاثي في اللغات الأخرى.
fn main() {
let number = 7;
let message = if number < 10 {
"Small number"
} else {
"Large number"
};
println!("The number is: {}", message);
let other_num = 15;
if other_num % 2 == 0 {
println!("{} is even", other_num);
} else {
println!("{} is odd", other_num);
}
}تكرار التعليمات البرمجية: `loop`
تنشئ الكلمة المفتاحية loop حلقة لا نهائية. ويكون ذلك مفيدًا عند الحاجة إلى تكرار إجراء حتى تقرر إيقافه صراحةً.
استخدم break للخروج من الحلقة. ويمكنك أيضًا إرجاع قيمة من تعبير loop باستخدام break.
fn main() {
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2; // Break and return a value
}
};
println!("The result is {}", result);
}التكرار المشروط: `while`
تنفذ حلقة while كتلة من التعليمات البرمجية ما دام شرط محدد يظل صحيحًا. وهي مناسبة تمامًا عندما لا تعرف عدد مرات التكرار المطلوبة بالضبط.
fn main() {
let mut count = 3;
while count != 0 {
println!("{}!", count);
count -= 1;
}
println!("LIFTOFF!!!");
}التكرار باستخدام حلقات `for`
تُستخدم حلقة for للتكرار على مجموعة من العناصر أو نطاق من الأرقام. وهي بنية التكرار الأكثر شيوعًا في Rust، وتجعل التعليمات البرمجية آمنة وموجزة.
- تُستخدم غالبًا مع النطاقات (مثل
1..4للقيم 1 و2 و3، أو1..=4للقيم 1 و2 و3 و4). - تعمل مع أي نوع يطبّق السمة
Iterator.
fn main() {
// Loop through a range
for number in 1..4 { // 1, 2, 3
println!("Number: {}", number);
}
// Loop through an array
let a = [10, 20, 30, 40, 50];
for element in a.iter() {
println!("The value is: {}", element);
}
}تحدي تدفق التحكم
تأمل تعليمات Rust البرمجية التالية. ما القيمة النهائية لـ result؟
fn calculate_value(input: i32) -> i32 {
if input > 10 {
input * 2
} else if input == 5 {
input + 5
} else {
input
}
}
fn main() {
let result = calculate_value(5);
// What is result?
}مراجعة الدوال وتدفق التحكم
لقد أتقنت اللبنات الأساسية للبرامج الديناميكية!
- الدوال: نظّم التعليمات البرمجية وأعد استخدامها باستخدام
fnوالمعاملات والقيم المرجعة. if/else: اتخذ القرارات ونفّذ التعليمات البرمجية بشكل مشروط. تذكّر أنه تعبير!loop: أنشئ حلقات لا نهائية، واخرج باستخدامbreak، وأرجع القيم.while: كرّر التنفيذ ما دام الشرط صحيحًا.for: كرّر بأمان على المجموعات والنطاقات.
تُعد هذه الأدوات أساسية لكتابة برامج Rust منظمة وفعالة!
الأسئلة الشائعة
هل درس «الدوال وتدفق التحكم» مجاني؟
نعم — نص درس «الدوال وتدفق التحكم» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 3 دروس في المجموع.
ماذا ستتعلم في «الدوال وتدفق التحكم»؟
تعلّموا تعريف الدوال واستخدام تعبيرات `if`/`else` و`loop` و`while` و`for` للتحكم في تدفق تنفيذ البرنامج. تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟
لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 3.
كم من الوقت يستغرق درس «الدوال وتدفق التحكم»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟
نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- المتغيرات وقابلية التغيير والتظليل
- أنواع البيانات البدائية والعوامل
- الدوال وتدفق التحكم