椛さん、Juliaやります! №2
10/07/22
はおはお。
ゆっくりじっくりJuliaを学んでいきたいと思います。っとGitHubで発見しちゃったよ! マニュアル! しかも日本語じゃん~
ってことで、今回はマニュアルの順番を無視して「型」を習ってみようと思います。知りたいの
●型の種類と宣言
一般的には~
静的型システム
コンパイル時には型が決定されてるものを指します。指定した型でないとエラーが出ちゃったりするので困りますが、特定の型だけを受け付けたい場合やアサーションするときには必須ですね
参考:int, float, string, &c.動的型システム
コンパイル時には何の型かは不明です。実行して初めて型が決定されます。値から推論して型が決定するパターンです。あまり型に意識せず長すぎて書きたくもない宣言も省略できるので勝手がいいです
参考:auto, var, let, &c.
で、Juliaはというと基本的には動的型システムのようです。型宣言はいらにゃい。しかも動的宣言も必要ないっぽいですね。いきなり使えちゃう
x = 100
y = 100
(x + y)
> 200
もちろん静的型宣言もできます。値のあとに「::」を付けて型を定義するようだ
x::Int32 = 100
y::Int32 = 200
(x + y)
> 200
こんな感じ。ここでは型を定義しているので「200.0」とかにしたらエラーになるってことだね
よし! 宣言の仕方はわかったぞっと。ちなみにやっぱり代入先が型宣言されていた場合は暗黙の変換がされるようです。リッチw
●抽象型
おっと、これはあまり見たことないのがでてきた。素直に書くと別の型同士の演算はできないようで、そんなときにこの「抽象型」が登場するみたい。マニュアルには
と書かれています。で、
「抽象型を使うと、型の階層を形成して、具象型の適合する文脈を作ることができます」
難しい書き方してるなぁ‥
つまりはこうらしい。抽象型のいくつかは最初から宣言されているけど、自分で勝手に型の階層を作れるよ、みたいな?
abstract type Number end
abstract type Real <: Number end
abstract type AbstractFloat <: Real end
abstract type Integer <: Real end
abstract type Signed <: Integer end
abstract type Unsigned <: Integer end
今は abstract type とか <: とか end は無視しておきましょ。これを階層をたどるようにしていくと Number が基底となり、その上に Real、さらにその上に AbstractFloat(小数)、または Integer(整数) という階層になってますね。Realってのはでっかい浮動小数の数字かな
●プリミティブ型
なんだろなんだろ?
おおっ。組み込み型のことね。言語で最初から使えるやつのこと。それをJuliaでは自前の組み込み型を宣言できるみたいです。パネェ!
実際こうなってるらしいよ
primitive type Float16 <: AbstractFloat 16 end
primitive type Float32 <: AbstractFloat 32 end
primitive type Float64 <: AbstractFloat 64 end
primitive type Bool <: Integer 8 end
primitive type Char <: AbstractChar 32 end
数字の部分はビット数になるようですね。えっ、Char(文字) 型は32ビットなのね。サロゲートペアのことを考えてか、UTF-32を扱ってるのか‥そのうちわかるかなw
●その他
ほかにもいっぱいあるん‥
でもまだいいかな
複合型 → 値の変更できない struct的な、、、
可変複合型 → mutableな struct的な!
宣言型 → typeof的な、、、
合併型 → union的な、、、
パラメータ型
パラメータ複合型
たくさんあるなぁ‥
悉く書を信ずれば則ち書無きに如かず