עכשיו בואו נדבר על משהו שאתם משתמשים בו כל הזמן: פונקציות. בכל פעם שאתם משתמשים בפקודה כמו ()rect או ()fill או ()text אתם בעצם קוראים לפונקציות, והפונקציות האלו מציירות מה שאמרתם להן לצייר. מהי פונקציה בעצם? זהו אוסף של קוד שאנחנו מקבצים יחד ונתנו לו שם מכיוון שאנחנו רוצים להשתמש בפונקציונאליות של הקוד הזה פעמים נוספות בהמשך. תחשבו על ()rect, מה בעצם ()rect עושה? היא בסך הכל מצייאת ארבעה קווים נכון? אנחנו יכולים פשוט לעשות את זה עם פונקציית ()line נכון? וכאן יש לנו משהו שנראה כמו מלבן. אבל אנחנו מבינים שאנחנו בעצם רוצים לשרטט ריבוע כמה פעמים, וזה יהיה מאוד מעצבן לעשות את המתמטיקה כל פעם כדי להבין איך לצייר קו מפינה אחת לשנייה וכן הלאה. במקום, אנחנו פשוט משתמשים בפונקצייה ()rect, והפונקציה הזו יודעת לעשות בדיוק את מה שארבעת שורות הקוד האלו עושות, אבל בהרבה פחות קוד. אז זה די מגניב, ו-()rect היא אחת מהפונקציות האלו שנעשה בהן שימוש בכל התוכניות שלנו כאן באקדמיית קאהן. אבל - אתם יכולים לעשות גם פונקציות משלכם על מנת להשתמש בהן בתוכניות. לדוגמא, בואו נגיד שאנחנו עושים תוכנית ואנחנו רוצים לצייר את צ׳רצ׳יל הברווזון מספר פעמים - אולי בגלל שאנחנו הולכים לספר את סיפור חייו של צ׳רצ׳יל ורוצים להראות אותו בכל גיל בחייו. אז, הנה איך שהקוד שלנו שמצייר את צ׳רצ׳יל אמור להתחיל: יש לנו את המשתנים faceX ו-faceY על מנת לאחסן את אמצע הפרצוף, ואז אחנו מציירים את העיניים והפה ביחס למשתנים האלו. נכון לעכשיו התוכנה רואה את הקוד, והוא לא בתוך פונקציה מסויימת - הוא פשוט רץ (מבוצע) והוא רץ רק פעם אחת. אוקיי, בואי נהפוך את זה לפונקציה. אנחנו עושים את זה בצורה דומה מאוד לצורה שבה אנחנו מסתכלים על משתנים, מכיוון שזה בדיוק מה שאנחנו עושים. אז אנחנו אומרים ש"var drawWinston״ - ניתן לזה שם יפה, מאוד תיאורי - ואז ״=״, אבל כאן, במקום לכתוב מספר או טקסט, אנחנו הולכים לכתוב את המילה פונקציה באנגלית ״function״ (וודאו שאתם מאייתים נכונה) ואז סוגריים ריקים ״()״ ואז נפתח ונסגור סוגריים מסולסלים וכמובן נקודה פסיק. אז מה שאנחנו צריכים לעשות זה לשים את כל מה שאנחנו רוצים שיהיה בתוך הפונקציה שלנו בתוך הסוגריים המסולסלים. אז אחנו הולכים לקחת את כל הקוד הזה, לשים אותו בתוך הפונקציה (ליישר אותו כראוי), והנה! עכשיו מה שיש לנו בעצם זה משתנה שמאחסן פונקציה - כך שבעצם נתנו שם לבלוק הקוד הזה כך שנוכל להגיד לתוכנית שלנו בכל נקודת זמן, היי תריץ את הקוד הזה עם השם שאמרתי לך!. אז אנחנו עושים זאת לטובת שימוש חוזר. שימו לב אבל, שאין לנו את ווינסטון יותר! איבדנו את ווינסטון! לאן הוא הלך? אוקיי, מה שקרה הוא שברגע שלקחנו את הפונקציה הזו והעברנו אותה למקום אחר, אמרנו לתוכנית שלנו ״היי, יש פה מלא קוד שאנחנו רוצים שירוץ אחר כך, אבל רק כשאני אומר לך להריץ אותו״ אז אנחנו חייבים להגיד לו להריץ את הקוד, מה שאומר שאנחנו חייבים לקרוא לפונקציה - בדיוק כפי שאנחנו עושים עם ()eclipse או ()rect או ()line. אז אנחנו פושטים כותבים את שם הפונקציה 'drawWinston') ואחריה הסוגריים שלנו ונקודה פסיק והופה! יש לנו את ווינסטון! אוקיי! אני חושבת שזה מגניב, אבל אתם אולי לא תחשבו שזה מגניב מכיוון שכל מה שעשינו הוא לגרום לתוכנית לעבוד בדיוק כמו מקודם, קצת מטופש לא? כל הטעם מאחורי פונקציות הוא שאנחנו יכולים להשתמש בהם שוב. אז בואו נעשה את זה עכשיו. אנחנו יכולים פשוט לשכפל את הקריאה לפונקציה ולשכפל שוב ושוב. אבל זה נראה אותו הדבר. זה עובד, זה מצייר את ווינסטון מספר פעמים, אבל הבעיה היא שהוא תמיד באותו המקום. אם היה לנו ראיית רנטגן אז היינו יכולים לראת את ווינסטון, אבל אין לנו! אבל, אנחנו יכולים לעשות שינוי קטן לפונקציה שלנו שאולי כן ייגרום להפרדה כלשהי. אז אתם רואים את faceX ו-faceY - הם תמיד 202 ו-208? אנחנו יכולים לשנות אותם בעזרת הפונקציה ()random. בוא ניקח random מ-50 עד 350 וזה ייצר מספר בין שני אלה - ואנחנו יכולים לעשות את אותו הדבר כאן - וכך כל פעם שהפונקציה נקראת, היא מייצרת מספר רנדומלי חדש. אם נעשה ריסטרט, נוכל להמשיך לקבל מספרים אקראיים. אם כן, אז אני חושבת שזה מגניב בגלל שזה היה יכול להיות הרבה שורות קוד לכתוב אם לא היה לנו את זה בפונקציה - וזה גם היה כנראה פי 3 קוד. אבל זה עדיין לא הכי עוזר כמו שזה יכל היה להיות. מכיוון שאנחנו כנראה לא רוצים ווינסטון רנדומלי, אנחנו כנראה רוצים להיות מסוגלים למקם את ווינסטון במקום ספציפי במסך. תישארו איתנו! הסרט הבא מדבר על פונקציות שמקבלות סטרינגים טקסטואלים ועושות איתם מגוון דברים