PracticU

תרגילים 12-14

בלי כתוביותעם כתוביות
PracticU › קורס ג'אווה סקריפט מעשי - JavaScript › תרגילים 12-14
מילון מושגים:
כפתור - רכיב בממשק המשתמש שהמשתמש לוחץ עליו כדי להפעיל פעולה, כמו שליחת טופס או מעבר לדף אחר.
מערך - מבנה נתונים שמאחסן אוסף ערכים מאותו סוג ברצף, שאפשר לגשת אליהם לפי מספר מיקום (אינדקס).
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
משתנה - שם שמפנה למקום בזיכרון שבו נשמר ערך שיכול להשתנות במהלך ריצת התוכנית, כמו מספר, טקסט או אובייקט.
לולאה - מבנה בקרה שחוזר על קטע קוד שוב ושוב כל עוד תנאי מתקיים או עבור כל פריט באוסף.
תנאי - ביטוי לוגי בקוד שתוצאתו אמת או שקר, וקובע אילו פקודות יתבצעו בהתאם לערכו.
דפדפן - תוכנה שמציגה דפי אינטרנט ומריצה את הקוד שבהם, ומאפשרת לגלוש בין אתרים, למשל Chrome או Firefox.

תרגילים 12-14
בתרגילים 12 עד 14 בונים משחק ניחושים: המחשב מגריל ארבעה מספרים, והמשתמש מנסה לנחש אחד מהם. בכל תרגיל מוסיפים כלל אחד נוסף למשחק, ובסוף מתקבל משחק מלא עם הגבלה על מספר הניסיונות ומניעת מספרים כפולים.
תרגיל 12: המשחק הבסיסי
1. שני כפתורים ותיבת טקסט: כפתור אחד מגריל מספרים חדשים, השני בודק את הניחוש, ותיבת הטקסט מאפשרת למשתמש להכניס את הניחוש.
2. מערך משותף: המערך מוכרז מחוץ לפונקציות, כדי ששתי הפונקציות יראו אותו. פונקציה רואה את מה שבתוכה ואת מה שמעליה, אבל לא את המשתנים של השכנה שלה.
3. הגרלה: ארבע פעמים מגרילים מספר בין 0 ל-9 ודוחפים אותו למערך בעזרת push.
4. איפוס: בכל לחיצה על הכפתור המערך מתאפס למערך ריק, כדי שלא יצטברו מספרים ישנים. המרצה מראה שבלי האיפוס המערך גדל בארבעה בכל לחיצה.
5. בדיקה: לולאה עוברת על המערך ומשווה לערך שהמשתמש הכניס. כשנמצאה התאמה, break עוצר את הלולאה.
6. הודעה: if ו-else מציגים הצלחה או כישלון. בניחוש שגוי מוצגת הודעה שמבקשת לנסות שוב.
תרגיל 13: מונה ניסיונות
1. מונה גלובלי: משתנה counter מוכרז מחוץ לפונקציה ומתעדכן בכל לחיצה, כך שהוא נשמר בין הלחיצות.
2. הודעה: המשחק מציג כמה פעמים כבר ניסינו, למשל "ניסית פעמיים", ואחרי ניחוש שגוי הודעה מתאימה לניסיון הראשון או השני.
תרגיל 14: שתי הזדמנויות בלי כפילויות
1. הגבלה: if בודק שהמונה קטן משלוש. אם לא, מופיעה הודעה שהמשחק נגמר.
2. איפוס: הכפתור מאפס את המונה, מרוקן את תיבת הטקסט ומנקה את התוצאה.
3. ללא כפילויות: לולאת do while מגרילה מחדש כל עוד המספר כבר נמצא במערך.
4. פונקציית עזר: פונקציה שבודקת אם מספר נמצא במערך ומחזירה true או false, כדי שהלולאה הראשית תהיה קצרה וברורה.
5. לולאה פנימית: בתוך הפונקציה עוברים על המערך עם for עד array.length, ובודקים כל איבר מול המספר שהוגרל.
שימו לב
1. סדר התנאים: המרצה מדגיש שכתיבה שגויה של תנאי עלולה לתקוע את הדפדפן בלי הודעת שגיאה. כדאי לכתוב >= בסדר הנכון.
2. פיצול לפונקציות: כל יחידה לוגית מחולקת לפונקציה נפרדת, וזה מקל על הקריאה ועל התחזוקה של הקוד.
3. הרחבה: המשחק הזה הוא בסיס לשדרוגים נוספים, ולכן כדאי להכיר את הדרך שבה הוא בנוי.
4. סדר השלבים: כל תרגיל בונה על הקודם. קודם מבינים את המערך והבדיקה, אחר כך את המונה, ורק אחר כך את ההגבלה ואת מניעת הכפילויות.
5. סיכום: בסוף התרגילים המשחק מציג הודעות לפי מצב המשחק, מנהל את מספר הניסיונות, ומונע מספרים כפולים בהגרלה.
השיעור הבא בקורס: תרגילים 15-16

