LoginSignup
27
28

More than 5 years have passed since last update.

Rubyメモ

Last updated at Posted at 2013-02-06

一般

include モジュール名  # Mix-in(モジュール内のメソッドや定数を、現在の名前空間に取り込む)
require ファイル名    # 引数のファイルを読み込む

コメント

# 一行コメント

=begin
複数行
コメント
=end

条件判断

  • すべて、then は省略可能
  • 値の部分には、正規表現や、クラス名なども使える
if 条件 then
  # ...
elsif then
  # ...
else
  # ...
end

unless 条件 then
  # ...
else
  # ...
end

case 比較したいオブジェクト
when 1 then
  1
when 2 then
  2
else
  3
end

修飾子

 if 条件
 unless 条件
 rescue (例外処理)

繰り返し

  • すべて、do は省略可能
# [構文]

while 継続条件 do
  # ...
end

until 終了条件 do # while の逆
  # ...
end

for 変数 in オブジェクト do
  # ...
end

# [メソッド]

100.times do
  # ...
end

配列.each do |変数|
  # ...
end

ハッシュ.each do |キー, |
  # ...
end

loop do # 無限ループ
  # ...
end

繰り返し制御

  • break: C/C++のbreakと同じ
  • next : C/C++のcontinueと同じ
  • redo : 同じ条件で繰り返しをやり直す

ブロック

  • do ~ end もしくは { ~ }
  • 慣例としては、
    • 複数行にまたがるとき: do ~ end
    • 1行にまとめるとき : { ~ }

メソッド

def メソッド名(引数1, 引数2, ...)
  # ...
end

def メソッド名(引数1, 引数2=デフォルト値, ...)
  # デフォルト引数を設定可能
end

def メソッド名
  # 引数無しの場合、()は省略可能
end

文字列

'xxx' # こちらはエスケープされない
"xxx" # "... #{var} ..." という形で、式を評価した結果を埋め込める

名前

  • Ruby では、以下は単なる慣習ではなく、名前によりスコープが決定

    • ローカル変数 : 先頭が小文字 or _
    • グローバル変数 : 先頭が $
    • インスタンス変数: 先頭が @
    • クラス変数 : 先頭が @@
    • 定数 : 先頭が大文字
  • 以下は慣習

    • 変数名、メソッド名は、xxx_xxx_xxx のような、小文字を _ でつなぐ形
    • クラス名、モジュール名は、キャメルケース
    • ?で終わるメソッドは、真偽値を返す
    • !で終わるメソッドは、破壊的メソッド

スコープ

  • Ruby1.9ではブロックスコープはある
  • Ruby1.8では、ブロックローカルな変数は外に取り出せないが、ブロック外と同名の変数をブロック内で使うと上書きになる

オブジェクト同一性

  • equal? メソッドは、同一インスタンスかどうかの比較
  • == は、値の同一性の比較
a = "abc"
b = "abc"
a.equal?(b) # => false
a == b      # => true

真偽値

  • false, nil のみが偽
  • それ以外はすべて真

クラス

  • Ruby1.8では、Objectクラスがすべてのクラスの先祖
  • Ruby1.9では、Objectのさらに親の BasicObject が存在
 # [基本]

 class クラス名 < 親クラス
   Version = "1.0" # 定数
   @@count = 0     # クラス変数

   def initialize(name = "Ruby") # new でオブジェクトが生成される際に呼ばれる
     @name = name  # インスタンス変数
     self.xxx()    # C++ の this に相当するのは self
   end
 end

# [インスタンスメソッド]

class クラス名
  def メソッド名(引数)
    # インスタンスメソッド
  end

  def name
    @name              # ゲッター
  end

  def xxx=(value)
    @name = value      # セッター
  end

  attr_reader :name    # 上記ゲッターを定義したのと同じ
  attr_writer :name    # 上記セッターを定義したのと同じ
  attr_accessor : name # attr_reader, attr_writer を両方定義
end

# [クラスメソッド]

class クラス名
  def クラス名.メソッド名(引数) # def self.メソッド名(引数) でもよい。
    # クラスメソッド
  end

  class << クラス名   # class << self でもよい
    # クラス名より self を使ったほうが、重複が少なく、クラス名の変更時に柔軟。
    def メソッド名(引数)
      # クラスメソッド
    end
  end
end


# [アクセス制御]
# 何も指定しなければ public (ただし initialize は常に private)

class クラス名
  def priv
    # ...
  end

  private :priv # public, private, protected が指定できる
end

class クラス名
  public        # 以降すべて public

  def pub
    # ...
  end

  private       # 以降すべて private

  def priv
    # ...
  end
end

モジュール

クラスと異なり、
- メソッド(モジュール関数)と定数だけをまとめたもの
- インスタンスを持つことができない
- 継承できない

module モジュール名
  Version = "1.0"        # 定数

  def hello(name)
    # ...
  end
  module_function :hello # モジュール関数として公開
end

例外

begin
  # 例外を投げるのは、raise メッセージ(or クラス)
rescue => 変数
  # 例外時の処理
ensure
  # 必ず実行される
end

# 処理全体を begin ~ end で括る場合は、begin, end は省略できる
def foo
  begin
    # ...
  rescue => ex
    # ...
  end
end

# ↓

def foo
  # ...
rescue => ex
  # ...
end

# throw, catch キーワードは、例外ではなく、複数のループを脱出するのに使われる
catch (:exit) do
  # ...
  throw :exit # catch ブロックを抜ける
  # 実行されない
end

その他

  • インデントは、スペース2つが慣習
27
28
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
28