Функция также может принимать переменные или числовые значения от вызывающей функции, использовать их для своих вычислений и возвращать результат. Вот пример функции, которая получает переменные и возвращает их:
var euro_to_dollar(var Euro) { var Kurs = 1.36; return Euro * Kurs; }
Переменная var Euro в скобках содержит числовое значение, которое передается в функцию. Эта переменная может использоваться в функции как любая другая переменная. Чтобы вернуть число, запишите его — или выражение, которое вычисляет это число — после оператора return. Это возвращаемое число — называемое возвращаемым значением — может быть затем обработано в вызывающей функции.
Вы заметили, что мы объявили эту функцию не через «function», а через «var». Но разве var не является переменной? Функция, которая что-то возвращает, должна быть определена с типом возвращаемой переменной. Поэтому если функция возвращает целое значение, объявите ее через int; если она должна возвращать число с десятичными знаками, объявите ее через var. Компилятор распознает по скобкам (...), что это объявление функции, а не переменной.
Если функция ожидает переменные, то их определение — тип и имя — помещается в объявлении функции между круглыми скобками. Такая переменная называется параметром функции, а пространство между скобками — списком параметров. Если параметров несколько, они разделяются запятыми. Когда функция вызывается, значения параметров — называемых аргументами вызова функции — также передаются через запятую между скобками.
Разница между параметрами и аргументами — вещь тонкая: в объявлении функции список параметров находится между круглыми скобками. Когда функция вызывается, список аргументов передается ей в круглых скобках. Аргументы — это конкретные значения, которые получают параметры при вызове. Однако, поскольку нашим скриптам все равно, как называются их компоненты, для простоты мы всегда будем использовать здесь слово «параметр».
Когда функция что-то возвращает, вы можете просто поместить вызов функции в код на место возвращаемого значения. Звучит сложно? Давайте попробуем сделать это прямо сейчас с помощью нашей новой функции euro_to_dollar. Это новый сценарий:
var euro_to_dollar(var Euro) { var Kurs = 1.36; return Euro * Kurs; } function main() { var Euro = 500; // Сумма в евро для конвертации var Dollar = euro_to_dollar(Euro); printf("%.f Euro = %.f Dollar.", Euro, Dollar); }
Это делает наш код короче и элегантнее. Тем не менее, результат один и тот же:
Обратите внимание, что var Euro является обычной переменной в основной функции, но параметром в функции euro_to_dollar. Оба ничего не знают друг о друге. Но оба они имеют здесь одинаковое значение, потому что функции была передана переменная Euro в качестве аргумента.
Наконец, давайте разберемся с загадочным printf(...). Он вызывается со скобками, поэтому это также функция, которую мы используем для отображения нашего результата. Однако мы нигде об этом не заявляли. Это функция, которая уже «встроена» в C. Подобно встроенным переменным, о которых мы говорили вчера, часто необходимые функции уже включены в язык сценариев.
В отличие от обычных функций, printf принимает любое количество параметров. Здесь мы передаем функции три параметра, разделенные запятыми:
"%.f Euro = %.f Dollar.", // первый параметр Euro, // второй параметр Dollar // третий параметр
Первый параметр — это строковая переменная, строка, используемая для текста: "%.f Euro = %.f Dollar.". Второй и третий параметры являются переменными var. Подробности о функции printf можно прочитать в руководстве пользователя Zorro; здесь нам нужно знать только то, что странные "%. f" в тексте интерпретируются функцией как обозначения чисел. Затем следуют сами числа в виде других переменных. Именно по этой причине printf принимает разное количество параметров, в зависимости от количества выводимых переменных. Функция вставляет в текст значение — без десятичных знаков — переменной Euro вместо первого "%. f" и значение переменной Dollar вместо второго "%. f". После этого готовый текст отображается в окне сообщений Zorro. Так, если евро имеет значение 500, а доллар — 680, вызов printf выведет текст «500 евро = 680 долларов».
Мы можем сделать наш код еще короче. Если функция возвращает переменную, как, например, функция euro_to_dollar здесь, мы всегда можем вставить в код вызов функции вместо переменной. При этом мы сохраняем переменную и строку сценария. Программисты постоянно пользуются подобными сокращениями, потому что они ленивы и предпочитают писать меньше кода:
var euro_to_dollar(var Euro) { var Kurs = 1.36; return Euro * Kurs; } function main() { var Euro = 500; // Сумма в евро для конвертации printf("%.f Euro = %.f Dollar.", Euro, euro_to_dollar(Euro)); }
Важный совет, когда вы вызываете функции в коде таким образом: Никогда не забывайте о круглых скобках — особенно если список параметров пуст! В языке C имя функции без круглых скобок означает просто числовое значение адреса этой функции в памяти компьютера. Таким образом, add и add() будут оба допустимыми выражениями в коде и обычно не выдают сообщения об ошибке! Но цифры, которые они возвращают, совершенно разные. Чтобы избежать подобных ошибок, мы взяли за правило начинать все функции со строчной буквы (например, printf), а все переменные — с прописной (например, Dollar).
На сегодня достаточно. Следующий раздел посвящен решениям в коде. Стратегия всегда должна решать, покупать, продавать или вообще ничего не делать. Итак, теперь мы делаем большие шаги на пути к собственной торговой системе.