Learning ©➕➕
4.52K subscribers
81 photos
2 videos
38 files
182 links
ک
Download Telegram
#113
#function #توابع
✅ مزایای استفاده از توابع :

🔹تقسیم بندی برنامه به توابع کوچک تر :
فرض کنید میخوایم یه برنامه "تبدیل فیلم به صوت" بنویسیم که این برنامه قابلیت باز کردن, ویرایش, برچسب گذاری روی فیلم و تبدیل فایل تصویری به صوت را دارد حالا اگه بخوایم همه این کار ها رو توی تابع main انجام بدیم به دلیل زیاد شدن تعداد خطوط کدها باعث میشه هم پیچیده و هم درک برنامه کمتر بشه و ممکنه بعد مدتی ندونیم از کدوم خط تا کدوم خط کار تبدیل "ویدیو به صوت" را انجام میده یا کدوم خط باعث "پخش شدن فیلم" میشه پس برای جلوگیری از این سردرگمی ها میایم هر بخش رو توی یه تابع مشخصی مینویسیم

🔹اشکال زدایی ساده تر :
فرض کنید برنامه "تبدیل فیلم به صوت" حدود 1000 خط هست و درون main هم نوشتیمش و ممکنه موقع کامپایل کردن برنامه یک خطایی در خط 782 بوجود بیاد که مرتبط به تبدیل ویدیو به صوت هست خب الان به نظرتون باید چکار کنیم باید از خط 782 به قبل برسی کنیم ببینیم چه جایی اشتباه کردیم و بریم درستش کنیم که برسی 782 خط وقت گیره پس برای حل این مشکل وظایف برنامه رو جدا جدا توی هر تابعی مینویسیم و سپس اگه تابعی به مشکل داشت خیلی راحت فقط همون تابع رو برسی میکنیم یعنی 1000 خط ممکنه توی 4 تابع قرار بگیره که هر تابع 250 خط کد درونش هست پس برسی 250 خط خیلی آسون تر از 1000 خط هست

🔹صرفه جویی در وقت:
همانطور که در مثال بالا دیدیم 1000 خط رو توی 4 تابع نوشتیم که هر تابع 250 خط کد درونشه پس اگه خطایی توی یکی از توابع پیش بیاد ما فقط 250 خط رو اشکال زدایی میکنیم بجای 1000 خط که این خود باعث صرفه جویی در وقت می شود.
@learncpp
#114
#function #توابع
✅ نوشتن توابع :

قبل از اینکه بخوایم تابعی رو بنویسیم باید به چند نکته توجه داشته باشیم :
🔹 هدف از نوشتن تابع چیه ؟
🔹 تابع چه وظایفی داره ؟
🔹 ورودی و خروجی تابع چی هستن ؟

وقتی فهمیدیم میخوایم چکار کنیم شروع به نوشتن تابع میکنیم
@learncpp
#115
#function #توابع
✅ تعریف توابع در ++C

تا الان هر کدی که مینوشتیم داخل main بوده که اگه دقت کنیم main هم یک تابع هست و تنها تابعی که الزاما توی برنامه نیازه و باید وجود داشته باشه همین تابع main هست که به صورت زیر مورد استفاده قرار میگیره :
#include <iostream>

using namespace std;

int main()

{

//orders

return 0;

}

🔹نحوه تعریف توابع در پست بعدی (telegram.me/Learncpp/406)
@learncpp
#116
#function #توابع
✅ نحوه تعریف تابع :
<data type>  name_function(parameters)
{
//order 1 ;
//order 2 ;
// order 3;
// . . .
// orders n ;
return 0; //return 0;
}

🔹نوع بازگشتی (data type):
نوع بازگشتی باید یکی از انواع داده های موجود در ++C باشد(telegram.me/Learncpp/91)

🔹نام تابع (name_function):
نام تابع از قوانین نامگذاری متغییر ها پیروی میکند (telegram.me/Learncpp/107) و از آنجایی که فراخوانی تابع توسط نام تابع انجام میشه پس بهتره اسمی رو برای تابع انتخاب کنیم که با کاری که قرار انجام بده همخوانی داشته باشه مثلا تابعی که قراره چیزی رو چاپ کنه نامشو show یا print بذاریم

🔹پارامتر ها (parameters):
هر تابع ممکنه تعدادی پارامتر داشته باشه که هر پارامتر رو میتونیم توسط کاما(,) از هم جدا کنیم, عملکرد پارامترها به این صورته که مقداری که هنگام فراخوانی بهش داده میشه رو در خودش نگه میداره و پس از یسری تغییرات روی این پارامترها رو برگشت(return) میکنه

