関数
関数の定義には function キーワードを使う。
julia> function add(x, y)
x + y
end
add (generic function with 1 method)
最後に評価した式の値が、自動的に返り値になる。
あるいは、明示的に return x + y としてもいい。
定義した関数の呼び出し。
julia> add(3, 7)
10
関数の本体部分が1行なら、次のような形でも定義できる。呼び出し方法は同じ。
julia> mul(x, y) = x * y
mul (generic function with 1 method)
julia> mul(3, 7)
21
引数や返り値には、型を指定することもできる。次のように :: に続けて型を指定する。
julia> add_typed(x::Int, y::Int)::Float64 = x + y
add_typed (generic function with 1 method)
julia> v = add_typed(3, 7)
10.0
julia> typeof(v)
Float64
この例では2つの引数は Int、返り値は Float64。
型を指定した定義では、呼び出し時に引数の型が合わないとエラーになる。
julia> add_typed(3, 7.5)
ERROR: MethodError: no method matching add_typed(::Int64, ::Float64)
The function `add_typed` exists, but no method is defined for this combination of argument types.
Closest candidates are:
add_typed(::Int64, ::Int64)
@ Main REPL[18]:1
上の例とは逆に、引数を Float64、返り値を Int にしてみよう。
julia> add_typed2(x::Float64, y::Float64)::Int = x + y
add_typed2 (generic function with 1 method)
この場合、返り値が Int に変換できないとエラーになる。
julia> add_typed2(3.2, 7.5)
ERROR: InexactError: Int64(10.7)
Stacktrace:
[1] Int64
@ .\float.jl:923 [inlined]
[2] convert
@ .\number.jl:7 [inlined]
[3] add_typed2(x::Float64, y::Float64)
@ Main .\REPL[21]:1
[4] top-level scope
@ REPL[22]:1
うまく変換できる場合にはエラーにならない。
julia> add_typed2(3.2, 7.8)
11
