פונקציות functions בשפות תכנות הן בלוק או מבנה מאורגן של קוד שנועדות לבצע פעולה מסוימת שהוגדרה מראש, כך שאנו יכולים להיעזר בהן על מנת להקל על כתיבת הקוד ולמטרת שימוש חוזר בפקודות
בקורס זה נחשפנו כבר לפונקציות כגון printf() ו-main(). פונקציות מסוג זה נקראות פונקציות מובנות אשר מגיעות עם שפת התכנות, אך אנו גם יכולים להכין פונקציות בעצמנו. בפרק זה נלמד כיצד ליצור פונקציה ולהשתמש בה.
פונקציות הן קונספט שקיים כמעט בכל שפות התכנות הקיימות, כאשר שפות תכנות שונות לעתים משתמשות בכינויים שונים לפונקציות, למשל methods, sub–routines. אם תתקלו באחד ממושגים אלו, התייחסו אליהם כאל בעלי קונספט דומה או זהה לפונקציות functions.
פונקציות בשפת C
כעת נכתוב תוכנית שבה נקים שני מערכי מספרים, ולאחר מכן נחפש את הספרה הגדולה ביותר בכל מערך, על ידי נקיטת הצעדים הבאים:
- 1. ניקח רשימת מספרים – L1, L2, L3….LN
- 2. נניח ש-L1 הוא המספר הגדול, אז max = L1
- 3. ניקח את המספר הבא בסדרה Li ונבצע את הפעולות הבאות –
- 4. אם max הוא קטן יותר מ-Li
- 5. אז max = Li
- 6. אם Li הוא המספר האחרון ברשימה
- 7. נדפיס את הערך שנמצא ב-max
- 8. else נתחיל את התהליך מחדש משלב 3
שימו לב כי לחלק מאיתנו מידע זה יהיה יותר ברור כשהוא כתוב כמקטע קוד:
#include <stdio.h> int main() { int set1[5] = {10, 20, 30, 40, 50}; int set2[5] = {101, 201, 301, 401, 501}; int i, max; /* Process first set of numbers available in set1[] */ max = set1[0]; i = 1; while( i < 5 ) { if( max < set1[i] ) { max = set1[i]; } i = i + 1; } printf("Max in first set = %d\n", max ); /* Now process second set of numbers available in set2[] */ max = set2[0]; i = 1; while( i < 5 ) { if( max < set2[i] ) { max = set2[i]; } i = i + 1; } printf("Max in second set = %d\n", max ); }
ואז נקבל את התוצאה הבאה:
Max in second set = 501
במידה והבנתם דוגמה זו כהלכה, הבנתם גם מדוע אנו צריכים להשתמש בפונקציות, כי הרי תארו לכם סיטואציה שבה נאלץ לבדוק 80 מערכי מספרים ולא רק 2, בסיטואציה כזו נצטרך לכתוב המון שורות קוד כדי לכתוב את התכנית שכבר תהיה פחות ברורה וקריאה. על מנת שנוכל להתמודד מול סיטואציות כאלו, אנו יכולים להגדיר בעצמנו פונקציות אשר מכילות את הקוד שאנו מעוניינים לחזור עליו שוב ושוב, ולקרוא לפונקציה בשעת הצורך.
הגדרת פונקציה function
פונקציה בשפת התכנות C נראית כך:
return_type function_name( parameter list ) { body of the function return [expression]; }
- Return Type – פונקציה יכולה להחזיר ערך, כלומר ש-return_type הוא סוג הנתונים של הערך שהפונקציה מחזירה. יש לציין שיש פונקציות שאינן מחזירות ערך, ובמקרה כזה ה-return_type הוא מילת המפתח void
- Function Name – זהו למעשה השם של הפונקציה. שם הפונקציה ורשימת הפרמטרים משמשות למעשה כחתימת הפונקציה
- Parameter List – רשימת הפרמטרים. לפרמטר ניתן להתייחס כאל מעין שומר מקום. כאשר פונקציה נקראת לפעולה, אנו נותנים ערך כפרמטר, ערך זה נחשב כפרמטר המקורי. רשימת הפרמטרים מתייחסת לסוג, סדר ומספר הפרמטרים בפונקציה, כאשר פרמטרים הם למעשה אופציונליים, כלומר שניתן להגדיר פונקציה ללא פרמטרים.
- Function Body – גוף הפונקציה מכיל למעשה את מקטע הקוד שמגדיר מה הפונקציה עושה.
לקרוא לפונקציה function
כאשר אנו יוצרים פונקציה בשפת C, אנו מגדירים לפונקציה מה עליה לעשות. על מנת להשתמש בפונקציה, עלינו לקרוא לאותה הפונקציה כדי שתבצע את מה שהגדרנו לה לעשות. כעת נכתוב את אותה התוכנית כמו בדוגמה שלמעלה רק שהפעם נעזר בפונקציה:
#include <stdio.h> int getMax( int set[] ) { int i, max; max = set[0]; i = 1; while( i < 5 ) { if( max < set[i] ) { max = set[i]; } i = i + 1; } return max; } int main() { int set1[5] = {10, 20, 30, 40, 50}; int set2[5] = {101, 201, 301, 401, 501}; int max; /* Process first set of numbers available in set1[] */ max = getMax(set1); printf("Max in first set = %d\n", max ); /* Now process second set of numbers available in set2[] */ max = getMax(set2); printf("Max in second set = %d\n", max ); }
על מנת שנקבל את התוצאה הבאה:
Max in second set = 501
כפי שניתן לראות בדוגמה זו, בראש התוכנית הגדרנו את הפונקציה, ולאחר שהקמנו את המערכים, כל שהיה עלינו לעשות זה לקרוא לפונקציה.
פונקציות בשפת Java
נושא הפונקציות בשפת C הוא זהה לזה המקביל בשפת Java, רק שבשפת Java פונקציות נקראות methods, אך כפי שציינו הקונספט נשאר פחות או יותר זהה. זוהי דוגמה של אותה התוכנית, כאשר הפעם היא נכתבה בשפת Java:
public class Main { public static void main(String []args) { int[] set1 = {10, 20, 30, 40, 50}; int[] set2 = {101, 201, 301, 401, 501}; int max; /* Process first set of numbers available in set1[] */ max = getMax(set1); System.out.format("Max in first set = %d\n", max ); /* Now process second set of numbers available in set2[] */ max = getMax(set2); System.out.format("Max in second set = %d\n", max ); } public static int getMax( int set[] ) { int i, max; max = set[0]; i = 1; while( i < 5 ) { if( max < set[i] ) { max = set[i]; } i = i + 1; } return max; } }
וגם היא תיתן לנו בדיוק את אותו הפלט:
Max in second set = 501
פונקציות בשפת Python
גם ב-Python פונקציות נכתבות באופן דומה לזה של שפת C, על מנת להגדיר פונקציה בשפת Python נשתמש בתחביר הבא:
def function_name( parameter list ): body of the function return [expression]
זוהי דוגמה של אותה התוכנית, כאשר נעזרנו בתחביר זה על מנת שנוכל להתאים אותה לשפת Python:
def getMax( set ): max = set[0] i = 1 while( i < 5 ): if( max < set[i] ): max = set[i] i = i + 1 return max set1 = [10, 20, 30, 40, 50] set2 = [101, 201, 301, 401, 501] # Process first set of numbers available in set1[] max = getMax(set1) print ("Max in first set = ", max) # Now process second set of numbers available in set2[] max = getMax(set2) print ("Max in second set = ", max)
וכאשר נריץ אותה נקבל את אותו הפלט בדיוק:
Max in second set = 501