Ruby – 繰り返し処理

繰り返し処理の種類

for~要素を取り出して処理する

Rangeオブジェクトを使った繰り返し処理。".."演算子は両端の値を含む。

"..."演算子は終了値を含まない。

配列の内容を一つずつ取り出す例。

times~回数を指定する処理

timesは繰り返し回数を指定して実行。

繰り返しのカウンターを指定できる。カウンターはゼロからスタートし、指定回数-1までカウントされる。

upto/downto~カウントアップ/ダウン

uptoは初期値から終了値までを含んでカウントアップ。downtoは逆にカウントダウン。カウンターを省略しても可。

step~刻み幅を指定

[初期値].step([終了値], [刻み幅])で実行。

終了値がちょうどでない場合はその手前まで実行される。

ただし浮動小数点の計算誤差があり得るので、ちょっと気持ち悪い。

each~要素を一つずつ取り出す

eachforと同じくコレクションの要素を順に取り出す。

hashはキーと値を取り出せる。

ブロックの省略形{...}がある。

each_with_index~要素番号も取得

each_with_indexはコレクションから要素を取り出しながら、そのインデックスも得られる。Pythonのenumerateと同じ機能。

while~条件が真の間繰り返し

whileは条件が真の間ブロックを繰り返す。

whilebeginendブロックの後に置ける。上記の前置の場合は条件によってはブロックは一度も実行されないが、後置の場合は少なくとも1回は実行される。

until~条件が真になるまで繰り返し

untilwhileと逆で条件が偽の間繰り返し、真になったらループ終了。whileと同様、ブロックの前/後どちらに置いてもよい。

loop~無限ループ

loopは単にブロックを繰り返す。ループの終了判定が必要。

繰り返し制御

break~ループを終了

breakは実行中のループブロックを終了する。

next~残りを飛ばして続ける

nextはそれ以下の実行をせず、ループの次のステップに入る。他言語のcontinueと同じ。

以下の例ではn==2のときだけprintが実行されず、次のn=3の処理に入る。

redo~同じ条件で再実行

redoは現在のループと同じ条件で再度実行する(ループの次のステップではなく同じステップを再実行)。

この例では、n==2の時に"2 - C"を表示。その後n==3となってredoが実行され、a=="C"のままputsから実行、"3 - C"が表示されている。

次の例はすこしややこしい。

この例ではeachn=1とセットされて"1"が表示される。その後n==2となるのでredoが実行され、n==2のままprintが実行されて"2"が表示。その後n==3になるので次のeachに移り、n==2がセットされる。このn("2")を表示した後、n==3となるのでredoは実行されず・・・と続く。

 

Ruby – 変数と定数

変数の先頭はアルファベット小文字。任意のオブジェクト(の参照番地)を代入可能。

定数は先頭がアルファベット大文字。定数に値を代入しようとするとwarning。

 

Ruby – 演算子

算術演算子

単項演算子

算術演算子と括弧

除算は被除数・除数とも整数の時は小さい側の整数に丸められる(floor)。いずれかあるいは両方が実数の時は実数になる。

'%'で剰余を計算。

'**'でべき乗を計算。

文字列演算子

結合

'+'演算子は2つの文字列の結合結果を返し、元の文字列は保持される。

'<<'演算子は2つの文字列の結合結果を返し、1つ目の変数を結合結果で書き換える。

'*'演算子は文字列を繰り返して複製して結合。

ビット演算子

'~'は前値の否定演算子。

’&’’|’'^'はそれぞれAND、OR、XOR。

'<<''>>'は指定した数だけシフトする演算子。

数値比較演算子

数値の比較演算子は標準的な定義。

文字列比較演算子

論理演算子

'!'は前値の否定演算子。

'&&''||'は論理積、論理和。

'and''or'も論理積、論理和だが挙動が異なる。

andor演算子は他の殆どの演算・処理に対して優先度が低いため、演算子より前の項がまず実行されてから2項目との評価が行われるため。括弧で優先順位を明示すると&&||と同じ結果になる。

三項演算子

三項演算子の形。

使用例。

 

Ruby – 基本的なリテラル

数値

整数

基数を指定する場合。

先頭がゼロの場合は8進数と解釈される点に注意。8進数と解釈できない場合はエラーになる。

実数

小数点以下をゼロとすると実数のリテラルになるが、小数点のみを付けるとエラーになる。

0~1の小数点では、先頭のゼロは省略できない。

有理数

末尾に'r'を付けると有理数となり、分数形式で保持される。

複素数

'i'の直前に数値を並べると虚数となり、複素数形式で保存される。

文字列

ダブルクォートかシングルクォートで囲む。

ダブルクォートで囲むとバックスラッシュ記法は特殊文字として解釈されるが、シングルクォートで囲むとバックスラッシュが単なる文字として扱われる。

空白をはさんで並んだ文字列は結合される。

文字リテラル

'?'に続く一文字は文字列として扱われる。

ヒアドキュメント

'<<[識別子]'の次の行から'[識別子]'の直前の行までが複数行にわたる文字列として解釈される。

論理値

論理値のリテラルとしてtruefalseが定義されている。