@IT情報マネジメント会議室は、2009年4月15日に新システムに移行しました。
新たに書き込みを行う場合には、新しい会議室をご利用ください。
- PR -

なぜ「GOTO文」を使っては、いけないのですか?

投稿者投稿内容
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-04-27 18:54
引用:

るぱんさんの書き込み (2004-04-27 18:37) より:
そこで、わかりやすいソースコードってどんなもの?と言うスレを立ててみました。

是非是非書き込みしてみてください。宜しくお願いします。


あれ、そうなんですか
では、「てめ!スレッドの主だろ、人の意見を聞てんのか!」と非難を受けつつジャンプ投稿します。

GOTO わかりやすいソースコードってどんなもの?

######################################
# 編集-追記だよ〜ん(GOTO中止です!
######################################

あっちのスレッドに投稿しようと思いましたが、話の流れが異なるので
止めました。

引用:

るぱんさんの書き込み (2004-04-27 13:27) より:
るぱんです。
何を持って「読みやすいか」?
を明示的に定義しないと意味がないと思います。



当スレッドの議題で言えば、
GOTO文の性質、利便性、弊害性、問題視される背景を議論する際は、
「何を持って読みやすいか?」は不要で、
GOTO文を利用する際の対処を議論する場合に
「何を持って読みやすいか?」は必要ですね。

各自に御預けでも良いですが、ただ、何を持って「読みやすいか」?は、
それ程パターンが多く無いと思います。

一番多いのが「特定スコープで解り易い」と思います、後は
 1.視覚的に見易い
 2.全体が解り易い
 3.詳細が解り易い
 4.初心者にとって勉強し易い
 5.記述し易い
等があると思います。

こう記述すると、何を持って「読みやすいか」?を議論する事は大切ですが、
しかし、これって翌々考えると完全にアーキテクチャーの世界ですね。

例えば「特定スコープで解り易い」とは、業務アプリケーションの流れを
理解する上で、誰が理解すべき流れかを分割し、「解り易い」を階層化する。

第1階層 業務フロー(ユーザが解り易い)
第2階層 機能フロー(SEが解り易い)
第3階層 システムソフトウェア制御フロー(PGが解り易い)
第4階層 システムハード制御フロー(言語で処理される)

って感じですかね。また、これはこれで議論をしたものです。

引用:

プロシージャ(メソッド)レベルで中で記述されている内容が
わかりやすいかわかりにくいかは理解できますけど、

「そのプログラムがないをやっているか」?については
全くわからないですよね?


その質問は、入力画面や複雑な画面制御を想像していませんか?
テキスト入出力、単純な照会画面、バッチ処理では解り易い構成に出来ると思います。

入力画面や複雑な画面制御は、ユーザ操作が多数存在する関数の起動トリガーになり、
またOS制御も絡む為、分かり難くなる傾向はあると思います。

ん...何か言い方法があれば、また投稿します。

引用:

見方の定義が欲しいです。


案外、それは強欲な発言かもしれません。


[ メッセージ編集済み 編集者: はにまる 編集日時 2004-04-27 19:01 ]

[ メッセージ編集済み 編集者: はにまる 編集日時 2004-04-27 19:03 ]
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-04-28 00:23
引用:

たーぞうさんの書き込み (2004-04-27 13:35) より:
引用:

はにまるさんの書き込み (2004-04-27 11:59) より:
   1.バカでも開発出来る構成にする場合
   2.端数処理、0除算を明示指定しないとエラーにする構成にする。
               :
結局、現在の「簡単に表現する」とは、表現が悪いですが伝わり易い表現を用いると
「バカでも開発出来る」構成にする事では無いでしょうか?
つまり、関数の構成は1番、管理方法も1番です。


「2.の仕様を満たすプログラムを作れないようなプログラマには作らせない」という選択もありだと思います。


提示された仕様を満たすプログラムを作れない人は少ないのでは無いでしょうか?
もし「仕様」の意味合いに、関数毎の再利用性、信頼性、品質性を含めるのであれば、
私にそこまでの仕様を提示するレベルが無いので、逆にこっちが辛いです。

引用:

ってゆーか、このスレで問題となるべきは、あるプログラムを作るにあたって、他人に理解できるようなものを作るかそれとも火星人語みたいなプログラムを作るか、であって、仕様まで変えてしまうというのはまた別問題なのではないでしょうか。


