String לעומת &str
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Rust של Coddy. שיעור 54 מתוך 66.
ל-Rust יש שני סוגי מחרוזות עיקריים המשמשים למטרות שונות: String ו-&str. הבנת ההבדל ביניהם חיונית לעבודה יעילה עם טקסט ב-Rust.
String היא מחרוזת בבעלותך, המוקצית בערימה ושאפשר לשנות. כשאתה יוצר String, התוכנית שלך היא הבעלים של הנתונים ואחראית לניהול הזיכרון שלהם. אפשר להגדיל אותה, להקטין אותה ולשנות את התוכן שלה, כי היא ניתנת לשינוי כאשר מצהירים עליה עם mut.
let mut my_string = String::from("Hello");
my_string.push_str(" World"); // זה עובד כי String נמצאת בבעלות וניתנת לשינוילעומת זאת, &str (מבוטא "פרוסת מחרוזת") הוא תצוגה מושאלת ובלתי ניתנת לשינוי של נתוני מחרוזת. הוא אינו בעלים של הנתונים שאליהם הוא מצביע - הוא רק הפניה לתוכן מחרוזת שנמצא במקום אחר. מחרוזות מילוליות כמו "Hello" הן למעשה מסוג &str.
let my_slice: &str = "Hello World"; // זהו מקטע של מחרוזתחשוב על String כעל ספר שבבעלותך, שאפשר לכתוב בו ולשנות אותו, בעוד ש־&str הוא כמו לשאול ספר ממישהו אחר — אפשר לקרוא אותו, אבל אי אפשר לשנות אותו. ההבחנה הזאת היא יסודית במערכת הבעלות של Rust ועוזרת להבטיח בטיחות בזיכרון.
נסו בעצמכם
השיעור הזה לא כולל אתגר קוד.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1זרימת בקרה מתקדמת
ביטוי 'match'התאמה למספר ערכיםהתאמה לטווחיםביטוי 'if let'לולאות כביטוייםסיכום – מנתח פקודות פשוט4קיבוץ נתונים באמצעות מבנים
מהו מבנה?סקירה כללית על מבניםגישה לשדות במבנהמבנים הניתנים לשינוימבנים כפרמטרים של פונקציהמבני טופלסיכום – יצירת מבנה ספר7טיפול בשגיאות באמצעות 'Result'
מהו 'Result'?שימוש ב-'match' עם 'Result'is_ok() ו-is_err()קיצורי דרך: unwrap ו-expectאופרטור סימן השאלה '?'המרת מחרוזות למספריםסיכום - פונקציית חילוק בטוחה10Closures ופונקציות אנונימיות
מהו Closure?הגדרת Closure פשוטClosures עם פרמטריםלכידת הסביבהסיכום – Closure פשוט לחיבור2מבוא לווקטורים
מהו וקטור?יצירת וקטורהוספת איברים באמצעות pushגישה לאיברי וקטורמעבר על וקטורמעבר ניתן לשינויהסרת איבריםסיכום – מעקב בסיסי אחר ניקוד5זוגות מפתח-ערך באמצעות מפות גיבוב
מהי מפת גיבוב?יצירת מפת גיבובהוספת זוגות מפתח-ערךגישה לערכיםמעבר על מפת גיבובעדכון ערךהסרת זוגסיכום – מונה מילים6טיפול בהיעדר באמצעות 'Option'
מהו 'Option'?שימוש ב-'match' עם 'Option'is_some() ו-is_none()חילוץ ערך מתוך 'Option'המתודה expectהגדרת ברירת מחדל: unwrap_orסיכום – מציאת איבר9מקטעי מחרוזת ועוד
String לעומת &strיצירת מקטעי Stringמקטעים כפרמטרים לפונקציותמקטעים אחריםסיכום – מציאת המילה הראשונהתרגלו בעצמכם: קומפיילר Rust אונליין