Julia function

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)