Juliaのドキュメントを読みながら、インストールして、いくつかの機能を調べて試してみました。
インストール
brewでインストール
Macでbrewを使っていて、brew cask
を使える状態になっていれば、brew cask install
でインストールできます。
dockerイメージを使う
dockerのイメージも提供されているので、それを使う事もできます。
Docker Hubのリポジトリがあるので、docker run
で起動イメージにjulia
を指定すると自動でpullしてきて、REPLが立ち上がります。
Juliaの実行方法
Juliaの実行方法には大きく2つあります。
REPL上で実行する場合と、juliaのソースコードをjuliaコマンドに渡す方法です。
REPLで実行する
REPLとは、対話形式でJuliaの式を評価し、結果をみることができるツールです。
Shellのように、プロンプトが表示され、Juliaの式を入力しEnterを入力すると、その式が評価され結果が表示されます。
ちなみに、REPLは、read-eaval-print loop
(Read(読み込む)、Eval(評価する)、Print(出力する)、Loop(繰り返す))の頭文字をとったものです。
juliaコマンドで実行する
変数
Juliaの変数は、値に束縛した名前です。
以下は、10
をx
という名前に束縛します。
変数名には、Unicodeを使用する事もできます。
JuliaのREPLでは、バックスラッシュをつけたLaTex
の数式記号を使うことで、α̂₂
のような文字も入力することができます。
REPLで\alpha
+ <TAB>
+ \hat
+ <TAB>
+ \_2
+ <TAB>
を入力すると、 α̂₂
に変換されます。
非推奨とされていますが、Juliaでは必要があれば、組み込み定数や関数を再定義することができます。
ただし、再定義するには、対象の定数や関数が一度も評価されていない必要があります。
JuliaのREPLを再起動し、先に評価した場合、上書き時にエラーになります。
型
Juliaの型は以下のようなものがあります。
整数型と不動小数点数型は、型名の後に型のビット数を指定して表現されます。
- Boolean型
- 整数型
- Int8
- Int16
- Int32
- Int64
- Int128
- UInt8
- UInt16
- UInt32
- UInt64
- UInt128
- 不動小数点数型
- 文字
- 文字列
Boolean
Bool
型は、trueまたは、falseを持つことができます。内部的には8bitの整数で表現されており、true(1)
、false(0)
になります。
整数型・不動小数点数型
Juliaには、整数型と不動小数点数型があり、typeofを評価するとそれぞれInt
とFloat
が返ってきます。
typemin
とtypemax
関数で型が取りうる最小と最大の値を取得できます。
文字・文字列
文字列は、文字の並びです。英数字や記号などは、0から127までの整数値にマッピングされたASCIIを使うことができ、日本語などはUTF-8エンコーディングされたユニコードを使えます。
文字は'
で、文字列は"
で括られたものになります。
文字列は文字の並びなので、インデックスを指定して特定の文字を取得することができます。
文字列のインデックスの単位は1byteで、1から始まり、インデックスを1進めると1byte先の値が参照されます。
日本語などのマルチバイト文字以下の例では、ハ
は、3byteなので、str[1]
で参照でき、str[2]と
str[3]`は不正な値としてエラーになります。
nextind()
を使うと、次の文字のインデックスが取得できます。
変数名の前に$
がついた文字列が、文字列内にある場合は、それを変数として展開します。
文字は、Int型の整数にマッピングされているため、大小関係が存在し計算も可能です。
正規表現
Juliaで正規表現を使う場合は、r"<正規表現>"
という構文で、Regex型を宣言します。
正規表現が対称の文字列に出現するかどうかを調べたい場合は、occursin関数が使えます。
occursin関数は、正規表現が検索対象の文字列に含まれるかどうかを評価しbooleanを返します。
match関数を使うと、正規表現にマッチした文字列を取得できます。
関数
Juliaの関数は、引数から戻り値への写像オブジェクトです。
function <関数名>(<引数>) end
で宣言します。
また、g(x) = 2x + 1
のように宣言することも可能です。
Juliaの関数は、関数内で最後に評価された式を返却しますが、return
式を使うと明示的に特定の式を返却することができます。
無名関数
function
キーワードに関数名を指定しないで関数を定義する。
または、->(アロー演算子)
を使って、無名関数を作ることができます。
引数の型
<変数名>::<型>
の形式で引数を宣言することで、関数に渡す引数の型を指定することができます。
オプション引数
デフォルト値を設定した引数を持つ関数を定義できます。
キーワード引数
キーワード引数を定義する事もできます。
キーワード引数は、引数の宣言部分で、;
(セミコロン)の後に記述します。
フロー制御
Juliaのフロー制御には主に以下のものができます。
ブロック
begin-end
や;
チェインを使って、ブロックを作成することができます。
条件分岐
if-elseif-else
で条件分岐することができます。
繰り返し評価
他の多くの言語と同様に繰り返し処理は、while
文かfor
文を使えます。
while
は以下です。
for
は以下です。
例外制御
組み込み済みの例外は以下のものが用意されています。
- Exception
- ArgumentError
- BoundsError
- CompositeException
- DimensionMismatch
- DivideError
- DomainError
- EOFError
- ErrorException
- InexactError
- InitError
- InterruptException
- InvalidStateException
- KeyError
- LoadError
- OutOfMemoryError
- ReadOnlyMemoryError
- RemoteException
- MethodError
- OverflowError
- Meta.ParseError
- SystemError
- TypeError
- UndefRefError
- UndefVarError
- StringIndexError
例外を投げるには、throw
関数を使います。
例外が発生した際の制御は、try-catch
を使います。
まとめ
まだ、全ての機能をさわれていな意ですが、Juliaのマニュアルを読んでどのような機能があるのか確認しました。
数学的な記述方法でコードを書くための機能が充実している印象を受けました。
他にもmacroなどいろいろな機能があるので、後々試してみたいと思います。