معامل Self
جزء من قسم البرمجة كائنية التوجه في رحلة Rust على Coddy. الدرس 2 من 61.
عندما تحتاج إحدى الطرق إلى الوصول إلى البيانات المخزنة في instance من نوع struct، فإنها تستخدم المعامل &self. هذا المعامل الخاص يكون دائمًا الوسيط الأول في الطريقة، ويمثل مرجعًا إلى instance التي يتم استدعاء الطريقة عليها.
يعني الرمز & أننا نستعير instance بدلاً من امتلاكها. وهذا يسمح للطريقة بقراءة حقول struct دون استهلاك instance:
struct Rectangle {
width: u32,
height: u32,
}
impl Rectangle {
fn area(&self) -> u32 {
self.width * self.height
}
fn is_square(&self) -> bool {
self.width == self.height
}
}
داخل جسم الطريقة، تتيح لك self الوصول إلى جميع حقول البنية باستخدام تدوين النقطة. تقرأ طريقة area كلًّا من width وheight لحساب النتيجة وإرجاعها.
بما أن &self يستعير instance فقط، يمكنك استدعاء عدة methods على الـ struct نفسه دون أي مشاكل:
fn main() {
let rect = Rectangle { width: 10, height: 5 };
println!("Area: {}", rect.area()); // 50
println!("Square? {}", rect.is_square()); // false
}
الطرق التي تستخدم &self للقراءة فقط. يمكنها فحص بيانات struct، لكنها لا تستطيع تغييرها. في الدرس التالي، ستتعلّم كيفية إنشاء طرق يمكنها تعديل instance.
التحدي
سهلأنشئ بنية Circle تحتوي على حقل واحد: radius (f64).
أضف كتلة تنفيذ لـ Circle تحتوي على طريقتين تستخدمان &self:
circumference: تُرجع المحيط على هيئةf64(الصيغة:2.0 * 3.14159 * radius)diameter: تُرجع القطر على هيئةf64(الصيغة:2.0 * radius)
ستتلقى مُدخلاً واحدًا:
- نصف قطر الدائرة (
f64)
أنشئ نسخة Circle باستخدام نصف القطر المُعطى، ثم اطبع المحيط والقطر في سطرين منفصلين.
تنسيق الناتج المتوقع:
{circumference}
{diameter}جرّب بنفسك
use std::io;
// TODO: عرّف الـ struct الخاص بـ Circle هنا
// TODO: أضف كتلة التنفيذ لـ Circle مع دوال circumference و diameter
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let radius: f64 = input.trim().parse().expect("Invalid number");
// TODO: أنشئ نسخة من Circle واطبع الـ circumference والـ diameter
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
1الأساليب والسلوك
مقدمة في كتل التنفيذمعامل Selfالأساليب القابلة للتعديلالدوال المرتبطةكتل تنفيذ متعددةتسلسل الأساليبمراجعة - إجراءات المستطيل4مشروع: حيوان أليف افتراضي
تعريف الحيوان الأليفإطعام الحيوان الأليف2التغليف والوحدات البرمجية
أساسيات الوحدات البرمجيةالكلمة المفتاحية Publicالحقول الخاصةدوال Gettersدوال Settersمراجعة - الخزانة الآمنة5الأنواع العامة (Generics)
الـ Structs العامةالـ Methods العامةأنواع عامة متعددةالـ Functions العامةمراجعة - Coordinate Point3التعدادات المتقدمة (Advanced Enums)
التعدادات مع البياناتالأساليب (Methods) في التعداداتمطابقة حالات البياناتمراجعة التعداد Optionملخص - التعداد Shape6تعريف الـ Traits
ما هي الـ Trait؟تنفيذ الـ Traitsالتنفيذات الافتراضيةتجاوز التنفيذات الافتراضيةالـ Traits مع المعاملاتملخص - مشغل الوسائطتدرّب بنفسك: مترجم Rust عبر الإنترنت