Menu
Coddy logo textTech

Rust Cheat Sheet: דף עזר מהיר

עודכן לאחרונה

Hello World ומבנה

תוכנית Rust מתחילה ב-fn main; פקודות מסתיימות בנקודה-פסיק.

פעולהתחביר
נקודת כניסהfn main() { ... }
הדפסת שורהprintln!("Hello, World!");
הדפסה עם ערכיםprintln!("{} is {}", name, age);
הדפסה בפורמט debugprintln!("{:?}", value);
הערת שורה// comment
שימוש בפריט ממודולuse std::collections::HashMap;
בנייה והרצהcargo run
בניית קובץ הרצה ל-releasecargo build --release

משתנים וטיפוסים (let / mut)

קישורים (bindings) הם בלתי ניתנים לשינוי כברירת מחדל; הוסיפו mut כדי לאפשר השמה מחדש.

פעולהתחביר
קישור בלתי ניתן לשינויlet x = 5;
קישור שניתן לשינויlet mut count = 0;
טיפוס מפורשlet age: u32 = 30;
קבועconst MAX: u32 = 100;
הצללה (Shadowing)let x = x + 1;
טיפוסי מספרים שלמיםi32, u32, i64, usize
סקלרים אחריםf64, bool, char
Tuplelet pair: (i32, &str) = (1, "a");
המרת טיפוסlet f = x as f64;

בקרת זרימה

if הוא ביטוי, ול-Rust יש שלוש צורות של לולאה.

פעולהתחביר
If / elseif x > 0 { ... } else { ... }
if כביטויlet y = if x > 0 { 1 } else { -1 };
לולאה אינסופיתloop { ... }
לולאה שמחזירה ערךlet v = loop { break 5; };
לולאת whilewhile x < 100 { ... }
for על טווחfor i in 0..10 { ... }
for על אוסףfor item in &items { ... }
Break / continuebreak;, continue;

פונקציות

הביטוי האחרון (בלי נקודה-פסיק) הוא הערך המוחזר.

פעולהתחביר
פונקציה בסיסיתfn add(a: i32, b: i32) -> i32 { a + b }
החזרה מפורשתfn f() -> i32 { return 5; }
בלי ערך מוחזרfn log(msg: &str) { ... }
קבלת הפניה (reference)fn len(s: &String) -> usize { s.len() }
Closurelet add = |a, b| a + b;
Closure עם טיפוסlet sq = |x: i32| -> i32 { x * x };
פונקציה כארגומנטfn apply(f: impl Fn(i32) -> i32) { ... }

Ownership ו-borrowing

לכל ערך יש בעלים אחד; הפניות שואלות אותו בלי לקחת בעלות.

פעולהתחביר
Move (העברת בעלות)let b = a; (a כבר לא תקף)
Clone (העתקה עמוקה)let b = a.clone();
השאלה בלתי ניתנת לשינויlet r = &x;
השאלה שניתנת לשינויlet r = &mut x;
השאלה בפונקציהfn read(s: &String) { ... }
Dereference*r
כלל ההשאלההרבה & או &mut אחד בכל רגע נתון, לא שניהם
Slice (השאלה של טווח)let part = &arr[1..3];

Structs ו-enums

Structs מקבצים נתונים קשורים; enums מתארים ערך שהוא אחת מכמה אפשרויות (variants).

פעולהתחביר
הגדרת structstruct Point { x: i32, y: i32 }
יצירת מופעlet p = Point { x: 1, y: 2 };
גישה לשדהp.x
Tuple structstruct Pair(i32, i32);
מתודה (בלוק impl)impl Point { fn dist(&self) -> f64 { ... } }
פונקציה משויכתimpl Point { fn new() -> Self { ... } }
הגדרת enumenum Shape { Circle(f64), Rect(f64, f64) }
Enum עם שדות בשםenum Msg { Move { x: i32, y: i32 } }
גזירת traits (derive)#[derive(Debug, Clone)]

Pattern matching (match)

match משווה ערך מול תבניות וחייב לכסות את כל המקרים.

פעולהתחביר
match על ערכיםmatch x { 1 => "one", _ => "other" }
match על enummatch shape { Shape::Circle(r) => ... }
match על טווחmatch n { 1..=5 => ..., _ => ... }
קישור עם תנאי (guard)match x { n if n > 0 => ... }
match על tuplematch point { (0, y) => ..., (x, _) => ... }
if let (תבנית יחידה)if let Some(v) = opt { ... }
while letwhile let Some(v) = stack.pop() { ... }
פירוק structlet Point { x, y } = p;

Traits ו-generics

Traits מגדירים התנהגות משותפת; generics מאפשרים לקוד לעבוד עם הרבה טיפוסים.

פעולהתחביר
הגדרת traittrait Area { fn area(&self) -> f64; }
מימוש traitimpl Area for Circle { fn area(&self) -> f64 { ... } }
מתודת ברירת מחדלtrait Greet { fn hi(&self) { ... } }
פונקציה גנריתfn largest<T: PartialOrd>(list: &[T]) -> &T { ... }
struct גנריstruct Wrapper<T> { value: T }
הגבלת trait (where)fn f<T>(x: T) where T: Display { ... }
ארגומנט impl Traitfn print(item: impl Display) { ... }
Trait objectlet shapes: Vec<Box<dyn Area>> = ...;

