در برنامه‌نویسی، **تابع** (به انگلیسی: Function) یا رویه (در حالتی که خروجی نداشته باشد) به تکه‌ای از کدهایی سازمان یافته گویند که برای انجام عملی خاص استفاده می‌شوند. این واحد در آینده می‌تواند هر کجا که آن کارِ ویژه باید بینجامد، استفاده یا فراخوانی (Call) شود. در فلوچارت توابع را با مستطیلی که دو خط عمودی و افقی در بالا و سمت چپ آن رسم شده نشان می‌دهند. برخلاف توابع ریاضی، توابع می‌توانند هر تعدادی ورودی، خروجی داشته یا اصلاً ورودی یا خروجی یا هر دو را نداشته باشند. به نوع خاصی از تابع که ورودی ندارد، رویه (به انگلیسی: routine) گویند.

تابع ممکن است داخل یک برنامه یا به‌طور جداگانه داخل کتابخانه (رایانه) ای تعریف شده باشد که می‌تواند توسط برنامه‌های مختلف مورد استفاده قرار گیرد. در زبان‌های برنامه‌نویسی مختلف، رویه ممکن است با نام‌های مختلف اسلوب(Method)، تابع (Function)، روال (Routine) یا زیربرنامه (Subprogram) شناخته شود. گاهی اصطلاح عمومی «واحد قابل فراخوانی» نیز استفاده می‌شود.

نام زیربرنامه نشان می‌دهد یک زیرروال رفتاری مشابه یک برنامه رایانه‌ای دارد که به عنوان یک گام در یک برنامه بزرگتر یا زیربرنامه دیگر استفاده می‌شود. زیرروال اغلب کد می‌شود تا بتوان آن را چند بار و از مکان‌های مختلف در طول یک اجرای برنامه (از جمله در میان دیگر زیرروالهای کد شده) مورد استفاده قرار داد (به اصطلاح call کرد). پس از صدا کردن زیرروال و اجرای آن، برنامه به دستور بعدی پس از زیرروال برمی‌گرد.
موریس ویلکس، دیوید ویلر، و استنلی گیل مخترعان این مفهوم شناخته شده‌اند که آن را زیرروال بسته (در تقابل با زیرروال باز یا ماکرو
) نامیده‌اند.

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

مفهوم کلی
---------

محتوای یک زیربرنامه یا بدنه آن بخشی از کد برنامه است که هنگامی که زیرروال فراخوانده می‌شود به اجرا درمی اید. هنگامی که یک زیرروال فراخوانی می‌شود ممکن است یک یا چند مقدار داده را به صورت ورودی بگیرد که به آن‌ها آرگومان‌های ورودی گفته می‌شود. زبان‌های مختلف برنامه‌نویسی از شکل‌های مختلفی برای انتقال آرگومان‌ها بهره می‌گیرند.

مزایا
-----

مزایای شکستن یک برنامه به زیربرنامه‌های مختلف به شرح زیر است:

* تجزیه کردن یک برنامه برای انجام کاری خاص به گام‌های ساده‌تر (یکی از دو ابزار اصلی برنامه‌نویسی ساخت‌یافته)
* کاهش دادن کدهای تکراری در یک برنامه
* فراهم کردن امکان استفاده مجدد از کد در برنامه‌های مختلف
* ایجاد امکان تقسیم کار بهتر بین برنامه‌نویسان یک پروژه برنامه‌نویسی بزرگ
* امکان نهانسازی اطلاعات از کاربران زیربرنامه
* افزایش قابل ردیابی بودن فرایند اجرای برنامه
* راحت‌تر شدن فرایند عیب‌یابی برنامه‌ها

مثالی از یک زیرروال
-------------------

در مثال زیر، تابعی به نام add به زبان ++C نوشته شده‌است که برای جمع دو عدد استفاده می‌شود. این تابع دارای دو پارامتر a و b از نوع int (عدد صحیح) و یک خروجی از نوع int است. مجموع a و b در یک متغیر به نام r ذخیره می‌شود و مقدار آن به عنوان خروجی برگردانده می‌شود.

تابع دیگری که در این مثال دیده می‌شود main نام دارد. شروع هر برنامه در ++C با فراخوانی این تابع شروع می‌شود و در این تابع نیز با فراخوانی تابع add مجموع دو مقدار ۱۵ و ۱۳ (به عنوان مقادیر پارامترها) محاسبه و با دستور cout مقدار حاصل یعنی ۲۸ نمایش داده می‌شود.

```
#include <iostream>
using namespace std;
int add (int a, int b)
{
  int r;
  r = a + b;
  return r;
}
int main ()
{
 int c;
 c = add (15, 13);
 cout << c;
}

```

منابع
-----

1. ↑  "Programming Fundamentals/Functions - Wikiversity". *en.m.wikiversity.org* (به انگلیسی). Retrieved 2022-10-10.
2. ↑  U.S. Election Assistance Commission (2007). "Definitions of Words with Special Meanings". *Voluntary Voting System Guidelines*. Archived from the original on 8 December 2012. Retrieved 2013-01-14.
3. ↑  Dainith, John. ""open subroutine." A Dictionary of Computing. 2004." *Encyclopedia.com*. Retrieved January 14, 2013.
4. ↑  Wheeler, D. J. (1952). "The use of sub-routines in programmes". *Proceedings of the 1952 ACM national meeting (Pittsburgh) on - ACM '52* (PDF). p. 235. doi:10.1145/609784.609816.
5. ↑  Wilkes, M. V.; Wheeler, D. J.; Gill, S. (1951). *Preparation of Programs for an Electronic Digital Computer*. Addison-Wesley.
6. ↑  Donald E. Knuth. *The Art of Computer Programming, Volume I: Fundamental Algorithms*. Addison-Wesley. ISBN 0-201-89683-4.
7. ↑  O. -J. Dahl; E. W. Dijkstra; C. A. R. Hoare (1972). *Structured Programming*. Academic Press. ISBN 0-12-200550-3.
8. ↑

|  |  |
| --- | --- |
| داده‌های کتابخانه‌ای: کتابخانه‌های ملی ویرایش در ویکی‌داده | 
* آلمان
* اسرائیل
* ایالات متحده آمریکا

 |