"D"iving Into the D Programming Language / Погружение в язык Ди: 1.3 Function Basics
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Давайте перейдём от объявления обязательной функции main к тому, как объявлять и другие фунции. thornik 26.12.13 в 13:08 |
|
|
Определение функций схоже с объявлениями в других Алгол-подобных языках: первым задается возвращаемый тип, затем имя функции и, наконец, набор формальных параметров разделенных запятыми и заключенных в скобки. Born2frag86 26.12.13 в 09:59 |
||
|
К примеру, чтобы определить функцию pow, которая принимает два аргумента типа double и int и возвращает double, мы должны написать: warchief 08.11.13 в 11:24 |
||
|
<pre> warchief 08.11.13 в 11:24 |
||
|
Каждый параметр функции (base и exponent в примере выше), помимо своего типа, имеет необязательный спецификатор для указания пути передачи параметров при вызове. thornik 26.12.13 в 13:12 |
||
|
По умолчанию, аргументы в функцию pow передаются по значению. Born2frag86 26.12.13 в 09:10 |
||
|
При указании спецификатора ref, параметр напрямую связывается с переданным аргументом, так что если параметр изменяется, это сразу будет видно вне функции. thornik 26.12.13 в 13:14 |
||
|
К примеру: warchief 08.11.13 в 11:25 |
||
|
import std.stdio; warchief 08.11.13 в 11:25 |
||
|
Эта программа выведет на экран 42 2, потому что x - это ref uint, т.е. присвоение x на самом деле присваивает сразу переменной a. Born2frag86 26.12.13 в 09:38 |
||
|
С другой стороны, присвоение "y" не влияет на внешнюю переменную "b", т.к. "y" - независимая копия "b" внутри функции. Born2frag86 26.12.13 в 09:46 |
||
|
Последние спецификаторы, которые осталось рассмотреть - это in и out. thornik 26.12.13 в 13:19 |
||
|
Попросту говоря, in - это указание функции только смотреть, но не изменять параметр. thornik 26.12.13 в 13:21 |
||
|
Указание out перед аргументом подобно указанию ref с тем исключением, что при out параметр обязательно инициализируется в начале функции значением по умолчанию. thornik 26.12.13 в 13:24 |
||
|
(Каждый тип Т имеет значение по умолчанию, обозначаемое как T.init; Пользовательские типы могут иметь свой собственный init.) thornik 26.12.13 в 13:26 |
||
|
О функциях можно много чего ещё рассказать. thornik 26.12.13 в 17:49 |
||
|
Вы можете передавать функции в другие функции как аргумент, писать вложенные функции, сохранять в функции её внутреннее состояние (полноценное синтаксическое замыкание) и кое-что ещё интересное. thornik 26.12.13 в 13:28 |
||
|
Мы рассмотрим каждую из этих возможностей по очереди. thornik 26.12.13 в 17:50 |
