ruby学習メモ

条件式

nil でも 定数 false でもないものは全て真(true)を意味する
演算子 意味
== 等価性をテストする
=== case 文の when で使用
<=> 汎用比較演算子。レシーバが引数より小さいとき -1, 両者が等しいとき 0, レシーバが引数より大きいとき +1 を返す
<, <=, =>, > 大小の比較
=~ 正規表現パターンマッチ
eql? レシーバと引数の型と値が等しいとき true を返す。例えば、1 == 1.0 は true、1.eql?(1.0) は false
equal? レシーバと引数のオブジェクトIDが同じとき true を返す

defined?

引数が定義されているかどうか。定義されていない場合は nil

defined? a
=> nil

a = 1
=> 1

defined? a
=> "local-variable"

論理式の値

words = Hash.new
(words[:key] ||= []) << "value1"
=> ["value1"]

(words[:key] ||= []) << "value2"
=> ["value1", "value2"]

#上記は以下と同じ
words[:key] = words[:key] || []
words[:key] << "value3"
=> ["value1", "value2", "value3"]

条件式

  • if文
ifthen
  [exp]
elsifthen
  [exp]
else
  [exp]
end
  • if 文を複数行にまたがって書くときは then を省略できます。
if 〜
  [exp]
elsif 〜
  [exp]
else
  [exp]
end
  • then の代わりに : を使用する
if :  [exp]
elsif :  [exp]
else [exp]
end
  • unless(if文の否定)
unless 〜
  [exp]
else
  [exp]
end
  • if修飾子
puts "aaa" if true
=> aaa と表示される

 puts "aaa" if nil
=> aaa と表示されない

-case式
>|ruby|
#うるう年
def leep(year)
  leep = case
    when year % 400 == 0: true
    when year % 100 == 0: false
    else year % 4 == 0
  end
  return leep;
end

leep(2000)
=> true
leep(2100)
=> false
def test
  while line = gets
    case line.chomp!
    when "debug"
      puts "debug!!"
    when "quit"
      return
    else
      puts line
    end
  end
end

# then キーワードも使用可能
case line.chomp!
when "debug" then puts "debug!!"
when "quit" then return
else puts line
end

# コロンも使用可能
case line.chomp!
when "debug": puts "debug!!"
when "quit": return
else puts line
end