פרקי ההרצאה: תרגילים 12-14

  1. 00:00

    מבוא לתרגילים 12-14 עם פונקציות

  2. 01:04

    שני כפתורים: מספרים חדשים ובדיקה

  3. 03:01

    מערך משותף מחוץ לפונקציות

  4. 03:41

    הגרלת ארבעה מספרים למערך

  5. 06:28

    תיקון: איפוס המערך בכל לחיצה

  6. 08:02

    הבנת scope ומשתנה שאינו מוגדר

  7. 10:00

    קריאת הניחוש מתיבת הטקסט

  8. 12:31

    בדיקת הניחוש מול המערך

תמלול ההרצאה: תרגילים 12-14

הטקסט המלא של הדקות הראשונות בהרצאה «תרגילים 12-14» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:03

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

  2. 00:18

    אז אנחנו צריכים עכשיו לעשות טקסט בוקס, תיבת טקסט שבו יוזר כותב מה הוא רוצה, איזשהו מספר שהוא חושב שהמחשב חשב עליו והמחשב חושב מגריל ארבעה מספרים אקראיים.

  3. 00:36

    עוד פעם, המחשב מייצר מערך של 4 מספרים אקראיים מ-1 עד 10 כל מספר או מ-0 עד 9 מ-0 עד 9 הוא ייצר לנו מערך של 10 מספרים ואנחנו צריכים לנחש מה המחשב מה המחשב עשה אוקיי לנחש אז בואו תראו בואו תראו אנחנו מתחילים עם זה שנעשה שני כפתורים כפתור אחד מגריל

  4. 01:10

    מספרים למחשב כאילו לזיכרון של המחשב וכפתור שני שבודק האם יוזר צדק או לא אז אנחנו עושים שני כפתורים כפתור של New Numbers וכפתור של צ'ק ותיבת טקסט שהיוזר יוכל לרשום את המספר שהוא חושב המטרה שהיוזר ינסה המשתמש ינסה לנחש את אחד מארבעת המספרים של המחשב כאשר כל מספר יכול להיות מאחד עד עשר אנחנו מכניסים תיבת טקסט נשים שם איזה ערך

  5. 01:53

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

  6. 02:27

    אז יש לנו פה כפתור שנקרא מספרים חדשים, יש לנו תיבת טקסט שהמשתמש יכול להכניס בה את הנחוש שלו, ויש לנו כפתור צ'קי תבדוק את זה, לבדוק את הניחות של המשתמש.

  7. 02:52

    בואו נרשום עכשיו את הפונקציות 12a ו-12b. אנחנו צריכים לשתי הפונקציות מערך משותף של מספרים אלו שהמחשב יגריל אותם, אז אנחנו צריכים להכריז על המערך הזה מחוץ לפונקציה, לא הראשונה ולא השנייה, מחוץ לשתי הפונקציות כדי ששניהם יוכלו לראות את המערך הזה, אחרת אם היינו עושים אותו בתוך אחת הפונקציות השנייה לא הייתה יכולה לראות,

  8. 03:24

    כי כל פונקציה יכולה לראות רק את מה שיש בתוכה, מעליה אבל היא לא יכולה להציץ למשתנים הפנימיים של השכנים זה נקרא סקופ מה רואה הפונקציה ומה בכל רגע אפשר לראות טוב בואו נעשה לולאה שרצה ארבע פעמים ומגרילה לנו מספר אקראי נתחיל מזה שאנחנו מעגלים

  9. 03:52

    את המספר האקראי לוקחים מספר אקראי מכפילים אותו בעשר ומעגלים כלפי מטה זאת אומרת שפונקציה שמעגלת מקבלת בסוגריים שלה את המספר האקראי כפול 10.

  10. 04:13

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

  11. 04:33

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

  12. 05:06

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

  13. 05:30

    שהמחשב הגריל כדי שאני אוכל לבדוק את התוכנה. אולי בסוף, אחרי שאני אסיים לבדוק את זה, אז אני אוריד את השורה הזאת.

  14. 05:41

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

  15. 06:01

    רגע, רגע, ביקשתי ממנו ארבע פעמים, למה זה כזה ארוך? לא, ביקשתי ממנו רק ארבע פעמים לעשות פוש, והוא עשה לי 20 פעם, למה יש לי 20 מספרים פה?

  16. 06:19

    בואו ננסה עוד פעם, ארבע, הכל בסדר, לא? כן, ארבע מספרים. בואו ננסה עכשיו עוד פעם, נהיה לנו שמונה מספרים, נהיה לנו 12 מספרים, אתם רואים?

  17. 06:36

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

  18. 06:54

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

  19. 07:10

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

  20. 07:25

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

  21. 07:40

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

  22. 08:03

    הם יכולים לראות שהפונקציה השנייה לא רואה אותו, היא לא רואה אותו, היא פשוט לא רואה אותו. מבחינתה זה לא מוגדר, המשתנה הזה לא מוגדר, הנה היא עושה שגיאה, אומרת undefined.

  23. 08:20

    כשהמערך הזה is not defined, task12.arrnums is not defined, המערך לא מוגדר, אז בגלל שהמערך הזה לא מוגדר, למה הוא לא מוגדר בעצם?

  24. 08:35

    בגלל שצריך להגדיר אותו ב-level מעל. ברגע שאני מגדיר אותו כאן, שתי הפונקציות רואות אותו. ברגע שאני מגדיר אותו בתוך אחת הפונקציות, רק פונקציה אחת רואה אותו.

  25. 08:48

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

  26. 09:07

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

  27. 09:48

    זה לא משנה את הערך שיש בתוך הטקסט בוקס הולכים ומעתיקים את מה שיש לנו בטקסטבוקס בגלל שאנחנו ב-check query לא לשכוח לשים סולמית לפני המזהה כדי שהוא ידע שזה מזהה ולא קלאס ולא אלמנט ולוקחים נקודה val, נקודה val זה value זה ערך של טקסטבוקס או של כל input type לעומת inner html בdb ו html בdb וברכיבים אחרים

  28. 10:26

    val זה בטקסטבוקס וברכיבי input אנחנו יכולים גם לעשות את אותו הדבר בעזרת JavaScript טהור לידי get-element-by-id ואז לרשום נקודה value document-get-element-by-id יפה מאוד עכשיו שתי השיטות עובדות הן אחת לא מפריעות לשנייה שניהן יכולות לעבוד ביחד בואו אני אראה לכם

  29. 10:55

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

  30. 11:35

    ועכשיו אנחנו נראה שגם זה עובד, גם JavaScript רגיל עובד וגם JQuery עובד, שניהם עובדים ולא מפריעים אחד לשני והכל בסדר. זה שלוש וההוא שלוש והכל בסדר.

  31. 11:48

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

  32. 12:15

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

  33. 12:47

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

  34. 13:14

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

  35. 13:42

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

  36. 14:16

    ננסה להכניס לו מספר 5, בואו נראה מה קורה. userNum שווה 5, יפה. עושים לו parse, הוא נשאר 5, רק בלי גרשיים. אורך המערך 4, כי יש 4 איברים במערך. מתחילים לרוץ על כל האיברים במערך.

  37. 14:45

    לדוגמה, האיבר הראשון הוא 6, הוא באמת 6.

לקורס המלא: קורס ג'אווה סקריפט מעשי

ההרצאה הקודמת: תרגילים 10-11

ההרצאה הבאה: תרגילים 15-16

הרצאות קשורות מקורסים אחרים

  • תרגילים על Collections
  • תרגילים על מטריצות בג'אווה
  • תרגילים מסכמים בנושא עיצוב

קורסים נוספים במסלול

  • קורס יסודות HTML - בניית אתר אינטרנט פשוט
  • קורס CSS 3 - בדגש על Flex & Grid
  • קורס Javascript כולל JQuery
  • קורס TypeScript
  • קורס ריאקט - React
  • קורס NodeJS