<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://camokathomelab.servebeer.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=91.191.226.34</id>
	<title>wiki12 - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://camokathomelab.servebeer.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=91.191.226.34"/>
	<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/91.191.226.34"/>
	<updated>2026-07-21T18:15:04Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://camokathomelab.servebeer.com/mediawiki/index.php?title=%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)&amp;diff=8050</id>
		<title>Функция (программирование)</title>
		<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)&amp;diff=8050"/>
		<updated>2026-01-14T12:45:24Z</updated>

		<summary type="html">&lt;p&gt;91.191.226.34: /* Pascal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{другие значения|функция}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Фу́нкция&#039;&#039;&#039; в [[Программирование|программировании]], или [[подпрограмма]] — фрагмент программного кода, к которому можно обратиться из другого места [[Компьютерная программа|программы]]. В большинстве случаев с функцией {{iw|Связывание имён|связывается идентификатор|en|Name binding}}, но многие языки допускают и [[анонимная функция|безымянные функции]]. С именем функции неразрывно связан адрес первой инструкции ([[Оператор (программирование)|оператора]]), входящей в функцию, которой передаётся управление при обращении к функции. После выполнения функции управление возвращается обратно в адрес возврата — точку программы, где данная функция была вызвана.&lt;br /&gt;
&lt;br /&gt;
Функция может принимать параметры и должна возвращать некоторое значение, возможно пустое. Функции, которые возвращают пустое значение, часто называют [[Процедура (программирование)|процедурами]]. В некоторых языках программирования объявления функций и процедур имеют различный синтаксис, в частности, могут использоваться различные ключевые слова.&lt;br /&gt;
&lt;br /&gt;
Функция должна быть соответствующим образом &#039;&#039;объявлена&#039;&#039; и &#039;&#039;определена&#039;&#039;. &#039;&#039;Объявление функции&#039;&#039;, кроме имени, содержит список имён и [[Тип данных|типов]] передаваемых &#039;&#039;[[Параметр (программирование)|параметров]]&#039;&#039; (или: &#039;&#039;[[Аргумент (программирование)|аргументов]]&#039;&#039;), а также, тип возвращаемого функцией значения. &#039;&#039;Определение&#039;&#039; функции содержит исполняемый код функции. В одних языках программирования объявление функции непосредственно предваряет определение функции, в то время как в ряде других языков необходимо сначала объявить функцию, а уже потом привести её определение. &amp;lt;!-- я не почувствовал разницы: можно яснее сформулировать альтернативу? ~~~~ --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В [[Объектно-ориентированное программирование|объектно-ориентированном программировании]] функции, объявления которых являются неотъемлемой частью определения [[Класс (программирование)|класса]], называются [[Метод (программирование)|методами]]. Также в языках с [[Объектно-ориентированное программирование|ООП]] возможно объявление [[Виртуальная функция|абстрактной (виртуальной) функции]] без объявления тела функции.&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы использовать ранее определённую функцию, необходимо в требуемом месте программного кода указать имя функции и перечислить передаваемые в функцию параметры. Параметры, которые передаются функции, могут передаваться как по значению, так и по ссылке: для переменной, переданной по значению создаётся локальная копия и любые изменения, которые происходят в теле функции с переданной переменной, на самом деле, происходят с локальной копией и никак не сказываются на самой переменной, в то время как изменения, которые происходят в теле функции с переменной, переданной по ссылке, происходят с самой переданной переменной.&lt;br /&gt;
&lt;br /&gt;
Функция определяет собственную (локальную) область видимости, куда входят входные параметры, а также те переменные, которые объявляются непосредственно в теле самой функции.&lt;br /&gt;
&lt;br /&gt;
Существует возможность вызвать функцию внутри самой функции: такой вызов функции называется &#039;&#039;рекурсивным&#039;&#039;, а сам процесс последовательных вложенных друг в друга вызовов функций называют [[Рекурсия|рекурсией]]. Поскольку необходимо запомнить (в стеке) адрес возврата функции (а также, выделить в том же стеке память под параметры и локальные переменные, не являющиеся динамическими), то ничем не ограниченная рекурсия приводит к [[Переполнение стека|переполнению стека]], поэтому в [[Язык программирования|языках программирования]] устанавливается некоторый предельный уровень вложенности рекурсивных вызовов.&lt;br /&gt;
&lt;br /&gt;
== Примеры функций ==&lt;br /&gt;
&lt;br /&gt;
=== JavaScript ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function sum(a, b) {&lt;br /&gt;
  return a + b&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ActionScript ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;actionscript&amp;quot;&amp;gt;&lt;br /&gt;
public function name(text: string) &lt;br /&gt;
{&lt;br /&gt;
        var textfield: TextField = new TextField();&lt;br /&gt;
        textfield.text = text;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== C++ ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void name(string text)&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; text;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;в стандарте C++ существуют так же функции с аргументами по умолчанию&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
void foo(int arg1, int arg2 = 10)&lt;br /&gt;
{&lt;br /&gt;
	cout &amp;lt;&amp;lt; arg1 &amp;lt;&amp;lt; arg2;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foo(9); // вызовется и будет выведено 910&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ruby ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
def greetings(name)&lt;br /&gt;
    puts &amp;quot;Hi #{name}&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
greetings(&#039;Ksenia&#039;) #Hi Ksenia&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rust ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rust&amp;quot;&amp;gt;&lt;br /&gt;
#[inline(always)]&lt;br /&gt;
fn max&amp;lt;T&amp;gt;(a: T, b: T) -&amp;gt; T&lt;br /&gt;
where&lt;br /&gt;
    T: PartialOrd,&lt;br /&gt;
{&lt;br /&gt;
    if a &amp;gt; b &lt;br /&gt;
    {&lt;br /&gt;
        a&lt;br /&gt;
    }&lt;br /&gt;
    else &lt;br /&gt;
    {&lt;br /&gt;
        b&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
max(3, 5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== C# ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public void Name(string text)&lt;br /&gt;
{&lt;br /&gt;
    Console.WriteLine(text);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
public void name(String text) {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pascal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
function name(var text: string): string;&lt;br /&gt;
begin&lt;br /&gt;
  result = text;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
function name($text)&lt;br /&gt;
{&lt;br /&gt;
    echo $text;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard ML ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ocaml&amp;quot;&amp;gt;&lt;br /&gt;
fun name t = print t&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
или, что то же самое (см. [[функции первого класса]] и [[лямбда-функция]]):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ocaml&amp;quot;&amp;gt;&lt;br /&gt;
val name = fn t =&amp;gt; print t&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Swift ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;swift&amp;quot;&amp;gt;&lt;br /&gt;
func foo(arg1: Int, arg2: Int = 10) &lt;br /&gt;
{&lt;br /&gt;
    print(arg1 * arg2)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foo(arg1: 9) // (9 * 10) Ответ: 90 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Visual Basic ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
Sub Name(text)&lt;br /&gt;
    Console.WriteLine(text)&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PureBasic ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;purebasic&amp;quot;&amp;gt;&lt;br /&gt;
Procedure.l Name(text.s)&lt;br /&gt;
    PrintN(text)&lt;br /&gt;
EndProcedure&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
def func(p1: str, p2: int = 10):&lt;br /&gt;
    print(p1, p2)&lt;br /&gt;
func(123)  # 123 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nim ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nim&amp;quot;&amp;gt;&lt;br /&gt;
proc myfunc(text: string)=&lt;br /&gt;
  echo text&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&amp;lt;!-- * [[Аргумент (программирование)|Аргумент функции]]&lt;br /&gt;
думаю, если есть ссылка в тексте, здесь упоминать не надо ~~~~ --&amp;gt;&lt;br /&gt;
* [[Анонимная функция]]&lt;br /&gt;
* [[Функция (математика)]]&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
{{rq|&lt;br /&gt;
{{нет источников|дата=2010-07-23}}&lt;br /&gt;
{{переработать|дата=2010-09-10}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Концепции языков программирования]]&lt;/div&gt;</summary>
		<author><name>91.191.226.34</name></author>
	</entry>
</feed>