[ruby-list:43637] case when 〜 end 構文での and/or/not 演算子について

From: "M.Fujii" <boochang@...4.kcn.ne.jp>
Date: 2007-06-20 07:47:21 UTC
List: ruby-list #43637
藤井と申します。

ruby-list の皆さま初めまして

case の式を省略する構文を用いる場合に when 節の条件式で and/or/not 演算
子を使いたい場合にどうすべきか分からなくて困っています。

3 つ以上の条件分岐においてelsif を使うと、以下のように条件式のカラム
が揃わないのが何となく違和感を感じます。

  if a == 0    # 条件式の開始が 4 カラム目
    puts 'a'
  elsif b == 0 # 条件式の開始が 7 カラム目
    puts 'b'
  end

そこで、以下のように case での式を省略した形式を使いたいと思っています。

  case
  when a == 0
    puts 'a'
  when b == 0
    puts 'b'
  end

しかし、式を省略した case を用いる場合に困ったことがあります。それは、
以下のように when 節に and や or を用いた式が使えないということです。

$ ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]

$ cat case.rb
a = b = true
case
when a and b
  puts 'a'
end

$ ruby case.rb
case.rb:3: syntax error, unexpected kAND, expecting kTHEN or ':' or '\n' or ';'
when a and b
          ^
case.rb:5: syntax error, unexpected kEND, expecting $end

以下のように括弧で囲んだり and ではなく && を用いた場合には問題なく使え
ています。

<< 括弧で囲んだ場合 >>
$ cat case2.rb
a = b = true
case
when (a and b)
  puts 'a'
end

$ ruby case2.rb
a

<< && を使った場合 >>
$ cat case3.rb
a = b = true
case
when a && b
  puts 'a'
end

$ ruby case3.rb
a

式を省略した case で and, or, not の必要な条件式を適用する場合、ruby
スクリプトとして一般的に用いられているスタイルではどうしているのかを教
えて下さい。

  (1) and, or, not の使用を避け、&&, ||, ! を使用する。
  (2) "when (a and b)" のように括弧を適用する。
  (3) case when 〜 end のような構文を使わず、普通に if 〜 elsif 〜 end
      を用いる。
  (4) 上記以外の何か。

また、"when a and b" のような記述が受理されるように構文を見直していただ
ければ幸いです。

以上、宜しくお願いします。

--
藤井 正行 / Masayuki FUJII


In This Thread

Prev Next