O problema do projeto unless em Perl

Na linguagem de programação Perl, como em muitas outras linguagens de programação, há o projeto if:

▶ Run
#!/usr/bin/perl

my $value;

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

O corpo if é executado caso a condição retorna a verdade.

Mas, além do projeto if e projeto reverso unless. O corpo unlessexecutado no caso, se a condição retorna false. Aqui está o código que funciona exatamente como o anterior, mas escrito usando a unless:

▶ Run
#!/usr/bin/perl

my $value;

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

Se olhar para estes dois exemplos, vê-se que, ao usar unless o código usa menos projetos (não é necessário escrever !), mas o próprio código é obtido mais de 3 caracteres.

Além disso, que representam mais de imprimir, quando você usa o unless pode ocorrer ainda uma é um problema. Imagine que precisamos completar o nosso código de unless. Agora ele executa algum tipo de as acções quando a variável $value está undef. Surgiu a tarefa de executar a ação de caso a situação oposta, quando a $value fica o que quiser, mas não undef. Bem natural a reação a essa situação escrever elseunidade:

▶ Run
#!/usr/bin/perl

my $value;

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

Acabou a execução do código e esse código foi apenas escrever, mas acabou por ser de código ruim. Este código é difícil de consertar e entender. Em vez disso, o código seria necessário escrever diretamente:

▶ Run
#!/usr/bin/perl

my $value;

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

Infelizmente, se, inicialmente, o código utiliza a unless, que é uma grande tentação para não mudá-lo para if, e basta escrever else. Mas devido a isso, verifica-código ruim.

Há um consenso de que a capacidade de escrever unless-else é geralmente um erro no projeto da linguagem. E tal o projeto deve gerar um erro, em vez de trabalhar.

unless, assim como if pode ser usado em постфиксном opção:

▶ Run
#!/usr/bin/perl

my $value;

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

Quando você usa o постфиксной gravação unless problemas unless-else não ocorre, como tal, edição else em lugar nenhum incorporar.

Total recomendação. Nunca usar o projeto unless ( $bool ) { ... }, por isto, para piorar a legibilidade do código. Sobre o uso de unless em постфиксном versão rigorosa recomendações não há. Usar ou não o postfix unless é o caso de um arranjo em equipe e uma questão de gosto. O autor prefere, geralmente, nunca não usar unless.

Outros artigos