日記帳だ! with Tux on Libserver

二度目の大改造!! 日記帳…か?を継承し、より柔軟でパワフルなBlogに変身しました。

RSSに対応しています。リンク・コメント・トラックバックは自由にしていただいてほぼ問題ありません。
RSS購読方法、僕のリンク・コメント・トラックバックについての考えを読むことをおすすめします。

JavaScriptを有効にし、Cookieを受け入れ、以下のブラウザを使うことで完全なコンテンツが楽しめます。
Mozilla Firefox 3.0(Get Firefox)・Opera 9.6・Safari 3.2・Lunascape 4/5(Gecko)・Lunascape 5(WebKit)
Internet Explorer 7/8とそれを使うIEコンポーネントブラウザ(Lunascape・Sleipnirなど)

昔懐かしのgotoのようなもの

プログラム完成!! 疲れたー。
ソースコード印刷とか何だよ。大変すぎる。
さて、ところでこういうプログラムの書き方が結構用意されていることが多い。
val=a>b?a:b;
この~?~:~という演算子を三項演算子とまぁそういうわけですね。
たしかに三項なんだが、他に三項の演算子ってないのか?
これは、a>bがtrueならaをfalseならbを返すという演算子。なのでこういう風に書いても一緒。
if(a>b)  val=a;
else val=b;
まぁこちらの方がわかりやすいのは確かですけどね。
しかし、メソッドの引数とかに使うと、やりたいことがシンプルに書けたりというのはあるかもしれん。
ただあんまり使い道は多くない気がする。
以前発見した、Perlでの//演算子、C#での??演算子。
これは$a//$bなら$aがundef(未定義)でなければ$a、undefならば$bを返すという演算子ですね。
これもifで書けばいいんだが、何かとわかりやすいと。
さて、C#にしてもCにしても、返り値なしのメソッドというのは結構ある。
実はその中でreturn文使えるんですね。
何でそんなものいるんだというのはあるのだが、こういうことです。
if(val<0)  return;
こういう風に書くと、val<0ならばそこでメソッド終わりとなります。
なんか変な感じですね。けど返り値があるものだとどう感じるだろうか。
public static int fact(int x){
if(x<=1) return 1;
int r=fact(x-1);
return x*r;
}
なんかelse使ってなくて変な感じなんだが、これはx<=1なら1だけ返して終わればよろしいということです。
それ以外の場合はこういう処理をしますと…そういう風に書けばよいと。
わかりやすいと思う人もいれば、非常にわかりにくいと思う人もいるでしょう。
というのは、実はこういうreturnの使い方は形を変えたgotoだと言われることもありますし。
だから、返り値がないreturnは、最後にあるendラベルに飛ぶ、goto end;と何ら変わりないと。
まぁ確かにそれはそうなんですが、この程度なら何の問題はないような気はします。
むしろ、これをif~else~で書くとインデントが深くなって困るのよね。
これは僕の悪い癖のような気はするのだが、こういうのが結構多い。
while(true){
//いろいろ
if(t<0) break;
}
これ見て、do~while使えと思った人は多いかも知れん。
確かにこれ冷静に考えればdo~while使う方がいいように見えますけどね。
ただ、do~whileって初めにdoとしか書いてないんですよね。だからわかりにくいと。
で、Perlのdoブロックって、動作をまとめただけで、while修飾子と組み合わせて使うものというわけでもない。
どちらかというと、こちらの方が僕は納得がいくので、全くdo~whileは使わない。
で、そういうことにも無限ループを使って、必要なところでbreak;で出ると。
まぁbreak;はもっと有益に使えという指摘はごもっともな話ですがね。
あとcontinue;というのもちょっと変な感じ。
foreach(int cur in arr)[
if(cur<0) continue;
//いろいろ
if(cur==5) { Console.WriteLine("Five!"); continue; }
if(cur==7) { Console.WriteLine("Seven!"); continue; }
Console.WriteLine("{0}!",cur);
}
continueの使い道なんだが、例えばある条件に当てはまるのを抜き出すとか言うので、
当てはまらんということになったら、continue;とすれば、もうその分の処理は終わると。
forとかforeachで使うことが多いでしょうね。
けど、結構switch構文の代わりに使うことも多いんだよね。
最後にcontinue;を付けたifをたくさん並べて、それでswitchみたいに使うと。
switch構文があんまり細かいことができないからなんですけど、
まぁどうなんでしょうねぇ。
Perl 5.10のforeach~when構文があればこんなことしなくていいなぁと思ってるんだけどね。
return; break; continue; どれも形を変えたgoto文と言えばまぁそうなんです。
けどどれも使い道は結構はっきりしています。
これを使えばgoto文はあまり必要になりません。
多い意見で、あとは多重ループからの脱出にgotoを使うとかありますけどね。
確かにわからんことはない。けどそんなに数は多くなさそうなので、gotoはほとんど使わないと言っていいでしょう。
昔のBASICは全部GOTOだったんですよ。だけど、今はブロック作っていろいろできますよね。
かなりわかりやすくなるもんです。
だからこういう風にgotoを使うことを減らす習慣というのはわかりやすいコードの近道かなと。
しかし減らすんであってなくすわけではないですからね。
そこのところは間違えちゃいかんよというのはあるわな。
Author : hidemaro
Date : 2008/10/08(Wed) 23:08
コンピュータ | Comment | trackback (0)

Tools