עצירת פונקציה באמצע ללא return

היי

אז אני עובדת על פונקציות במחברת 3. פתרתי את פיזבאז בקוד קצר למדי אבל אחר כך הבנתי שאני בעצם עושה שתי פעולות באותה פונקציה - גם בודקת אם המספר מתחלק ב-3 וגם בודקת אם המספר מתחלק ב5 והבנתי מהתרגולים שזה לא טוב ולכל פונקציה צריכה להיות רק פעילות אחת.

אז כתבתי במקום זה שלוש פונקציות ויצא הרבה יותר ארוך וגם נתקלתי בבעיה שבה אני לא רוצה שהפונקציה תמשיך לרוץ אחרי שאם תנאי אחד מתקיים, אבל מצד שני אני לא צריכה שהיא תחזיר שום דבר וחוששת שאם אני סתם אעשה return ולא אכניס את זה למשתמש כלשהו או אעשה עם זה משהו, זה יעשה בלגן בקוד.

אז בעצם שלוש שאלות:

  1. האם ההחלטה לעשות קוד ארוך בהרבה אבל עם שלוש פנקציות שכל אחת בודקת משהו אחר זאת ההחלטה הנכונה?
  2. אם אני אכתוב סתם return כדי לעצור את המשך הרצת הפונקצייה האם זה יכול לעשות בעיות?
  3. במידה ולא ניתן לעשות סתם return האם יש דרך אחרת לגרום ללולאה מלאה ב if להפסיק לרוץ אם תנאי מסויים התקיים?

תודה רבה!

היי הדס,

קודם כל, כל הכבוד! נשמע שאת מתייחסת ברצינות לעקרונות שאנחנו מנסים להתוות.

לגבי השאלות שלך:

  1. האמת שזה נושא שהוא עולם ומלואו בכל מה שקשור להנדסת תוכנה ויש הרבה מאוד שיקולים. אבל התשובה הישירה לשאלה שלך היא כן! חד משמעית כן! - אם הקוד ארוך אבל מחולק בצורה נכונה, הרבה יותר קל לבודד את הבעיה ולטפל בה מאשר בקוד קצר וסבוך.

  2. זה יכול לעשות בעיות אם לא משתמשים בזה כמו שצריך. ממליץ לך לצפות בתרגול פונקציות ולראות את הדוגמאות שהבאתי שם. יש שם התייחסות למקרה הזה בדיוק.

  3. תראי את התרגול וספרי לי אם ענית לעצמך =).

איתמר

לייק 1

היי איתמר

תודה על התשובה. בהחלט ראיתי את התרגול, לכן שיניתי את הקוד שכתבתי :slight_smile: אבל באמת בצפייה ראשונה פיספסתי את זה. בצפייה שנייה נראה לי שאפשר לכתוב return בלי כלום אחריו רק כדי לעצור את הריצה של הפונקציה באותו מקום. בגדול השתמשתי בזה וזה עבד, אני מקווה שזה לא מיקרי… . הבנתי נכון? תודה!

זה לא מקרי, זה באמת שימוש נכון. רק צריך לשים לב שבפונקציות שאנחנו מצפים לקבל מהם תוצאה, אם השתמשנו ב-return בנקודה מסוימת אז צריך להחזיר תוצאה בהתאם - אבל על כל זאת נדבר בעתיד.

איתמר

אני מרגיש צורך להגיב לך איתמר, כי בהתכתבות של הדס ושלך, הועלתה נקודה שעשויה לענות לתהיות שהיו לי במהלך פתירת חלק מהתרגילים בחוברות:

יש פעמים שפתירת הקוד ללא פונקציות יכולה להיות מסורבלת מאוד בהשוואה לפתירת הבעיה עם שימוש בפונקציות. אולם היו פעמים שדווקא הרגיש לי הפוך: שפתירת בעיה עם פונקציות הרגישה לי לא רק ארוכה, אלה גם מאוד מסורבלת שגורמת לי הרגשה שאני מסבך את התרגיל עוד יותר. לעומת פתירת הבעיה עם ללא פונקציה (עם פקודות קלט, והתניות).
השאלה שלי היא האם תמיד כדאי לפתור את הבעיה עם פונקציות, או שישנם שיקולים שצריך לקחת בחשבון על פיהם מחליטים איזה כלי הכי יעיל לפתור את הבעיה?

יכול להיות שיש פה חשיבה שהיא מאוד שונה למה שאני רגיל: אני לרב מעדיף לפתור בעיות/תרגילים בדרך הקצרה ביותר והפשוטה ביותר. אולם יכול להיות שהדרך הקצרה ביותר היא לא בהכרח הדרך היעילה ביותר.

קודם כל אני שמח שאתה מגיב לי, הדיונים האלה חשובים מאוד לתהליך הלמידה.

תראה, כמו שציינתי בהתחלה, זה עולם ומלואו ויש המון שיקולים לאיך לעצב תוכנה, אנחנו מנסים לחשוף אתכם לזה על קצה המזלג.
אם אתה מרגיש שיותר קל לך ואתה חושב שחלוקה לפונקציות רק מסרבלת, אז תעשה כמו שאתה חושב ושים לב להערות שלנו. לאורך הדרך תיחשף לסגנונות אחרים.
שים לב שאת התרגילים היותר מתקדמים “חילקנו” עבורכם את התרגיל לפונקציות באמצעות כמה סעיפים על מנת להרגיל אתכם לעבודה מהסוג הזה ולדרך לתקוף בעיות.

כלל אצבע אחד אני כן מבקש להדגיש - אם אתם שמים לב שאתם משכפלים קוד (copy + paste) בין כל מיני פונקציות - אז הקוד המשוכפל חייב לצאת לפונקציה.

איתמר

לייק 1