Підпрограма

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Підпрограма (англ. 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);
}
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
def func(text):
    print(text)

Див. також

[ред. | ред. код]

Джерела

[ред. | ред. код]