Juliaとは、数値解析と計算科学のニーズに対応するために設計された、汎用の動的プログラミング言語である。

目次

Juliaのインストール

Juliaの公式サイト(https://julialang.org/)でDownloadメニューをクリックして、Juliaのインストーラをダウンロードする。

JuliaをWindows 10にインストールする

JuliaをWindows 10にインストールする場合、ダウンロードしたインストーラをダブルクリックして実行する。

Juliaのインストーラはいたってシンプルで、インストール先のフォルダ名を聞いてくるだけである。

Juliaのスクリプト(*.jl)をエクスプローラでダブルクリックして起動したり、Windows PowerShellから起動するためには、Juliaの実行ファイル(julia.exe)のパスを環境変数PATHに含める必要がある。

環境変数PATHの設定は、Juliaのインストーラではやってくれないので、手動で設定する必要がある。

Windows 10で環境変数を設定する手順は次のとおり。

  1. スタートメニューから [Windows システムツール] - [コントロール パネル] をクリックしてコントロールパネルを開く。
  2. コントロールパネルで [システムとセキュリティ] - [システム] をクリックする。
  3. [システムの詳細設定]をクリックしてシステムのプロパティを開く。
  4. システムのプロパティで「環境設定」ボタンをクリックする。
  5. 環境変数の一覧が表示されるので、変数「PATH」を選択して「編集」ボタンをクリックする。
  6. 「新規」ボタンをクリックして、julia.exeがあるフォルダ(C:\Users\tsuka\AppData\Local\Julia-1.0.1\binなど)を入力して、OKボタンをクリックする。

UbuntuにJuliaをインストールする

UbuntuにJuliaをインストールするには、ダウンロードしたファイルをtarコマンドで展開する。

tar xzf julia-1.0.1-linux-x86_64.tar.gz

環境変数PATHにJuliaのbinディレクトリを追加する。

Juliaのバージョンアップ

既にインストールされているJuliaをアップデートするには、既存のJuliaをアンインストールしてから新しいバージョンのJuliaをインストールする。

Juliaのバージョンが変わるとインストール先のパスが変わるので、環境変数PATHも変更が必要になる。

Juliaの起動と終了

Windowsの場合、スタートメニューからJuliaをクリックするとJuliaのREPLが起動する。

JuliaのREPLを起動すると、バナーとコマンド入力を促すプロンプトが表示される。

Julia

Juliaを終了させるには、Ctrl + D または exit() とタイプする。

Windows PowerShellコマンドプロンプトからJuliaを起動するには、julia.exeを実行する。

ファイルの実行コードを非対話的に実行するには、julia.exeの引数に実行するスクリプトファイル名と引数を指定する。

C:> julia.exe script.jl arg1 arg2

スクリプトの名前はグローバル定数PROGRAM_FILE、スクリプトの引数はグローバル定数ARGSで参照できる。

グローバル定数 説明
PROGRAM_FILE スクリプト名
ARGS スクリプトの引数
# スクリプト名を表示
println(PROGRAM_FILE)

for arg in ARGS
  # スクリプトの引数を表示
  println(arg)
end

Juliaの起動オプションには次のものを指定できる。

オプション 説明
--banner={yes|no|auto} 起動時のバナーを有効化または無効化する。
--color={yes|no|auto} カラーテキストを有効化または無効化する。
-h ヘルプ情報を表示する。
--help
-q バナーを表示せず、REPL警告を抑制する。
--quiet
-v バージョン情報を表示する。
--version

Juliaを電卓として使う

Juliaのプロンプトに計算式を入力してEnterキーを押下すると、計算結果が表示される。

julia> 1 + 2 * 3
7

julia>

Juliaの演算子

算術演算子

演算子 説明
x + y 加算
x - y 減算
x * y 乗算
x / y 除算
x ÷ y 整数除算
x ^ y
x % y 剰余

ブール演算子

演算子 説明
!x 否定

ビット演算子

演算子 説明
~x ビット否定
x & y 論理積
x | y 論理和
x ⊻ y 排他的論理和
x >>> y 論理右シフト
x >> y 算術右シフト
x << y 左シフト

代入演算子

演算子 説明
x = y 代入
x += y 加算代入
x -= y 減算代入
x *= y 乗算代入
x /= y 除算代入
x ÷= y 整数除算代入
x %= y 剰余代入
x ^= y 乗代入
x &= y 論理積代入
x |= y 論理和代入
x ⊻= y 排他的論理和代入
x >>>= y 論理右シフト代入
x >>= y 算術右シフト代入
x <<= y 左シフト代入

比較演算子

比較演算子とは2つの値の関係性を比較して、正しければ真(true)、間違っていれば偽(false)と評価する演算子であり、関係演算子とも呼ばれる。if文やwhile文で使われることが多い。

Juliaの比較演算子はPythonなど他のプログラミング言語と似ているが、Unicodeを使って数学の記号をそのまま使えるようにしているので、≠(ノットイコール)などが使えるのが特徴である。

演算子 説明
x == y 等しい
x != y 等しくない
x ≠ y
x < y 小さい
x <= y 小さいか等しい
x ≤ y
x > y 大きい
x >= y 大きいか等しい
x ≥ y

Juliaのデータ型

Juliaのデータ型には次のものがある。

整数型

符号 バイト数 最小値 最大値
Int8 あり 8 -2^7 2^7 - 1
UInt8 なし 8 0 2^8 - 1
Int16 あり 16 -2^15 2^15 - 1
UInt16 なし 16 0 2^16 - 1
Int32 あり 32 -2^31 2^31 - 1
UInt32 なし 32 0 2^32 - 1
Int64 あり 64 -2^63 2^63 - 1
UInt64 なし 64 -0 2^64 - 1
Int128 あり 128 -2^127 2^127 - 1
UInt128 なし 128 0 2^128 - 1
Bool N/A 8 false (0) true (1)

浮動小数点型

精度 バイト数
Float16 half 16
Float32 single 32
Float64 double 64

ローカル変数のデータ型

ローカル変数を宣言するときに、データ型を指定することができる。

local x::Int32

関数の引数や戻り値のデータ型

関数の引数や戻り値のデータ型を指定することができる。

function f(x::UInt32)::Float64
  return Float64(pi * x)
end

データ型の確認

Juliaのデータ型はtypeof関数で確認できる。

julia> typeof(1)
Int64

julia> typeof(1.0)
Float64

julia> typeof(true)
Bool

julia> typeof('A')
Char

julia> typeof('あ')
Char

julia> typeof("ABC")
String

julia>

データ型の変換

型変換関数を使ってデータ型を変換することができる。

julia> Float64(pi)
3.141592653589793

julia> Float64(pi * 2)
6.283185307179586

julia> BigFloat(pi)
3.141592653589793238462643383279502884197169399375105820974944592307816406286198

julia>

型変換関数を使う方法のほかに、データ型を指定してもよい。

julia> (pi * 2)::Float64
6.283185307179586

julia>

コメント

Juliaのスクリプトにはコメントを埋め込むことができる。コメントとはスクリプトの注釈で、プログラムの実行には影響を及ぼさない。

#以降は行末までコメントとなる、これを単一行コメントという。

radius = 2 #半径

#=から=#までの範囲もコメントとなる、これを複数行コメントといい、複数の行にわたってコメントを記述できる。

#=
  円の面積
  引数 半径
  戻り値 面積
=#
function area(r)
  r * r * π
end

文字列

Julia言語で文字列リテラルを表すには、文字列を2重引用符で囲む。

str = "Hello, world!"

2重引用符を含む文字列の場合は、文字列を3つの2重引用符で囲む。

str = """Say "Hello, world!"."""

文字列を格納した変数や文字列リテラルは、配列として使うことができる。他の多くのプログラミング言語では配列の添字は0から始まるが、Juliaでは配列の添字は1から始まる。

println("Hello, world!"[1])

配列の添字は範囲指定することもできる。たとえば2文字目から4文字目までの場合は次のようにする。

println("Hello, world!"[2:4])

文字列の最後の文字を参照するには、配列の特殊な添字 end を使う。

str = "Hello, world!"
println(str[end])

Juliaで文字列を表示するには、printlnを使用する。

julia> println("Hello World!")
Hello World!

julia>

文字列の連結

Juliaで文字列を連結するには、string関数を使う。string関数は、渡されたすべての引数を連結した文字列を返す。

s = string("Hello", ", ", "world", "!")

変数

変数とは値に関連付けられた名前で、後で使用するために値を保存する場合に便利である。

Julia言語の変数に型宣言は不要で、変数名の大文字と小文字は区別される。

julia> x = 10
10

julia> x = "Hello World!"
Hello World!

julia>

多くのプログラミング言語では、変数に使える文字をASCII/ISO 8859-1 (Latin-1)の英数字記号に限っているが、Julia言語は変数名にUnicodeを使うことができるユニークな特徴がある。そのため、変数名に日本語やさまざまな記号を使うことができる。

長さ = 5
println(長さ)

♡ = "I love you"
println(♡)

制御構造

制御構造とは、条件によって処理を分岐したり、条件を満たす間は処理を繰り返すなど、処理の流れを制御する構文である。

制御構造 説明
if 条件によって処理を分岐する。
while 条件を満たす間、処理を繰り返す。
for あらかじめ決まった回数分、処理を繰り返す。

if

Juliaにおいて、条件によって処理を分岐させるにはif分を使う。

if x > y
  println("xはyより大きい")
elseif x < y
  println("xはyより小さい")
else
  println("xはyと等しい")
end

Juliaでは三項演算子を使うことができる。

condition ? expr1 : expr2

conditionがtrueの場合はexpr1が評価され、falseの場合はexpr2が評価される。

三項演算子のサンプルを示す。

println(x > y ? "xはyより大きい" : x < y ? "xはyより小さい" : "xはyと等しい")

while

while文は条件を満たす間、処理を繰り返す制御構造である。

i = 1
# iが3以下の間は繰り返す
while i <= 3
  println(i)
  global i += 1
end

繰り返しを途中で抜けるには、break文を使用する。

i = 1
# 問答無用で繰り返す
while true
  println(i)
  # iが3以上なら繰り返しを抜ける
  if i >= 3
    break
  end
  global i += 1
end

for文

あらかじめ決まった回数だけ繰り返し処理をJuliaで行うには、for文を使う。

たとえば、1から10までの数字を表示するには、次のようにする。

for i = 1:10
  println(i)
end

ここでの1:10は範囲オブジェクトであり、1から10までの連続した数値を表している。

1から2刻みで9まで(1, 3, 5, 7, 9)繰り返す場合は、範囲オブジェクトを1:2:9とする。

for i = 1:2:9
  println(i)
end

数値の集合をfor文で使うには、次のようにする。

for i in [1, 3, 2]
  println(i)
end

Juliaのfor文で文字列の集合を使うには、を使う。

for s ∈ ["foo","bar","baz"]
  println(s)
end

関数

Juliaで関数を定義するための基本的な構文は次のとおり。

function f(x, y)
  x + y
end

関数は次のように簡潔な構文で記述することもできる。

f(x, y) = x + y

Juliaの関数では、評価された最後の式が関数の戻り値として返される。他の多くのプログラミング言語のように、戻り値を return で明示することもできる。

function f(x, y)
  return x + y
end

Juliaでは数式をそのまま記述できるようにする方針なので、関数によって返される値を return で明示する必要はない。しかし、関数の戻り値をソースコード上で検索しにくくなるため、あえて明示する方が望ましい。

ファイル

Juliaでファイルをオープンするには、open関数を使う。

f = open("example.txt")

ファイルに書き込むためにオープンするには、"w"オプションを指定してopen関数を使う。

f = open("example.txt", "w")

ファイルから1行読み込むには、readlines関数を使う。

f = open("example.txt")
line = readlines(f)

ファイルへ1行書き込むには、write関数を使う。

f = open("example.txt", "w")
write(f, "Hello, world!")

ファイルを使い終わったら、ファイルを閉じる必要がある。ファイルをクローズするには、close関数を使う。

f = open("example.txt")
lines = readlines(f)
for l in lines
  println(l)
end
close(f)

Juliaで現在の作業ディレクトリを取得するには、pwd()関数を使う。

cwd = pwd()

try/catchとException

Juliaでは予期しない状態が発生した場合に例外がスローされる。スローされた例外を補足してエラー処理を行うには、try/catchを使う。

trycatchに挟まれたスクリプト内で例外がスローされた場合に、catchブロックの処理が実行される。例外がスローされなければ、catchブロックは実行されない。

try
  f = open("example.txt")
  lines = readlines(f)
  for line in lines
    println(line)
  end
  close(f)
catch
  println("ファイルをオープンできません")
end

エラーが発生した場合とエラーが発生しなかった場合の両方で実行する処理は、finallyブロックに記述する。

try
  f = open("notexist.txt")
  lines = readlines(f)
  for line in lines
    println(line)
  end
  close(f)
catch
  println("ファイルをオープンできません")
finally
  println("処理が終了しました。")
end

組み込み例外

あらかじめJuliaに組み込まれている例外には、次のようなものがある。

例外 説明
ArgumentError 関数呼び出しのパラメータが有効なシグネチャと一致しない。
BoundsError 配列の索引外にアクセスしようとした。
DivideError 0で除算しようとした。
DomainError 関数またはコンストラクタの引数に有効な範囲外の値が渡された。
EOFError ファイルやストリームから読み取るデータがなくなった。
ErrorException 一般的なエラー
InterruptException ターミナル割込み(Ctrl + C)によってプロセスが停止された。
ParseError parse関数に渡された式は、有効なJulia式として解釈できなかった。
SystemError システムコールが失敗した。
TypeError 型アサーションの失敗または不正な引数型の組み込み関数の呼び出し。
UndefRefError アイテムまたはフィールドは、指定されたオブジェクトに対して定義されていない。
StringIndexError 有効でないインデックスの文字列にアクセスしようとしたときにエラーが発生した。

例外をスローする

例外を明示的にスローするには、throw文を使う。

たとえば、マイナスでない数値に対してのみ定義された関数は、引数がマイナスの場合にDomainErrorをするように記述できる。

function f(x)
  if x >= 0
    exp(-x)
  else
    throw(DomainError(x, "引数は負でなければならない"))
  end
end