Quelqu'un peut-il expliquer comment cette ligne fonctionne? si Cette ligne est à partir de cette fonction: p> $ y Il renvoie
-PIP2 code>, mais ce qu'il revient Lorsque
$ y> = 0 code> et
$ x! = 0 code>? p>
sub _atan {
my( $y, $x ) = @_;
return $y < 0 ? - pip2 : pip2 if $x == 0;
return atan( $y / $x );
}
4 Réponses :
c'est le même que la fonction complète devient alors: p>
Le postfix "si" désigne que l'instruction de retour n'est exécuté que si la condition est vraie, donc est identique à p>
Je l'écrirais probablement en utilisant sauf si ($ x) {... code>
C'est l'opérateur conditionnel, pas l'opérateur ternaire. :)
Je viens d'impliquer que c'était un opérateur ternaire i>, pas l'opérateur ternaire i> :)
@Brad Gilbert Soyez prudent sauf si ($ x) code> et
si ($ x == 0) code> avoir des significations différentes.
sauf si ($ x) code> exécutera lorsque
x x code> est
undef code>,
0 code>,
0.0 code >,
"" code> et
"0" code>.
si ($ x == 0) code> exécutera lorsque $ x est IS
0 code>,
0.0 code> et toute chaîne qui ne passe pas
look_like_number code> ou évalue à 0 (tel que
"0e0" code>).
Ceci est un bon exemple de Code difficile à lire.
comparons quelques façons différentes de réécrire l'échantillon de code et de voir comment nous faisons dans la brièveté de la brièveté et d'améliorer la lisibilité. P>
Ce ternaire seulement La version gagne pour la brièveté, mais il est toujours difficile de lire: P>
sub _atan { my( $y, $x ) = @_; return atan( $y / $x ) unless $x == 0; return $y < 0 ? -pip2 : pip2; }
Trop de lignes utilisées pour résoudre un problème rend le code difficile à maintenir (toujours obligé de faire défiler). La solution avec imbriquée si elle est 4 fois plus longue. Imaginez travailler avec un écran 4 fois plus petit. Ma syntaxe préférée est la suivante:
sub _atan { my ($y, $x) = @_; return atan ($y / $x) if $x != 0; return $y < 0 ? -pip2 : pip2; }
L'avantage d'un opérateur postfix est le même que vous le mettez. Si votre écran ne peut pas voir 24 lignes de code, vous avez d'autres problèmes. :)