基本的な構文

命名規則


定数
大文字で始まる
変数
小文字で始まる

慣習


1. クラス名はパスカル記法
class HogeHoge
2. メソッド名、変数名は_区切りの小文字
def hoge_hoge
hoge_hoge = 0
3. 定数名は_区切りの大文字
HOGE_HOGE = "hoge"

変数とシンボル


変数のスコープ


rubyのスコープの思想「最小単位はブロック(not メソッド、not 式)」

rubyの変数の思想「変数のスコープはなるべく局所化しろ」

hoge
スコープ=ブロック・ローカル

@hoge
スコープ=インスタンス

@@hoge
スコープ=クラス

$hoge
スコープ=グローバル

シンボル


:hoge
同名の変数に対してリンクを張っている。

メソッドの定義


引数なし
def bark
end

引数あり
def bark(time)
end

複数の引数あり、初期化付き
def bark(time, voice="ばう")
end

可変長引数
def bark(*voice)
end

メソッドのスコープは基本的にパブリック

クラスの定義


class CurDog << Dog
  PEDIGREE = "雑種"
 
  attr_reader :name
  def initialize(name)
    @name = name
  end
  
  def bark(voice="ばう")
    p voice
  end
  
  def wait
    shit
  end
  
  def self.cute
    p "きゅぅーん"
  end
  
  private :shit
  def shit
    p "ポトリ"
  end
end

rubyの面白いところ:クラスとは「クラスオブジェクトの定数」にしか過ぎない。

クラスオブジェクト??


クラス定義に従ってインスタンスを生成できるインスタンス工場のこと。

ポイント


  1. newは特別なメッセージ。メソッドとして独自定義できない。
  2. initializeはnewした時に自動で呼ばれるメソッド。引数を加えることができる。
  3. 継承したい時は << [継承元] を記述する。
  4. インスタンス変数を公開したい時は、シンボルを使って、attr_accessor、attr_reader、attr_writer を指定する
  5. メソッドを非公開にしたいときは、シンボルを使って、private、protected を指定する
  6. クラスメソッド(staticなメソッド)を書くときはself.をメソッド名の前に付ける
    1. このselfは、じつはクラスオブジェクト自身を指している

慣習


  1. クエリー系メソッドは、メソッド名の最後を"?"で終える。
  2. とくにValueObjectで、インスタンスの内容を変更するメソッドは、メソッド名の最後を"!"で終える。

クラス・オブジェクトのインスタンス(メソッド/アトリビュート)へのアクセス


基本は"."を使う

dog = CurDog.new("ポチ")
dog.bark("わおーん")
dog.wait

定数にアクセスする場合は"::"を使う

p CurDog::PEDIGREE

ちなみに
メソッド呼び出し時の"()"は省略もできる

dog = CurDog.new "ポチ"
dog.bark "わおーん"

ただし
引数括りの()は演算式括りの()よりも優先度が高い

math.calc (a-b)+c

なんてやるとハマるから、要注意

制御構文

コメント


# コメント

使える演算子


|  ^  &  <=>  ==  ===  =~  >   >=  <   <=   <<  >>
+  -  *  /    %   **   ~   +@  -@  []  []=  `
=+ =- =* =/ =% =**
=  ?:  ..  ...  !  not  &&  and  ||  or  ::

<=>
大小比較
===
[左辺]に[右辺]が含まれるか
=~
正規表現で比較
+= -= *= etc
[左辺]に[右辺]を計算した結果を[左辺]に代入する(自己代入)

ちなみに、++や--は無い。

条件分岐

許容条件

if 条件式 then
  実行文
elsif 条件式 then
  実行文
else
  実行文
end

実行文 if 条件式

否定条件

unless 条件式 then
  実行文
else
  実行文
end

実行文 unless 条件式

ケース条件

case 評価式
when 式 then
  実行文
else
  実行文
end

繰り返し


while

while 条件式 do
  実行文
end

実行文 while 条件式

until

until 条件式 do
  実行文
end

実行文 until 条件式

for

for 変数 in 範囲式 do
  実行文
end

じつはfor文はほとんど使わない
10.times do |i|
end
した方が楽だしね

途中で制御を抜ける等

break、next、redo、retryが使える

例外構文


例外を発生させる

raise 例外タイプ

raise 例外タイプ, メッセージ

raise メッセージ

例外ブロック

begin
  実行文
rescue 例外タイプ => 変数 then
  レスキュー文
else
  一般的なレスキュー文
ensure
  クローズ文
end

ほかのファイルを組み込む


組み込みたい位置で
require 'ファイル名'
require 'ディレクトリ/ファイル名'

拡張子".rb"は不要。

基本的には、カレントディレクトリからの相対パスで指定する。
ただし、gemsでインストールしたライブラリの場合、たいていはライブラリ名だけで大丈夫。
そのかわり、次のrequireを必ず入れること。

require 'rubygems'

シンタックス・シュガー


Rubyは記述を簡便にするため、インスタンス生成に関するシンタックス・シュガーを用意している。

Arrayのインスタンス生成


array = [val1, val2]

Hashのインスタンス生成


hash = {key1=>val1, key2=>val2}

Stringのインスタンス生成


string = 'ruby'

Regexpのインスタンス生成


regexp = /ruby/

Fixnumのインスタンス生成


num = 1

Floatのインスタンス生成


float = 0.1

ここまでできたら

Javaでフツーにできる事はできるようになる!


最終更新:2010年01月31日 01:23