
تابع در برنامه نویسی یک قطعه از کدهای ساختاریافته و قابل استفاده است. هر تابع عملیات خاصی را برای ما انجام میدهد. به کمک توابع میتوانیم بخشهای مختلف برنامه را از هم تفکیک کرده و به آن نظم بیشتری بدهیم. همچنین فهم و اصلاح کدها راحتتر انجام میشود. در این آموزش با مفهوم تابع برنامه نویسی آشنا خواهیم شد.
فرقی ندارد چقدر تجربه در برنامهنویسی داشته باشید، به هر حال همیشه در مورد توابع میشنوید و از آنها استفاده خواهید کرد. در این آموزش قصد دارم مفاهیم اصلی و ساختار کلی یک تابع در برنامه نویسی را بدون وابستگی به زبانی خاص به شما یاد دهم.
تقریباً اکثر زبانهای برنامهنویسی و همه زبانهای پر کاربرد، مفهوم تابع را درون خود دارند. فقط ممکن است نحوه نوشتن آن (syntax آن) در زبانهای مختلف متفاوت باشد. در برخی زبانها به جای تابع (function) از کلماتی چون متد (method)، زیر روال (سابروتین –sub-routine) یا رویه (پروسیژر – procedure) استفاده میشود. اما باید بدانید که مفهوم و اصول آنها مشابه هم هستند.
ابتدا در مورد اینکه یک تابع در برنامه نویسی به چه چیزی گفته میشود میپردازیم و پس از آن نحوه تعریف و بخشهای فانکشنهای برنامهنویسی را با هم مرور میکنیم.
فهرست محتوای آموزش
تابع در برنامه نویسی چیست ؟
کلمه تابع باید برایتان آشنا باشد. همیشه در مباحث ریاضی در مورد توابع میخوانیم. به خاطر دارید که به چه چیزی در ریاضیات یک تابع میگفتیم ؟
در یک نگاه خیلی ساده، تابع یک جعبه یا دستگاهی است که یک مقدار ورودی گرفته، روی آن پردازشهایی انجام میدهد و یک خروجی تولید میکند؛ درست مانند یک سیستم.
تابع برنامه نویسی هم دقیقاً به همین شکل تعریف میشود. توابع در برنامه نویسی پس از فراخوانی عملیاتهایی انجام میدهند. هر تابع ممکن است یک یا چند ورودی و خروجی داشته باشد.

