Tbpgr Blog

元エンジニア 人事 tbpgr(てぃーびー) のブログ

メタプログラミングRuby | イディオム | nilガード

概要

nilガード

内容

nilガードとは以下の様な記法です。

  hoge ||= []

これは実際に意味するところは以下のコードです。

  if hoge != nil
    hoge = hoge
  else
    hoge = []
  end

サンプル

  # encoding: UTF-8
  require "pp"
  def nil_gard(value)
    return value ||= []
  end

  def not_nil_gard(value)
    value if value != nil
    []
  end

  [[1,2,3],nil].each do |item|
    pp item
    print "nil_gard=#{nil_gard(item).class}"
    print ",size=#{nil_gard(item).size}"
    puts 
    print "not_nil_gard=#{not_nil_gard(item).class}"
    print ",size=#{not_nil_gard(item).size}"
    puts "\n--------------------------------"
  end

出力

[1, 2, 3]
nil_gard=Array,size=3
not_nil_gard=Array,size=0
--------------------------------
nil
nil_gard=Array,size=0
not_nil_gard=Array,size=0
--------------------------------