תרגיל - בלוקי קוד והיקף משתנה
- 11 דקות
בלוק קוד הוא משפט C# אחד או יותר המגדיר נתיב ביצוע. המשפטים מחוץ לבלוק קוד משפיעים על המקרים שבהם, אם ותדירות הפעולות של בלוק קוד זה מבוצעות בזמן ריצה. הגבולות של בלוק קוד מוגדרים בדרך כלל על-ידי בסוגריים מסולסלים, {}.
בנוסף להשפעה שלהם על נתיב ביצוע, בלוקי קוד יכולים גם להשפיע על טווח המשתנים שלך. דוגמאות הקוד שאתה בוחן במהלך תרגיל זה יסייעו לך להבין את הקשר בין בלוקי קוד לטווח משתנה.
בלוקי קוד משפיעים על הטווח של הצהרה על משתנה
Variable scope מתייחס הניראות של משתנה לקוד האחר ביישום שלך. משתנה עם טווח מקומי נגיש רק בתוך בלוק הקוד שבו הוא מוגדר. אם תנסה לגשת למשתנה מחוץ לבלוק הקוד, תקבל שגיאת מהדר.
שארית יחידה זו חוקרת את קשר הגומלין בין בלוקי קוד לטווח משתנה.
הכנת סביבת הקידוד שלך
מודול זה כולל פעילויות מעשיות שמנחה אותך לאורך תהליך הבנייה וההפעלה של קוד הדגמה. מומלץ להשלים פעילויות אלה באמצעות Visual Studio Code כסביבת הפיתוח שלך. השימוש ב- Visual Studio Code עבור פעילויות אלה יעזור לך לכתוב ולבצע קוד בצורה נוחה יותר בסביבת מפתחים המשמשת מומחים ברחבי העולם.
פתח את Visual Studio Code.
באפשרותך להשתמש בתפריט ההתחלה של Windows (או במשאב שווה ערך עבור מערכת הפעלה אחרת) כדי לפתוח את Visual Studio Code.
בתפריט קובץ קוד של Visual Studio, בחר פתח תיקיה.
בתיבת הדו-שיח פתיחת תיקיה, נווט אל תיקיית שולחן העבודה של Windows.
אם יש לך מיקום תיקיה אחר שבו אתה שומר פרוייקטים של קוד, באפשרותך להשתמש במיקום תיקיה זה במקום זאת. להדרכה זו, הדבר החשוב הוא שיהיה לך מיקום שקל לאתר ולזכור.
בתיבת הדו-שיח פתיחת תיקיה, בחר בחר תיקיה.
אם אתה רואה תיבת דו-שיח של אבטחה השואלת אם אתה נותן אמון בעורכים, בחר כן.
בתפריט מסוף קוד Visual Studio , בחר מסוף חדש.
שים לב שבקשה לפקודה בלוח המסוף מציגה את נתיב התיקיה עבור התיקיה הנוכחית. לדוגמה:
C:\Users\someuser\Desktop>הערה
אם אתה עובד במחשב שלך ולא בסביבת ארגז חול או סביבה מתארחת והשלמת מודולים אחרים של Microsoft Learn בסדרת C# זו, ייתכן שכבר יצרת תיקיית פרוייקט עבור דוגמאות קוד. במקרה זה, באפשרותך לדלג על השלב הבא, המשמש ליצירת יישום מסוף בתיקיה TestProject.
בשורת הפקודה של המסוף, כדי ליצור יישום מסוף חדש בתיקיה שצוינה, הזן את הבקשה הבאה:
dotnet new console -o ./CsharpProjects/TestProjectפקודה זו של .NET CLI משתמשת בתבנית של תוכנית .NET כדי ליצור פרוייקט יישום חדש של מסוף C# במיקום התיקיה שצוין. הפקודה יוצרת עבורך את התיקיות CsharpProjects ו- TestProject, ומשתמשת ב- TestProject כשם
.csprojהקובץ.אם מוצגת הודעה המציינת שהקבצים כבר קיימים, המשך לשלבים הבאים. תוכל לעשות שימוש חוזר בקובצי הפרוייקט הקיימים.
בתצוגת EXPLORER, הרחב את התיקיה CsharpProjects .
אתה אמור לראות את התיקיה TestProject ושני קבצים, קובץ תוכנית C# בשם Program.cs וקובץ פרוייקט C# בשם TestProject.csproj.
בתפריט קובץ קוד של Visual Studio, בחר פתח תיקיה.
בתיבת הדו-שיח פתיחת תיקיה, בחר את התיקיה CsharpProjects ולאחר מכן בחר בחר תיקיה.
בתצוגת EXPLORER, הרחב את התיקיה TestProject ולאחר מכן בחר Program.cs.
מחק את שורות הקוד הקיימות.
יהיה עליך להשתמש בפרוייקט זה של מסוף C# כדי ליצור, לבנות ולהפעיל דוגמאות קוד במהלך מודול זה.
סגור את לוח המסוף.
יצירת משתנה בתוך בלוק קוד
תתחיל בהתסתכלות על האירוע כאשר משתנה מאותחל בתוך בלוק קוד.
ודא שהאפשרות קוד Visual Studio פתוחה Program.cs בלוח 'עורך'.
הערה
Program.cs צריך להיות ריק. אם לא, בחר ומחק את כל שורות הקוד.
הקלד את הקוד הבא בעורך הקוד של Visual Studio:
bool flag = true; if (flag) { int value = 10; Console.WriteLine($"Inside the code block: {value}"); }בתפריט קוד Visual Studio קובץ, בחר שמור.
יש Program.cs הקובץ לפני בנייה או הפעלה של הקוד.
בלוח EXPLORER, כדי לפתוח מסוף במיקום התיקיה TestProject, לחץ באמצעות לחצן העכבר הימני על TestProjectולאחר מכן בחר פתח במסוף משולב.
לוח מסוף ייפתח. המסוף צריך לכלול שורת פקודה שמראה כי המסוף פתוח במיקום התיקיה TestProject שלך.
בשורת הפקודה Terminal, כדי להפעיל את הקוד, הקלד dotnet מכן הקש Enter.
הערה
אם אתה רואה הודעה המציינת כי "לא היתה אפשרות למצוא פרוייקט להפעלה", ודא שבקשה לפקודה של Terminal מציגה את מיקום התיקיה TestProject הצפוי. לדוגמה:
C:\Users\someuser\Desktop\csharpprojects\TestProject>אתה אמור לראות את הפלט הבא:
Inside the code block: 10
זהו הפלט הצפוי. אך מה קורה אם ברצונך לגשת למשתנה value מחוץ לבלוק if קוד המשפט?
ניסיון לגשת למשתנה מחוץ לבלוק הקוד שבו הוא מוצהר
בעורך קוד Visual Studio, צור שורת קוד חדשה מתחת לבלוק
ifקוד המשפט.בשורת הקוד הריקה שיצרת, הוסף את שורת הקוד הבאה:
Console.WriteLine($"Outside the code block: {value}");ודא שהקוד המעודכן שלך נראה כך:
bool flag = true; if (flag) { int value = 10; Console.WriteLine($"Inside the code block: {value}"); } Console.WriteLine($"Outside the code block: {value}");שמור את קובץ הקוד ולאחר מכן השתמש ב- Visual Studio Code כדי להפעיל את הקוד.
הזן
dotnet runמשורת הפקודה Terminal כדי להפעיל את הקוד שלך.שים לב כי כאשר אתה מנסה להפעיל את היישום, אתה מקבל שגיאת הידור:
Program.cs(7,46): error CS0103: The name 'value' does not exist in the current context
החלק Program.cs(7,46) של ההודעה מציין שהשגיאה משויכת לקו 7 בקובץ Program.cs, עמודה 46.
שגיאה זו נוצרת מכיוון שמשתנה שהוצהיר בתוך בלוק קוד נגיש (ניתן לראות בלבד) בתוך בלוק קוד זה. מאחר שלא ניתן לגשת למשתנה מחוץ לבלוק הקוד שבו הוא מוצהר, value לא ניתן לגשת אליו משורת 7 של הקוד שלך.
משתנה שהוצהר בבלוק קוד פעולת שירות נקרא משתנה מקומי. ייתכן שתראה את המונח משתנה מקומי המשמש בעת סקירת מאמרים הדון בטווח משתנה.
העברת ההצהרה המשתנה מעל בלוק הקוד
כדי לגשת למשתנה הן בתוך בלוק קוד והן מחוצה לו, יהיה עליך להצהיר על המשתנה לפני (לעיל) על בלוק הקוד כך שהקוד מחוץ לבלוק הקוד יוכל "לראות" את המשתנה.
עדכן את הקוד שלך בעורך קוד Visual Studio באופן הבא:
bool flag = true; int value; if (flag) { Console.WriteLine($"Inside the code block: {value}"); } value = 10; Console.WriteLine($"Outside the code block: {value}");הת להימשך דקה כדי לסקור את העדכונים.
שים לב
valueשהוצהר כעת (אך לא אותחל) מחוץ לבלוקifהקוד.השתמש ב- Visual Studio Code כדי לשמור את העדכונים ולאחר מכן הפעל את הקוד.
שים לב שאתה עדיין מקבל שגיאת קומפילציה.
הפעם, כאשר תנסה להפעיל את היישום, תקבל את שגיאת ההידור הבאה:
Program.cs(6,49): error CS0165: Use of unassigned local variable 'value'השגיאה משויכת לקו 6
valueבתוך בלוק הקוד מכיוון שלא אותחל (לא הוקצה ערך). אם שורת הקוד היתהvalue = 10;ממוקמת מעל לבלוקifקוד ההצהרה, היישום היה מבצע קומפילציה כראוי והכל יהיה בסדר. עם זאת,valueמאחר שלא אותחל, לא ניתן לגשת אליו בתוך בלוק הקוד.ודא שהמשתנים שלך מאותחלים לפני שתנסה לגשת אליהם י לטפל בבעיה זו.
אתחול משתנה כחלק מהצהרה משתנה
כדי לאתחל
valueכחלק מהצהרת המשתנה, עדכן את הקוד באופן הבא:bool flag = true; int value = 0; if (flag) { Console.WriteLine($"Inside the code block: {value}"); } value = 10; Console.WriteLine($"Outside the code block: {value}");קוד זה מטפל שגיאת ההידור "משתנה מקומי שלא הוקצה" על-ידי אתחול
valueכחלק מהצהרה המשתנה שלך.השתמש בקוד Visual Studio כדי לשמור ולהפעיל את הקוד שלך.
שים לב מעתה, בעת הפעלת היישום, תראה את הפלט הבא:
Inside the code block: 0 Outside the code block: 10
בדוק את פירוש הקוד של המהדר
כדי לעזור לך להימנע משגיאות זמן ריצה, מהדר C# מנתח את הקוד שלך בעורך קוד של Visual Studio ובתהליך ה- Build. עם זאת, ייתכן שההידור לא תמיד יפרש את הקוד שלך באותו אופן שבו אתה מפרש אותו.
שקול את שתי דוגמאות הקוד הבאות, המופיעות משרתות את אותה מטרה:
// Code sample 1
bool flag = true;
int value;
if (flag)
{
value = 10;
Console.WriteLine($"Inside the code block: {value}");
}
Console.WriteLine($"Outside the code block: {value}");
// Code sample 2
int value;
if (true)
{
value = 10;
Console.WriteLine($"Inside the code block: {value}");
}
Console.WriteLine($"Outside the code block: {value}");
ייתכן שתרגיש כי שתי דוגמאות אלה צריכות תמיד להפיק את אותה תוצאה, אך המהדר של C# מפרש את שתי דוגמאות הקוד באופן שונה.
עבור דוגמת הקוד הראשונה, המהדר מפרש flag כמשתנה בוליאני שניתן להקצות לו ערך של או truefalse. המהדר מסכם שאם הוא flagfalse, value לא יופעל בעת ביצוע Console.WriteLine() השני. למעשה, המהדר מחשיב את שני נתיבי ביצוע הקוד הבאים כדי שניתן יהיה:
// path when flag = true
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");
וגם
// path when flag = false
int value;
Console.WriteLine($"Outside the code block: {value}");
מאחר שההידור מחשיב את הנתיב השני לאפשרות (עבור קוד לדוגמה 1), הוא יוצר הודעת שגיאה במהלך תהליך גירסת ה- Build. בנוסף, עורך הקוד בקוד Visual Studio מזהיר אותך לגבי בעיה זו על-ידי הצגת שורה מסולסלת אדומה תחת value (מתחת לבלוק הקוד).
עבור דוגמת הקוד השני, התואם if מסכם שהתוכן של בלוק קוד המשפט יפעל תמיד (true הוא תמיד true). המהדר אינו יוצר שגיאת Build מאחר שהוא מפרש את דוגמת הקוד השני כך שיש נתיב ביצוע יחיד באופן הבא:
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");
תקציר
להלן כמה דברים חשובים שיש לזכור לגבי בלוקי קוד:
- בעת הצהרה על משתנה בתוך בלוק קוד, הניראות שלו מקומית בבלוק קוד זה ולא ניתן לגשת למשתנה זה מחוץ לבלוק הקוד.
- כדי להבטיח שמשתנה יהיה גלוי הן בתוך בלוק קוד והן מחוצה לו, עליך להצהיר על המשתנה לפני בלוק הקוד (מחוץ ומעל לבלוק הקוד).
- ודא שמשתנים מאותחלים לפני שהקוד מנסה לגשת אליהם (עבור כל נתיבי ביצוע הקוד הפוטנציאליים).
בדוק את הידע שלך
משוב
האם עמוד זה היה מועיל?
לא
זקוק לעזרה בנושא זה?
רוצה לנסות להשתמש ב'שאל את Learn' כדי להבהיר או להדריך אותך בנושא זה?