תרגיל - ערכי החזרה ופרמטרים של שיטות
- 18 דקות
ביחידה הקודמת, השתמשת בתרחיש קידוד "גליל קוביות" כדי להמחיש את ההבדל בין פעולות שירות stateful (מופע) לשיטות חסרות מצב (סטטיות). אותו תרחיש יכול לעזור לך להבין מושגים חשובים אחרים לגבי שיטות התקשרות. לדוגמה:
- טיפול בערך ההחזרה של פעולת שירות.
- פרמטרים של פעולת שירות והעברת ארגומנטים לפעולת שירות.
- בחירת גירסה עמוסה מדי של פעולת שירות.
ערכי החזרה
שיטות מסוימות מיועדות להשלים את הפונקציה שלהן ולהסתיים "בשקט". במילים אחרות, הם לא מחזירים ערך כאשר הם מסיימים. הן נקראות שיטות תוקף.
שיטות אחרות מיועדות להחזיר ערך עם השלמתן. ערך ההחזרה הוא בדרך כלל התוצאה של פעולה. ערך החזרה הוא הדרך הראשית לשיטה לתקשר בחזרה לקוד הקריאות לפעולת השירות.
ראית שהשיטה Random.Next() מחזירה סוג int המכיל את הערך של המספר שנוצר באופן אקראי. עם זאת, ניתן ליצור שיטה שתחזיר כל סוג נתונים, אפילו מחלקה אחרת. לדוגמה, המחלקה String כוללת מספר פעולות שירות שמחחזירות מחרוזת, חלקן מחזירות מספר שלם, ופעולות מסוימות מחזירות ערך בוליאני.
בעת קריאה לפעולת שירות המחזירה ערך, לעתים קרובות תקצה את הערך המוחזר למשתנה. כך תוכל להשתמש בערך בהמשך הקוד. בתרחיש קוביות, הקצית את ערך ההחזרה Random.Next() של המשתנה roll :
int roll = dice.Next(1, 7);
במקרים מסוימים, ייתכן שתרצה להשתמש ישירות בערך המוחזר, מבלי להקצות אותו למשתנה. לדוגמה, ייתכן שתרצה להדפיס את הערך המוחזר לקונסולה באופן הבא:
Console.WriteLine(dice.Next(1, 7));
למרות ששיטה מחזירה ערך, ניתן לקרוא לפעולת השירות מבלי להשתמש בערך המוחזר. לדוגמה, באפשרותך להתעלם מהערך המוחזר על-ידי קריאה לפעולת השירות באופן הבא:
dice.Next(1, 7);
עם זאת, התעלמות מערך ההחזרה תהיה חסרת טעם. הסיבה שאתה מתקשר לשיטה היא Next() כדי שתוכל לאחזר את הערך האקראי הבא.
פרמטרים וארגומנטים של פעולת שירות במשפט השיחות
כאשר אתה מתקשר לשיטה, באפשרותך להעביר ערכים שהשיטה תשתמש בהם כדי להשלים את המשימה שלה. ערכים אלה נקראים ארגומנטים. פעולת השירות משתמשת בארגומנטים כדי להקצות ערכים לפרמטרים המוגדרים בחתימה של פעולת השירות. שיטה יכולה לדרוש פרמטרים אחד או יותר כדי להשלים את המשימה שלה, או אף פרמטרים כלל.
הערה
לעתים קרובות, המונחים 'פרמטר' ו- 'argument' משמשים לחילופין. עם זאת, 'parameter' מתייחס למשתנה הנמצא בשימוש בתוך פעולת השירות. 'argument' הוא הערך שהועבר כאשר מתבצעת קריאה לפעולת השירות.
רוב השיטות מיועדות לקבל פרמטרים אחד או יותר. ניתן להשתמש בפרמטרים כדי לקבוע את התצורה של אופן ביצוע פעולת השירות שלה, או שהם מופעלים ישירות. לדוגמה, פעולת השירות Random.Next() משתמשת בפרמטרים כדי לקבוע את התצורה של הגבול העליון והגבול התחתון של הערך המוחזר. עם זאת, הפרמטר Console.WriteLine() משתמש בפרמטר ישירות על-ידי הדפסת הערך במסוף.
פעולות שירות משתמשות בחתימה של פעולת שירות כדי להגדיר את מספר הפרמטרים שהשיטה תקבל, וכן את סוג הנתונים של כל פרמטר. משפט הקידוד הקריאות לפעולת השירות חייב לעמוד בדרישות שצוינו על-ידי חתימת פעולת השירות. שיטות מסוימות מספקות אפשרויות עבור המספר וסוג הפרמטרים שהשיטה מקבלת.
כאשר מתקשר מפעיל את פעולת השירות, היא מספקת ערכי בטון, הנקראים ארגומנטים, עבור כל פרמטר. הארגומנטים חייבים להיות תואמים לסוג הפרמטר. עם זאת, שם הארגומנט, אם נעשה בו שימוש בקוד השיחות, אינו חייב להיות זהה לשם הפרמטר שהוגדר בפעולת השירות.
שקול את הקוד הבא:
Random dice = new Random();
int roll = dice.Next(1, 7);
Console.WriteLine(roll);
שורת הקוד הראשונה יוצרת מופע של המחלקה Random בשם dice. שורת הקוד השניה משתמשת בפעולת dice.Next(1, 7) השירות כדי להקצות ערך אקראי למספר שלם בשם roll. שים לב שהצהרת השיחות מספקת שני ארגומנטים המופרדים באמצעות , סימן. פעולת Next() השירות כוללת חתימת פעולת שירות המקבלת שני פרמטרים מסוג int. פרמטרים אלה משמשים לקביעת התצורה של הגבולות העליונה והגבולות העליונה עבור המספר האקראי המוחזר. שורת הקוד הסופית משתמשת בפעולת Console.WriteLine() השירות כדי להדפיס את הערך של roll המסוף.
הארגומנטים שהועברו לפעולת שירות חייבים להיות מסוג נתונים זהה לסוג הנתונים של הפרמטרים התואמים שהוגדרו על-ידי פעולת השירות. אם תנסה להעביר ארגומנט שהוקלדה באופן שגוי לפעולת שירות, המהדר של C# יתפסו את הטעות ויאלץ אותך לעדכן את משפט השיחות שלך לפני שהקוד יכדר ויפעל. בדיקת סוג היא אחת הדרך שבה C# ו- .NET משתמשים כדי למנוע ממשתמשי קצה להיתקל בשגיאות בזמן ריצה.
הערה
למרות שפרמטרים נמצאים בשימוש לעתים קרובות, לא כל השיטות דורשות פרמטרים להשלמת המשימה שלהם. לדוגמה, Console המחלקה כוללת Console.Clear() שיטה שאינה משתמשת בפרמטרים. מאחר ששיטה זו משמשת לניקוי כל המידע המוצג בקונסולה, אין צורך בפרמטרים כדי להשלים את המשימה שלה.
שיטות עמוסות מדי
שיטות רבות בספריית הכיתה של .NET כוללות חתימות פעולת שירות עמוסות מדי. בין היתר, פעולה זו מאפשרת לך להתקשר לפעולת השירות עם או בלי ארגומנטים שצוינו במשפט השיחות.
פעולת שירות עמוסה מדי מוגדרת עם חתימות מרובות של פעולות שירות. שיטות עמוסות מדי מספקות דרכים שונות להתקשר לשיטה או לספק סוגי נתונים שונים.
במקרים מסוימים, גירסאות של פעולת שירות עמוסות מדי משמשות להגדרת פרמטר באמצעות סוגי נתונים שונים. לדוגמה, לפעולת Console.WriteLine() השירות יש 19 גירסאות שונות של עמוסות מדי. רוב עומסי יתר אלה מאפשרים לשיטה לקבל סוגים שונים ולאחר מכן לכתוב את המידע שצוין במסוף. שקול את הקוד הבא:
int number = 7;
string text = "seven";
Console.WriteLine(number);
Console.WriteLine();
Console.WriteLine(text);
בדוגמה זו, אתה מפעיל שלוש גירסאות נפרדות של פעולת השירות עם עמס יתר WriteLine() .
- פעולת השירות
WriteLine()הראשונה משתמשת בחתימה של פעולת שירות שמגדירה פרמטרint. - פעולת השירות
WriteLine()השניה משתמשת בחתימה של פעולת שירות שמגדירה אפס פרמטרים. - פעולת השירות
WriteLine()השלישית משתמשת בחתימת פעולת שירות שמגדירה פרמטרstring.
במקרים אחרים, גירסאות של פעולת שירות עמוסות מדי מגדירות מספר שונה של פרמטרים. ניתן להשתמש בפרמטרים חלופיים כדי לספק שליטה רבה יותר על התוצאה הרצויה. לדוגמה, פעולת Random.Next() השירות כוללת גירסאות עמוסות מדי המאפשרות לך להגדיר רמות אילוץ שונות במספר שנוצר באופן אקראי.
התרגיל הבא קורא לשיטה Random.Next() להפיק ערכים של מספרים שלמים אקראיים עם רמות אילוץ שונות:
ודא שיש לך קובץ ריק Program.cs ב- Visual Studio Code.
במידת הצורך, פתח את Visual Studio Code ולאחר מכן בצע את השלבים הבאים כדי Program.cs קובץ בעורך:
בתפריט קובץ, בחר פתח תיקיה.
השתמש בתיבת הדו-שיח פתיחת תיקיה כדי לנווט אל התיקיה CsharpProjects ולאחר מכן לפתוח אותה.
בתצוגה Visual Studio Code EXPLORER, בחר Program.cs.
בתפריט בחירת קוד של Visual Studio, בחר בחר הכל ולאחר מכן הקש על מקש Delete.
כדי לבחון את גירסאות פעולת השירות עמוסות
Random.Next()מדי, הזן את הקוד הבא:Random dice = new Random(); int roll1 = dice.Next(); int roll2 = dice.Next(101); int roll3 = dice.Next(50, 101); Console.WriteLine($"First roll: {roll1}"); Console.WriteLine($"Second roll: {roll2}"); Console.WriteLine($"Third roll: {roll3}");בתפריט קובץ קוד של Visual Studio, לחץ על שמור.
בתצוגת EXPLORER, כדי לפתוח מסוף במיקום התיקיה TestProject, לחץ באמצעות לחצן העכבר הימני על TestProject ולאחר מכן בחר פתח במסוף משולב.
ודא כי נתיב התיקיה המוצג בשורת הפקודה מצביע על התיקיה המכילה את Program.cs הקובץ.
בשורת הפקודה Terminal, כדי להפעיל את הקוד, הקלד dotnet מכן הקש Enter.
שים לב שהתוצאה שלך דומה לפלט הבא:
First roll: 342585470 Second roll: 43 Third roll: 89המספרים שנוצרים הם אקראיים, כך שהתוצאות יהיו שונות. עם זאת, דוגמה זו מדגימה את טווח התוצאות שאתה עשוי לראות.
קח דקה כדי לבדוק את הקוד.
הגירסה הראשונה של
Next()פעולת השירות אינה מגדירה גבול עליון וגבול תחתון,02,147,483,647ולכן פעולת השירות תחזיר ערכים בטווח שבין ,intשהוא הערך המרבי שניתן לאחסן.הגירסה השניה של פעולת השירות
Next()מציינת את הערך המרבי כגבול עליון, ולכן במקרה זה,0באפשרותך לצפות לערך אקראי בין ל-100.הגירסה השלישית של השיטה
Next()מציינת הן את ערכי המינימום והן את ערכי המקסימום, ולכן במקרה זה, באפשרותך לצפות לערך אקראי בין ל50-100.סגור את לוח המסוף.
כבר בדקת כמה נושאים ביחידה זו. להלן רשימה מהירה של התוכן שהוספת:
- בדקת כיצד להשתמש בערך החזרה של פעולת שירות (כאשר פעולת השירות מספקת ערך החזרה).
- בדקת כיצד שיטה יכולה להשתמש בפרמטרים המוגדרים כסוגי נתונים ספציפיים.
- בדקת את הגירסאות של פעולות שירות מסוימות שכלולות פרמטרים או סוגי פרמטרים שונים.
השתמש ב- IntelliSense
Visual Studio Code כולל תכונות IntelliSense מופעלות על-ידי שירות שפה. לדוגמה, שירות השפה של C# מספק השלמה חכמה של קוד בהתבסס על סמנטיקה של שפה וניתוח של קוד המקור שלך. בסעיף זה, תשתמש ב- IntelliSense כדי לסייע לך ליישם את Random.Next() השיטה.
מאחר ש- IntelliSense נחשף לעורך הקוד, באפשרותך ללמוד הרבה על שיטה מבלי לצאת מסביבת הקידוד. IntelliSense מספק רמזים ומידע עזר בחלון מוקפץ מתחת למיקום הסמן בעת הזנת הקוד. כאשר אתה מקליד קוד, החלון המוקפץ IntelliSense ישנה את התוכן שלו בהתאם להקשר.
לדוגמה, dice בעת הזנת המילה באיטיות, IntelliSense יציג את כל מילות המפתח, המזהים (או במקום זאת, שמות משתנים בקוד) ומחלקות בספריית הכיתה של .NET התואמות לאותיות שהוזנו. ניתן להשתמש בתכונות ההשלמה האוטומטית של עורך הקוד כדי לסיים להקליד את המילה המתאימה העליונה בחלון המוקפץ IntelliSense. נסה זאת.
ודא שקובץ ה- Program.cs שלך פתוח ב- Visual Studio Code.
על האפליקציה להכיל את הקוד הבא:
Random dice = new Random(); int roll1 = dice.Next(); int roll2 = dice.Next(101); int roll3 = dice.Next(50, 101); Console.WriteLine($"First roll: {roll1}"); Console.WriteLine($"Second roll: {roll2}"); Console.WriteLine($"Third roll: {roll3}");בחלק התחתון של קובץ הקוד, כדי להתנסות ב- IntelliSense, הזן באיטיות את האותיות
dולאחרiמכןc.שים לב לחלון המוקפץ IntelliSense שמופיע כשאתה מתחיל להקליד.
כאשר IntelliSense מוקפץ, אמורה להופיע רשימה של הצעות. עד שהזנת את
dic, המזההdiceאמור להיות בראש הרשימה.הקש על מקש Tab בלוח המקשים.
שים לב כי המילה כולה
diceהושלמה בעורך. באפשרותך להשתמש במקשי החצים למעלה ולמטה כדי לשנות את הבחירה לפני הקשה על מקש Tab.הערה
אם חלון IntelliSense נעלם,
backspaceניתן לבחור אותו באמצעות המקש בלוח המקשים, ולאחר מכן הזן מחדש את הסימן האחרון כדי לפתוח מחדש את IntelliSense.כדי לציין את אופרטור הגישה לחברים, הזן
.תו.שים לב שהחלון המוקפץ של IntelliSense
.מופיע מחדש כאשר אתה מזין ומציג רשימה לא מסוקנה של כל השיטות (וחברים אחרים בכיתה) הזמינות.הזן N
הרשימה תלסנן, והרשימה אמורה
Nextלהיות הבחירה העליונה.כדי להשלמה אוטומטית של המילה כולה, הקש על מקש Tab.
כדי לציין את אופרטור ההצבעות של פעולת השירות, הזן (
שים לב שהתו סוגריים הסוגר מתווסף עבורך באופן אוטומטי.
אופרטור הפעלת פעולת השירות הוא ערכת הסוגריים הממוקמת משמאל לשם פעולת השירות. חלק זה של משפט השיחות הוא המקום שבו תציין את הארגומנטים ש יועברו לפעולת השירות. האופרטור של הפעלת פעולת השירות נדרש בעת קריאה לפעולת השירות.
שים לב שהחלון המוקפץ IntelliSense מציג כעת מידע מפורט אודות
Random.Next()השיטה.קח דקה כדי לבדוק את החלון המוקפץ IntelliSense עבור
Random.Next()השיטה.הערה
אם החלון המוקפץ IntelliSense נסגר לפני שהייתה לך הזדמנות לבדוק אותו,
()מחק את אופרטור ההצבעות ולאחר מכן הזן ( כדי להציג את החלון המוקפץ IntelliSense.שים לב שהחלון המוקפץ כולל שלושה מקטעים, אחד מימין ושניים מימין.
בצד שמאל, אתה אמור לראות
int Random.Next()במקטע העליון ובסעיףReturns a non-negative random integer.התחתון. ההגדרהintשל סוג ההחזרה עבור פעולת השירות. במילים אחרות, כאשר גירסה זו של פעולת השירות מבוצעת, היא תחזיר ערך מסוגint.בצד הימני של החלון המוקפץ IntelliSense, מוצג
1/3.המציין
1/3שאתה מסתכל על החתימה הראשונה מתוך שלוש שיטות עבורNext()השיטה. שים לב שגירסה זו של חתימת פעולת השירות מאפשרת לפעולת השירות ללא פרמטרים (אין ארגומנטים שהועברו לפעולת השירות במשפט השיחות).שים לב שיש גם חץ קטנטן מעל ומתחת ל-
1/3.כדי לבחון את הגירסה השנייה של השיטה שנטסה מדי, הקש על מקש החץ למטה בלוח המקשים.
שים לב שבאפשרותך להשתמש במקשי החצים למעלה ולמטה כדי לנווט בין הגירסאות השונות עמוסות מדי. כאשר תעשה זאת, תראה
1/3את , ,2/33/3ותופיע בצד הימני של החלון המוקפץ של IntelliSense, והסברים שימושיים בצד ימין.קח דקה כדי לבדוק כל אחת מהגרסאות עמוסות מדי עבור
Random.Next()השיטה.הגירסה השנייה של פעולת השירות עמוסה מדי,
2/3מיידעת אותך כי פעולתNext()השירות יכולה לקבל פרמטרint maxValue. התיאור מציין כי הואmaxValueהגבול העליון הבלעדי עבור המספר שברצונך שהשיטהNext()תפיק. ערך בלעדי מציין כי מספר ההחזרה יהיה קטן מ- maxValue. לכן, כאשר תצייןdice.Next(1,7);את מספר הקוביות המרבי יהיה 6. שים לב שההודעה בחלק התחתון של המקטע עודכנה ל:Returns a non-negative random integer that is less than the specified maximum.הגירסה השלישית של השיטה, מודיעה
3/3לך שהשיטהNext()יכולה לקבל הן את הפרמטריםint minValueint maxValueוהן כפרמטרים. הפרמטר החדש,minValue, הוא גבול תחתון עבור המספר שברצונך שהשיטהNext()תפיק. מאחר שהגבול התחתון כולל ולא בלעדי, ערך ההחזרה יכול להיות שווה ל-minValue. ההודעה בחלק התחתון מציינת כעת:Returns a random integer that is within a specified range.במקרה זה, IntelliSense מספק את כל המידע הדרוש לך כדי לבחור את עומס היתר המתאים,
maxValueכולל הסבר מפורט של ו-minValue. עם זאת, ייתכן שתיתקל במצבים שבהם יהיה עליך לעיין בתיעוד השיטה.
השתמש learn.microsoft.com לקבלת מידע אודות שיטות עמוסות מדי
הדרך השניה ללמוד על גירסאות עמוסות מדי של השיטות היא לעיין בתיעוד של השיטה. התיעוד יעזור לך גם להבין בדיוק למה מיועד כל פרמטר.
כדי להתחיל, פתח את דפדפן האינטרנט ומנוע החיפוש המועדפים עליך.
ביצוע חיפוש עבור C# Random.Next()
החיפוש שלך צריך לכלול את שם המחלקה ואת שם פעולת השירות. ייתכן שתרצה גם לכלול את המונח
C#כדי לוודא שלא תקבל בטעות תוצאות עבור שפות תיכנות אחרות.בחר את תוצאת החיפוש העליונה עם כתובת URL המתחילה ב-
https://learn.microsoft.com.אחת מהתוצאות המובילות של החיפוש אמורה להוביל אל כתובת URL המתחילה ב-
https://learn.microsoft.com. במקרה זה, כותרת הקישור אמורה להופיע כ-Random.Next Method.הנה הקישור למקרה שאתה נתקל בבעיה באיתורו באמצעות מנוע חיפוש:
פתח את הקישור עבור C# Random.Next().
סרוק במהירות את התיעוד.
גלול מטה לאורך תוכן הדף כדי לראות את דוגמאות הקוד השונות. שים לב שבאפשרותך להפעיל את הדוגמאות בחלון הדפדפן.
התיעוד learn.microsoft.com כולל תבנית סטנדרטית עבור כל מחלקה ושיטה בספריית הכיתה של .NET.
בסמוך לחלק העליון של דף האינטרנט, אתר את המקטע עם התווית עומסי יתר.
שים לב שקיימות שלוש גירסאות עמוסות מדי של פעולת השירות המפורטות. כל גירסה עמוסה מדי המופיעה כוללת היפר-קישור למיקום לאורך הדף.
כדי לנווט אל "בעמוד" לתיאור של הגירסה השניה שנטסה יתר על תשובתה, בחר הבא(Int32).
התיעוד עבור כל גירסה של השיטה כולל:
- תיאור קצר של הפונקציונליות של פעולת השירות
- הגדרת פעולת השירות
- פרמטרים שהשיטה מקבלת
- ערכי החזרה
- חריגים שניתן להוסיף לתהוות
- דוגמאות לשיטה שבשימוש
- הערות אחרות אודות פעולת השירות
הת להימשך דקה כדי לסקור את המקטע פרמטרים.
במקטע פרמטרים , באפשרותך לקרוא שהפרמטר
maxValueהוא "הגבול העליון הבלעדי של המספר האקראי שיש ליצור". גבול עליון בלעדי פירושו שאם אתה מעוניין במספרים שאינם גדולים מ10- , עליך להעביר את הערך11.באפשרותך גם לקרוא בשורה הבאה: " חייב
maxValueלהיות גדול או שווה ל- 0." מה יקרה אם תתעלם מהצהרה זו? באפשרותך לראות במקטע חריגים שהשיטה תחזיר כאשר הואArgumentOutOfRangeExceptionקטןmaxValueמ- 0.הערה
התוכן ב- learn.microsoft.com הוא "מקור האמת" עבור ספריית הכיתה של .NET. חשוב להימשך זמן מה כדי לקרוא את התיעוד כדי להבין כיצד שיטה נתונה ת לפעול.
סיכום
- ייתכן ששיטות לא יקבלו פרמטרים או פרמטרים מרובים, בהתאם לאופן שבו הן תוכננו ויושמו. בעת העברת פרמטרים מרובים, הפרד אותם באמצעות
,סימן. - פעולות שירות עשויות להחזיר ערך כאשר הן משלים את המשימה שלהן, או שהן עלולות להחזיר ערך (לא תוקף).
- שיטות עמוסות מדי תומכות בכמה יישומים של פעולת השירות, שכל אחת מהן כוללת חתימת פעולת שירות ייחודית (מספר הפרמטרים וסוג הנתונים של כל פרמטר).
- IntelliSense יכול לעזור לכתוב קוד מהר יותר. הוא מספק עיון מהיר בשיטות, ערכי ההחזרה שלהן, הגירסאות שלהן עמוסות מדי וסוגי הפרמטרים שלהן.
- learn.microsoft.com הוא "מקור האמת" כאשר ברצונך ללמוד כיצד שיטות בספריית הכיתה של .NET פועלות.
בדוק את הידע שלך
משוב
האם עמוד זה היה מועיל?
לא
זקוק לעזרה בנושא זה?
רוצה לנסות להשתמש ב'שאל את Learn' כדי להבהיר או להדריך אותך בנושא זה?