組み込みC言語プログラマのためのmruby入門(中編) ―― mrubyをお手軽に体験する!
●数値演算
続けて,組み込みシステムなら避けて通れない数値演算を行ってみましょう.
> 1+1
=> 2
> 1 + 2 * 2
=> 5
> (1 + 2) * 2
=> 6
四則演算は,一般的な演算子の優先順位で計算されます.かっこも使えます.
> 3 / 4
=> 0.75
> Math.cos(1.0)
=> 0.54030230586814
整数同士の割り算で余りが出る場合は,浮動小数点に変換されます.浮動小数点の精度は,mrubyをコンパイルした処理系のfloatまたはdoubleに準じます.floatとdoubleのどちらにするかは,mrubyをコンパイルする際にマクロで選択できます.
また,算術関数は,mrubyのコンパイル時にマクロで無効にできます.その際には,算術関数の呼び出しはエラーになります.
> Math.cos(1.0)
NameError: uninitialized constant Math
ゼロ除算では,inf(無限大)値が返ります.
> 3 / 0
=> inf
> 3.0 / 0.0
=> inf
なお,ISO標準のRubyでは,ゼロ除算時にはZeroDivisionErrorという例外が返ります.この点でmrubyの挙動は独特ですので,ほかのRuby実装で動作しているアプリケーションを移植する場合には注意してください.
●行の区切り
C言語と異なり,行末にセミコロン(;)を入れる必要はありません.ただし,1行に複数の式を入れる場合には,セミコロンが必要になります.
> 1 + 1 print "hello mruby!"
line 1: syntax error, unexpected tIDENTIFIER, expecting $end
> 1 + 1; print "hello mruby!"
hello mruby! => nil
上記の最初の入力行では,セミコロンが入っていないためエラーとなりました.その次の入力行では,文の間にセミコロンを入れたため,実行されました.
一般に,Rubyには1行に詰め込むと構文解釈があいまいになるケースがいくつかあります注1. mrubyの活用場面では,セミコロンを使って1行に詰め込む必要があることはまれなはずです.セミコロンが不要なコーディング・スタイルを心がけることをお薦めします.
注1:ただし,本稿執筆時点におけるmrubyは正規表現に対応していないので,リスクは低い.
●変数と値の型
ほかの多くの言語と同じように,Rubyにも変数があります.C言語と異なるのは,値に型があるのに対し,変数には型がないことです.よって,同じ変数にさまざまな値を入れることができます注2.以下のように,変数aに数値や文字列,配列などを代入することができます.
> a = 1
=> 1
> a = "hoge"
=> "hoge"
> a = 3.3
=> 3.3
> a = [ 1, 2, 3 ]
=> [1, 2, 3] #配列
注2:実は,Rubyの変数には,メソッドなども含めてRubyに存在するあらゆるモノを入れることができる.そこまで説明すると混乱の元なので,ここでは割愛する.