مشابه آن چه در تصویر میبینید، ما به توابع به شکل یک جعبه (یا قطعه کد) نگاه میکنیم که برای ما کارهایی را انجام میدهند.
کاربرد تابع در برنامهنویسی
فرض کنید میخواهیم یک ماشین حساب ساده را برنامه نویسی کنیم. یک راه این است که ابتدا ورودی را گرفته و سپس بر مبنای عملگر مورد نظر و به کمک دستورات برنامهنویسی شرطی نتیجه را محاسبه کنیم.
احتمالاً میتوانید تصور کنید که باید تعداد خطهای زیادی را پشت سر هم بنویسیم. این کار رفع خطا یا توسعه برنامه را بسیار سخت خواهد کرد.
حال فرض کنید میخواهیم یک عملیات پیچیده ریاضی (شامل چندین بار جمع، ضرب یا تقسیم) را هم در آن تعریف کنیم. قبول دارید که برای عملیات جدیدمان مجبور خواهیم بود عملگرهای جمع، ضرب یا تقسیم را دوباره استفاده کنیم؟
این قضیه را مقایسه کنید با زمانی که باید یک عملیات خاص (مثل خواندن فایل) را در برنامه تعریف کنیم. برای خواندن فایل باید ابتدا فایل را باز کنیم و پس از خواندن، آن را ببندیم. اگر بارها و بارها بخواهیم این کار را انجام دهیم، بخش باز کردن و بستن فایل به دفعات تکرار خواهد شد.
برای اینکه برای انجام کارهای یکسان یا تقریباً یکسان مجبور نباشیم قطعه کدهای تکراری بنویسیم، از توابع در برنامه نویسی استفاده میکنیم.
بخشهای اصلی تابع برنامهنویسی
یک تابع در برنامه نویسی دارای چهار بخش اصلی است. دقت کنید که این بخشها در تمام زبانها یکسان است. در برخی زبان ها موارد دیگری نیز وجود دارند که در انتها مثالی در این مورد میزنم.
نام فانکشن
هر تابع باید یک نام داشته باشد. این نام باید در هر برنامه یکتا (unique) باشد. برای فراخوانی توابع باید از نام آنها استفاده کنیم. هر زبان برنامهنویسی قواعد خاصی برای کاراکترهای مجاز در تعریف نام تابع در نظر میگیرد؛ اما در حالت کلی میتوان از حروف کوچک و بزرگ انگلیسی، اعداد و علامت _
(underline) استفاده کرد.
برای اینکه مطمئن شوید زبان برنامهنویسیای که با آن کار میکنید از چه کاراکترها و ساختاری پشتیبانی میکند، حتماً مستندات توابع آن را بخوانید. برای ثمال، برخی از زبانها امکان قرار دادن عدد در ابتدای نام تابع را نمیدهند!
معمولاً قبل از نام تابع، کلمهای برای اینکه مشخص کنیم در حال تعریف تابع هستیم آورده میشود. این کلمه در زبانهای مختلف، متفاوت است. مثلاً در پایتون از def
و در زبان php از function
استفاده میکنیم.
بدنه فانکشن
هر تابع یک بدنه دارد. بدنه تابع در برنامه نویسی دقیقاً همان قطعه کدهایی است که به وجود function معنا میدهد. کارهایی که تابع انجام میدهد توسط کدهایی که در بدنه آن قرار گرفته مشخص میشود.
هیچ معیار خاصی برای اندازه بدنه توابع وجود ندارد. میزان کدهای تابع میتواند یک خط یا هزاران خط باشد. اما معمولاً پیشنهاد میشود بدنه را به گونهای بنویسید که زیاد طولانی نشود.
پیشنهاد میشود اگر یک تابع با 100 خط کد که دو کار مختلف انجام میدهند دارید، بهتر است آن را به دو تابع کوچکتر اما با کارهای مشخص و یکتا تبدیل کنید.
خروجی تابع و نوع آن
در ریاضیات خروجی یک تابع، همان مقدار نهایی بود که محاسبه میشد. تابع در برنامه نویسی میتواند خروجی داشته یا نداشته باشد! اجازه دهید این مورد را با یک مثال ساده برایتان شفاف کنم:
اگر تابعی بنویسیم که تعداد تکرار یک کلمه در متن ما را محاسبه کند، قطعاً آن تابع خروجی خواهد داشت. خروجی تابع همان عدد دفعات تکرار است.
اما اگر تابعی داشته باشیم که مقدار مورد نظر ما را در پایگاه داده ذخیره کند، ممکن است به نتیجه (موفقیت یا شکست در ذخیره) احتیاجی نداشته باشیم. اگر اینطور باشد، تابع ما خروجی ندارد.
توجه داشته باشید که خروجی نداشتن یک تابع به این معنا نیست که هیچ کار خاصی انجام نمیدهد! در همین مثال پایگاه داده، خروجی برای ما مهم نیست وگرنه تابع یک کار مهم انجام داده است.
ورودی تابع برنامهنویسی
توابع در برنامه نویسی میتوانند صفر یا چند ورودی داشته باشند. به این مقادیر ورودی اصطلاحاً «پارامترهای ورودی تابع» نیز گفته میشود. در اکثر زبانهای برنامهنویسی در هنگام تعریف تابع، میتوانیم به تعداد دلخواه ورودی با نامهای مختلف در نظر بگیریم.
در حالت عادی، وقتی میگوییم تابع add(x ,y)
دو ورودی دارد، این دو ورودی به صورت اجباری تعریف شدهاند. یعنی اگر تابع را به صورت add(5)
صدا بزنیم، با خطا مواجه خواهیم شد. همچنین اگر add(5,7,9)
را صدا بزنیم هم اشتباه است.
در اکثر زبانها امکان تعریف پارامترهای ورودی اختیاری نیز وجود دارد. یعنی یک تابع میتواند تعدادی ورودی اجباری و تعدادی هم اختیاری داشته باشد.

