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
標準構文(Syntax)
ここではNimの標準構文について説明します。
字句解析については以前に説明済みです。
Nimではユーザ定義の演算子が利用でき、バイナリ演算子には11段階の優先順位があります。
結合法則(Associativity)
最初の文字が^であるバイナリ演算子は右結合であり、他の2項演算子はすべて左結合です。
数学的な結合法則について改めて見直したい方はこちら
Wiki 結合法則
proc `^/`(x, y: float): float =
# 右結合による除算
result = x / y
echo 12 ^/ 4 ^/ 8 # 24.0 (4 / 8 = 0.5, 次に 12 / 0.5 = 24.0)
echo 12 / 4 / 8 # 0.375 (12 / 4 = 3.0, 次に 3 / 8 = 0.375)
優先順位
単項演算子は、常にバイナリ演算子よりも強力に作用します。
$a + bは($a) + bであり$(a + b)ではありません。
単項演算子の最初の文字が@の場合、それはプライマリサフィックスよりも強く結びつく"しるし"のような演算子です。
@x.abcは(@x) .abcとしてかいせきされ、$x.abcは$(x.abc)として解析されます。
キーワードでないバイナリ演算子では、優先順位は次のような規則で決まります。
->, ~>, => などのように矢印で終わる演算子は、すべての演算子の中でもっとも低い優先順位になります。
演算子が=で終わり、最初の文字が<、>、!、=、〜、?のいずれでもない場合は、2番目に優先順位の低い代入演算子です。
それ以外の場合、優先順位は最初の文字で決まります。
優先順位 | 演算子 | 最初の文字 | ターミナルシンボル |
---|---|---|---|
10 | $ ^ | OP10 | |
9 | * / div mod shl shr % | * % \ / | OP9 |
8 | + - | + - ~ | | OP8 |
7 | & | & | OP7 |
6 | .. | . | OP6 |
5 | == <= < >= > != in notin is isnot not of | = < > ! | OP5 |
4 | and | OP4 | |
3 | or xor | OP3 | |
2 | @ : ? | OP2 | |
1 | 代入演算子 (like +=, *=) | OP1 | |
0 | 矢印っぽい演算子 (like ->, =>) | OP0 | |
演算子がプレフィックス演算子として使用されるかどうかは、先行する空白の影響を受けます(この解析の変更はバージョン0.13.0で導入されました)。 |
echo $foo
# is parsed as
echo($foo)