Інструкція (програмування)
У комп'ютерному програмуванні інструкція (вказівка, англ. statement) — синтаксична одиниця імперативної мови програмування, яка вказує на певну дію, яку потрібно виконати[1][2]. Програма, написана такою мовою, є послідовністю інструкцій. Інструкція може мати внутрішні компоненти (наприклад, вирази).
Багато мов програмування (наприклад, Ada, Algol 60, C, Java, Pascal ) роблять різницю між інструкціями та визначеннями/деклараціями. Визначення або оголошення визначає дані, з якими має працювати програма, тоді як інструкція визначає дії, які мають бути виконані з цими даними.
Інструкції, які не можуть містити інших тверджень, є простими; ті, які можуть містити інші інструкції, є складеними[2].
Зовнішній вигляд інструкції (і, власне, програми) визначається її синтаксисом або граматикою мови програмування. Значення інструкції визначається її семантикою .
Прості інструкції повні самі по собі; вони включають присвоювання значень, виклики підпрограм та вказівки, які можуть суттєво впливати на процес виконання програми (наприклад, goto, return, stop/halt). У деяких мовах процеси введення та виведення даних, інструкції та виходи обробляються спеціальними інструкціями, тоді як інші мови використовують виклики попередньо визначених підпрограм.
- Fortran:
variable
= expression
- Паскаль, Алгол 60, Ada:
variable
:= expression;
- C, C#, C++, PHP, Java:
variable = expression;
- Fortran:
CALL subroutine name(parameters)
- C, C++, Java, PHP, Pascal, Ada:
subroutine name
(parameters);
- Fortran:
GOTO numbered-label
Складені інструкції можуть містити послідовності інструкцій, вкладених на будь-яку достатньо розумну глибину, і, як правило, передбачають перевірки, щоб вирішити, чи слід виконувати чи повторювати вказівки, що містяться в них.
Позначення:
- <інструкція> – це будь-який окрема інструкція (може бути простим або складеним).
- <послідовність інструкцій> — це будь-яка послідовність із нуля чи більше <інструкцій>
Деякі мови програмування забезпечують загальний спосіб групування інструкцій разом, так що будь-яку окрему <інструкцію> можна замінити групою:
- Алгол 60:
begin
<послідовність інструкцій> end
- Паскаль:
begin <послідовність інструкцій> end
- C, PHP, Java:
{ <послідовність інструкцій> }
Інші мови програмування мають різні спеціальні термінатори для кожного типу складених інструкцій, тому одна або кілька інструкцій автоматично розглядаються як група:
- Ada:
if <умова> then <послідовність інструкцій> end if;
Багато складених інструкцій є вказівками циклу або вказівками вибору. Теоретично потрібна лише одна з цих типів вказівок, але на практиці існують різні особливі випадки, в яких використання подібних може зробити програму легшою для розуміння, вони можуть полегшити програмування та часто можуть бути реалізовані набагато ефективніше:
- Алгол 60:
for
index := 1 step 1 until limit do <інструкція>;
- Pascal:
for index := 1 to limit do <інструкція>;
- C, Java:
for ( index = 1; index <= limit; index += 1) <інструкція>;
- Ada:
for index in 1..limit loop <послідовність інструкцій> end loop
- Fortran 90:
DO index = 1,limit
<послідовність інструкцій>
END DO
- Алгол 60:
for index := expression while умова do <інструкція>;
- Pascal:
while умова do <інструкція>;
- C, Java:
while (умова) <інструкція>;
- Ada:
while умова loop <послідовність інструкцій> end loop
- Fortran 90:
DO WHILE (умова)
<послідовність інструкцій>
END DO
- Pascal:
repeat <послідовність інструкцій> until умова; { note reversed test}
- C, Java:
do { <послідовність інструкцій> } while (умова);
- Ada:
loop <послідовність інструкцій> exit when умова; end loop;
- C:
do { <послідовність інструкцій> if (умова) break; <послідовність інструкцій> } while (true);
- Ada:
loop <послідовність інструкцій> exit when умова; <послідовність інструкцій> end loop;
- Алгол 60:
if
умова then <unconditional інструкція>;
- Pascal:
if умова then <інструкція>;
- C, Java:
if (умова) <інструкція>;
- Ada:
if умова then <послідовність інструкцій> end if;
- Fortran 77+:
IF (умова) THEN
<послідовність інструкцій>
END IF
- Алгол 60:
if умова then <unconditional інструкція> else <інструкція>;
- Pascal:
if умова then <інструкція> else <інструкція>;
- C, Java:
if (умова) <інструкція> else <інструкція>;
- Ada:
if умова then <послідовність інструкцій> else <послідовність інструкцій> end if;
- Fortran 77+:
IF (умова) THEN
<послідовність інструкцій>
ELSE
<послідовність інструкцій>
END IF
- Pascal:
case c of 'a': alert(); 'q': quit(); end;
- Ada:
case c is when 'a' => alert(); when 'q' => quit(); end case;
- C, Java:
switch (c) { case 'a': alert(); break; case 'q': quit(); break; }
- Ada:
begin protected code except when exception specification => exception handler
- Java:
try { protected code } catch (exception specification) { exception handler } finally { cleanup }
- Python:
try: protected code except exception specification: exception handler else: no exceptions finally: cleanup
Основна стаття: Синтаксис мови програмування
Окрім присвоювань і викликів підпрограм, більшість мов починають кожну інструкція зі спеціального слова (наприклад, goto, if, while тощо), як показано у наведених вище прикладах. Для опису форми тверджень різними мовами використовувалися різні методи; більш формальні методи, як правило, більш точні:
- Algol 60 використовував нотацію Бекуса-Наура (BNF), яка встановила новий рівень специфікації граматики мови[2].
- До Fortran 77 мову описували в англійськими словами з прикладами[3], починаючи з Fortran 90 і далі мова описувалася за допомогою варіанту BNF[4].
- COBOL використовував двовимірну метамову[5].
- Pascal використовував як синтаксичні діаграми і еквівалент BNF[6].
BNF використовує рекурсію для вираження повторення, тому були запропоновані різні розширення, щоб дозволити пряму індикацію циклів.
Деякі граматики мов програмування резервують службові слова або спеціально позначають їх і не дозволяють використовувати їх як ідентифікатори. Це надає можливість створювати граматики мов програмування, які легше аналізувати, вимагаючи менше перегляду вперед .
Fortran і PL/1 не мають зарезервованих службових слів, що дозволяє такі інструкціями, як:
PL/1:
IF IF = THEN THEN ...
(другий IF і перший THEN– змінні).
Fortran:
IF (A) X = 10...
умовна вказівка (з іншими варіантами)IF (A) = 2
- присвоєння змінній з іменем IF
Оскільки пропуски були необов’язковими до Fortran 95, друкарська помилка могла повністю змінити значення інструкції:
DO 10 I = 1,5
початок циклу з I, що працює від 1 до 5DO 10 I = 1.5
присвоєння зміннійDO10I
значення 1,5
Основна стаття: Стропінг (синтаксис)
В Algol 60 і Algol 68 чітко виділялися спеціальні лексеми:
- для публікації, жирним шрифтом, наприклад begin;
- для програмування, з певним спеціальним маркуванням, наприклад, позначкою ( 'begin), лапками ( 'begin') або підкресленим ( begin на Elliott 503 ).
Це називається «стропінг», токени, які є частиною синтаксису мови, таким чином, не конфліктують із назвами, визначеними програмістом.
Певні імена зарезервовано як частину мови програмування, і їх не можна використовувати як ідентифікатори, визначені програмістом. Більшість популярних мов програмування використовують зарезервовані службові слова. Першими такими мовами програмування були FLOW-MATIC (1953) і COBOL (1959). З 1970 року зарезервовані службові слова використовують Ada, C, C++, Java і Pascal. Кількість зарезервованих слів залежить від мови: C має близько 30, тоді як COBOL має близько 400 таких слів.
Більшість мов мають фіксований набір інструкцій, визначених мовою, але були експерименти з розширюваними мовами, які дозволяють програмісту визначати нові інструкції.
Основна стаття: Семантика мов програмування
Семантика стосується значення інструкцій, які використовуються у програмах. У багатьох мовах програмування використовується BNF або подібний еквівалент для вираження синтаксису/граматики досить формальним і точним способом, але семантика/значення інструкцій зазвичай описується з використанням прикладів і правил англійської мови, що може призвести до неоднозначності..
У мовах програмування розрізняють інструкції, які виконуються, та вирази, які обчислюються. Вирази завжди мають значення, а інструкції – ні. Однак вирази часто використовуються як частина складеної інструкції.
У більшості мов програмування інструкція може складатися лише з виразу, зазвичай після виразу ставиться термінатор (крапка з комою).
Вирази також можуть міститися в інших виразах. Наприклад, вираз x = y + 1 містить вираз y + 1, який, у свою чергу, містить значення y та 1, які також технічно теж є технічними виразами.
Хоча попередні приклади показують вирази присвоєння, деякі мови реалізують присвоєння не як вираз, а як інструкцію. Яскравим прикладом цього є Python , де = не є інструкцією, а просто роздільником у вказівці присвоєння. Хоча Python допускає кілька присвоювань, оскільки кожне присвоювання є виразом, це просто окремий випадок інструкції присвоєння, вбудованої в граматику мови, а не справжній вираз.
На теренах колишнього СРСР є певна плутанина щодо перекладу англійського "statement" - досить часто зустрічається термін "оператор", який з'явився у 1965 році, під час перекладу перекладаючи "Revised Report on the Algorithmic Language Algol 60". А.П.Єршов та М.Р.Шура-Бура переклали англійське "operator" як "знак операції", а "statement" - як "оператор", хоча в англійській термінології operator (+, -, % тощо) слугує для позначення операцій над операндами (див. детальніше: Оператор (програмування)), що породило чимало неузгодженостей у вітчизняній інформатиці. Так в українських та російських джерелах можна зустріти, наприклад, переклад if-statement як інструкція if[7] і як оператор if[8]. У ряді перекладів книг де англ. statement перекладають як оператор, замість англ. operator вживають термін операція. Також для позначення решти інструкцій (присвоєння, виклик тощо), що також позначається як англ. statement у вітчизняній літературі ряд перекладачів вживають інколи оператор, інколи вираз, інколи команда. Для позначення складених інструкцій (if, if-else, while та ін.) у вітчизняних джерелах зустрічається термін конструкція (наприклад, "конструкція while")[9].
- ↑ Staff, Webopedia (1 вересня 1996). What is Statement?. Webopedia (амер.). Процитовано 29 жовтня 2022.
- ↑ а б в Revised Report on the Algorithmic Language Algol 60. www.masswerk.at. Процитовано 29 жовтня 2022.
- ↑ ANSI FORTRAN 66 standard"FORTRAN 66" (PDF) (PDF). Retrieved February 19, 2021.
- ↑ ANSI FORTRAN 95 standard"Fortran95" (PDF). Retrieved February 19, 2021.
- ↑ Cobol manual."COBOL" (PDF) (PDF). Retrieved January 23, 2021.
- ↑ Pascal User Manual and Report Appendix D."Pascal" (PDF) (PDF). Retrieved February 19, 2021.
- ↑ Оператори розгалуження та цикли у C#. [Архівовано 9 червня 2011 у Wayback Machine.] (укр.)
- ↑ [1] [Архівовано 17 листопада 2011 у Wayback Machine.](укр.)
- ↑ Конструкція if(). ua-admin.com. Архів оригіналу за 7 червня 2010. Процитовано 21 червня 2011.
Це незавершена стаття про інформаційні технології. Ви можете допомогти проєкту, виправивши або дописавши її. |