שגרה (תכנות) – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
←‏פתיח: עריכה. ניסיון לטרמינולוגיה אחידה בפתיח לפחות
←‏דוגמת קוד: אי אפשר לשים כאן קוד ארוך מדי. ההבדל בין שיטה למתודה הוא נושא ששייך בעיקר לערך תכנות מונחה-עצמים
שורה 25:
עם זאת, באופן מהותי, קריאה לפונקציה מהווה [[ביטוי (מדעי המחשב)|ביטוי]], כלומר התייחסות לערך כלשהו, לעומת קריאה לפרוצדורה המהווה "פקודה", כלומר שינוי מצב של משתנים בדרך כלשהי. ב[[תכנות פונקציונלי]], פונקציה היא [[טיפוס נתונים]] בסיסי לכל דבר, והוא לב ליבה של השפה. בשפות פונקציונלית (בהן [[LISP]], [[Haskell]], או [[ML]]) לפונקציות, ולביטויים בכלל, אין תוצאות לוואי, בשאיפה. דבר זה מקל על הוכחת נכונות של קטע קוד, ולעתים גם על [[עיבוד מקבילי]].
 
==דוגמתדוגמאות קוד==
===פרוצדורה===
קטע קוד קצר בשפת C# ובו ממוחשות מספר קריאות למתודות:
דוגמה לפרוצדורה בשפת C:
<source lang="csharpC">
class Program
void print_num(int num) {
{
printf("%d", num);
static void Main(string[] args)
}
{
</source>
MethodsClass MC = new MethodsClass(4,6);
פרוצדורה זו קוראת לפונקציה קיימת בשם printf על מנת להדפיס מספר כלשהו שהועבר אליה, למשל המספר 5, כך:
MC.SayHello();
<source lang="C">
int Sum =MC.SumOfIDandNumber();
print_num(5);
Console.WriteLine(Sum);
</source>
Console.WriteLine(MC.IsThisNumberEven(Sum));
הפרוצדורה איננה מחזירה ערך, והיא נקראת אך ורק לשם תוצאת הלוואי שלה - הדפסה למסך.
Console.ReadLine();
===פונקציה===
}
קטע הקוד הבא בשפת C מגדיר פונקציית סכום בין שני מספרים שלמים:
<source lang="C">
int sum(int a, int b) {
return falsea+b;
}
</source>
השימוש בפונקציה הוא לשם קבלת התוצאה שלה. לדוגמה אם נרצה להדפיס את סכום המספרים 1 ו-2, נוכל להשתמש בה:
<source lang="C">
print_num(sum(1,2)); //prints 3
</source>
===מתודה===
ב[[תכנות מונחה-עצמים]], מתודות מוגדרות כחלק ממחלקה. בדוגמה הבאה (בשפת ++C) נעשה שימוש בדוגמאות לשגרה ולפונקציה, אך בנוסף ישנן מתודות שנעזרות בשיטה הנשמרת בתוך האובייקט:
<source lang="cpp">
struct SumPrinter
{
int a, {b;
 
void set(int x, int y) {
public class MethodsClass
{a=x;
public int IDb=y;
{}
public int Number;
 
void printSum() {
//Constructor...
public MethodsClassprint_num(int idsum(a, int numberb));
{
ID = id;
Number = number;
}
 
public void SayHello()
{
Console.WriteLine("Hello World");
}
 
public int SumOfIDandNumber()
{
return ID + Number;
}
 
public bool IsThisNumberEven(int num)
{
if (num % 2 == 0)
return true;
return false;
}
}
}
};
</source>
קוד שישתמש במחלקה הזאת עשוי להיראות כך:
<source lang="cpp">
SumPrinter mp;
mp.set(1, 2); // inside mp, a=1 and b=2
mp.printSum(); //prints 3
</source>
התוכנית מגדירה אובייקט בשם MethodsClass, בעל שתי שדות מטיפוס מספר שלם. הראשון נקרא ID והשני נקרא Number. תמיד לפני שם של כל מתודה רושמים את מסנן הגישה למתודה (ציבורי או פרטי) ואת טיפוס ההחזרה של המתודה. בסוגרים רושמים את סוגי הפרמטרים ואת השמות שלהם. כל אלו ביחד נקראים "חתימת המתודה".{{ש}}
לאובייקט זה יש 4 מתודות:
* בנאי (Constructor) שמקבל 2 פרמטרים ונקרא ()MethodsClass - אלו הערכים שייקלטו לשדות של האובייקט. הבנאי הוא מתודה מיוחדת - היא מייצרת את האובייקט עצמו, לא ניתן להגיר שתחזיר void או סוג נתונים אחר.
* מתודה שלא מחזירה ערך ()SayHello - המתודה רק מדפיסה למסך את המילים Hello World.
* מתודה שמחזירה מספר שלם ()SumOfIDandNumber - המתודה מחזירה את סכום 2 השדות שלה.
* מתודה שמקבלת כפרמטר מספר ומחזירה אמת או שקר ()IsEvenNumber - המתודה מחזירה אמת אם המספר שנשלח לה מתחלק ב-2 ללא שארית, אחר מחזירה שקר.
 
זהו הפלט של קטע הקוד הנתון:
{{ש}}
Hello World{{ש}}
10{{ש}}
True
 
==סוגים של מתודות==