その縛りは個人的に無いです。
2004-04-27 11:59の話の元となった私の思考を砕いて説明すると、
複雑な制御を必要とする処理にて解り易さだけを追求する事が正しいのか?と言う事です。

ん〜別スレの方が良いのかな?
でも、どれだけの人が「実際にアーキテクチャ興味があるのかな?」と疑問があり
一歩足を踏み出すのに躊躇します。

>仕様まで変えてしまうというのはまた別問題なのではないでしょうか。
ちょっと例が良くなかったですね、端数処理に関しては、確かに開発サイドで
一律で決める事は無いですが。考えさせない例として捕らえて下さい。
りばぁ
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 130
お住まい・勤務地: 愛知県
投稿日時: 2004-04-28 09:15
こんにちわ。
GOTO文については経験上、いろいろ言いたいですが、(BASICで使ってましたから。。)
とりあえず。
さっき見た記事で、

http://www.atmarkit.co.jp/fdotnet/vbcheer/vbcheer03/vbcheer03.html

goto文の使いどころが見つかった・・・。
まあこういう場面は少ないとは思いますが。
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-04-28 09:34
おはようさんです。はにまるです。
引用:

るぱんさんの書き込み (2004-04-27 16:28) より:

個人的な意見です。
「先人の知恵」は点で良いと考えています。

そこから「なんで?」って思えれば、線にできるからです。
ただ、その、「線」にする作業をいっしょにやってくれる人が
ネット上に居つづければ問題ないのかな?と。


「なんで?」で終われば良いのですが、「なんで?」の議論で上がった
内容をまとめると、それが次の議題の土台になると思うのです。

「グローバル変数」「GOTO文」で議論をしていて
ソースの記述云々て、ちょっとした注意点さえ付ければ後は別に良いのでは?
その注意点とは構造、つまり関数/メソッド/クラスの切り方に影響するもので
関数/メソッド/クラスの切り方が確りしていれば、
多少の低い技術で記述されたソースも見易くなる傾向があるから、
関数/メソッド/クラスの切り方を議論した方が有益では無いかな?????
と投稿せずに、傍観している人はいる筈です。

「そう、お前だ!」って、画像付きで表現出来たら面白かったな!

引用:

「線」の状態で置かれていても初心者にはみずらいものでしょうし、


そうですね、キーワード化は必要ですね。
るぱんさんは、「きれいなソースを描くには」スレッドから議論していたので
「グローバル変数」を議論する事自体が当初、難しいかった事を知っていると思います。
今では当り前ですが、最初、私が議論したいが思いが伝わら無い状態ってありましたよね?
ITアーキテクチャーで新たにスレッドを起すとき、この「今更グローバル変数の何を
議論するのだ?」という普通の技術者が持つであろう心の障壁をすり抜ける為に、
考えたキーワードが「なぜグローバル変数を使ってはいけないのですか?」です。

そして、スレッド達挙げ直後に、@ITでネームバリューを持つ方々が投稿という形で
賛同して頂いた結果、「ああ、そういう事を議論したいのね」と気付いて頂けた事で
「なぜグローバル変数を使ってはいけないのですか?」のスレッドが
(私の思惑として)成功した理由と思います。

興味を持たせる、思いを伝える際は、キーワード化の技術は必要と思います。
って、キーワード化の技術レベル1の私が語っても、このレベルですが

引用:

「点」を「線」にする作業が「経験」なのではないでしょうか?


そうですね、でもその「経験」を他人に譲りたくない強欲があるのです。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-28 11:29
引用:

はにまるさんの書き込み (2004-04-27 18:37) より:


 まず、引用元は「setjmp(3C)」です。3はカテゴリで、Cライブラリを表し、Cはサブカテゴリで、Callなんだけど、なんのコールだったかな?Windowsでいうと、User32ではなく、kernel32の方、カーネル、コアに近い方を表しています。

 このコードはsetjmp/longjmpの使い方の説明である、というのが第1原則です。ですから、「何かをする為のコード」ではありませんし、「何かができるコード」でもありません。あくまで「こうやって戻る箇所を定義し、そこでこうやって戻ってきたのかどうかを判別する。そして戻るときにはこうやる。そうすると、ここで指定した値がsetjmpの戻り値として受け取れる」ということを説明しています。



