שגרה (תכנות) – הבדלי גרסאות
תוכן שנמחק תוכן שנוסף
←פתיח: עריכה. ניסיון לטרמינולוגיה אחידה בפתיח לפחות |
←דוגמת קוד: אי אפשר לשים כאן קוד ארוך מדי. ההבדל בין שיטה למתודה הוא נושא ששייך בעיקר לערך תכנות מונחה-עצמים |
||
שורה 25:
עם זאת, באופן מהותי, קריאה לפונקציה מהווה [[ביטוי (מדעי המחשב)|ביטוי]], כלומר התייחסות לערך כלשהו, לעומת קריאה לפרוצדורה המהווה "פקודה", כלומר שינוי מצב של משתנים בדרך כלשהי. ב[[תכנות פונקציונלי]], פונקציה היא [[טיפוס נתונים]] בסיסי לכל דבר, והוא לב ליבה של השפה. בשפות פונקציונלית (בהן [[LISP]], [[Haskell]], או [[ML]]) לפונקציות, ולביטויים בכלל, אין תוצאות לוואי, בשאיפה. דבר זה מקל על הוכחת נכונות של קטע קוד, ולעתים גם על [[עיבוד מקבילי]].
==
===פרוצדורה===
דוגמה לפרוצדורה בשפת C:
<source lang="
void print_num(int num) {
{▼
printf("%d", num);
}
{▼
</source>
פרוצדורה זו קוראת לפונקציה קיימת בשם printf על מנת להדפיס מספר כלשהו שהועבר אליה, למשל המספר 5, כך:
<source lang="C">
print_num(5);
</source>
הפרוצדורה איננה מחזירה ערך, והיא נקראת אך ורק לשם תוצאת הלוואי שלה - הדפסה למסך.
===פונקציה===
קטע הקוד הבא בשפת C מגדיר פונקציית סכום בין שני מספרים שלמים:
<source lang="C">
int sum(int a, int b) {
}
</source>
השימוש בפונקציה הוא לשם קבלת התוצאה שלה. לדוגמה אם נרצה להדפיס את סכום המספרים 1 ו-2, נוכל להשתמש בה:
<source lang="C">
print_num(sum(1,2)); //prints 3
</source>
===מתודה===
ב[[תכנות מונחה-עצמים]], מתודות מוגדרות כחלק ממחלקה. בדוגמה הבאה (בשפת ++C) נעשה שימוש בדוגמאות לשגרה ולפונקציה, אך בנוסף ישנן מתודות שנעזרות בשיטה הנשמרת בתוך האובייקט:
<source lang="cpp">
struct SumPrinter
{
void set(int x, int y) {
void printSum() {
▲ return false;
}
};
</source>
קוד שישתמש במחלקה הזאת עשוי להיראות כך:
<source lang="cpp">
SumPrinter mp;
mp.set(1, 2); // inside mp, a=1 and b=2
mp.printSum(); //prints 3
</source>
==סוגים של מתודות==
|