ブログが続かないわけ

この日記のはてなブックマーク数
Webエンジニアが思うこと by junichiro on Facebook

[Perl][PHP]値がfalse ならtrue に、true ならfalse にするtoggle(ビット反転)はこう書ける

このエントリーを含むはてなブックマーク hateb
Perl またはPHP での話なので、「false は0 または、空文字列など」で、「true はそれ以外」としよう。

文字通りにif 文で分岐させるとこんな感じになる。

Perl, PHP 共通
if ( $bool ) {
$bool = '';
}
else {
$bool = '1';
}
こんな処理たまに見かけるよね。
ただ、いくらなんでも、これはちょっとうっとおしい。

そこで、3項演算子を使ってみるとこうなる。

Perl, PHP 共通
$bool = ( $bool ) ? '' : 1;

ところが、こないだObjective-C の本を読んでいたら、こんな書き方を見かけた。
bool = !bool;
おお、これはcool だ。

意味的にも、文法的にも、この書き方はPerl でもPHP でもいけそうだ。

Perl
use strict;
use warnings;
my $bool = '';
for (0..3) {
$bool = !$bool; # ここで反転
print $bool, "¥n";
}
結果
1

1

PHP
<?
$bool = '';
for ($i=0; $i<3; $i++) {
$bool = !$bool; # ここで反転
print $bool. "¥n";
}
結果
1

1

おお、ちゃんとできた。
意外と使う機会は少ないかもしれないけど、この書き方はなんかいい感じ。
この記事のトラックバックURL
http://en.yummy.stripper.jp/trackback/1155313
トラックバック
[Perl]looks_like_number()の返り値とエクスクラメーションによるBoolean反転
昨日のlooks_like_number()の返り値がよくわからなかったので、cpanからinstallするときのtestを落として見てみた。 $ cpan cpan[1]> get Scalar::Util $ cd ~/.cpan/build/Scalar-List-Utils-1.23-npHgm2/t/ $ grep looks_like_number ./* ./lln.t:use Sc
| Perl日記 | 2010/03/31 10:52 PM |
コメント









関連情報