Rubyの書き方の簡単なまとめ

Rubyの書き方についてまとめが欲しいという意見が多いので、必要そ うなところから用意することにしました。

文法の書き方は以下の通りです。

  A ::= B    AをBで定義する
  A | B      A または B
  A ...      Aが並んだもの
  A ,..      Aをカンマで区切って並べたもの
  [ A ]      Aがあってもなくてもよい
  ( A )      かっこで囲むことがある
  'c'        cという文字そのもの

プログラム、文、制御構造

Rubyでの「プログラム」「文」は次の構文規則で表されます。

  プログラム ::= (文 | 定義) ...

  定義 ::= メソッド定義 | クラス定義

  クラス定義 ::= 'class' クラス名 [<<親クラス名] メソッド定義... end

  メソッド定義 ::= 'def' メソッド名 ['(' パラメタ,.. ')] 文... end

  パラメタ ::= 変数名 ['=' 式]

  文 ::=  式                  # 代入なども式
     |    'while' 式 'do' 文... 'end'
     |    'for' 変数 'in' 式..式 'do' 文... 'end'
     |    'if' 条件 'then' 文... 枝群 'end'

  枝群::= ['elsif' 条件 'then' 文... ]... ['else' 文...]

本当はRubyではすべてが式で文というのは無いのですが、ここでは分 かりやすさのため「動作」→文、「値の計算」→式というふうに分類し て記述しました。ただしtimesなどはメソッドなので式の一部に含まれる ことになります。

while文のdo、if文のthenは中身の文を別の行に書く場合には省略可 能です。中身まで1行に書くときは省略できません。

1つの行に複数の文を入れる時は「;」で区切ります。

式、演算子

Rubyでの「式」は次の構文規則で表されます。

  式 ::= 単項演算子 式
     |   式  2項演算子  式
     |   '(' 式 ')'          # かっこで囲む場合
     |   '[' 式,.. ']'       # 配列を指定する
     |   [ 式 '.' ] メソッド名 [ '(' 式 ,.. ') ] [ ブロック ]
     |   変数名
     |   数値定数
     |   文字列定数

  ブロック ::= do [ '|' 変数名... '|' ] 文... end

なお、メソッド呼び出しは「単独で出て来る場合」と「オブジェクト を指定してメソッドを呼ぶ場合」、「パラメタをかっこ内に指定する場 合」と「かっこを全部省略する場合」、「ブロックを指定する場合「と 「指定しない場合」があるので複雑になっています。

単項演算子としては次のものがあります。

+プラス符号
-マイナス符号
!論理的否定(〜でない)

2項演算子としては次のものがあります。

**べき乗
*乗算
/除算
%剰余
+加算
-減算
=代入
==等しい
!=等しくない
>より大
>=以上
<より小
<=以下
&&, and条件の「かつ」
||, or条件の「または」

整数に対するメソッドとしては次のものがあります。

to_f実数に変換
to_i整数に変換(そのまま)
to_s文字列に変換
abs絶対値を返す
times ブロックその整数の数だけ繰り返す
step(t,s) ブロック その整数からsずつ変化させながら、tまで繰り返す
step(t) ブロック その整数から1ずつ変化させながら、tまで繰り返す

実数に対するメソッドとしては次のものがあります。

to_f実数に変換(そのまま)
to_i整数に変換
to_s文字列に変換
abs絶対値を返す

文字列に対するメソッドとしては次のものがあります。

to_f実数に変換
to_i整数に変換
to_s文字列に変換(そのまま)
length文字列の長さを返す

配列を生成するメソッドとしては次のものがあります。

Array.new(大きさ [,初期値]) 大きさ(と初期値)を指定して配列を作る
Array.new(大きさ) ブロック 大きさと初期値を計算するブロックを指定して配列を作る

配列に対するメソッドとしては次のものがあります。

length大きさを返す
each ブロック各要素について繰り返す
each_index ブロック各添字値について繰り返す