2007年9月1日土曜日

三項演算

http://yoshihashi.blogspot.com/search/label/Scriptを入門書を片手に読み解いてます。

で、

$a = !($_%3)?'Fizz':'';

で躓いてたんです。

いろいろググったらhttp://kabocha.org/jelfe/07/04.htmlにたどり着きました。


▼ 三項演算

・上記までに説明された、二項演算子、単項演算子の書式を記憶出来れば、残りのただ一つの例外を除いて演算子の意味を調べるだけで記述する事が出来る。だけどperlには一つだけ三項演算子があり、演算子っぽくないような複雑な処理を実現する。この演算子は「A」をブール値で評価した後、真だったならば「B」を評価して返す。偽だったら「C」を評価して返す。

$scalar = A ? B : C;

・実際には以下のように書く。

$scalar = $a ? $b : $c;


・上記の処理をif文を用いて表現すると以下のようになる。 if文に関しては [07/08.条件分岐] を参照。

if($a){
$scalar = $b;
}else{
$scalar = $c;
}



って、以前購入した超ど級入門書「Perlの絵本」に全部載ってるよ~~~!!

何読んでたんだよオレ。。。orz

2 件のコメント:

茶尾 さんのコメント...

$a = ($_%3)?'':'Fizz';でやってもOKだった。
あえて$a = !($_%3)?'Fizz':'';にするには何か理由があるのか?

茶尾 さんのコメント...

for(1..100){
#「..」は範囲演算子、左の値から右側の値まで1つずつ増やした値の集り
#「for」は 繰り返し処理の制御文。普通はカウンタを用意して何回繰り返すかを決める
#「foreach」でもOK

$a = !($_%3)?'Fizz':'';
#「!」はnot(~でない)の意。
#「$_%3」は$_を3で割った余り。
#「(a)?b:c」は条件演算子。aが真のときbを返し、偽のときcを返す。
#この場合「3で割った余りがあるときでないとき(余り0)Fizzを返し、余りがなくはない(余りがある)とき何もしない。

$a .= !($_%5)?'Buzz':'';
#「.」で文字の結合。


print $a || $_ , "\n";
#「||」は論理演算子のまたはの意なのだが、左を条件式、右を処理(条件式が真なら処理を行わず、偽なら処理を行う)
#print , の「,」はハッシュ配列と同様に「=>」でもOK。
 #print $a || $_;
 #print "\n";
を簡略したもの。

}