> 正直SIGINTとSIGUSR1(ユーザ定義のシグナル?)が
> 何で発生するか解りませんでした。

 失礼。「SIGUSR1」は、発生させれば発生するし、ハンドラを定義すれば受けられます。ハンドラ未定義の場合、このシグナルのデフォルト動作は「無視(ignore)」だったと思います。特にALRMとINTに限ったわけではない、使い方の説明と為のコードであるという為に出しました。


> Ctrlキー+Cで SIGINT が発生する?????

 SIGINTはインターラプトシグナルなので、Ctrl+Cで中断する為、SIGINTが発生します(イニシャライズシグナルではない)。
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-04-28 11:49
引用:

Jittaさんの書き込み (2004-04-28 11:29) より:


ご返答(回答)ありがとうございます。

何とか理解出来たかなと思いつつ、C言語講座(?)を経由して思いました
業務系のみ経験された方、制御系(C言語)も経験のある方では
頭にあるフローパターンの数が異なる。
私は、業務系しか経験していませんので限られたフローパターンで話をしていました。

GOTO文の内容を纏める際、業務系の基本パターンで一旦纏め、
C言語講座で出てきた、割込等は別扱いにしようと考えています。
# 纏める程、議論はされていないと思いますが...どうしよ...

割込処理の概念は、私には関係無いかなと思っていましたが、
「印刷中断」「一覧中断」機能の実装の際は、割込処理の概念が大切ですし、
又、イベントドリブンは割込処理(って言って良いのかな?)が元になっていると
考えました。

GOTO文のスレッドとして一旦、話を区切った方が良いか、
様子見&纏めをして考えます。

# 提示して頂いたサンプルを読みをすと、setjmp/longjmp関数より、
# signal関数の概念に興味を持った次第です。
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-04-28 12:53
# かなりUnixに特化した話になってしまっていますが...

signal(2) を「関数」と呼ぶのは間違いではありませんが、
ふつうは「システムコール」と呼びます。
# ()の中の数字はマニュアルのどの章に載っているかを示す。
# OSによって違いはあるが、第2章がシステムコールなのはたぶんUnixなら
# みんな同じ。第3章には関数が入る。Solarisだとさらに章を細かく
# 分けているが、分けていないOSのほうが多い。
# なんで章を示すのかというと、別の章に同じ名前で違うものが
# 載っている可能性があるため。
signalとゆーのは... つまりは、コールバック関数です。
はゆる
ぬし
会議室デビュー日: 2004/02/16
投稿数: 1008
お住まい・勤務地: 首都圏をウロウロと
投稿日時: 2004-04-28 14:36
引用:

はにまるさんの書き込み (2004-04-28 11:49) より:

割込処理の概念は、私には関係無いかなと思っていましたが、
「印刷中断」「一覧中断」機能の実装の際は、割込処理の概念が大切ですし、
又、イベントドリブンは割込処理(って言って良いのかな?)が元になっていると
考えました。


そうですね。
VB 的に言えば、コマンドボタンが押されたときの処理が走っていても、テキストボックスをマウスでカチッとすれば 「txtHoge.GotFocus()」 が呼び出されますし。
(.NET では Enter イベントになっているのかな?)
「割込」 というか、「非同期」 と考えるといいのかもしれません。
(コレでヒドイ目を見たこともあります。苦笑)

ちなみに、上記の例だと、signal で 「WM_SETFOCUS (先の例で言う SIGUSR1)」 という ”メッセージ” が、Windows から VB に送られてきて(いて、そこから自分のソースの GotFocus イベントが呼び出されて)います。
(って説明だといいのかなぁ…久しぶりなので怪しいです。間違ってたら訂正を。汗 <どなたか)

引用:

りばぁさんの書き込み (2004-04-28 09:15) より:

さっき見た記事で、
http://www.atmarkit.co.jp/fdotnet/vbcheer/vbcheer03/vbcheer03.html
goto文の使いどころが見つかった・・・。
まあこういう場面は少ないとは思いますが。


私も読みました。
「飼いならされた goto 文」 という表現に座布団一枚っ。

スキルアップ/キャリアアップ(JOB@IT)