Функции: синтаксис и аргументы
Функции — главная единица кода в Julia. Разбираем все формы их записи и виды аргументов.
Функция в Julia — это именованный блок кода, принимающий аргументы. Возвращается значение последнего выражения, даже без слова
return.
Два способа объявления
Полная форма с function ... end и краткая «однострочная» — для простых функций:
# полная форма
function square(x)
return x^2
end
# краткая форма — почти как формула
cube(x) = x^3
println(square(4))
println(cube(3))Вывод:
16 27
Краткая форма особенно ценна в научном коде: математическую функцию f(x) = 2x + 1 можно записать буквально так, как в учебнике.
Множественный возврат
Функция может вернуть несколько значений через запятую — на самом деле это кортеж (tuple), который удобно «распаковать»:
function minmax(v)
return minimum(v), maximum(v)
end
lo, hi = minmax([3, 7, 1, 9, 4])
println("мин=$lo, макс=$hi")Вывод:
мин=1, макс=9
Аргументы по умолчанию
greet(name, greeting="Привет") = "$greeting, $name!"
println(greet("Анна"))
println(greet("Иван", "Здравствуйте"))Вывод:
Привет, Анна! Здравствуйте, Иван!
Именованные аргументы
Аргументы после точки с запятой в сигнатуре — именованные: при вызове их передают по имени, порядок не важен:
function rectangle(; width, height)
return width * height
end
println(rectangle(height=3, width=5))Вывод:
15
Анонимные функции
Безымянная функция записывается через стрелку -> и часто передаётся в map, filter, sort:
nums = [1, 2, 3, 4, 5]
println(map(x -> x * 10, nums))
println(filter(x -> x > 2, nums))Вывод:
[10, 20, 30, 40, 50] [3, 4, 5]
Как работает под капотом
В Julia функция — это не просто блок кода, а набор методов для разных типов аргументов. Когда вы пишете square(x), при первом вызове с Int Julia компилирует версию для целых, при вызове с Float64 — отдельную версию для дробных. Эта идея «много реализаций одной функции под разные типы» называется множественной диспетчеризацией — главная тема следующего раздела. Именно поэтому в Julia принято писать много маленьких функций: каждая компилируется в быстрый специализированный код.
Частые ошибки
Частая путаница — разница между позиционными аргументами по умолчанию (до точки с запятой) и именованными (после неё). Именованные нужно передавать по имени: rectangle(width=5, height=3), а не rectangle(5, 3). Вторая ошибка — забыть, что функция и без return вернёт значение последнего выражения; иногда это приводит к неожиданному возврату nothing, если последняя строка — это, например, println.
Итоги
- Краткая форма
f(x) = выражениеидеальна для математических функций. - Возврат нескольких значений через запятую даёт кортеж для распаковки.
- Аргументы по умолчанию — позиционные; именованные ставят после
;и передают по имени. - Анонимные функции пишут через
->дляmap,filterи т. п. - Функция возвращает значение последнего выражения даже без
return.