بخشهای دیگر ساختار توابع
در زبانهای مختلف برنامهنویسی بعضاً ویژگی های منحصر به فردی که در آن زبان وجود دارند را باید برای تعریف توابع استفاده کنیم.
برای مثال، در زبان جاوا باید سطح دسترسی توابع (متدها) را مشخص کنیم. منظور از سطح دسترسی همان وضعیت public و private و protected در برنامهنویسی شئگراست.
تعریف تابع در برنامهنویسی
شناخت بخشهای مختلف یک تابع برنامه نویسی به ما کمک میکند ساختار تعریف تابع را در هر زبانی که بخواهیم تشخیص دهیم. به طور کلی اگر بخواهیم این بخشها را کنار هم قرار دهیم، ساختاری شبیه زیر خواهیم داشت:
return_type function_name( parameters ){ //function body return exp; }
این نوع تعریف فقط یک نمونه است و همانطور که چندین بار متذکر شدم، syntax تعریف تابع در هر زبانی متفاوت است.
در این قطعه کد از چند کلیدواژه استفاده کردهام که معنی و کاربرد هر کدام به صورت زیر است:
- return_type : نوع داده خروجی را مشخص میکند. در صورتی که تابع ما خروجی نداشته باشد، معمولاً از void استفاده میکنیم.
- function_name : نام تابع باید یکتا و در طول برنامه منحصر به فرد باشد. همچنین معمولاً نمیتوان تابعی با نام توابع از پیش تعریف شده داشت.
- parameters : پارامترهای ورودی در این قسمت تعریف میشوند.
- function body : در این بخش بدنه و کدهای تابع قرار میگیرد.
- return exp : با این دستور در هر بخشی از بدنه تابع، مقدار exp که میتواند یک متغیر، یک پیام یا هر چیز دیگری باشد را به عنوان خروجی تابع برمیگردانیم.
در تعریف پارامترهای ورودی، در برخی زبانها نیاز است نوع هر داده را مشخص کنیم. اما در بعضی زبانها فقط نوشتن نام متغیر ورودی کافی است. برای اینکه چند پارامتر ورودی در تابع تعریف کنیم، آنها را با علامت کاما (,
) از هم جدا میکنیم.
برای مثال، در قطعه کد زیر، یک تابع با سه ورودی در پایتون تعریف کردهایم:
def my_function( message, name, age ): //do something
فراخوانی توابع برنامه نویسی
برای فراخوانی یا صدا زدن تابع در برنامه نویسی کافی است در هر جایی که نیاز داریم، نام آن را آورده و در صورت نیاز پارامترهای ورودی را برایش تعریف کنیم.
برای درک بهتر، فرض کنید تابع power(x ,y)
را در زبان PHP به صورت زیر تعریف میکنیم تا عدد x را به توان y رسانده و به عنوان خروجی به ما بدهد.
function power(x ,y){ return x**y; }
حا هر کجای برنامه که نیاز داریم، باید power()
را نوشته و دو مقدار ورودی آن را تعریف کنیم.
power(2 ,8);
خروجی این فراخوانی عدد 256 را به ما خواهد داد.
هر برنامه میتواند دارای هیچ یا چندین تابع باشد. اینکه کجا باید از تابع استفاده کنید یا چه جایی نیاز به تعریف تابع در برنامهنویسی نیست، بسته به نیاز و خلاقیت شما دارد.
اما در مجموع، اگر برنامه شما طولانی است و از قسمتهای مختلفی تشکیل شده که میتوانید آن را به توابع کوچکتری تقسیم کنید، پیشنهاد میشود این کار را انجام دهید!
این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش برنامه نویسی
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
عرض سلام و خسته نباشید. یک سوال داشتم:
فرق یک دستور مثل ()alert و تابع {}()function چیه؟ ممنون میشم توصیحبدین.
سلام
احتمال میدم سؤالی که پرسیدید از javascript باشه. در حالت کلی، هر دو یک تابع هستند. ممکنه ورودی و خروجیهایی داشته باشند و با فراخوانی هر کدوم، یکسری کدها اجرا میشن.
اما تابعی مثل
alert()
رو بدون اینکه تعریفش کنیم استفاده میکنیم (توابع از پیش تعریف شده یا built-in توی اون زبان هست) و اونی که با ساختاری شبیهfunction name(){}
هست، خودمون تعریف و بعدش استفاده میکنیم.درسته از جاوااسکریپت و جی کوئری. پس در واقع ی همچین دستوری ;({کد}()funcion)hover در واقع استفاده از یک تابع توسط تابع hover میشه، درسته؟ که حالا به ()hover رویداد هم گفته میشه. خواستم کد رو کامل بیارم ولی بهم ریختگی پیدا میکرد.
آره. اینجا تابع hover بهعنوان ورودی یه تابع گرفته. البته این نوع تعریف تابع رو اصطلاحاً تابع بدون نام میگن. اگه دقت کنید جلوی کلمه کلیدی function اسمی تعریف نشده.
دقیقا! ممنون که عالی بود
از تابع ها زیاد خوشم نمیاد
:))) مجبوریم باهاشون سروکله بزنیم! چون به نوعی یه جزء جدانشدنی توی برنامه نویسی هستن.
سلام یک دنیا سپاس
سلام
خواهش میکنیم سارای عزیز. موفق باشی
مث همیشه ساده و عالی.
ممنون عالی بود
سلامت باشی بهزاد عزیز
خوشحالم که از این آموزشها برای افزایش مهارتهاتون استفاده میکنید. 🙂
سپاس از زحمتتون ، بسیار جامع و عالی بود.
خوشحالیم که این آموزش براتون کاربردی بوده امیرحسین عزیز
به زودی مجموعه آموزشهای ویدئویی پیشرفته هم در سایت منتشر میشه که پیشنهاد میکنیم حتماً دوباره بهمون سر بزنید. 😉
عالی بود مطالبتون، خدا قوت.
خیلی کامل و عالی 👍
در تعریف تابع میتوانیم از دستور پرینت هم برای خروجی گرفتن استفاده کرد.
امکانش هست تفاوت دستور پرینت و return را بفرمایید؟
print یک تابع هست که مقداری رو در خروجی برنامه نشون میده. بعد از اجراش در تابع، ادامه کدهای تابع اجرا میشن.
return یک keyword هست و خروجی تابع رو مشخص میکنه. زمانی که اجرای تابع به این دستور میرسه، خروجی تابع میده و ازش خارج میشه.
یک مثال خیلی سطح بالا در دنیای واقعی: اگر به یک نفر بگیم «حاصل 2+2 رو بنویس» print هست؛ اما اگر بپرسیم «حاصل 2+2 چند میشه؟» در جواب به ما میگه 4 که return هست.
امیدوارم جوابتون رو گرفته باشید.
البته
print(2+2)
۴ رو نمایش میده ولی
print('2+2')
یاprint("2+2")
۲+۲ رو نمایش میدهبله
من صرفآً یه انتزاع گفتم و کد مدنظرم نبوده تا مفهوم رو متوجه بشن.
واقعا ساده و قابل فهم می نویسید. ممنون
خوشحالم که برای یادگیریتون وقت میذارید و ممنون بابت انرژی خوبی که میدید.
خیلی عالی بود تشکر
خیلی خوشحالم که براتون مفید بوده مهدی عزیز