آموزش سی شارپ مقدماتی (بخش نوزدهم - متدها):


با عرض سلام و احترام.
پیشاپیش از شما دوست عزیز و گرامی، بابت وقتی که برای مطالعه ی این مطلب خواهید گذاشت، سپاسگزارم.
تقاضا دارم، در صورت مشاهده ی اشتباه متنی یا محتوایی، به اینجانب اطلاع دهید تا (ضمن کمک به یادگیری بنده) در اسرع وقت برای اصلاح متن اقدام نمایم.
شماره ی تماس:
09215149218
نشانی پست الکترونیکی:
RezaQadimi.ir@Gmail.com
آدرس کدها:
Learning-CSharp-Fundamental
آدرس سایت ها:
https://Reza-Qadimi.ir - https://WannaDate.ir

متد (تابع) چیست؟

متد (Method یا Function) یک بلاکِ (معمولا کوچک) کد است، و دستوراتی را شامل می شود که قرار است به ترتیب خاصی، اجرا شوند.

هر متد دارای یک اسم است، و ما می توانیم به وسیله ی آن اسم از قسمت های مختلف برنامه، آن تابع را فراخوانی، و دستورات داخل آن را اجرا نماییم.


متدها در زبان سی شارپ، به شکل زیر تعریف می شوند:

[Access Modifier] [Output Parameter's Data Type] [Method Name] ([Input Parameter(s)])
{
    Method Body // Statement(s)
}


  • Access Modifier:

این قسمت، مشخص کننده ی سطح دسترسی تابع یا متد ماست، و می تواند مقادیر زیر را داشته باشد:

private, protected, private protected, internal, protected-internal, public

پی نوشت: در صورت مشخص ننمودن سطح دسترسی، کامپایلر مقدار پیش فرضی را برای آن در نظر خواهد گرفت (در رابطه با متدها مقدار private)، اما این نکته را در نظر داشته باشید که:

به عنوان یک برنامه نویس حرفه ای، هر آنچه که اگر آن را ننویسیم، کامپایلر می نویسد، و یا برداشت می کند را به صراحت می نویسیم.

بنابراین ما نیز به عنوان یک برنامه نویس حرفه ای، سطح دسترسی متدهایی که پیاده سازی می کنیم را (حتی اگر نمی دانیم Access Modifier چیست و چه کاری انجام میدهد)، به صراحت می نویسیم.

  • Output Parameter's Data Type:

مشخص کننده ی نوع خروجی تابع می باشد (متدها مختار به داشتن خروجی هستند).


  • Input Parameter(s):

در این قسمت پارامتر یا پارامترهای ورودی تابع خود را مشخص می نماییم (متدها مختار به داشتن ورودی هستند).


ورودی خروجی توابع:

توابع یا خروجی ندارند (یعنی چیزی را برنمیگردانند، یا return نمی کنند)، و یا خروجی دارند و پارامتری را به عنوان خروجی برمیگردانند (حداکثر یک خروجی که می تواند اجزا مختلفی داشته باشد).

توابعی که خروجی ندارند، یا اصطلاحا چیزی بر نمی گردانند با کلمه ی کلیدی void معرفی میشوند.

نکته: ورودی تابع سمت راست داخل پرانتز.

نکته: خروجی تابع از منتها الیه سمت چپ تا اولین space.

مثال:

string    SomeMethod    (int x, int y);
string: خروجی
(int x, int y): ورودی


System.Collections.ArrayList    AnotherMethod    ();
System.Collections.ArrayList: خروجی
(): ورودی ندارد

Signature:

اصطلاحا به پارامترهای ورودی یک تابع، امضا یا signature گفته می شود.

در صورتی که تابعی به شکل ذیل تعریف شده باشد:

void SomeFunction(int x, int y)
{
}

این درست نیست که بگوییم signature این تابع، int x و int y است! signature این تابع int و int است.


انواع متدها:

توابع بر اساس داشتن و یا نداشتن پارامتر(های) ورودی و خروجی به چند دسته تقسیم می شوند:

  1. نه ورودی دارند و نه خروجی
  2. خروجی دارند، اما ورودی ندارند
  3. ورودی دارند، اما خروجی ندارند
  4. هم ورودی دارند، و هم خروجی

تابعی که نه ورودی دارد و نه خروجی:

private void ChangeTitle()
{
     System.Console.Title = &quotHello, this is some title!&quot
}


نحوه ی فراخوانی:

ChangeTitle();

تابعی که خروجی دارد، اما ورودی ندارد:

private int GetCurrentYear()
{
    int year = 1399;
    int currentYear = 1399 + 1;

    // return 1393 + 1;
    // return (1399 + 1);
}

نکته: شیک تر است که در زمان ارسال پارامتری به عنوان خروجی، نتیجه ی محاسبات را در یک متغیر کمکی ریخته، و سپس آن را به عنوان خروجی return کنیم (تا در زمان دیباگ، نتیجه ی عملیات را قبل از return شدن مقدار ببینیم و کنترل بهتری بر روی اتفاقاتی که در پروژه رقم میخورد داشته باشیم).


نحوه ی فراخوانی و استفاده از مقدار خروجی:

int currentYear = GetCurrentYear();

تابعی که ورودی دارد، اما خروجی ندارد:

private void WriteMessage(int year)
{
    System.Console.WriteLine($&quotI'm { number }&quot);
    System.Console.ReadLine();
}


نحوه ی فراخوانی:

WriteMessage(26); 

روش بهتر و حرفه ای تر:

WriteMessage(year: 26);

نکته: مشخص کردن نام پارامتر ورودی، به افزایش خوانایی کدهای شما کمک می کند.


تابعی که هم خروجی دارد و هم ورودی:

private int CalculateValue(int number)
{
    int result = number + 10;
    return result;
}


نحوه ی فراخوانی:

int result = CaclculateValue(number: 1995);

نکته: نام گذاری متدها باید به روش Pascal Case باشد، یعنی کلمات با حروف بزرگ شروع شوند.

نکته: بهتر است که نام متدهای خود را با فعل، و یا با سوال شروع کنید. به عنوان مثال:

GetResult, SetValue, SendMessage, ChangePassword, IsEqual, Where...

نکته: در زمان تعریف یا ایجاد توابع، این نکته را در نظر بگیرید که بهتر است توابعی که پیاده سازی می کنید، تک منظوره باشند (صرفا و فقط یک وظیفه داشته باشند، مثلا ارسال پیغام، محاسبه ی قیمت و...).


معرفی:
رضا قدیمی هستم. برنامه نویس و دانش آموزِ حوزه ی وب، بسیار مشتاق در یادگیری مفاهیم و اطلاعات جدید در این حوزه.