Help us understand the problem. What is going on with this article?

Nimの基本的な型について触れる

基本的な型

Nimは静的型付け言語です。
同様のプログラミング言語に実装される基本的な型をサポートし、複雑な型についても実装されています。

真偽型 (Bool)

Nimの真偽型は bool です。
truefalse の2つの値によって表現されます。
whileifelifwhenの条件は、bool型でなければいけません。
bool型には、notandorxor><>=<===!= の演算子が定義されています。
andor 演算子は、短絡評価を行います。

while user != nil and user.name != "momeemt":
  user = user.next

例えば、user != nilfalse だった時、user.name != "momeemt"を評価しません。

文字型 (Characters)

Nimの文字型は char です。
char型は常に1バイトのメモリを確保します。故に、ほとんどのUTF-8コードで表された文字を表現できません。
シングルクォーテーションで囲んで表現します。
char型は、==<<=>>= 演算子と比較することができます。
$ 演算子を用いて、char型をstring型に変換できます。
ord 関数を使用すれば、文字コードを取得できます。また、chr 関数を使えば整数から文字に変換できます。

文字列型 (Strings)

Nimの文字列は string です。ミュータブルなので、書き換えることができます。
string型はヌル終端文字列で開始し、終了します。
また、length フィールドがあり、文字列の長さを len 関数で取得できます。これにヌル終端文字列はカウントされません。
ヌル終端文字列にアクセスするとエラーになります。これは、stringを容易に cstring 型に変換するために存在します。
& 演算子を使って、文字列を連結することができます。
string型は辞書式順序を使って比較できます。よって、全ての比較演算子がサポートされています。
慣例によって、UTF-8 コードでエンコードされますが、これ以外の文字コードを選択しても構いません。
文字列型の変数は、"" で初期化できます。

整数型 (Integers)

Nimには intint8int16int32int64uintuint8uint16uint32uint64 の型が実装されています。
デフォルトの整数型は、int 型です。これ以外の型を指定したい時は、整数リテラルに型接尾辞を付けます。

let
  let_int = 0
  let_int8 = 0'i8
  let_int64 = 0'i64
  let_uint = 0'u

整数型には、+-*divmod><>=<===!= の演算子が定義されています。
また、andorxornot の演算子も、ビット単位の操作のために提供されています。
shl 演算子で左ビットシフトを、shr 演算子で右ビットシフトを行えます。これは常に符号なしとして扱われます。
操作は全てラップアラウンドされるので、オーバーフローやアンダーフローが起こることはありません。
自動型変換によって情報が失われた時、コンパイルによって検知されないものは EOutOfRange 例外が出されます。

浮動小数点型 (Floats)

Nimには floatfloat32float64 の型が実装されています。
デフォルトの浮動小数点型は float 型です。これ以外の型を指定したい時は、浮動小数点リテラルに型接尾辞を付けます。

let
  let_float = 0.0
  let_float32 = 0.0'f32
  let_float64 = 0.0'f64

浮動小数点型には、+-*/><>=<===!= の演算子が定義されています。
様々な式で、浮動小数点型内での型変換が行われています。この時、小さい領域のメモリを確保する型が大きな領域のメモリを確保する型に変換されます。
整数型は浮動小数点型に変換され、その逆も行われません。
これらの変換には toInt 関数 と toFloat 関数を利用します。

型変換

型変換には組み込みで定義された関数を利用します。

var
  x: int32 = 1.int32
  y: int8  = int8('a')
  z: float = 2.5
  sum: int = int(x) + int(y) + int(z) # sum == 100

1.int32 は、int32(1) と同じように関数を実行できます。
'a'は、97'i8と等しいので変換されます。
また、float型の浮動小数点型を整数型に型変換すると切り捨てられるので、int(z) == 2 です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした