Rubyでfalseやnil等をempty?やblank?等で判定してみる

RailsでHello, world!を表示してみる
の続き

Rubyでfalseやnil等をempty?やblank?等で判定してみる。

試してみること

以下の値を
・false
nil
・0
・0.0
・""
・" "
・"0"
・[]
・{}

以下のメソッドで真になるのか偽になるのか確認する。
・not
・.nil?
・.empty?
・.zero?
・.blank?

.blank? はRailsの拡張メソッドであり、Rubyの標準メソッドではないみたい

ソース

$ vi app/controllers/sample_controller.rb
class SampleController < ApplicationController
  def index
    pattern = {
      'false' => false,
      'nil' => nil,
      '0' => 0,
      '0.0' => 0.0,
      '""' => "",
      '" "' => " ",
      '"0"' => "0",
      '[]' => [],
      '{}' => {},
    }

    results = []
    pattern.each do |key, val|
      result = {}

      result[:val] = key
      result[:class] = val.class
      result['not val'] = (not val) ? 'O' : 'X'
      result['val.nil?'] = (val.nil?) ? 'O' : 'X'
      result['val.empty?'] = (val.respond_to?('empty?')) ? ((val.empty?) ? 'O' : 'X') : '-'
      result['val.zero?'] = (val.respond_to?('zero?')) ? ((val.zero?) ? 'O' : 'X') : '-'
      result['val.blank?'] = (val.blank?) ? 'O' : 'X'

      results.push result
    end

    @results = results
  end
end
$ vi app/views/sample/index.html.erb
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
<table class="table table-striped">
<tr>
        <th>val</th>
        <th>クラス</th>
        <th>not val</th>
        <th>val.nil?</th>
        <th>val.empty?</th>
        <th>val.zero?</th>
        <th>val.blank?</th>
</tr>
<% @results.each do |result| %>
<tr>
        <td><%= result[:val] %></td>
        <td><%= result[:class] %></td>
        <td><%= result['not val'] %></td>
        <td><%= result['val.nil?'] %></td>
        <td><%= result['val.empty?'] %></td>
        <td><%= result['val.zero?'] %></td>
        <td><%= result['val.blank?'] %></td>
</tr>
<% end %>
</table>

結果

下記のように表示された。

O:真、X:偽、-:メソッド無し