Pythonに見られるインデントによる制御構造の是非
例外使わない?
>>553 俺も例外使う。例外ならforループどころか関数の壁を越えてbreakできる。
まぁさ、例外あるような言語ではgotoいらないかもしれないけど、
Cとかだと普通に使うよ?
いや,普通には使わないわ(ww
>>557 そう?ファンクショントレース埋め込むときとか、以下のように
エラーの場合、リソース開放して戻るときとか頻繁に使うなぁ。
{
A *a = NULL; B *b = NULL; C *c = NULL; int result = E_UNKNOWN;
if ((a = A_new()) == NULL) {
result = E_MEM; goto END_FUNC;
}
if ((b = B_new()) == NULL) {
...
END_FUNC:
if (a !=NULL && result != E_SUCCESS) {
A_free(a);
}
...
}
まぁスコープ抜けるときにデストラクタが呼ばれる言語だったり、
アスペクト指向言語だったら、こんなgotoはいらないのだけどさ。
>>559 つーか単にGC付きならそれでいいのでは。
>>560 ファンクショントレースしこむには、スコープぬけるときにデストラクタ
よばれるか、アスペクト指向じゃなければ難しいんじゃない。
アーキテクチャに依存しないように仕込むには。
2007/07/11 10:10:10:[TRACE]FuncA IN (args=...)
2007/07/11 10:10:10:[TRACE]FuncA out (result=0)
てな感じに。
>>561 その程度ならtry:finally:があれば十分じゃん…
>>562 try:finallyで仕込むのメンドイでしょ。gotoと大して変わらないし。
アスペクト指向が一番楽だけど。
>>563 try:finally:がgotoと変わらないって…
gotoでは関数内で例外が発生した時の振舞いがまるで違うんだけど…
>>564 いや議論がごっちゃになってるのだけど。ロギングに例外機構を
使用しようとするところもおかしいし、例外の振る舞いとgoto
をごっちゃにするのもおかしい。
>>565 > ロギングに例外機構を
> 使用しようとするところもおかしいし、
全然おかしくない。
try:finally:はtry:句から抜ける時を捕まえるという、
まさにトレースにぴったりの機構だろ。
> 例外の振る舞いとgoto
> をごっちゃにするのもおかしい。
例外が発生した時にOUTの記録を残せないトレースなんて
役に立たないと思う。
元の議論は、gotoが必要な時があるかどうか。
>>558が提示したケースもgoto無しで十分対応できることが示された以上、
もうその時点で議論の結着はついていると思われ。
coreutilsとかLinuxのカーネルとか見ると、gotoって便利だなと思わないか?
>>566 try finallyは例外を捕まえるための機構であって、ファンクション
トレースのための機構ではない。
デストラクタでロギングするほうがよっぽどスマート。try finally
に依存したロギングよりも。そしてアスペクト指向のほうが
デストラクタロギングよりももっとスマートだといっているのだよ。
>>568 CとPythonでは言語の抽象度がまるで違うんだから、
coreutilsだのLinux kernelだのは参考にならない。
Cでtry:finally:と同等な機構を仕込むのがどれだけ大変かわかるか?
>>569 > try finallyは例外を捕まえるための機構であって、
いいえ、全然違います。ひょっとしてtry:except:と勘違いしている?
> デストラクタでロギングするほうがよっぽどスマート。
デストラクタはオブジェクトの解放をする機構であって、
ロギングのための機構ではない。
言語に備わっているものは自由に使えばいいじゃん。
(俺)ルールが決まっていれば混乱することもない。
558はせっかくPythonが提供している仕組みを無視して
Cの原始的なやり方を押し通そうとしているように見える。
いや、もともとCの話だったのだけど・・・。まぁPythonのようなクソ言語使ってないけど。
ならpythonスレに来なきゃいいのにw
寂しかったんだろ。
こういう態度じゃ,友達もいないだろう。
このスレはオフサイドルールについて議論するためのスレであって
たまたま1がPythonしか知らなかったのだと思うわけだが。
しかしオフサイドルールの話題ですらないな。
>>570 >556 名前:デフォルトの名無しさん [sage]: 2008/02/09(土) 13:55:24
>まぁさ、例外あるような言語ではgotoいらないかもしれないけど、
>Cとかだと普通に使うよ?
>557 名前:デフォルトの名無しさん [sage]: 2008/02/09(土) 14:28:31
>いや,普通には使わないわ(ww
ここから始まった話題なので、
今に限ってはCのgotoの話をしている。pythonは今のトピックにおいて関係なし。
Cは例外ないから
>>558がgotoなしで書けるという話も決着がついてない。
ここで例外使えばいいという指摘自体が的外れ。
まあ実際gotoは無くてもいいが、あると遥かリソース開放とかは便利。
むろんGCとか例外とかがあればそっちのが便利だが。