Rust/פלט והצללה: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
שורה 4:
{{-}}
== פונקציית פלט ==
כפיב[[Rust/שלום שראינועולם!|שיעור מקודם,הראשון]] פונקצייתהשתמשנו בפונקציית המאקרו println!() מדפיסהכדי להדפיס למסך רצףאת תוויםהביטוי (או"Hello, מחרוזת)world!". כזכור, הדפסת שהיאהתווים מקבלתנעשתה באופן הבא:
<source lang = "rust">
println!("Hello, world!");
</source>
 
כעת נלמד לבצע מספר פעולות יותר משוכללות עם פונקציה זו. שימו לב! גם אם לא הבנתם עד כה את נושא הפונקציות (ובתוכו פונקציות מאקרו), המשיכו לעקוב. פונקצייתהדפסה המאקרו println!()למסך היא אחתאחד הפונקציותהדברים השימושיותהשימושיים ביותר בראסטבכל שפת תכנות ולכן חשוב לדעת איך להשתמש בה גם אם לא מבינים את הנושא לעומק. בנוסף, בהמשך השיעור נדגים כמה עקרונות חשובים בראסט, שלאשבשלב זה לא נוכל להציג אותם בלעדיהבלי הדפסה.
 
=== פונקציית המאקרו print! ===
{{הארה|אם בסיום הדפסת ביטוי מסוים תרצו לרדת שורה (כלומר, ללחוץ על Enter), תוכלו להשתמש בעת הדפסה בתו המיוחד 'n\' (בקסלאש אן). הוספת תו זה לאחר ביטוי מסויים ולפני ביטוי חדש תוביל לירידת שורה, כלומר ל-Enter. שימו לב שהבקסלאש או ה-n עצמה לא יודפסו למסך ביחד עם ירידת השורה וזאת משום מדובר בתו מיוחד שהוגדר במיוחד כדי לסמל את ירידת השורה. אם תרצו להדפיס את הביטוי "n\" תצטרכו להוסיף לוכסן הפוך נוסף לפני הלוכסן הראשון, כלומר, "n\\". עוד על תווים מיוחדים וכיצד ניתן להדפיס אותם תוכלו לקרוא [http://en.cppreference.com/w/cpp/language/escape כאן] (באנגלית).}}
כזכור, פונקציית ה-println()! שבשמה מתחבא הביטוי "print line" היא פונקציית מאאקרו שמדפיסה שורת טקסט אחת למסך. משמעות הדבר, היא שבסיום כל הדפסה של ביטוי כלשהו בעזרת הפונקציה, יודפס באופן אוטומטי תו ה-Enter (שמסמל ירידת שורה). לכן, אם נקרא לפונקציה פעמיים ברצף, כל אחד מהביטויים שיישלח לפונקציה יודפס בשורה נפרדת. לדוגמה:
<source lang = "rust">
println!("This text will be printed");
println!("in a seperate line");
 
// output:
// This text will be printed
// in a seperate line
</source>
 
אם לא נרצה לגרום לירידת שורה אוטומטית בסיום ההדפסה, נוכל להשתמש בפונקציית המאקרו print!():
 
<source lang = "rust">
print!("This text will be printed");
print!(" in the same line");
 
// output:
// This text will be printed in the same line</source>
 
התחביר של הפונקציות println!() ו-print()! זהה, וכל התכונות שילמדו בהמשך על אחת מהן נכון גם לגבי השנייה. מטעמי נוחות, בדוגמאות הבאות נעדיף להשתמש בפונקציה println()! כדי שנוכל לקבל ירידת שורה באופן אוטומטי.
 
{{הארה|אם בסיוםבמהלך הדפסת ביטוי מסוים תרצו לרדת שורה (כלומר, ללחוץ על Enter), תוכלומבלי לקרוא ל-println()! או להשתמש בעתבה הדפסהמספר פעמים, תוכלו להשתמש בתו המיוחד 'n\' (בקסלאש אן). הוספת תו זה, לאחרתוביל ביטוילירידת מסוייםשורה, ולפניכאשר ביטויכל חדשהטקסט תובילשייכתב לירידתאחריו שורה,יופיע כלומרכבר ל-Enterבשורה נפרדת. שימו לב שהבקסלאששהרצף או ה-'n עצמה\' לא יודפסויודפס למסך ביחד עם ירידת השורה וזאת משום מדובר בתו מיוחד שהוגדר במיוחד כדי לסמל את ירידת השורהשורה. אם תרצו להדפיס את הביטוי "n\" תצטרכו להוסיף לוכסן הפוך נוסף לפני הלוכסן הראשון, כלומר, "n\\". עוד על תווים מיוחדים וכיצד ניתן להדפיס אותם תוכלו לקרוא [http://en.cppreference.com/w/cpp/language/escape כאן] (באנגלית).}}
 
=== הדפסת משתנים ===
בפרק הקודם למדנו מהם משתנים ומה החשיבות שלהם לתוכנית שלנו בראסט. לעתים נרצה להדפיס את הערך של המשתנים במהלך התוכנית שלנו. כדי להדפיס את ערך המשתנה נשתמש בסוגריים מסולסלים {} במקום במחרוזת בו נרצה להדפיס אותו. בתום המחרוזת (הנתחמת בין המרכאות), נשלח לפונקציית המאקרו את המשתנה שלנו, מופרד בפסיק (,) מן המחרוזת. לדוגמה:
<source lang = "rust">
let x = 5;
println!("the value of x is: {}", x);
 
// output:
// the value of x is 5
</source>
 
שורה 25 ⟵ 50:
let y = 10;
println!("the value of x is: {} and the value of y is: {}", x, y);
 
// output:
// the value of x is 5 and the value of y is 10
</source>
 
שורה 35 ⟵ 63:
let y = 10;
println!("{0} is less than {1} and {1} is greater than {0}", x, y);
 
// output:
// 5 is less than 10 and 10 is greater than 5
</source>
 
שורה 52 ⟵ 83:
 
{{משימה|נסו לשלוח ל-println!() משתנים עם מפתח לא מוגדר. עשו זאת בשני שלבים:{{ש}}{{*}} ראשית, שלחו לפונקציה משתנה עם מפתח לא מוגדר. קמפלו את התוכנית והריצו אותה. מה קיבלתם?{{ש}}{{*}} אחר כך קראו לפונקציה פעמיים - בקריאה הראשונה שלחו לה משתנה עם מפתח מוגדר. בקריאה השנייה שלחו לה משתנה עם אותו המפתח של המשתנה בקריאה הקודמת. קמפלו את התוכנית והריצו אותה. מה קיבלתם הפעם?}}
 
=== תכונות נוספות של פונקציות ההדפסה (הרחבה) ===
כאשר אנחנו מדפיסים מספר כלשהו, נוכל להחליט האם להדפיס אותו בבסיס דצימלי (כפי שהפדסנו את כל המספרים עד עכשיו) או בבסיס אחר. שפת ראסט תומכת בשלושה בסיסים: בינארי (מסומן על ידי b), אוקטלי (מסומן על ידי o) או הקסדצימלי (מסומן על ידי x). כדי להדפיס בבסיס מסויים, נוסף בתוך הסוגריים המסולסלים את התו נקודותיים (':') ואחריו את שם האות שמייצגת את הבסיס. למשל:
<source lang = "rust">
println!("{0} in decimal base equals {0:x} in hexadecimal or {0:b} in binary", 100);
 
// output:
// 100 in decmial base equals 64 in hexadecimal or 1100100 in binary
</source>
 
בנוסף, כאשר אנחנו מדפיסים מספר עשרוני, נוכל לבחור כמה ספרות יוצגו אחרי הנקודה. כדי לעשות זאת, נשתמש גם כן בתו נקודותיים (':'), ואחריו נוסיף את התו נקודה ('.') ואת המספר הרצוי. לדוגמה:
<source lang = "rust">
println!("{:.2}", 3.141459265); // will print only 2 digits after the dot
 
// output:
// 3.14
</source>
 
כמו כן, כשאנחנו מדפיסים מספר כלשהו, נוכל להוסיף להחליט על מספר מסוים של ספרות שיודפסו, כך שבמידת הצורך יתווסף למספר ריווח. גם כאן, נשתמש בתו נקודותיים (':'), ואחריו נוסיף את המספר הרצוי. למשל:
<source lang = "rust">
println!("{:3}", 1); // will add two white spaces before the the number 3
println!("{:3}", 100); // will have no effect - 100 is already 3 characters long
 
// output:
// 1
// 100
</source>
 
== אורך החיים של משתנים ==