"D"iving Into the D Programming Language / Погружение в язык Ди: 1.3 Function Basics

Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

Давайте перейдём от объявления обязательной функции main к тому, как объявлять и другие фунции.

thornik 26.12.13 в 13:08

0

Определение функций схоже с объявлениями в других Алгол-подобных языках: первым задается возвращаемый тип, затем имя функции и, наконец, набор формальных параметров разделенных запятыми и заключенных в скобки.

Born2frag86 26.12.13 в 09:59

0

К примеру, чтобы определить функцию pow, которая принимает два аргумента типа double и int и возвращает double, мы должны написать:

warchief 08.11.13 в 11:24

0

<pre>
double pow(double base, int exponent) {
…
}
</pre>

warchief 08.11.13 в 11:24

0

Каждый параметр функции (base и exponent в примере выше), помимо своего типа, имеет необязательный спецификатор для указания пути передачи параметров при вызове.

thornik 26.12.13 в 13:12

0

По умолчанию, аргументы в функцию pow передаются по значению.

Born2frag86 26.12.13 в 09:10

0

При указании спецификатора ref, параметр напрямую связывается с переданным аргументом, так что если параметр изменяется, это сразу будет видно вне функции.

thornik 26.12.13 в 13:14

0

К примеру:

warchief 08.11.13 в 11:25

0

import std.stdio;
void fun(ref uint x, double y) {
x = 42;
y = 3.14;
}
void main() {
uint a = 1;
double b = 2;
fun(a, b);
writeln(a, " ", b);
}

warchief 08.11.13 в 11:25

0

Эта программа выведет на экран 42 2, потому что x - это ref uint, т.е. присвоение x на самом деле присваивает сразу переменной a.

Born2frag86 26.12.13 в 09:38

0

С другой стороны, присвоение "y" не влияет на внешнюю переменную "b", т.к. "y" - независимая копия "b" внутри функции.

Born2frag86 26.12.13 в 09:46

0

Последние спецификаторы, которые осталось рассмотреть - это in и out.

thornik 26.12.13 в 13:19

0

Попросту говоря, in - это указание функции только смотреть, но не изменять параметр.

thornik 26.12.13 в 13:21

0

Указание out перед аргументом подобно указанию ref с тем исключением, что при out параметр обязательно инициализируется в начале функции значением по умолчанию.

thornik 26.12.13 в 13:24

0

(Каждый тип Т имеет значение по умолчанию, обозначаемое как T.init; Пользовательские типы могут иметь свой собственный init.)

thornik 26.12.13 в 13:26

0

О функциях можно много чего ещё рассказать.

thornik 26.12.13 в 17:49

0

Вы можете передавать функции в другие функции как аргумент, писать вложенные функции, сохранять в функции её внутреннее состояние (полноценное синтаксическое замыкание) и кое-что ещё интересное.

thornik 26.12.13 в 13:28

0

Мы рассмотрим каждую из этих возможностей по очереди.

thornik 26.12.13 в 17:50

0
Минутку...