תכונה מרכזית אחת שהופכת את Rust לחזקה ומושכת יותר היא התמיכה שלה במבנים. מבנים הם סוגי נתונים מורכבים לקיבוץ נתונים קשורים. הם מאפשרים לך להגדיר סוגי נתונים מותאמים אישית עם שדות בעלי שם המשפרים את ארגון הקוד ומקלים על מניפולציה של הנתונים.
אתה יכול להשתמש במבנים כדי לייצג אובייקטים שונים, כולל סוגי נתונים ותצורות המוגדרים על ידי המשתמש. מבנים גמישים יותר ממבני נתונים רבים אחרים. היכולת שלהם לקלוט נתונים קשורים הופכת אותם לשימושיים מכיוון שהם יוצרים מודל הגיוני יותר של אובייקטים בעולם האמיתי.
הגדרת מבנים ושדות מבנים
אתה תגדיר מבנה באמצעות ה- struct מילת מפתח ואחריה שם למבנה. בצע זאת על ידי ציון שמות השדות של המבנה ואת שמותיהם סוגי נתוני חלודה בתוך זוג פלטה מתולתלת.
structאדם {
שֵׁם: חוּט,
גיל: u8,
הוא_תלמיד: bool,
}
זֶה אדם ל-struct יש שלושה שדות. ה שֵׁם שדה הוא מחרוזת, ה גיל השדה הוא מספר שלם של 8 סיביות ללא סימן, וה- הוא_סטודנט שדה הוא בוליאני.
ניתן להשתמש במילולי struct כדי ליצור מופעי struct לאחר הגדרת ה-struct. מילולי מבנה מציינים את הערכים של שדות מבנה.
לתת אדם = אדם {
שֵׁם: חוּט::מ("ג'ון"),
גיל: 27,
הוא_תלמיד: נָכוֹן,
};
ה אדם משתנה הוא מופע של ה אדם struct, נוצר עם מבנה מילולי. מילולית זו מציגה את כל השדות של המבנה עם ערכים של סוג הנתונים המתאים להם.
שימוש בבנאים ליצירת מבנים
אתה יכול גם להשתמש בפונקציית קונסטרוקטור כדי ליצור מופע של מבנה.
impl אדם {
// הגדר פונקציית בנאי 'חדש' שלוקחת 'שם', 'גיל' ו
// פרמטרים `is_student`
fnחָדָשׁ(שֵׁם: חוּט, גיל: u8, is_student: bool) -> עצמי {
// צור מופע חדש של מבנה `Person` ואתחל את השדות שלו
// עם הערכים שסופקו
עצמי {
שֵׁם,
גיל,
הוא_סטודנט,
}
}
}
// קרא לפונקציית הבנאי 'החדשה' של המבנה 'אדם' והקצה את
// המופע המתקבל ל'אדם'
לתת אדם = אדם:: חדש(חוּט::מ("ג'ון"), 27, נָכוֹן);
התוכנית לעיל מגדירה בנאי עבור אדם לבנות עם ה impl מילת מפתח. ה חָדָשׁ הקונסטרוקטור לוקח את שדות ה-struct כארגומנטים ומחזיר מופע חדש של ה-struct עם הערכים המתחלפים.
אתה יכול ליצור א אדם דוגמה עם ה חָדָשׁ בנאי, מעביר לו טיעונים מתאימים.
גישה ושינוי של שדות מבנה
אתה יכול לגשת לשדות struct ולשנות אותם באמצעות סימון נקודה. אתה פשוט משתמש בנקודה (.) אופרטור ואחריו שם השדה כדי לגשת או לשנות את הערך שלו.
// להכריז על מבנה אדם
structאדם {
שֵׁם: חוּט,
גיל: u8,
הוא_תלמיד: bool,
}fnרָאשִׁי() {
// הצג מבנה
לתתמוט אדם = אדם {
שֵׁם: חוּט::מ("ג'ון"),
גיל: 27,
הוא_תלמיד: נָכוֹן,
};// הדפס את שדות השם והגיל של המבנה
println!("שם: {}", person.name);
println!("גיל: {}", person.age);// שנה את השדה is_student
person.is_student = שֶׁקֶר;
println!("האם תלמיד: {}", person.is_student);
}
התוכנית יוצרת מבנה, מייצרת את המבנה, מדפיסה את שֵׁם, ו גיל שדות, ומשנה את הוא_סטודנט שדה לפני הדפסת השדה.
הכרזה על שיטות למבנים
בניגוד מבנים ב-C, אתה יכול להגדיר שיטות על מבני Rust הפועלות על מופע. שיטות הן פונקציות שלוקחות הפניה למבנה לצורך גישה ושינוי. אתה יכול גם להשתמש בסימון הנקודות כדי לקרוא לשיטות של מבנה ולגשת לפונקציונליות שלהן.
כך תוכל להכריז על שיטות למבנים ולהשתמש בשיטות אלו לביצוע פעולות:
structאדם {
שֵׁם: חוּט,
גיל: u8,
הוא_תלמיד: bool,
}impl אדם {
fnתגיד שלום(&עצמי) {
println!("שלום, שמי {} ואני בן {}.", עצמי.שֵׁם,
עצמי.גיל);
}fnיש_יום הולדת(&מוטעצמי) {
עצמי.age += 1;
}
}fnרָאשִׁי() {
לתתמוט אדם = אדם {
שֵׁם: חוּט::מ("ג'ון"),
גיל: 27,
הוא_תלמיד: נָכוֹן,
};person.say_hello();
person.have_birthday();
println!("עידן חדש: {}", person.age);
}
התוכנית מגדירה שתי שיטות עבור אדם מבנה. ה תגיד שלום השיטה לוקחת התייחסות ל עצמי ומדפיס ברכה הכוללת את שמו וגילו של האדם. ה יש_יום הולדת השיטה לוקחת התייחסות ניתנת לשינוי עצמי ומעלה את גילו של האדם.
מודל הבעלות של Rust מייעל את ניהול הזיכרון
מבנים הם מבני נתונים מגוונים, הפועלים כמעין מקבילת מעמד מינימלית.
כמו עם מבני נתונים אחרים של Rust, עליך לפעול לפי כללי הבעלות של Rust בעת עבודה עם משתני struct. מודל הבעלות מבטיח שאתה מנהל את הזיכרון ביעילות בתוכניות שלך, ומונע בעיות נפוצות כמו ריק ומצביעים תלויים.