[ruby-list:46493] Re: "<<" の使い方

From: Shigehiro Yoshinaga <yoshige@...4.so-net.ne.jp>
Date: 2009-10-27 14:44:42 UTC
List: ruby-list #46493
> NARUSE様のご指摘を元に、()で括ってやったら動いてくれました。
>
> @ary << (data || data)
>                ^^^^^^^^^^

これはただの

@ary << data

と同じですね。
ですから、data == nil の場合にも、@ary に nil が追加されることになります。
これって意図通りの動作ですか?

そえじまさんの意図は、
「data != nil の場合、@ary に data を追加する。data == nil の場合はなにもしない」
のように思います。これが正しいとすると、意図通りのコードを素直に書くと、

if not data.nil?
    @ary << data
end

となります。1行にまとめるなら、

@ary << data unless data.nil?

です。
もし、@ary == false になる可能性がないのならば (多くの場合この仮定は妥当)、
すでに NARUSE さんが示したように

@ary << data if data

が簡潔でいいと思います。

Ruby の場合、簡潔にするのに論理演算子を無理に使う必要はありません。
どうしても論理演算子を使いたいのならば、

data && @ary << data

となりますが、文字数は同じですし、分かりにくいだけのように思います。
-- 
吉永滋博 Shigehiro YOSHINAGA

In This Thread