Le problème de la conception unless en Perl

Dans le langage de programmation Perl, comme dans de nombreux autres langages de conception if:

▶ Run
#!/usr/bin/perl

my $value;

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

Le corps de la if est exécutée si la condition renvoie true.

Mais à l'exception de la conception if il y a encore de l'inverse de la conception unless. Le corps unlessse fait dans le cas où la condition retourne false. Voici le code qui fonctionne de la même manière que la précédente, mais écrit avec l'aide de unless:

▶ Run
#!/usr/bin/perl

my $value;

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

Si vous regardez ces deux exemples, on voit que lors de l'utilisation de unless dans le code de la moins de de structures (ne devez pas écrire !), mais le code s'avère plus long sur 3 caractères.

En outre, ce qui représente plus de l'impression, lors de l'utilisation de unless peut être une autre problème. Imaginons que nous avons besoin de compléter notre code avec unless. Maintenant, il effectue une sorte de des actions une fois dans la variable $value est undef. Le problème se pose pour effectuer une action dans le cas de la situation inverse, lorsque l' $value est n'importe quoi, mais pas undef. Tout à fait naturel la réaction à cette situation, ajouter la elseunité:

▶ Run
#!/usr/bin/perl

my $value;

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

S'est avéré l'exécution du code, et ce code était simple à écrire, mais s'est avéré un mauvais code. Ce code est difficile à réparer et à comprendre. Au lieu de cela, le code il faudrait écrire directement:

▶ Run
#!/usr/bin/perl

my $value;

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

Malheureusement, si, initialement, le code utilise unless, c'est la tentation est grande de ne pas en changer if, et il suffit d'écrire else. Mais à cause de ce qui est obtenu de mauvais code.

Il y a une opinion que la possibilité d'écrire des unless-else , il est généralement une erreur dans la conception de la langue. Et cette la conception doit générer une erreur, au lieu de travailler.

unless, ainsi que if peut être utilisé dans постфиксном variante:

▶ Run
#!/usr/bin/perl

my $value;

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

Lors de l'utilisation de постфиксной enregistrement unless problème unless-else ne se produit pas, comme dans ce version else du tout nulle part à l'écrire.

Total de la recommandation. Ne jamais utiliser la conception unless ( $bool ) { ... }, car cela conduit à la détérioration de la lisibilité du code. Sur l'utilisation de unless dans постфиксном version stricte de recommandations non. Utiliser ou non postfix unless c'est l'affaire de l'arrangement dans l'équipe et une affaire de goût. L'auteur préfère ne ne pas utiliser unless.

Autres articles