Juliaで関数を定義するための基本的な構文は次のとおり。
function f(x, y)
x + y
end
関数は次のように簡潔な構文で記述することもできる。
f(x, y) = x + y
Juliaでは数式をそのまま記述できるようにする方針なので、関数によって返される値を return
で明示する必要はない。しかし、関数の戻り値をソースコード上で検索しにくくなるため、あえて明示する方が望ましい。
Juliaの関数では、評価された最後の式が関数の戻り値として返される。
function f(x, y)
x + y
end
他の多くのプログラミング言語のように、戻り値を return
で明示することもできる。
function f(x, y)
return x + y
end
関数の戻り値のデータ型を指定することができる。
function f(x)::Float64
return Float64(pi * x)
end
以下に示すデータ型を指定できる。
関数の引数のデータ型を指定することができる。
function f(x::Float64, y::Float64)
x + y
end
Juliaの関数は、引数を名前ではなくキーワードで識別することができる。
function f(a; b=2)
a ^ b
end
println(f(2))
println(f(2, b=3))
Julia言語の関数は可変長引数を取ることができる。
可変長引数とは、関数における引数の個数が固定ではなく、関数呼び出しごとに引数の個数を変えることができるものである。
function add(x...)
sum = 0
for i=1:length(x)
sum += x[i]
end
sum
end
# 1
println(add(1))
# 1 + 2
println(add(1, 2))
# 1 + 2 + 3
println(add(1, 2, 3))
Julia言語では、引数の型が異なれば、同じ名前であっても別の関数と見なされる。
function f(x::Int64, y::Int64)
x + y
end
function f(x::Float64, y::Float64)
x + y
end
Julia 言語では、名前を付けずに関数を定義することができる。名前を付けずに定義された関数を「無名関数」と呼ぶ。
julia> f = x -> x + 1
#1 (generic function with 1 method)
julia> f(1)
2
Julia 言語では、関数の中でさらに関数を定義することができる。
function factorial(x)
function fact()
if (n == 0)
return 1
else
n = n - 1
return (n+1) * fact()
end
end
n = x
return fact()
end
f = factorial(3)
println("factorial = ", f)