たくさんの条件がすべて真であるかをチェックする、美しい方法を教えてください。

例えば以下のようなものです。(perlの場合)

if ($hoge->moge eq "fuga"
&& $moge->fuga =~ /[0-9]+/
&& $hoge->foo != 0
&& $moge->bar == 3
&& $hoge->method1()
&& $moge->method2()
&& $hoge->method3()
&& $moge->method4())
{
........
}

条件が多くなればなるほど見にくいので、すっきりと書ける方法が無いかと思うのですが……

回答の条件
  • 1人2回まで
  • 登録:2006/12/30 09:55:07
  • 終了:2007/01/02 10:34:36

ベストアンサー

id:seamlessbias No.1

seamlessbias回答回数16ベストアンサー獲得回数32006/12/30 12:06:39

ポイント42pt

以下のようなものはどうでしょうか。

use List::MoreUtils qw/all/;
print 'true'
    if all {$_} $hoge->moge eq "fuga",
                $moge->fuga =~ /[0-9]+/,
                $hoge->foo != 0,
                $moge->bar == 3,
                $hoge->method1(),
                $moge->method2(),
                $hoge->method3(),
                $moge->method4();
id:KoshianX

なるほど、これは綺麗ですね。

条件式の付けたしや削除も楽そうです。

調べたらCで書かれたライブラリで、Pure Perlでも動くとのことで、なかなか便利そうですね。

2006/12/30 12:29:14

その他の回答(1件)

id:seamlessbias No.1

seamlessbias回答回数16ベストアンサー獲得回数32006/12/30 12:06:39ここでベストアンサー

ポイント42pt

以下のようなものはどうでしょうか。

use List::MoreUtils qw/all/;
print 'true'
    if all {$_} $hoge->moge eq "fuga",
                $moge->fuga =~ /[0-9]+/,
                $hoge->foo != 0,
                $moge->bar == 3,
                $hoge->method1(),
                $moge->method2(),
                $hoge->method3(),
                $moge->method4();
id:KoshianX

なるほど、これは綺麗ですね。

条件式の付けたしや削除も楽そうです。

調べたらCで書かれたライブラリで、Pure Perlでも動くとのことで、なかなか便利そうですね。

2006/12/30 12:29:14
id:edo13th No.2

edo13th回答回数1ベストアンサー獲得回数02006/12/30 16:16:22

ポイント28pt

ちょっとしたテストでしたら、こんな方法もあるかと。

map {chomp; eval or die } <DATA>;

print "ok";


__END__

$hoge->moge eq "fuga"

$moge->fuga =~ /[0-9]

$hoge->foo != 0

$moge->bar == 3

$hoge->method1()

$moge->method2()

$hoge->method3()

$moge->method4())

id:KoshianX

うは、こりゃよくも悪くもperl!って感じの解ですねえ。

参考にはなりますが実践するのはためらわれます(笑)

2006/12/30 17:05:09

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません