Stanislav Gribanov
Stanislav Gribanov личный блог
11 февраля 2024, 10:39

Перевод книги "Хакер фондового рынка". Функции с возвращаемым значением.

Перевод книги "Хакер фондового рынка". Функции с возвращаемым значением.

Функции с возвращаемым значением.

1. Предисловие.
2. Торговля деньгами.
3. Биржевая цена.
4. Золотоискатели и ломбарды.
5. Тики, бары, свечи.
6. Как работают торговые системы?
7. Технический анализ — смысл и бессмыслица.
8. Трехчасовой курс программирования.
9. Первый урок: Переменные.
10. Разновидность калькулятора.
11. Второй час: Функции. 

Функция также может принимать переменные или числовые значения от вызывающей функции, использовать их для своих вычислений и возвращать результат. Вот пример функции, которая получает переменные и возвращает их:

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).

 

На сегодня достаточно. Следующий раздел посвящен решениям в коде. Стратегия всегда должна решать, покупать, продавать или вообще ничего не делать. Итак, теперь мы делаем большие шаги на пути к собственной торговой системе.

Продолжение следует...

2 Комментария
  • Union_Jack
    11 февраля 2024, 11:49
    Поэтому если функция возвращает целое значение, объявите ее через int
    При финансовых вычисления всегда используйте только целый тип (например int). Вещественные типы (с плавающей точкой) не используйте. Иначе можете получить неожиданные и очень 'интересные' результаты. 
  • Андрей &
    14 февраля 2024, 06:51
    Разве сейчас не проще в написании кода задействовать ИИ? Я в последнее время использую только эту возможность. Лучше потратить время на составление алгоритма нежели тратить часы на код и поиск своих же косяков. Железные мозги куда быстрее напишут и оптимизируют код под твои условия.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн