投稿数 - 437, コメント - 59540, トラックバック - 156

方法論の過度な適用

「パフォーマンスを気にするな。チューニングはプロファイラを使ってから」と言われて久しい。プログラムにもパレートの法則が適用され、チューニングするには全体の 20% を探さなければならない。

これは実際正しいし、未来のコンピュータの性能はさらに向上し、さらに重要性を増すだろう。しかしこれを過度に適用し、コーディングを行っている最中にパフォーマンスを全く無視してはいけない。

はるか昔。恐らくコンピュータが生まれる前の話だと推測するが、「GOTO 文論争」というものがあった。ソースコードを不必要に複雑にする GOTO 文を一切排除せよ、という主張がきっかけだ。

GOTO 文は確かにソースコードを複雑にするし、GOTO 文を一切使わなくてもプログラムを書くことが出来る。しかし GOTO 文を使わないことによって、余計に複雑になるロジックが存在するのが事実である。GOTO 文排除支持者は「GOTO 文はソースコードを複雑にするので排除する」を過度に適用し、余計に複雑になるソースコードを生み出す。

同様に「パフォーマンスチューニングはプロファイラを使ってから」支持者のうち、それを過度に適用する者は、あまりにもパフォーマンスを気にしなさ過ぎる。コーディングを行っている最中ならば、今書いているコードのパフォーマンスは気にしなければならない。塵も積もれば山となる。

今動いているプログラムのパフォーマンスが悪い時、手当たりしだいチューニングするのではなくプロファイラを使うのだ。

ところで、C# にも GOTO 文はあるのだが、使ったことはあるかい?

投稿日時 : 2006年7月14日 23:27

フィードバック

# re: 方法論の過度な適用

使ったこと無いです>C#のgoto
意識して使っていない訳ではなく、必要性を感じたことが無いからです。
「無意識に goto を廃したロジックを考えている」のもあるんでしょうが、以前よりその割合はかなり減っている気がします。
制御構文やデータ構造がリッチになった分、goto の必要性は以前より大分減っているように思います。
2006/07/15 5:32 | 渋木宏明(ひどり)

# re: 方法論の過度な適用

goto = return
ですから(^^
2006/07/15 10:31 | 中博俊

# re: 方法論の過度な適用

私も使ったことがありません。
多重ループから抜けるとき、一瞬 GOTO が頭をよぎりますが、メソッドを分割してしまいすね。もしくは、GOTO の存在自体忘れていてフラグで制御してしまい…。
2006/07/15 12:01 | 囚人

# re: 方法論の過度な適用

私は、GoTo の存在を忘れています。
私がプログラマになる頃には、すでに GoTo 論争が終わった後でしたし...

VB6 時代には、Continue みたいに使いたいことはあったんですけどね。
ほとんどの場合、制御構造を見直すことにしています。
そして、最近は悩むことすらありません。

# そーいえば、先日、GoSub というのを見て、一瞬考えこんでしまった...
# まさか、VB6 で GoSub を使う輩がいるとは...
# いや、ポケコン BASIC では多用していましたがw
2006/07/15 12:18 | じゃんぬねっと

# re: 方法論の過度な適用

># そーいえば、先日、GoSub というのを見て、一瞬考えこんでしまった...
># まさか、VB6 で GoSub を使う輩がいるとは...

全然知りませんでした。調べてしまった…。なかなか面白いじゃないですか^^;
2006/07/15 16:56 | 囚人

# re: 方法論の過度な適用

gosub かー、懐かしい響き (^^;
N88-BASIC では必須でしたw
そういえば、挙げるのを忘れましたが、例外も「エレガントな goto」のひとつですよね。
コレに関しては、ものすごく使っています (^^;
2006/07/16 6:11 | 渋木宏明(ひどり)

# re: 方法論の過度な適用

例外は、制御構造が制限されているからいいんですよね。
GoTo は制限されないので、まずい使い方ができてしまえるのがまずいという。

# GoSub ってやっぱり見ないですよね?
# 私も、VB で生まれて初めて見ましたもの...w
2006/07/17 22:48 | じゃんぬ

# re: 方法論の過度な適用

例外のない C 言語は、「エラー処理をエレガントにしたい」という理由で GOTO を使いたくなりますね。そういう意味で確かに例外は GOTO に似ていますね。
2006/07/18 0:03 | 囚人

# re: 方法論の過度な適用

goto文は存在そのものが悪ではなく、その使い方を誤る人が多いから悪と言われているのです。実際、case句では便利に使えますし、私も使っています。C#のgoto文は、使い方を誤らないように、いろいろな制限が加えれれていますが、私が付け加えるとすれば、下から上へジャンプするのはやめた方がいいでしょうということです。
2006/07/18 11:23 | trapemiya

# re: 方法論の過度な適用

>実際、case句では便利に使えますし、私も使っています。

お、C# でですか?
あまり使う機会がないと思っていたので、珍しいですね。
2006/07/19 23:28 | 囚人

# re: 方法論の過度な適用

このページのswitchとgotoに例が載ってます。たぶん、C#でのgotoはこのパターンで使われることは稀なんでしょうね。

http://wisdom.sakura.ne.jp/programming/cs/cs13.html

2006/07/20 17:59 | trapemiya

# re: 方法論の過度な適用

>たぶん、C#でのgotoはこのパターンで使われることは稀なんでしょうね。

たぶん、C#でのgotoはこのパターン以外で使われることは稀なんでしょうね。

の間違いです。(^^;;;
2006/07/20 18:02 | trapemiya

コメントの投稿

タイトル
名前
URL
コメント