الدوال المرتبطة
جزء من قسم البرمجة كائنية التوجه في رحلة Rust على Coddy. الدرس 4 من 61.
ليست كل function في كتلة impl بحاجة إلى العمل على مثيل موجود. تُسمّى function التي لا تأخذ self كمعامل associated function: فهي مرتبطة بالنوع نفسه بدلاً من أي مثيل معيّن.
الاستخدام الأكثر شيوعًا لـ associated function هو create المنشئات. ووفقًا للعرف، غالبًا ما تُسمّى هذه الدوال new:
struct Player {
name: String,
score: u32,
}
impl Player {
fn new(name: String) -> Player {
Player {
name,
score: 0,
}
}
}
لاحظ أنه لا توجد معلمة self. لا تحتاج هذه الـ function إلى Player موجود مسبقًا لكي تعمل. بل إنها تنشئ واحدًا جديدًا تمامًا وتعيده. نوع الإرجاع هو الـ struct نفسه.
لاستدعاء associated function، استخدم الصيغة :: مع اسم النوع بدلًا من صيغة النقطة:
fn main() {
let player1 = Player::new(String::from("Alice"));
println!("{} starts with {} points", player1.name, player1.score);
// المخرجات: Alice تبدأ بـ 0 نقاط
}
يوفّر هذا النمط طريقة واضحة لتهيئة الهياكل بقيم افتراضية أو بمنطق للتحقق، مع إبقاء منطق الإنشاء مجمّعًا مع تعريف النوع. من المحتمل أنك رأيت هذه الصياغة من قبل مع String::from(): هذه أيضًا دالة associated!
التحدي
سهلCreate بنية Book مع حقلين: title (String) وpages (u32).
Add كتلة impl لـ Book مع associated function تُسمى new والتي:
- تأخذ معاملًا
title: String - تُرجع
Bookجديدًا مع العنوان المحدد وpagesمضبوطة على0
أضف أيضًا method تُسمى info تأخذ &self وتُرجع String بالتنسيق: "{title} has {pages} pages"
ستتلقى input واحدًا:
- عنوان الكتاب (String)
استخدم associated function Book::new لإنشاء كتاب بالعنوان provided، ثم اطبع result استدعاء method info.
تنسيق Output المتوقع:
{title} has {pages} pagesجرّب بنفسك
use std::io;
// TODO: عرّف الـ struct Book مع الحقول title (String) و pages (u32)
// TODO: أضف كتلة impl لـ Book مع:
// - دالة مرتبطة `new` تأخذ title وتُرجع Book مع تعيين pages إلى 0
// - method `info` تُرجع String بالصيغة "{title} has {pages} pages"
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let title = input.trim().to_string();
// TODO: استخدم Book::new لإنشاء كتاب بالعنوان المُقدَّم
// TODO: اطبع نتيجة استدعاء الـ method info
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
1الأساليب والسلوك
مقدمة في كتل التنفيذمعامل Selfالأساليب القابلة للتعديلالدوال المرتبطةكتل تنفيذ متعددةتسلسل الأساليبمراجعة - إجراءات المستطيل4مشروع: حيوان أليف افتراضي
تعريف الحيوان الأليفإطعام الحيوان الأليف2التغليف والوحدات البرمجية
أساسيات الوحدات البرمجيةالكلمة المفتاحية Publicالحقول الخاصةدوال Gettersدوال Settersمراجعة - الخزانة الآمنة5الأنواع العامة (Generics)
الـ Structs العامةالـ Methods العامةأنواع عامة متعددةالـ Functions العامةمراجعة - Coordinate Point3التعدادات المتقدمة (Advanced Enums)
التعدادات مع البياناتالأساليب (Methods) في التعداداتمطابقة حالات البياناتمراجعة التعداد Optionملخص - التعداد Shape6تعريف الـ Traits
ما هي الـ Trait؟تنفيذ الـ Traitsالتنفيذات الافتراضيةتجاوز التنفيذات الافتراضيةالـ Traits مع المعاملاتملخص - مشغل الوسائطتدرّب بنفسك: مترجم Rust عبر الإنترنت