Підпрограма (англ. subroutine) — частина програми, яка реалізує певний алгоритм і дозволяє звернення до неї з різних частин загальної (головної) програми. В термінах мов програмування: функції (С), процедури (Pascal), методи (в термінології об'єктно-орієнтованого програмування в мовах C++, Java, С# та ін.).

Підпрограма часто використовується для скорочення розмірів програм в тих задачах, в процесі розв'язання яких необхідно виконати декілька разів однаковий алгоритм при різних значеннях параметрів. Інструкції (оператори, команди), які реалізують відповідну підпрограму, записують один раз, а в необхідних місцях розміщують інструкцію виклику підпрограми.

Набір найвживаніших підпрограм утворює бібліотеку стандартних підпрограм.

В більшості мов програмування високого рівня, підпрограми називаються процедурами та функціями. В залежності від мови програмування, терміни «процедура» та «функція» можуть розрізнятися (як правило, процедурою називають підпрограму, що не повертає результату, тоді як функція має результат і може використовуватись як частина виразу) чи розглядатись як синоніми (зокрема, в мові C, де в початковому варіанті всі підпрограми могли повертати результат, їх здебільшого називають функціями). У об'єктно-орієнтованому програмуванні функції-члени класів називають методами.

Використання процедур

ред.

Використання кожної процедури пов'язане з її описанням та викликом. Описання процедури складається, як правило із заголовка процедури, та тіла процедури. Заголовок містить ідентифікатор процедури, та сукупність формальних параметрів, і, можливо, деякі їхні характеристики. Тіло процедури складається з деякої послідовності операторів. Виклик процедури відбувається із відповідних точок програми вказанням ідентифікатора процедури, її фактичних параметрів, і, можливо, входу в її тіло.

Типи процедур

ред.

Процедури та функції

ред.

Розрізняють два способи використання процедур в програмах: як процедур-операторів, виклик яких представляє завершену одиницю дій мови програмування, та процедур-функцій, виклик яких здійснюється через відповідні вказівники функцій, які використовуються лише як складові елементи виразів мови програмування. Завжди, при виклику процедури, формальні параметри в тілі цієї процедури замінюються на фактичні (передача параметрів за посиланням), або їхніми значеннями (передача параметрів по значенню) і виконується перетворене таким чином тіло процедури.

Відкриті та замкнені процедури

ред.

Відповідно до способу зв'язування з основною програмою процедури ділять на відкриті та замкнені.

Відкриті процедури складаються з малої кількості команд, їх вставляють в тіло програми кожен раз, коли зустрічається їхній виклик.[джерело?]

Замкнені процедури розміщуються окремо від основної програми, при кожному виклику замкненої процедури, організовується відповідна передача управління та повертання в точку виклику. Як правило, стандартні процедури замкнені.

Особливий випадок представляє рекурсивна процедура та процедура без параметрів, виклик якої містить лише її ідентифікатор.

Приклади підпрограм (функцій)

ред.

JavaScript

ред.
function name(text, element)
{
    document.getElementById(element).innerHTML = text;
}

ActionScript

ред.
public function name(text: string) 
{
        var textfield: TextField = new TextField();
        textfield.text = text;
}
void name(string text)
{
    cout << text;
}
public void name(string text)
{
    System.Console.WriteLine(text);
}

Pascal

ред.
procedure name(var text: string)
  begin
    write(text);
  end;
function name($text)
{
    echo $text;
}

Standard ML

ред.
fun name t = print t

або, теж саме (див. Функція першого класу и лямбда-функція):

val name = fn t => print t

Visual Basic

ред.
Sub Name(text)
    Console.WriteLine(text)
End Sub

PureBasic

ред.
Procedure.l Name(text.s)
    PrintN(text)
EndProcedure

Python

ред.
def func(text):
    print(text)

Див. також

ред.

Джерела

ред.