问题设计 unless Perl

在Perl编程语言,如同在其他许多编程语言已经设计 if:

▶ Run
#!/usr/bin/perl

my $value;

if (!defined $value) {
    print 'value must be defined';
}

if的 执行如果条件返回是真的。

但是,除了设计 if ,甚至具有反向设计 unless. 体 unless运行 如果条件返回错误的。 这里的工作的代码完全一样作为前一个, 但是,编写使用 unless:

▶ Run
#!/usr/bin/perl

my $value;

unless (defined $value) {
    print 'value must be defined';
}

如果你看到这些的两个例子中,我们看到,当使用 unless ,代码使用较少 结构(不必写 !),但是代码长于3个字符。

此外,我有更多的打印,当使用 unless 可能具有一个 问题。 想象一下,我们需要补充我们的代码与 unless. 现在他执行一些 行动的时候可变 $valueundef. 没有任务要执行的行动 这种情况下的反向的情况—当 $value 是什么,但 undef. 很自然的 反应,在这种情况是增加 else个单元:

▶ Run
#!/usr/bin/perl

my $value;

unless (defined $value) {
    print 'value must be defined';
} else {
    print 'value is defined';
}

原来工作的代码和这个代码容易编写,但是它变成了不好的代码。 这个代码是硬要修复和理解。 相反,该守则将有直接写:

▶ Run
#!/usr/bin/perl

my $value;

if (defined $value) {
    print 'value is defined';
} else {
    print 'value must be defined';
}

不幸的是,如果原始代码使用 unless,然后有一个巨大的诱惑,不要改变它 if, 只是写 else. 但事实证明不良的代码。

它们认为能够编写 unless-else 一般是一个错误的语言设计。 而这样的 设计应当失败,而不是工作。

unless,以及 if 可以使用中的后缀形式:

▶ Run
#!/usr/bin/perl

my $value;

print 'value must be defined' unless defined $value;

当你使用后缀符号 unless 的问题 unless-else 不会发生,因为在这 版本 else 一般无处可进入。

总的建议。 永远不会使用的设计 unless ( $bool ) { ... },因为它会导致 恶化的代码的可读性。 关于使用 unless的 后缀变这种严格的建议。 使用或不 后缀 unless 这是一个问题的协议中队和一个品味的问题。 提交人更喜欢从来没有 不使用 unless.

其他文章