🔹در مورد return 0 در پست (telegram.me/Learncpp/144) توضیح داده شده
@Learncpp
#117
#function #توابع
✅ تعریف توابع در ++C

مثال)
void show(parameters)
{
cout«"15 Aug 2016 / 10:29";
}

استفاده از void در تابع بالا به کامپایلر ++C میگه که تابع show خروجی بر نمی گرداند

❌ مواقعی که تابع نیازی به پارامتر نداره کامپایلر استاندارد ++C توصیه کرده از کلمه کلیدی void داخل پارامتر تابع قرار گیرد تا ورودی تابع خوانایی بهتری داشته باشد

❌ توابع که بازگشتی (return) دارند را میتوانیم با دستور cout چاپ کنیم ولی توابعی که نوع بازگشتی آنها void هست قابل چاپ نیست
@Learncpp
#118
#function #توابع
✅ تعریف توابع در ++C

مثال)
#include <iostream>
#include <string>
using namespace std;

void show(string txt)
{
cout<<txt;
}

int main()
{
string label="@Learncpp";
show(label);
return 0;
}

@learncpp
#119
#function #توابع
✅ تعریف توابع در ++C

مثال)
#include <iostream>
Using namespace std;

int print()
{
int temp;
temp = 20;
return temp;
}

void show()
{
cout << "@Learncpp";
}

int main()
{
cout<<print();
cout<<endl;
cout<<show();
return 0;
}

@learncpp
#120

#function #توابع
✅ نحوه استفاده از الگوی توابع در ++C

توجه کنیم هر کدی که مینویسیم باید بالای main باشه و اگه بخوایم تابع را پایین main بنویسیم تابع قادر به شناسایی داخل main نیست , و کامپایلر خطا میده پس چطوری باید تابع را پایین main بنویسیم که با خطایی مواجهه نشیم ؟!! برای اینکار باید نوع تابع , اسم تابع و پارامترهایش را بالای main بنویسیم (اصطلاحا به این روش الگوی تابع گویند) سپس بدنه تابع را پایین main بنوسیم
@Learncpp
#121
#function #توابع
✅ نحوه استفاده از الگوی توابع در ++C
🔹قطعه کدی که نحوه بکارگیری "الگوی توابع" رو نمایش داده
@Learncpp
#122

#function #توابع
✅ نحوه استفاده از الگوی توابع در ++C

مثال )
#include <iostream>
using namespace std;

<data type> name_function (parameters) ;//الگوی تابع
int main()
{
name_function(argument);
return 0;
}

<data type> name_function(parameters)
{
//order 1 ;
//order 2 ;
// . . .
// order n ;
}

@Learncpp
#123
#function #توابع
✅ نحوه استفاده از الگوی توابع در ++C

مثال )
#include <iostream>

#include <string>

using namespace std;


void show(string txt);


int main()

{

String label=”@Learncpp”;

Show(label);

return 0;

}


void show(string txt)

{

cout<<”learning c++ in channel “<<txt;

}

@Learncpp
#124
#function #توابع
✅ توابع چگونه کار می کنند؟

وقتی کامپایلر به تابعی که توی main فراخوانیش کردیم رسید کنترل برنامه به جایی که تابع تعریف شده پرش می کند و پس از اینکه دستورات داخل تابع رو اجرا و به براکت بسته تابع رسید دوباره کامپایلر به صورت اتوماتیک دستورات بعدی بعد از فراخوانی تابع رو اجرا می کند
@Learncpp
#125
#function #توابع
✅ توابع چگونه کار می کنند
🔹نحوه پرش آرگومانها درون پارامترها
@Learncpp
#126
#function #توابع
✅ نحوه پرش آرگومانها درون پارامترها

در تصویر بالا (telegram.me/Learncpp/415) می بینید که مقداری برای دو متغییر num1 و num2 از ورودی گرفته شده سپس این متغییرها را به عنوان آرگومان تابع max_number قرار دادیم و پس از فراخوانی آرگومانها به ترتیب درون پارامترهای تابع قرار میگیرد یعنی متغییر num1 به جای متغییر a و متغییر num2 بجای متغییر b قرار می گیرد سپس بر اساس تعیین بزرگی یا کوچکی مقدار متغییرها , خروجی درون اسم تابع قرار گرفته و برگشت داده میشود سپس چاپ میشود
@Learncpp
#127
#function #توابع
✅ نحوه فراخوانی چندین تابع درون main

