【Crystalと○○】 Crystalと用語
【Crystalと○○】の中で登場する用語を、簡単なご説明とともに紹介します。
用語集
あ行
値型(value type)
Value 型を祖先に持つ型全般。スタック領域にメモリを確保し、値渡しされる。
Crystal の構造体は全て値型。
インスタンス変数(instance variable)
ある型のインスタンスごとに固有な状態を保持する変数。
スコープは同じインスタンス内。
変数名が @
で始まる。
エイリアス(alias)
型につける別名。
ソースコード中の見た目は変わるものの、コンパイラからは元の型として解釈される。
か行
仮想型(virtual type)
型の継承関係などを処理する際にコンパイラが用意する仮想的な型。
ユーザが意識する場面はほぼない。
型(type)
プログラム中でデータの種類や構造を定義する枠組み。
クラスや構造体、列挙型などの総称として使われることも。
クラス(class)
最も基本的な型の双璧、其の壱。
状態(インスタンス変数、クラス変数)と機能(メソッド)を定義でき、インスタンス化が可能。
ヒープ上にメモリが割り当てられ。参照渡しされる。
クラス変数(class variable)
型のごとに固有な状態を保持する変数。
スコープは同じ型の定義内。
変数名が @@
で始まる。
Crystal
Rubyと非常によく似た構文を持ちながら、静的な型チェックと高速なネイティブバイナリへのコンパイルが可能なプログラミング言語。
言語そのものの名前を表すときはCを大文字にした「Crystal」を使用する。
気がついたら公式サイトの売り文句が "Fast as C, Slick as Ruby"(Cのように速く、Rubyのように滑らか) から "A language for humans and computers"(人間とコンピュータのための言語) に変わってた。
crystal
Crystal言語のコンパイルコマンド。
コンパイラやそのコマンドを指す場合は小文字の「crystal」を使用する。
ソースコードのコンパイルだけでなく、プロジェクトテンプレートの作成やコードの整形、ドキュメントHTMLの生成など、その機能は多岐にわたる。
構造体(struct)
最も基本的な型の双璧、其の弐。
状態(インスタンス変数、クラス変数)と機能(メソッド)を定義でき、インスタンス化が可能。
スタック領域を使用し、値渡しされる。
さ行
参照型(reference type)
Reference 型を祖先に持つ型全般。ヒープ領域にメモリを割り当て、参照渡しされる。
Crystal のクラスは全て参照型。
Cライブラリ(lib)
Cバインディングの名前空間を構成する。
ジェネリック型(generic type)
複数の型に対して共通する機能の枠組みを定義する型。
定義時に型引数を設定し、実際に使用する際には型引数に具体的な型を指定する。
ジェネリックなクラス、構造体、モジュールなどを定義可能。
た行
抽象型(abstract type)
型として継承ツリーに組み込めるが、自身はインスタンス化できない型。
抽象クラス(abstract class)と抽象構造体(abstract struct)の2種類が存在する。
モジュールとの使い分けに悩む。
特殊変数(special variables)
特殊な用途のために参照のみ許可された変数。
スコープはローカル変数と同じ。
変数名が $
で始まる。
な行
nilable
値が nil
であることを許容することを表す形容詞。
「nilable な型」といった場合、それはある型と Nil 型とのユニオン型を指す。
は行
ま行
モジュール(module)
複数の型で使用可能な機能を切り出してパッケージ化した型。
クラスや構造体、または別のモジュールに mix-in されることで自身の機能を利用可能にする。
状態(インスタンス変数、クラス変数)と機能(メソッド)を定義できるが、インスタンス化はできない。
名前空間の構成要素として使われることも。
や行
ユニオン型(union type)
複数の型の組み合わせで表現される型。
コンパイル時に、ある変数やメソッドの引数/返り値の値が異なる複数の型の値を取りうる場合や、複数の型を扱いたいジェネリック型の型引数として使用される。
ら行
列挙型(enum)
型の一種。
人間が判別しやすい名前を付けられた整数値の集合。
排他的な状態を列挙する使い方と、フラグのように状態の重ね合わせが可能な使い方がある。
実はクラス変数やメソッドを定義可能。
ローカル変数(local variables)
インスタンス変数でもクラス変数でも特殊変数でもない変数。
メソッド定義の内側で使う場合はそのメソッドの中だけ、メソッド定義の外側で使う場合にはそのファイル内をスコープとする。
Discussion