טיפול בשגיאות (Result / Option)

Rust מייצגת היעדר ערך עם Option ושגיאות שניתן להתאושש מהן עם Result.

פעולהתחביר
ערך אופציונליOption<T>: Some(v) או None
הטיפוס ResultResult<T, E>: Ok(v) או Err(e)
החזרת Resultfn read() -> Result<String, Error> { ... }
העברת שגיאה הלאה עם ?let data = read()?;
Unwrap (גורם ל-panic על None/Err)opt.unwrap()
ערך ברירת מחדלopt.unwrap_or(0)
המרת ערך (map)opt.map(|v| v + 1)
טיפול בשני המקריםmatch res { Ok(v) => ..., Err(e) => ... }
המרת Option ל-Resultopt.ok_or("missing")?

אוספים נפוצים (Vec / HashMap)

Vec הוא מערך שיכול לגדול; HashMap הוא מאגר של מפתח וערך.

פעולהתחביר
יצירת ווקטורlet mut v: Vec<i32> = Vec::new();
ליטרל של ווקטורlet v = vec![1, 2, 3];
Push / popv.push(4);, v.pop();
גישה לפי אינדקסv[0]
גישה בטוחהv.get(0) מחזיר Option<&T>
מעבר על האיבריםfor x in &v { ... }
אורךv.len()
יצירת maplet mut m: HashMap<String, i32> = HashMap::new();
הכנסה / קבלהm.insert(k, v);, m.get(&k)
Entry API*m.entry(k).or_insert(0) += 1;

התחביר של Rust שאתם צריכים הכי הרבה, בעמוד אחד. ה-Rust cheat sheet הזה הוא דף עזר מהיר לליבת השפה: משתנים ו-mutability, ownership ו-borrowing, structs ו-enums, pattern matching, traits ו-generics, והטיפוסים Result ו-Option שעומדים מאחורי הטיפול בשגיאות ב-Rust.

כל מה שכאן הוא Rust סטנדרטי שמתקמפל בגרסת stable עדכנית. העתיקו את מה שאתם צריכים, או נסו כל קטע קוד בזמן אמת בעורך האונליין של Rust, בלי להתקין cargo.

שאלות נפוצות על ה-Rust cheat sheet

האם ה-Rust cheat sheet הזה חינמי?
כן. ה-Rust cheat sheet הזה חינמי לגמרי, בלי צורך בהרשמה. שמרו אותו במועדפים וחזרו אליו בכל פעם שתצטרכו לבדוק תבנית match, הגבלת trait או מתודה של אוסף.
מה זה ownership ו-borrowing ב-Rust?
Ownership הוא מודל הזיכרון של Rust: לכל ערך יש בדיוק בעלים אחד, והערך משוחרר כשהבעלים יוצא מהטווח (scope). Borrowing מאפשר לגשת לערך בלי לקחת עליו בעלות, בעזרת הפניה: &x להשאלה בלתי ניתנת לשינוי או &mut x להשאלה שניתנת לשינוי. הקומפיילר אוכף כלל אחד: בכל רגע נתון אפשר להחזיק הרבה השאלות בלתי ניתנות לשינוי או בדיוק השאלה אחת שניתנת לשינוי, וכך נמנעים מרוצי נתונים (data races) כבר בזמן הקומפילציה.
מה ההבדל בין Result ל-Option ב-Rust?
Option<T> מייצג ערך שעשוי להיות חסר: הוא Some(v) או None, ומשתמשים בו כשאין שגיאה לדווח עליה, רק ערך חסר. Result<T, E> מייצג פעולה שעלולה להיכשל: הוא Ok(v) או Err(e), ונושא ערך שגיאה כשמשהו משתבש. השתמשו ב-Option עבור "אולי קיים" וב-Result עבור "זה עלול להיכשל"; האופרטור ? מעביר את שניהם הלאה.
אפשר לתרגל Rust אונליין?
כן. פתחו את עורך האונליין של Rust כדי לקמפל ולהריץ כל קטע קוד מדף העזר הזה בדפדפן, בלי להתקין cargo או toolchain. כשתרצו מסגרת מסודרת, קורס ה-Rust האינטראקטיבי והחינמי של Coddy ייקח אתכם צעד אחר צעד ממשתנים ו-ownership ועד traits וטיפול בשגיאות.
האם דף העזר הזה מתאים למתחילים?
כן. הוא מסודר מהנושאים הנפוצים ביותר (משתנים, בקרת זרימה, פונקציות) ועד המתקדמים (traits, generics, טיפול בשגיאות), כך שאפשר להשתמש בחלקים העליונים כבר מהיום הראשון ולהתקדם ל-ownership ולשאר בהמשך.
איור של שפות התכנות ב-Coddy

ללמוד Rust עם Coddy

להתחיל