Nim入門
はじめに
Nimの入門記事があまりにもないので、世の中の業務で使ってもらうためには日本語ドキュメントが足りないと感じたので、自分で翻訳記事を書くことにしました。
実行環境
- macOS High Sierra v10.3
- Docker v17.09.0-ce
- Docker Compose v1.16.1
- Nim v0.17.2
- nimble v0.8.8
インストール
インストール記事は公式を参照のこと。
https://nim-lang.org/install.html
Dockerでの作成方法については、記事を書いたのでそちらを参照して下さい。
<>
主にマニュアルをベースに解説していきます。
https://nim-lang.org/docs/manual.html
字句解析(Lexical Analysis)
文字コード
ソースファイルのエンコードは全てUTF-8でお願いします。
それ以外はサポートしてません。
コメント
コメントはこんな感じ。
# コメントを書く
複数行にわたってコメントを書く場合はこんな感じ。
# 複数行コメントは
このようにして書いてくれれば
問題なくかけます。 #
Stringのリテラル
文字列リテラルは、二重引用符(ダブルコーテーション)で区切ることができ、エスケープシーケンスを含めることができます。
ダブルコーテーションで区切ればStringリテラルになるよ。
エスケープ | 意味 |
---|---|
\n | 改行 |
\r, \c | 復帰改行 |
\l | 改行 |
\f | 改ページ |
\t | タブ |
\v | 垂直タブ |
\ | バックスラッシュ |
" | ダブルコーテーション |
' | シングルコーテーション |
\ '0'..'9'+ | 小数点がひつようなdecimal文字 |
\a | アラート |
\b | バックスペース |
\e | エスケープ[ESC] |
\x HH | 16進数の文字必ず2桁入力 |
三重Stringリテラル
""""長い日本語文字列とダブルコーテーション""""
出力
"長い日本語文字列とダブルコーテーション"
エスケープを無視できるStringリテラル
例えばPathの表記中にバックスラッシュと「t」が入ってしまった場合に、タブになってしまう。
それを回避するために「r」を使う。
var f = openFile(r"C:\texts\text.txt")
以下のように利用した場合はダブルコーテーションが1つ残る。
r"a""b"
結果
a"b
Characterのリテラル
文字リテラルは、一重引用符(シングルコーテーション)で区切ることができ、エスケープシーケンスを含めることができます。
シングルコーテーションで区切ればCharacterリテラルになるよ。
エスケープ | 意味 |
---|---|
\r, \c | 復帰改行 |
\l | 改行 |
\f | 改ページ |
\t | タブ |
\v | 垂直タブ |
\ | バックスラッシュ |
" | ダブルコーテーション |
' | シングルコーテーション |
\ '0'..'9'+ | 小数点がひつようなdecimal文字 |
\a | アラート |
\b | バックスペース |
\e | エスケープ[ESC] |
\x HH | 16進数の文字必ず2桁入力 |
Numerical 定数
数値定数は読みやすくするためにアンダースコアを含めることができます。
let num = 10_000_000
整数および浮動小数点数のリテラルは、10進数(接頭辞なし)、バイナリ(接頭辞0b)、8進数(接頭辞0または0c)および16進数(接頭辞0x)の表記で指定できる。
各数値型のリテラルが定義されおり自動で型が決定しますが、曖昧なリテラルについては、アポストロフィ( '' ')で始まる接尾辞は型接尾辞をつけることでわかりやすくすることができます。
型接尾辞を持たないリテラルは、リテラルがドットを含んでいなければint型であるか、E | e型でなければfloat型です。表記上の便宜のために、型接尾辞のアポストロフィは、あいまいでない場合はなくても大丈夫です。
(型接尾辞付きの16進浮動小数点リテラルのみがあいまいである可能性があります)
let
x = 0 # x は ``int``
y = 0'i8 # y は ``int8``
z = 0'i64 # z は ``int64``
u = 0'u # u は ``unit``
型接尾辞 | 型 |
---|---|
'i8 | int8 |
'i16 | int16 |
'i32 | int32 |
'i64 | int64 |
'u | uint |
'u8 | uint8 |
'u16 | uint16 |
'u32 | uint32 |
'u64 | uint64 |
'f | float32 |
'd | float64 |
'f32 | float32 |
'f64 | float64 |
'f128 | float128 |
演算子
演算子は以下のようなものが使えます。
またNimではユーザ定義によって演算子をつくることができます。
= + - * / < >
@ $ ~ & % |
! ? ^ . : \
その他
` ( ) { } [ ] , ; [. .] {. .} (. .)