Функция (программирование): различия между версиями
Перейти к навигации
Перейти к поиску
[непроверенная версия] | [непроверенная версия] |
Содержимое удалено Содержимое добавлено
Строка 1: | Строка 1: | ||
'''В УКРАИНЕ ВСЕ ХОХЛЫ''' |
|||
{{другие значения|функция}} |
|||
'''Фу́нкция'''УКРАИНЦЫ ВСЕ ХОХЛЫ'''''''''''' в [[Программирование|программировании]], или [[подпрограмма]] — фрагмент программного кода, к которому можно обратиться из другого места [[Компьютерная программа|программы]]. В большинстве случаев с функцией {{iw|Связывание имён|связывается идентификатор|en|Name binding}}, но многие языки допускают и [[анонимная функция|безымянные функции]]. С именем функции неразрывно связан адрес первой инструкции ([[Оператор (программирование)|оператора]]), входящей в функцию, которой передаётся управление при обращении к функции. После выполнения функции управление возвращается обратно в адрес возврата — точку программы, где данная функция была вызвана. |
|||
Функция может принимать параметры и должна возвращать некоторое значение, возможно пустое. Функции, которые возвращают пустое значение, часто называют '''[[Процедура (программирование)|процедурами]]'''. В некоторых языках программирования объявления функций и процедур имеют различный синтаксис, в частности, могут использоваться различные ключевые слова. |
|||
Функция должна быть соответствующим образом ''объявлена'' и ''определена''. ''Объявление функции'', кроме имени, содержит список имён и [[Тип данных|типов]] передаваемых ''[[Параметр (программирование)|параметров]]'' (или: ''[[Аргумент (программирование)|аргументов]]''), а также, тип возвращаемого функцией значения. ''Определение'' функции содержит исполняемый код функции. В одних языках программирования объявление функции непосредственно предваряет определение функции, в то время как в ряде других языков необходимо сначала объявить функцию, а уже потом привести её определение. <!-- я не почувствовал разницы: можно яснее сформулировать альтернативу? ~~~~ --> |
|||
В [[Объектно-ориентированное программирование|объектно-ориентированном программировании]] функции, объявления которых являются неотъемлемой частью определения [[Класс (программирование)|класса]], называются ''[[Метод (программирование)|методами]]''. Также в языках с [[Объектно-ориентированное программирование|ООП]] возможно объявление [[Виртуальная функция|абстрактной(виртуальной) функции]] без объявления тела функции. |
|||
Для того, чтобы использовать ранее определённую функцию, необходимо в требуемом месте программного кода указать имя функции и перечислить передаваемые в функцию параметры. Параметры, которые передаются функции, могут передаваться как по значению, так и по ссылке: для переменной, переданной по значению создаётся локальная копия и любые изменения, которые происходят в теле функции с переданной переменной, на самом деле, происходят с локальной копией и никак не сказываются на самой переменной, в то время как изменения, которые происходят в теле функции с переменной, переданной по ссылке, происходят с самой переданной переменной. |
|||
Функция определяет собственную (локальную) область видимости, куда входят входные параметры, а также те переменные, которые объявляются непосредственно в теле самой функции. |
|||
Существует возможность вызвать функцию внутри самой функции: такой вызов функции называется ''рекурсивным'', а сам процесс последовательных вложенных друг в друга вызовов функций называют [[Рекурсия|рекурсией]]. Поскольку необходимо запомнить (в стеке) адрес возврата функции (а, также, выделить в том же стеке память под параметры и локальные переменные, не являющиеся динамическими), то ничем не ограниченная рекурсия приводит к [[Переполнение стека|переполнению стека]], поэтому в [[Язык программирования|языках программирования]] устанавливается некоторый предельный уровень вложенности рекурсивных вызовов. |
|||
== Примеры функций == |
== Примеры функций == |
Версия от 03:27, 26 апреля 2022
В УКРАИНЕ ВСЕ ХОХЛЫ
Примеры функций
JavaScript
function max (a, b)
{
return a >= b ? a : b;
}
ActionScript
public function name(text: string)
{
var textfield: TextField = new TextField();
textfield.text = text;
}
С++
void name(string text)
{
cout << text;
}
в стандарте C++ существуют так же функции с аргументами по умолчанию
void foo(int arg1, int arg2 = 10)
{
cout << arg1 << arg2;
}
foo(9); // вызовется и будет выведено 910
Rust
#[inline(always)]
fn max<T>(a: T, b: T) -> T
where
T: PartialOrd,
{
if a > b
{
a
}
else
{
b
}
}
max(3, 5);
C#
public void Name(string text)
{
System.Console.WriteLine(text);
}
Java
public void name(String text) {
System.out.println(text);
}
Pascal
procedure name(var text: string)
begin
write(text);
end;
PHP
function name($text)
{
echo $text;
}
Standard ML
fun name t = print t
или, что то же самое (см. функции первого класса и лямбда-функция):
val name = fn t => print t
Swift
func foo(arg1: Int, arg2: Int = 10)
{
print(arg1 * arg2)
}
foo(arg1: 9) // (9 * 10) Ответ: 90
Visual Basic
Sub Name(text)
Console.WriteLine(text)
End Sub
PureBasic
Procedure.l Name(text.s)
PrintN(text)
EndProcedure
Python
deficion func(mama):
print(mama)
Nim
proc myfunc(text: string)=
echo text
См. также
Ссылки
Для улучшения этой статьи по информационным технологиям желательно:
|