اگر چند تابع درون تابع main داشته باشیم فراخوانی هر تابع به همانند تصویر زیر(telegram.me/Learncpp/418) خواهد بود
@Learncpp
#128
#function #توابع
✅ نحوه فراخوانی چندین تابع درون main
@Learncpp
#129
#function #توابع
✅ نحوه فراخوانی چندین تابع درون main

اگه تصویر بالا (telegram.me/Learncpp/418) رو با دقت نگاه کنین متوجه میشید که وقتی به تابعی رسید به صورت خودکار به تابع مورد نظر پرش کرده و آن تابع را اجرا و زمانی که به براکت بسته ({) رسید دوباره به تابع main برگشته و خط بعد از تابع را اجرا میکند به همین ترتیب الی آخر...
@Learncpp
#130
#function #توابع
✅ روش های ارسال پارامتر ها به توابع در ++C ؟

پارامترها را به دو طریق میتوان به تابع فراخواننده پاس داد:

🔹 روش فراخوانی با مقدار (call by value)
🔹 روش فراخوانی با ارجاع (call by reference)
#Learncpp
#131
#function #توابع
✅ روش های ارسال پارامتر ها به توابع در ++C ؟

🔹روش فراخوانی با مقدار (call by value)

❌ در روش فراخوانی با مقدار آرگومان ها درون پارامترها کپی می شوند و هرگونه تغییری در پارامترها تاثیری روی آرگومان ها ندارد

🔹روش فراخوانی با ارجاع (call by reference)

❌ روش فراخوانی با ارجاع چون آدرس آرگومان ها را به پارامترها میدیم پس با تغییر پارامترها مقدار آرگومان ها هم تغییر می کند یعنی اگر توی main یک اشاره گر را به عنوان آرگومان به یک تابعی بدیم و سپس تابع هر تغییری در این اشاره گر ایجاد کند باعث میشود مقداری که در داخل main به عنوان آرگومان دادیم نیز تغییر کند
@Learncpp
#132
#function #توابع
✅ روش های ارسال پارامتر ها به توابع در ++C ؟

🔹روش فراخوانی با مقدار (call by value)

🔺در روش فراخوانی با مقدار دو نوع توابع میتونیم داشته باشیم:

💠 توابعی که هیچ مقداری رو به تابع فراخواننده بر نمی گردانند:

بعضی مواقع از تابعی استفاده میکنیم که نیازی به بازگشت مقداری نیست مثلا توابعی که پیغامی رو برای کاربر چاپ خواهد کرد

مثال)
برنامه ای که پس از فراخوانی تابع print متنی را چاپ می کند؟
#include <iostream>
#include <string>
using namespace std;

void print()
{
cout<<"Wow My God,C++ is Best And Powerful Programming Language\n";
cout<<”\ahere channel @Learncpp,I Love You PMC khhh”;
}

int main()
{
print();
return 0;
}

@Learncpp
#133
#function #توابع
✅ روش های ارسال پارامتر ها به توابع در ++C ؟

🔹روش فراخوانی با مقدار (call by value)

🔺در روش فراخوانی با مقدار دو نوع توابع میتونیم داشته باشیم:

💠 توابعی که فقط یک مقدار را به تابع فراخواننده بر می گردانند:

در مواقعی نیاز داریم که پس از انجام یکسری محاسبات تابع جواب نهایی رو به عنوان یک مقدار برگشت بده که این مقدار برگشتی با استفاده از return انجام می شود

return عبارت;
return (عبارت);

مثال)
برنامه ای که بزرگترین عدد را پیدا کرده و نمایش دهد؟

#include <iostream>
#include <string>
using namespace std;

int max_number(int a,int b)
{
int temp=0;
if(a>b)
temp=a;
if(a<b)
temp=b;
return temp;
}

int main()
{
int num1,num2;
cout<<"enter num1 : ";
cin>>num1;
cout<<"\nenter num2 : ";
cin>>num2;
cout<<"\nBigest Number is : "<<max_number(num1, num2);
return 0;
}


❌ مقداری که توسط return برگشت داده می شود درون نام تابع قرار میگیرد پس میتوان در تابع main نام تابع را با متغیری انتساب یا اعمال محاسباتی را انجام داد به عنوان مثال اگر یک تابع sum از نوع int و x متغییری از نوع int باشد دستور زیر باعث می شود که مقداری که توسط retrun در نام تابع قرار میگیرد در x قرار می دهد

x=sum();
همچنین در محاسبات نیز میتوانیم از نام تابع استفاده کنیم

x=x+sum();
@Learncpp