שלום,
נראה שכבר הכרתם את אאוריקה. בטח כבר גיליתם כאן דברים מדהימים, אולי כבר שאלתם שאלות וקיבלתם תשובות טובות.
נשמח לראות משהו מכם בספר האורחים שלנו: איזו מילה טובה, חוות דעת, עצה חכמה לשיפור או כל מה שיש לכם לספר לנו על אאוריקה, כפי שאתם חווים אותה.
»
«
באג
מהו באג במחשבים?
באג הוא השם לתקלה במחשב או בתוכנה. הכל התחיל באחד מראשוני המחשבים בעולם - מחשב "הרווארד סימן 2". כשהתגלה במחשב סוג של עש (באנגלית BUG), מעין חרק שנתקע במחשב וגרם לתקלה הוחלט לקרוא לו "באג".
העש הוסר מהמחשב והודבק לדף ההתקלות 9 בשנת 1947. בעקבות אותו באג ראשון נהוג להתייחס לתקלות במחשב ובתוכנה כבאגים ומכאן המושג "באג". יש הטוענים שהמושג הומצא כבר במאה ה-19 אבל יש על כך ויכוחים רבים וספקות רבים.
הנה הבאגים במחשבים, דרך באג המחשבים הראשון:
http://youtu.be/NUnEoouyvGY
באג הוא השם לתקלה במחשב או בתוכנה. הכל התחיל באחד מראשוני המחשבים בעולם - מחשב "הרווארד סימן 2". כשהתגלה במחשב סוג של עש (באנגלית BUG), מעין חרק שנתקע במחשב וגרם לתקלה הוחלט לקרוא לו "באג".
העש הוסר מהמחשב והודבק לדף ההתקלות 9 בשנת 1947. בעקבות אותו באג ראשון נהוג להתייחס לתקלות במחשב ובתוכנה כבאגים ומכאן המושג "באג". יש הטוענים שהמושג הומצא כבר במאה ה-19 אבל יש על כך ויכוחים רבים וספקות רבים.
הנה הבאגים במחשבים, דרך באג המחשבים הראשון:
http://youtu.be/NUnEoouyvGY
מה ניתן לעשות עם לולאה בתכנות?
מתכנתים לא אוהבים לעשות שוב ושוב את אותה פעולה. לכן הם משתמשים בפטנטים כמו לולאה (Loop).
"לופ" (Loop), בעברית לולאה, היא קטע קוד שנרצה שיתבצע שוב ושוב, מספר מוגדר של פעמים או לפחות עד שהוא יסיים את תפקידו.
#יתרונות הלולאות בתכנות
אין שפת תכנות ללא לולאות. לולאה חוסכת משמעותית זמן ובאגים בתוכנה והופכת את הקוד לקצר, אלגנטי וקריא הרבה הרבה יותר.
#איך משתמשים בלולאה?
לולאה תשמש בקוד כדי לחזור על פעולה מספר מסוים של פעמים, או כל עוד או עד שתנאי מסוים יתמלא.
דוגמאות? - בתכנות מחשבים נדע לעתים כמה פעמים בדיוק נרצה שהוא יתבצע. אז נשתמש בלולאה שנקראת for.
בפעמים אחרות נרצה שהתכנית תבצע משהו פעמים רבות, אבל לא נקבע מראש כמה פעמים, אלא נרצה שהיא תתבצע כל עוד תנאי מסוים יתקיים. לעתים נראה שהיא תתבצע עד שתנאי מסוים יתקיים.
דוגמאות מהחיים? - אוקיי, נניח שהמורה לספורט מבטיח לכם שמספר סיבובי ריצה יעלו לכם את הציון ושעל כל סיבוב ריצה תקבלו 5 נקודות נוספות לציון.
#לולאת for
אתם אנשים מחושבים ולכן תרצו לרוץ עד 20 סיבובים. הרי ברור לכם שאין טעם להתאמץ אם כבר יש לכם ציון של 100. לולאת for תאפשר את זה בקלות. תשמשו ודאי בלולאה של 20 פעם סיבוב אחד ומובטח לכם ציון של 100.
למקרה הזה תתאים לולאת for. זו לולאה שתתבצע מספר פעמים מוגדר מראש. בשפות שונות הם יוצגו אחרת, אבל בעיקרון יש לה 3 מרכיבים המנוסחים בעזרת משתנה: ערך התחלה, תנאי הסיום וצעדי ההתקדמות של המשתנה.
#לולאת while
דוגמה אחרת. נניח שהמורה לספורט דורש שתרוצו, בלי ציונים ובלי עניינים. אבל הוא מבטיח לכם שאם תשברו רגל אז הוא יאשר הפסקה של הריצה. זה תנאי לוגי ולכן כשרגלכם תישבר, תוכלו להודיע לו או לצרוח מכאב והוא יאשר לכם להפסיק לרוץ. למזלנו החיים קצת פחות אלימים אבל כך פועלת לולאת תנאי... יכולנו כמובן לתת תנאי אחר, כמו לרוץ עד הצלצול.
אז לולאה זו מתנהלת כל עוד התנאי (ביטוי לוגי של Boolean expression) שבסוגריים מתקיים. נבחר בה במקרים שבהם איננו יודעים מראש כמה פעמים הלולאה תרוץ, אך יש לנו תנאי שכל עוד הוא מתקיים נרצה שהיא תרוץ. כלומר, כל עוד הביטוי הלוגי, שהוא התנאי בעצם, הוא true - הבלוק של הלופ, התכנית שלו, יתבצע. ברגע שהוא יהפוך ל-False אז היא לא תתקיים ויהיה דילוג מעליה.
יש גם לולאת do while, שהיא סוג נוסף של לולאה. היא מבצעת את מה שיש בה כמו while. אך בניגוד ל-while היא בודקת רק בפעם הראשונה את התנאי, כלומר do while בודקת בכל סיבוב מחדש האם התנאי מתקיים.
לעתים, אגב, נרצה לבדוק אם תנאי מסוים מתקיים ואם כן או לא, לפי הקוד, להפסיק את הלולאה. פקודת break בשפות תכנות שונות נועדה להפסיק כך את הלופ.
הנה סרטון שמסביר מהן לולאות:
https://youtu.be/r3Ti5Xp9W8A?end=1m53s
הלולאה לתלמידי תכנות שפת פייתון (עברית):
https://youtu.be/yBCNY__d4ic
והסבר לולאות ב-Javascript (עברית):
https://youtu.be/PaPMOL12V3g
מתכנתים לא אוהבים לעשות שוב ושוב את אותה פעולה. לכן הם משתמשים בפטנטים כמו לולאה (Loop).
"לופ" (Loop), בעברית לולאה, היא קטע קוד שנרצה שיתבצע שוב ושוב, מספר מוגדר של פעמים או לפחות עד שהוא יסיים את תפקידו.
#יתרונות הלולאות בתכנות
אין שפת תכנות ללא לולאות. לולאה חוסכת משמעותית זמן ובאגים בתוכנה והופכת את הקוד לקצר, אלגנטי וקריא הרבה הרבה יותר.
#איך משתמשים בלולאה?
לולאה תשמש בקוד כדי לחזור על פעולה מספר מסוים של פעמים, או כל עוד או עד שתנאי מסוים יתמלא.
דוגמאות? - בתכנות מחשבים נדע לעתים כמה פעמים בדיוק נרצה שהוא יתבצע. אז נשתמש בלולאה שנקראת for.
בפעמים אחרות נרצה שהתכנית תבצע משהו פעמים רבות, אבל לא נקבע מראש כמה פעמים, אלא נרצה שהיא תתבצע כל עוד תנאי מסוים יתקיים. לעתים נראה שהיא תתבצע עד שתנאי מסוים יתקיים.
דוגמאות מהחיים? - אוקיי, נניח שהמורה לספורט מבטיח לכם שמספר סיבובי ריצה יעלו לכם את הציון ושעל כל סיבוב ריצה תקבלו 5 נקודות נוספות לציון.
#לולאת for
אתם אנשים מחושבים ולכן תרצו לרוץ עד 20 סיבובים. הרי ברור לכם שאין טעם להתאמץ אם כבר יש לכם ציון של 100. לולאת for תאפשר את זה בקלות. תשמשו ודאי בלולאה של 20 פעם סיבוב אחד ומובטח לכם ציון של 100.
למקרה הזה תתאים לולאת for. זו לולאה שתתבצע מספר פעמים מוגדר מראש. בשפות שונות הם יוצגו אחרת, אבל בעיקרון יש לה 3 מרכיבים המנוסחים בעזרת משתנה: ערך התחלה, תנאי הסיום וצעדי ההתקדמות של המשתנה.
#לולאת while
דוגמה אחרת. נניח שהמורה לספורט דורש שתרוצו, בלי ציונים ובלי עניינים. אבל הוא מבטיח לכם שאם תשברו רגל אז הוא יאשר הפסקה של הריצה. זה תנאי לוגי ולכן כשרגלכם תישבר, תוכלו להודיע לו או לצרוח מכאב והוא יאשר לכם להפסיק לרוץ. למזלנו החיים קצת פחות אלימים אבל כך פועלת לולאת תנאי... יכולנו כמובן לתת תנאי אחר, כמו לרוץ עד הצלצול.
אז לולאה זו מתנהלת כל עוד התנאי (ביטוי לוגי של Boolean expression) שבסוגריים מתקיים. נבחר בה במקרים שבהם איננו יודעים מראש כמה פעמים הלולאה תרוץ, אך יש לנו תנאי שכל עוד הוא מתקיים נרצה שהיא תרוץ. כלומר, כל עוד הביטוי הלוגי, שהוא התנאי בעצם, הוא true - הבלוק של הלופ, התכנית שלו, יתבצע. ברגע שהוא יהפוך ל-False אז היא לא תתקיים ויהיה דילוג מעליה.
יש גם לולאת do while, שהיא סוג נוסף של לולאה. היא מבצעת את מה שיש בה כמו while. אך בניגוד ל-while היא בודקת רק בפעם הראשונה את התנאי, כלומר do while בודקת בכל סיבוב מחדש האם התנאי מתקיים.
לעתים, אגב, נרצה לבדוק אם תנאי מסוים מתקיים ואם כן או לא, לפי הקוד, להפסיק את הלולאה. פקודת break בשפות תכנות שונות נועדה להפסיק כך את הלופ.
הנה סרטון שמסביר מהן לולאות:
https://youtu.be/r3Ti5Xp9W8A?end=1m53s
הלולאה לתלמידי תכנות שפת פייתון (עברית):
https://youtu.be/yBCNY__d4ic
והסבר לולאות ב-Javascript (עברית):
https://youtu.be/PaPMOL12V3g
מהם משתנים בתכנות מחשבים?
דמיינו בקבוק ריק. זהו המשתנה שלנו. יש לו שם משתנה, בקבוק. בתוכנה יכולים להיות משתנים אחרים, כמו ארגז, ארון וכדומה. הם יכולים להיות גם מאוד ספציפיים, כמו ארון בגדים, ארון כלים או ארון נעליים.
נחזור למשתנה הבקבוק. נוכל לאחסן בו משקה כלשהו. סוג המשקה הזה הוא "ערך" המשתנה. הערך של המשתנה יכול להשתנות, כלומר תמיד ניתן לשתות או לשפוך את תוכן הבקבוק ואז למזוג אליו משקה אחר. זו הסיבה בתוכנת מחשב שהוא נקרא "משתנה" ולא "קבוע".
#בתוכנה
אז משתנה (Variable) בתכנות הוא מרכיב מרכזי בתוכנית מחשב, שמהווה בעצם זיכרון. הוא מעין תא תכנותי, קופסת איחסון (Place holder). הנתונים שנשמור במשתנה יכולים להיות כאלה שאנו מייצרים במהלך התכנית, או כאלה שקיבלנו מהמשתמש.
המשתנה מכיל נתון, שיכול להשתנות בזמן הריצה של התכנית - על פי הפקודות הניתנות לו. בכך הוא שונה מהקבוע (const או final), בו נשאר הערך שנקבע בתחילת ההרצה של התכנית ועד סופה ללא שינוי.
#התפקיד
משתנים הם ללא ספק אבני הבניין של שפות תכנות.
המשתנה משמש בתכנית כדי לזכור, לאחסן ולשמור על נתונים להמשך התכנית. זהו מעין לוקר תכנותי, שנוכל לתת לו שם, בהתאם לנתונים שהוא יאחסן. שם המשתנה הוא כמו התווית שעל הקופסה שהוא ובפעם הראשונה שנגדיר את המשתנה יופיע לפניו סימון שמדובר במשתנה (משהו כמו var, כקיצור של variable).
הנתונים שיאוחסנו במשתנה יכולים להיות מוגבלים לסוג מסוים. סוג המשתנה אומר מה יש או יכול להיות בו (מספרים שלמים, עשרוניים, מחרוזות תווים וכו').
למשל מחרוזות טקסט (שיוגדרו כ-String), מספרים שלמים (int), מספרים עשרוניים (double או float) ועוד. את הסוג של הנתונים, ניתן לקבוע כשמגדירים משתנה, כמו שהגדרנו var למשתנה כללי המקבל כל סוג של נתון.
#מה קורה כשמחליפים נתונים?
היות וניתן להחליף את ערכי המשתנה במהלך התכנית, הערך החדש יחליף את הקודם והמשתנה יקבל אותו מרגע השינוי. הערך הקודם, אם היה ספק, יישכח ולא יהיה משהו שיזכיר אותו. כך עובדת תכנית מחשב.
משתנים הם הבסיס של שפת תכנות באשר היא. הם מאפשרים לעשות מניפולציות על הנתונים ולאחסן בהם את התוצאות של אותן פעולות שעשינו.
את שם המשתנה קובע המתכנת. השם הזה הוא ייחודי ואין שני משתנים עם אותו השם. אם נטעה וננסה לתת שוב שם שכבר נתנו - נקבל שגיאה.
הנה סרטון שמסביר מהו משתנה:
https://youtu.be/xjZDZ1TJe4o?t=48s&end=1m53s
המשתנים לתלמידי תכנות שפת פייתון (עברית):
https://youtu.be/FadkQtKw2Dc
והסבר משתנים ב-Javascript (עברית):
https://youtu.be/F6hLRLho0Lc
דמיינו בקבוק ריק. זהו המשתנה שלנו. יש לו שם משתנה, בקבוק. בתוכנה יכולים להיות משתנים אחרים, כמו ארגז, ארון וכדומה. הם יכולים להיות גם מאוד ספציפיים, כמו ארון בגדים, ארון כלים או ארון נעליים.
נחזור למשתנה הבקבוק. נוכל לאחסן בו משקה כלשהו. סוג המשקה הזה הוא "ערך" המשתנה. הערך של המשתנה יכול להשתנות, כלומר תמיד ניתן לשתות או לשפוך את תוכן הבקבוק ואז למזוג אליו משקה אחר. זו הסיבה בתוכנת מחשב שהוא נקרא "משתנה" ולא "קבוע".
#בתוכנה
אז משתנה (Variable) בתכנות הוא מרכיב מרכזי בתוכנית מחשב, שמהווה בעצם זיכרון. הוא מעין תא תכנותי, קופסת איחסון (Place holder). הנתונים שנשמור במשתנה יכולים להיות כאלה שאנו מייצרים במהלך התכנית, או כאלה שקיבלנו מהמשתמש.
המשתנה מכיל נתון, שיכול להשתנות בזמן הריצה של התכנית - על פי הפקודות הניתנות לו. בכך הוא שונה מהקבוע (const או final), בו נשאר הערך שנקבע בתחילת ההרצה של התכנית ועד סופה ללא שינוי.
#התפקיד
משתנים הם ללא ספק אבני הבניין של שפות תכנות.
המשתנה משמש בתכנית כדי לזכור, לאחסן ולשמור על נתונים להמשך התכנית. זהו מעין לוקר תכנותי, שנוכל לתת לו שם, בהתאם לנתונים שהוא יאחסן. שם המשתנה הוא כמו התווית שעל הקופסה שהוא ובפעם הראשונה שנגדיר את המשתנה יופיע לפניו סימון שמדובר במשתנה (משהו כמו var, כקיצור של variable).
הנתונים שיאוחסנו במשתנה יכולים להיות מוגבלים לסוג מסוים. סוג המשתנה אומר מה יש או יכול להיות בו (מספרים שלמים, עשרוניים, מחרוזות תווים וכו').
למשל מחרוזות טקסט (שיוגדרו כ-String), מספרים שלמים (int), מספרים עשרוניים (double או float) ועוד. את הסוג של הנתונים, ניתן לקבוע כשמגדירים משתנה, כמו שהגדרנו var למשתנה כללי המקבל כל סוג של נתון.
#מה קורה כשמחליפים נתונים?
היות וניתן להחליף את ערכי המשתנה במהלך התכנית, הערך החדש יחליף את הקודם והמשתנה יקבל אותו מרגע השינוי. הערך הקודם, אם היה ספק, יישכח ולא יהיה משהו שיזכיר אותו. כך עובדת תכנית מחשב.
משתנים הם הבסיס של שפת תכנות באשר היא. הם מאפשרים לעשות מניפולציות על הנתונים ולאחסן בהם את התוצאות של אותן פעולות שעשינו.
את שם המשתנה קובע המתכנת. השם הזה הוא ייחודי ואין שני משתנים עם אותו השם. אם נטעה וננסה לתת שוב שם שכבר נתנו - נקבל שגיאה.
הנה סרטון שמסביר מהו משתנה:
https://youtu.be/xjZDZ1TJe4o?t=48s&end=1m53s
המשתנים לתלמידי תכנות שפת פייתון (עברית):
https://youtu.be/FadkQtKw2Dc
והסבר משתנים ב-Javascript (עברית):
https://youtu.be/F6hLRLho0Lc
איך מנפים שגיאות באמצעות ברווז גומי?
כשמתכנתים כותבים קוד שנועד לגרום למחשבים לעבוד בצורה מסוימת ולבצע פעולות מוגדרות, יפלו פה ושם גם שגיאות תכנות. אלו מכונות "באגים". כדי לאתר ולתקן שגיאות, הם משתמשים בשיטות שונות לאתר "באגים", שגיאות קוד.
אחת השיטות היותר משעשעות לאיתור באגים בקוד תוכנה היא "ניפוי השגיאות באמצעות ברווז גומי" (Rubber Duck Debugging). מדובר בשיטה משעשעת אך אמיתית לחלוטין לניפוי שגיאות קוד, שבעזרתה מתכנתים מוצאים באגים בתוכנת מחשב או במוצרי חומרה שמתוכנתים לפעול בדרך מסוימת. זאת כדי לתקנם ולגרום להם לפעול היטב.
בשיטה הזו מסביר המתכנת כיצד פועל הקוד שכתב, לחפץ דומם, כמו ברווז גומי. הרעיון הוא שתוך כדי ההסבר המפורט לברווז הגומי, שורה אחר שורה, של מה שעושה כל חלק של הקוד, יצליח המתכנת להבחין בשגיאות שבו, בזכות ההסבר שהוא נדרש לספק לגבי כל פעולה שמבצע הקוד.
מקור השם של השיטה הוא בסיפור שהוצג בספר "המתכנת המעשי" (The Pragmatic Programmer). בסיפור תואר מתכנת שמצליח לנפות שגיאות קוד שלו, בכך שהוא מכריח את עצמו להסביר את הקוד שלו לברווז הגומי הסתמי שלו.
השיטה נקראת גם "מבחן ברווז הגומי" או "בִּירווּז", על משקל תכנות. היא יעילה ותורמת גם לתיעוד יעיל של התוכנה או המכשיר, לצורך כתיבת חוברת למשתמש או להוראתה. בדיקת שגיאות תוך היעזרות בברווז גומי מקבילה לבדיקה של הקוד על ידי עמיתים (שיטה שנקראת "Code Review") ולשיטה שבה מסביר המתכנת את הקוד למתכנת עמית (Software Walkthrough).
הנה סרטון על הבירווז - ניפוי השגיאות בעזרת ברווז גומי:
https://youtu.be/SJC5DAfCrHY
סיפור הניפוי של השגיאות באמצעות ברווז הגומי:
https://youtu.be/huOPVqztPdc
כך מנפים את השגיאות בעזרת ברווז גומי:
https://youtu.be/m4_depGYVkM
כשמתכנתים כותבים קוד שנועד לגרום למחשבים לעבוד בצורה מסוימת ולבצע פעולות מוגדרות, יפלו פה ושם גם שגיאות תכנות. אלו מכונות "באגים". כדי לאתר ולתקן שגיאות, הם משתמשים בשיטות שונות לאתר "באגים", שגיאות קוד.
אחת השיטות היותר משעשעות לאיתור באגים בקוד תוכנה היא "ניפוי השגיאות באמצעות ברווז גומי" (Rubber Duck Debugging). מדובר בשיטה משעשעת אך אמיתית לחלוטין לניפוי שגיאות קוד, שבעזרתה מתכנתים מוצאים באגים בתוכנת מחשב או במוצרי חומרה שמתוכנתים לפעול בדרך מסוימת. זאת כדי לתקנם ולגרום להם לפעול היטב.
בשיטה הזו מסביר המתכנת כיצד פועל הקוד שכתב, לחפץ דומם, כמו ברווז גומי. הרעיון הוא שתוך כדי ההסבר המפורט לברווז הגומי, שורה אחר שורה, של מה שעושה כל חלק של הקוד, יצליח המתכנת להבחין בשגיאות שבו, בזכות ההסבר שהוא נדרש לספק לגבי כל פעולה שמבצע הקוד.
מקור השם של השיטה הוא בסיפור שהוצג בספר "המתכנת המעשי" (The Pragmatic Programmer). בסיפור תואר מתכנת שמצליח לנפות שגיאות קוד שלו, בכך שהוא מכריח את עצמו להסביר את הקוד שלו לברווז הגומי הסתמי שלו.
השיטה נקראת גם "מבחן ברווז הגומי" או "בִּירווּז", על משקל תכנות. היא יעילה ותורמת גם לתיעוד יעיל של התוכנה או המכשיר, לצורך כתיבת חוברת למשתמש או להוראתה. בדיקת שגיאות תוך היעזרות בברווז גומי מקבילה לבדיקה של הקוד על ידי עמיתים (שיטה שנקראת "Code Review") ולשיטה שבה מסביר המתכנת את הקוד למתכנת עמית (Software Walkthrough).
הנה סרטון על הבירווז - ניפוי השגיאות בעזרת ברווז גומי:
https://youtu.be/SJC5DAfCrHY
סיפור הניפוי של השגיאות באמצעות ברווז הגומי:
https://youtu.be/huOPVqztPdc
כך מנפים את השגיאות בעזרת ברווז גומי:
https://youtu.be/m4_depGYVkM