1から始めるJuliaプログラミング
1.
型
オプショナルな型宣言
リッチな型システム
動的型付け
aumy.icon なかなか見ないタイプだ
多重ディスパッチ
引数の数にも反応するらしいのでオーバーロードぽさもある
2.
複素数
im は再代入不可能な変数
s[1] から始まる
s[end]
s[1:5] 範囲切り出し
"Hoge" * "Fuga" 文字列結合
aumy.iconそんなことある?
"Hello, $name" 文字列補完
"Hello, $(1 + 3)" 式を使った文字列補完
g"\.jl$" 正規表現
aumy.iconこれ良い
f(x) = x + 3 みたいな書き方もできる
数学〜
ML(プログラミング言語)〜
値が関数を持たない
部分型関係はある
具体型 (concrete types)
インスタンス化してオブジェクトを生成できる
抽象型 (abstract types)
具体型の上位型に位置する
インスタンス化できない
Float16 Float32 Float64 は AbstractFloat という抽象型を親に持つ
数値では Signed Unsigned Integer Rational Real Number というような抽象型の階層がある
最上位には Any がある
関数の引数に型を指定しないと Any
Nothing 型は nothing という唯一の値を持つ
多重ディスパッチ
同じ名前の関数を異なるシグネチャで複数回宣言しておくと利用時に使い方から自動で実装が選ばれる
Union{Int, Nothing}
ユニオン
型パラメータは {}
Foo{Int} Foo{Float} のような多重ディスパッチもOK
部分型関係は <: で得られる
型理論!!
タプル
名前付きタプル
NamedTuple{(:a, :b), Tuple{Int64, Int64}}
シンボル
forはwhileのシンタックスシュガー
code:jl
for x in collection
# do something
end
code:jl
next = iterate(collection)
while next !== nothing
(x, state) = next
# do something
next = iterate(collection, state)
end
aumy.icon 「iterate() 関数が実装されてる型」みたいなのがほしい
Array{T, N}
1-indexed、row-major order
parse.(Int, array) とやると array の全要素がパースされる
using
export されているやつのみが取り込まれる
@assert
非標準文字列リテラル
マクロの一種
r"\d+"
識別子に対応する値
Symbol("foo") === :foo
構文木
:(2 + x) で 2 + x のASTが値として取れる
dump(ast) で見れる
:(2x + $(y)) として構文木に要素をねじ込める
y がシンボル :foo の場合 2x + foo になる
eval(ast) で評価できる
マクロ
@hoge a b c
配列の境界チェックを無効化する @inbounds