Cでgotoを使わない理由を考察するスレ goto loop3;
2ゲット
3 :
仕様書無しさん :03/12/22 00:01
1000鳥に必死で、こつちは虫か?
警告:スレタイ頭にloop3:のラベルがありません。
>>1 の最後にラベルがついてるって事は、過去の議論は無視しろって事でしょ。
gotoはどうでもいいが、バカを禁止したい。
んじゃ、このあたりから続きをどうぞ。
詳しい経緯は前スレを呼んでね♪
--------------------------------
988 名前:高卒アニオタ中年[sage] 投稿日:03/12/21 23:56
>>980 251が、gotoが正しく使われているかは「人がチェックする」といってるんだが・・・
読みやすさとは別の議論だろ。
993 名前:仕様書無しさん[sage] 投稿日:03/12/22 00:01
>>988 んじゃ、
・バカが意味不明な識別子名をつけてないかチェックする時間がもったいない
・バカが不用意にポインタを乱用してないかチェックする時間がもったいない
・バカがマクロを乱用してないかチェックする時間がもったいない
・バカがforやwhileの条件に何でもかけることを乱用してないかチェックする時間がもったいない
・バカが不用意に3項演算子を乱用してないかチェックする時間がもったいない
・バカがフラグ変数を乱用(多様)してないかチェックする時間がもったいない
・バカが保守性も解析性も悪いC言語コードを乱発してないかチェックする時間がもったいない
・バカがグローバル変数を乱用してないかチェックする時間がもったいない
・バカが環境変数を乱用してないかチェックする時間がもったいない
・バカが保守性も解析性も悪いC言語コードを乱発してないかチェックする時間がもったいない
ので、それらの使用を禁止する、といういういつもの議論に収束しそうだな。
9 :
仕様書無しさん :03/12/22 00:11
小泉総理大臣は12月22日、記者団の前でgotoを禁止する法案を年内に国会に提出する 談話を発表しました。可決すれば、違反した者は、5万円以下の罰金または死刑に処せられます。
>>9 ソース公開しないのでばれないからダイジョーブ!!
年内とはまた急だな。あと10日もないぞ。
規約だとか言わないでgotoをはじくプリプロセサを通すようにすればいい。 ・・・C++使えっつのと同じか。
13 :
仕様書無しさん :03/12/22 00:14
grep goto *.c の結果を提出する義務があるそうです。
config.h: ----- #define goto ike ----- とするのでダイジョーブです!!
逆だ #define ike goto
だから、コボラーは黙ってろって。
>>8 そこからかい(w
仕方が無いのでそこからマジレスするか・・・
列挙されている問題点らしきものの中に、
構造化に関するものが見受けられないのだが?
言語仕様としての話と、
(言語に関係の少ない)可読性の話は分けて考えるべきだと思われる。
昔のBASICしか使えないやつもな。
>>19 前スレ嫁。
988に関しては
「正しく構造化できているか」をチェック
が論点だ。
スレに関係ない話はしないようにしましょう。
22 :
仕様書無しさん :03/12/22 00:25
先生!この際251を置いてきぼりにしていいもんなんでしょうか!
25 :
仕様書無しさん :03/12/22 00:30
goto が廃止になったら、既存のプログラムはしかたないとして、新規案件で なにか不可能な処理とか出てきますかねえ。 てか、goto つかったことないのでわからんのですけど。
27 :
仕様書無しさん :03/12/22 00:31
ユンソナー(・∀・)
>>25 構造化理論で、すべての処理は連接・選択・反復のみでかけることが証明されているので
不可能なことはないでしょう。例えチューリングマシンでも「不可能ではない」よ。
(lambda式のみでもOK!)
29 :
仕様書無しさん :03/12/22 00:33
この間初めて goto 使ったんですよ。goto。 そしたらなんか人がたくさんいて…… で、ラベルは文につけなくちゃいけないんですね。 end: } とかはだめなんですね。 end: ; } なら OK だったんですよ。
>>21 スマソ。 まあ、
>>8 にのせられた漏れが悪いんだが・・・(w
とりあえず、251が出てこないと話にならないわけで、
すこしおとなしくしときまつ・・・
ちなみに、現時点で漏れが251の意見に疑問に思っていることは
・gotoを使わないとフラグ変数の乱用が起こる
・正しいgotoの利用は、レビューにて徹底できる
の二点。
漏れの意見は、上記の二点に関して「んなわきゃねーだろ」だ。
switch(i) { case 1: ....; break; case 2: ...; if(...) goto 1; break; default: ...; } も使いましょうw。こういうの見るとCサイコー!とか思うんだよね。
>・gotoを使わないとフラグ変数の乱用が起こる バカは何をやらせてもバカ。 ただし、gotoを使わせないだけで有意にマシになる? (というか、バカはgotoあんまり使わないけどな。) >・正しいgotoの利用は、レビューにて徹底できる バカ同士でレビューしてもどうにもならないというのは同意だ。
>>30 251ではないが。
> ・正しいgotoの利用は、レビューにて徹底できる
これができないようだと、gotoの濫用以外の問題も指摘できないように思えるのだが。
何のためにレビューしてるのだろう?
『ロジック』を検証するためだろ? フォーマルメソッド(形式的仕様記述)でも使ってるのかねぇ?www
35 :
仕様書無しさん :03/12/22 01:05
gotoをよく使ってて、なおかつフラグ変数の乱用が多いソースはよく見るよな(w
36 :
仕様書無しさん :03/12/22 01:09
この間、告白したら、 「私、gotoを使いこなせる人としか付き合わないの」 って振られたんですけど。
>>高卒アニオタ中年さん
前スレ251です。
>漏れの前提は、「機械に任せるべきものは、機械に任せろ」なんだが・・・。
ソースコードの品質の全属性はあくまで人間が作りこむものです。
「機械に任せるべきもの」にはコンパイラ言語の存在、構造化構文の存在、
ローダ(リンカ)の存在等がありますが、
わかりやすさという品質は機械には全面的には任せられません。
>コードレビューは、ロジックだけのチェックにしないと、
>時間かかってしぁあないだろ。
>漏れは、その「チェックにかかる時間がもったいない」といってるんだが?
ロジックチェックはしませんよ。それは担当者自身がすることです。
プログラム設計書を書くか書かないかで状況は違いますが、
データ構造、アルゴリズム、プログラム構造、表記がレビュー対象です。
時間はかかります。しかしながらコードの品質水準を上げるための方法として
レビュー以上のものはありません。
>もちろん、どんな言語でも(たとえばマシン語でも)構造化プログラムは書ける。
>しかし、「正しく構造化できているか」なんてチェックを人がするのは馬鹿らしくないか?
コードの話ですね。確かにgotoが無ければ構造化コードです。
私には「構造化コードでなければならない」という前提がありません。
そして
>>8 に書いてある項目もチェックしますよ。
>何のために構造化言語があるのか考えてみ?
構造化言語によって実現できる事は構造化コードだけです。
構造化コードでありさえすれば「わかりやすさという品質」を充分満足できる
とは思っていません。
非構造化コードのほうが構造化コードよりも「わかりやすさという品質」をより満足する
場合があると思っています。
38 :
仕様書無しさん :03/12/22 01:22
>>37 そうは言ってもね、やろうとしたんだよ。
でも、main ひとつで構造化なしで全部 goto で書いたら、8 万行ぐらいのところで
ソースがでかくなりすぎてコンパイラが受け付けないのよ。
構造化しちゃいけないから、ファイルを分けて分割コンパイルというわけにも行かないし、
共同開発のときもひとつのソースをみんなでいじるから大変だし。まあ CVS 使えば
少しは何とかなるけど。
みなさんどうされていますか?
そのまえに自分の文章をわかりやすくしろ。構造化はそっちが先だ。
40 :
仕様書無しさん :03/12/22 01:31
>>39 え、だって構造化しちゃいけないんでしょ。かわりに goto を使えと。
>>30 どうも誤解をされています。両方ともそんなことは言っていません。
>gotoを使わないとフラグ変数の乱用が起こる
繰り返しますが、
「gotoを禁止するとフラグ変数の乱用が起きる危険性がある」と言っています。
同じ事に見えますか?
これは「goto禁止」が「他の部分に悪影響が出ることを示す」ために書いたものです。
「禁止論議は本論ではないからしたくない」ことはもうお伝えしましたよね。
>正しいgotoの利用は、レビューにて徹底できる
「誤ったgotoの利用(goto誤用)は、レビューにて完全に防止できる」
と言っているのですが
42 :
仕様書無しさん :03/12/22 01:44
できねえんだよ。両方とも。
>>38 >でも、main ひとつで構造化なしで全部 goto で書いたら、8 万行ぐらいのところで
>ソースがでかくなりすぎてコンパイラが受け付けないのよ。
その、まるで実際に経験があるかの様な物言い、感動しますた。
>>40 笑いました。ちょっとレスさせてね。
構造化プログラム設計と構造化コードを同一視しないで下さい。
gotoは構造化コードにのみ属する問題だということもね
結局、Cでgoto使ってる場合を研究して ・例外処理(try〜catch) ・continueのラベル付き ・breakのラベル付き とかって形にしてgotoレスだって誤魔化してんだよ って事はCでgotoを使わざるを得ない場合がある、って事
終了。規約うんぬんは別の話。
あれ?「使わない理由」は?
>48 そんなもん存在しねーよ。 自信のねーバカが受け売りで得意になってるだけだ。
なんかもー必死な奴が何人かいるみたいだが、こんなしょうもないことに いったいどれだけ時間を使えば気が済むんだろうね
まあお前ら底辺PGは一生やってろ(w
よくいるでしょ語りがるやつって。 仕事はろくすっぽできないのに講釈だけは得意な人。
いるいる。gotoを使うとコードはもっと面白くなる!とか言ってる人。
おまえらわかってねー! 子ループの条件で勝手に抜けられた時の親ループの気持ちがわかってねえ! ...ぜぇんぜぇんわかってねぇ。クゥゥ...。
つーか後藤に貸した5千5百円返ってこねー。
日本break goto ダイアモンドカッター Da Da Da ! Hey!(あげ)
goto使わなきゃならない状況に落ち入った時点でクソグラマ goto使いたがる奴はアホグラマ 今時スパゲティコード書いてる奴がいたら即処刑
59 :
仕様書無しさん :03/12/23 09:42
一番言いたいことだが、大部分の奴はアセンブラ書ける奴の努力のおかげでアプリ開発できてるって事は 頭の隅に置いとけ。誰かがやらなきゃなんねーんだよ。 名前かわっただけで例外処理はgotoそのもの。 見易さで言うとtrycatch使ったほうがいいが、それはただ言語のコード解析が trycatchに対応しただけにすぎない。 自分で見やすいわかりやすいコンパイルを自作して既存のコンパイルと結合させること自体 30過ぎのプログラマーには余裕のよっちゃん。 コンピュータが動く仕組みを理解してる人にはgotoなんて問題でもなんでもない スパゲティコードみっけたらperl使って新しいソース作るだけ。 どんな他人のソースでも自分が見やすいコードに直して開発すると修正作業も楽々。 #つーか最近コード生成じゃなくてコードをばっさばさ削除していくだけの作業なんで 糞おもしろくもねーよ。
例外処理なんか関数超えちゃうからもっとクソだな!
>>59 今日び、アセンブラじゃなくてcじゃないか。
アセンブラでなければならないプログラムって本数ベースで1%ある?
#俺もアセンブラは少し書けるけど。
62 :
仕様書無しさん :03/12/23 10:38
>>60 なんのための「例外」ですか?
想定しないことがおこったので、そのまま次の処理に以降するほうが問題。
63 :
仕様書無しさん :03/12/23 10:42
>>59 老兵は死なず、ただ消え去るのみというが、
死んで腐ったのにまだ戦ってる人もいるんですね。
あなたの腐った脳味噌で考えた事が現代でも通用すると思わないで下さいね♪
ブードゥー教の奴隷は、死亡診断の風習が無い地域で、 墓に埋まった後息を吹き返した人間にフグ毒をはじめとする 多種多量の神経毒を用い、精神を破壊することで作成されます。 虚構書店「ネクロマンサー即席養成教本」
65 :
仕様書無しさん :03/12/23 10:54
>>63 残業残業うるさい若造が何を力不足にほざいてる?
コンピュータに老兵も糞もねーだろ
66 :
仕様書無しさん :03/12/23 10:56
やたら入力にやたらエラーが多くて複雑な状態遷移図になってしまうときにはやっぱりgotoは便利だね。 リカバリー後に何事もなく進めるポイントが飛び先ラベルになる。 エラーが出たら即止まるプログラムを書く人には全然いらないとおもう。
sageでえさを撒いてきた効果が現れ始めたな。
よくもまあ、3スレも自作自演でがんばったな。 すげーよ あんた
なんでgoto完全否定派は「使わない理由」も示せないくせに、 自分と違う意見すべてを自作自演扱いにしたいの? なぁ?自作自演はお前のことなんだろ?
「アンチ推進派」はいるみたいだけどね。 ちなみに推進派なんてのはいない。
>>71-72 はい。否定派からの明示として
×goto
×途中return
○break(case label対応以外のbreak)
○continue
という表明があります。
推進派はいません。
失礼。このスレでの名前は251ではなく37でした
漏れはgoto否定派だが「途中return」は別に構わないと思うがなぁ
いまだに必死な奴がいて笑える
前スレ251こと37 哀れなほど必死だな
>77 “絶対”ではないYO! 一人で組んで面倒見る分には何やってもいいと思うし でも、複数人でやるときはヤメレと思う
>79 一人なら何でもありかよ。 多分もまえはクビになるだろ。 その後を引き継いでメンテするやしはどうなる? コード書かずに退職願を書いてくれ。
>80 う〜ん...こういう「文章よく読まない奴」は放置した方がいいのかな?(w
>>81 俺は
>>80 じゃないけどさ
>一人で組んで面倒見る分
面倒見るって表現はもろ仕事としてと受け取れるが。
仕事なら普通 面倒見る 期間というのは有限だよな?
退職なり契約切れなり解雇(笑…だがgoto許容派には現実的な話か?)で
その有限の範囲が終わった後はどうなるんだ?
答えてみろよ。
走る走る 日本break goto(あげ)
まぁ、goto否定派に自己厨が多いのは仕方ない。
>>82 ==
>>80 だな(w
一人で面倒見るってのは、
個人で(趣味で)作るとか、そういうことだろ。
>>81 つーより、「文章を読めない香具師」な。
>85 必死だな(´,_ゝ`)プッ
79=81=85でつね?
>>69 理由? バカだからに決まってンだろ
goto使いは頭いいよな(w
goto = イスラム教
goto否定派=自分の意志を持つことが許されない創価学(ry
>>82 一人で、といっても引き継ぐ人のことを考えろ。
↓
結局、(仕事で)影響範囲が1人なのはありえない
↓
goto使うとメンテしづらいソースが作成される可能性がある
↓
なのでgoto禁止
↓
goto以外にもメンテしづらくする要因はたくさんある(
>>8 参照)
↓
これらももちろん禁止(だよね?)
↓
C言語使用禁止!
↓
プログラミングも禁止!!
という何時ものながれでつね!
一人で開発した保守不能プログラムの件。 開発した人間が退職したなら、コードのほとんど(全部?)の権利は 退職した会社が持っているわけだ。つまりコードは会社の持ち物だ。 だからそのコードが「保守可能であるかどうか」は、退職した人間が責任を持つ筋合いのものではない。 問題なのは保守不能プログラムを保守しなければならなくなるという状況だ。 不可能事を業務に命じるのは公序良俗に反する。 それが不可能事であるかそうでないか、つまりプログラムが保守可能か保守不能か の正しい判断が出来る人間は、当の保守担当者以外にはいない。 また会社としても「何時まで経っても終わらない仕事」をさせるのは不本意であろう。 結局、会社が自らの資産の品質管理をしていない事が、元凶だ。ではどうすれば良いか。 「保守担当部門を新設し、保守担当部門には保守対象のプログラムの保守を 拒否する権限を附与」する事が正しい。 政治的な理由でこれが実施出来ない場合が多々存在することは知っているが、 組織論を述べるつもりはないのでここまで。
>ではどうすれば良いか。 一人では開発させない。 第3者部門がレビューする。 保守しない(ようにあらかじめ計画/契約する)。
なんか盛り上がってまつね(w
>>82 >仕事なら普通 面倒見る 期間というのは有限だよな?
いや、それは「一人で組んで面倒見る分」にはならないでしょ
自分の手を離れてしまった時点で面倒を見る事ができなくなるのだから
そういう可能性が全くない一人での開発&保守の場合のみ「ご自由に」という意味
...ここまで書かないとダメかなぁ(汗
>>85 全くその通りでつ(w
いやぁ、分かってくれる人が居るだけで心強いでつ
>>87 漏れは名前に「75」と入れまつよ
ちなみに今のところはニセモノ出てないっす
>そういう可能性が全くない一人での開発&保守の場合のみ 趣味でやってるのか? 妄想か? 仕事なら自分の手を離れる可能性がないケースは存在しえない。
プログラマ一人が作ったコードを誰もチェックせずに納品するプロジェクトなんて存在するのか?
>>95 >仕事なら自分の手を離れる可能性がないケースは存在しえない。
可能性が全く無いとも言い切れないが、まぁその通りだよな
だから...分かったかな?
これで分からないのなら、もう放置
>>96 存在する。業務アプリ等のプログラム数が多いものだと必然的に担当メンバー数は増えて
「どんなコード書かれるかわからない」という当然の不安感も後押しして、コードレビューを行うところは多い。
だがリリースインターバルの短縮が殆どビジネス面での利得にならない場合、予算の無さもあいまって
システムを一人で作る場合もあるんだ。俺がその担当だったから間違い無い。
四年間ほどやって三回リリースしたが、そのあいだ、そのシステムのコードを目にしていたのは俺だけだ。
まぁ、仕事でプログラムを作ったことのない
>>75 にはわからない世界もあるんだよ。
100Gets!
わんちゃん
>99 お粗末な文章からいってそんな感じだね。 まともな文章書けなきゃ仕事にならんもんね。 休みになると学生はりきるからw
>96 適正なコードが書かれている全ソース、全ステップをチェックするの??? そんなことは現実的に可能なわけ?
104 :
仕様書無しさん :03/12/25 08:18
元の担当者のいないシステムの改修のときは ほとんど全部読むこともある。 たかだか数万行だが
105 :
仕様書無しさん :03/12/25 08:34
>>103 全ソースのチェックは現実的でないからやらんが、
利用回数が多いコードはしっかりチェックしないと、
後で例えようも無く悲惨なことになるぞ。
1.コードを利用している側がいつのまにかバグだらけになる。
2.直したくても、現在の糞仕様に依存しているコードが多すぎて、
直す気がなくなる。
3.誰かが直そうと決意して上の許可を取っても、影響が大きすぎて
現実には修正不可能。
4.腐敗したコードが更なる腐敗を呼び、プロジェクト崩壊。
理由は、「腐りすぎて理解不能ッ!理解不能ッッッ!!!」
106 :
仕様書無しさん :03/12/25 09:46
>>103 プロジェクトの予算にもよるけど、全コードのチェックを行うところも珍しくないよ。
>>103 やる所もあるよ。コードかいてる時間なんて全工程の10%もない。
新規なら数百万、数千万ステップ越えるぞ! テスト以外によくそんな時間とれるな。 正気の沙汰とは思えん。
>数百万、数千万ステップ どうやったらそんな糞コードが書けるのですか? またどんな糞システムだとそんなにステップ数かかるんですか?
はじめからそういうつもりで工程(予算も)組むんだよ。 別に時間が余ってるからやってるわけではない。
>>108 そんなに大量のコードをチェックもせずに素通ししてしまうほうが狂気の沙汰だぞ。
もしバックドア仕込まれてたらどうするんだ?
>109 おまえパチョコンのクソみてーな仕事しかしたことないのか?
>>112 で? あなたはどれだけ糞な仕事してるの?w
某火力発電所のシステムで 監視系 WS だけで 60万ステップくらいだったな。 (入出力装置、通信関係除く) 制御系・計画系・帳票系含めると300万超えるくらいじゃないか?
出た ドラマを作ってるアシスタントディレクター君
>>108 正気の沙汰だよ。
コードレビューはブラックボックス試験では発見される可能性の低いバグも発見することもあるからね。
費やした工数/時間に見合う効果は充分にある。
コードレビュー以上に効果の高いレビューって、何がレビュー対象なのかと逆に聞きたいくらいだよ
へー正直おでれーた。 確かに悪意のあるコード埋め込まれる可能性はあるな。 ちなみにコードレビューにどれくらいの割合で工数あててんだ?
...えっと、gotoの話はもうしないのでつか?
>>118 まだしたいのでつか?。燃料が切れているかも。
ペアプロしる!
>>120 全ソース、全ステップのレビューをコード書くのと同じ時間で本当にできる?
レビューの相手はチームリーダあたりだよね。
レビュー相手<PG で圧倒的にレビューの相手は少ないはず。
時間的に無理だよね?
ウニットてすとしる!
124 :
仕様書無しさん :03/12/26 08:46
作業中のコードをメンバー全員が見れるところに上げるようにしておいて、 リーダー・サブリーダーあたりが毎日きちんとチェックしてれば、レビュー やるときもそんなに大変じゃないけどなぁ。問題になりそうなところも早期発見できるし。
>>122 お前ができないからといって、他人もできないなどとは考えないこと。
はー…随分無駄な事してるんでつね<コードレビュー 作業者のレヴェルが低いのか、よっぽど人が余ってるのか尻ませんけど。 いや、素で感心して (というか呆れて?) るんですけどね。
>>128 組織には、その組織のやり方があるんだから、君が口出しする必要は無いよ。
>>128 コードレビューやらないということは、やらなくていいほどの詳細な設計をしてると
いうことか?
もしそうだとしたら、そっちの方がよっぽど無駄だと思うが。
それとも、単にテストフェーズまで誰も何の確認もしないということか?
>>128 「俺は他人にコードを見られるのがいやなだけだ」
では無いという根拠をレスしてみてくれ
132 :
仕様書無しさん :03/12/26 12:24
>>128 どのくらいの品質を要求されるシステムかにもよるけどね。
オープンソフトウェアじゃないけど、目が多いほど問題点見つけやすいのは確かだし。
コードレビューで見つかる問題点ってどんなこと? 仕様の実装ミス? アルゴリズムの正当性?
>>129 いや、単なる感想だから。
>>130 コーダーなんか飼ってませんよ。(為念)
各サブシステムの I/F は全員でやるけど
その後〜単体テストまでは各担当者の責任範囲。
途中で I/F 変更の必要があれば、また全員で検討。
>>131 ん?何の為?
稼動後暫く経ってからの機能追加・仕様変更があった時には
コード書いた本人の手が空いてる事の方が少ないから
別の誰かが弄ることになるけど、別に嫌じゃないし。
つか、変な設計してるとそこで恥かいたり勉強できたり。
>>132 まぁ今んとこ人の命に関るようなクリティカルなシステムは
やってないんだけど、
>>114 のは二年に一度の定期検査時
以外は24時間稼動してるよ。
担当範囲を限定すれば、その中での個別の品質保証は
意外と出来るもんだよ。
爺さんたちがんばってるな! 来年は定年か?
コードレビュー!? 意味ねーだろ。 みんなで仲良く机上デバッグしてどーすんだ。 どうせレビューしたあとのテストでもバグでるんだろ? だったらまともなテストにパワーかけろや。
137 :
仕様書無しさん :03/12/26 17:04
>>133 まぁ、そこらへんも見つかるけど。
セキュリティ上の問題とか、処理の競合とか内部エラーへの対応とか、
実運用に入ってからでるとなかなかめんどくさい不具合(必ずしもその
リリースで顕在化するとは限らんけどね)を潰すにはちょうどいいよ。
>137 なんだそういうことか。 おまいらは設計しないでコーディングはじめちゃうのか。 随分お粗末な開発方法なだ。
139 :
仕様書無しさん :03/12/26 18:04
>>138 関数の内部動作まで設計してコーダーがコードを起こすというのにも当たったことあるけど、
あまり生産性がいいとは言えなかったな。
どうせ関数の内部設計とコードが一致しているかの検証は必要なんだし。
>>139 そのとーりだ。プログラム単位や関数単位の内部設計書なぞ書かんのが正しい
納品物件になっていれば単体試験終了後に書くのが正しい。可能なら最終納品時だ。
大体、エラー対応のコードが半分以上を占めるプログラムが過半数であるのに引き換え、
機能仕様書のエラーに対する記述が同様の割合を占めることはほとんどない。
つまり機能仕様書にはエラーに対する仕様の記述が不充分であるのが常態だ。
この不充分な「エラーの対処機能」は関数単位の内部設計では発見しきれない。
コードにしないと発見出来ないのだ。
また、何段階も試験を行うのだから当然修正が入る。内部設計書なぞ工数をかけて書いていたら
どのみち後でリリースされるコードとシンクロしなければならない羽目になる。
だから内部設計書が納品物件である場合は、後回しにするのが正しいんだ。
なんか使えないコーダの吹き溜まりになってきぞ
>140 ということにしたいんですね?(w
>>142 うんにゃnot.俺はそれが可能なときはいつもそうしている。
>>141 失礼な香具師だな。
スーパーなPGといわれている人達が、図式表記やPDLを書いてから
コーディングを始めていると思っているのか。
で、このスレはなんのスレ?
コードレビューしないからgoto使うとコード品質下がっちゃうとかいう 環境に居る人が、隣の芝生を嫉妬したり馬鹿にしたりして強がって みたりするスレです。
>>134 君のところのレベルがそれなりに高いってだけで、君の発言には
何の意味も無いのだが。
>>145 燃料切れで「gotoの使用/不使用」がテーマであるにも関わらず、cプログラミング全般の雑談スレとなっているスレ
ですかね。
149 :
仕様書無しさん :03/12/26 23:53
結局、此処等でgoto使うの擁護してるのって COBOLerやBASIC上がりの香具師なんだろ? 必死だな(プ
不完全燃焼です。。。
>>149 「goto使うの擁護している人」などいませんよ
「自分がどの様にgotoを使うかをレスしている人」はいますけれど
>>136 うちもコードレビューしまし。
が、おっしゃるとおりです。
個人的にはさほど効果があるとは思えませんねぇ。
153 :
仕様書無しさん :03/12/27 06:58
>>149 いや、その時代に生きてた人が必死にgotoを排除してるだけ。
コードレビューもgotoと同じだなぁ。 チーム内の人員レベルを居慮して実施するかしないか(gotoを禁止するか しないか)を決定しなければならない、と。 重要なのは、全員バカコーダーだと、レビューしても意味が無いということだ。
155 :
仕様書無しさん :03/12/27 12:49
>>153 逆だ
「その時代に生きてた人が必死にgotoを擁護してるだけ」
だろ
バレそうになって必死か?(プ
156 :
仕様書無しさん :03/12/27 12:58
>>155 いや、gotoでひどい目にあってる(ひどい目にあわせてる)のは相当昔の人だろ。
157 :
仕様書無しさん :03/12/27 13:23
>>156 いや、goto使わないとロジック組めない思考で凝り固まっちゃってるんだろ。
冬休みだねぇ。
がぜん張り切るよな〜 休み長くていいな〜
年中休みの奴もいるようだけど。
こいつら一日中てぃんぽいじってるだろうな
独身女性が一日中てぃむぽを…。(;´Д`)ハァハァ
いやさすがに一日中いぢられたらもちませんて・・・勘弁してください。
「gotoを擁護する」ってどういう意味なのでしょうか。 「何からgotoを擁護するのか」が、わかりません。規約ですか。 私はgoto禁止規約が存在すればそれを守りますよ。 goto禁止規約を前提に話をしないで欲しいのです。また禁止の是非もです。 これらは「スレ違い」だと思うのですが。 スレタイの「使わない理由」についての表明は、今まで「法則だから」と「規約だから」だけです。 これらは理由ではありません。単なる「きまりごと」です。 とりあえず、「誰も論理的な理由を示せないままここに至っている」という事実の指摘だけをしておきます。 #「論理的な理由なぞ存在しない」という判断が出来ない人がいるのでしょうか 使う人は使うし、使わない人は使わない。それだけのことです。 「使う人が自分の使い方を披露し、それをつっつきたい人がつっつく」というスレだと思っていました。 違うのでしょうか。
「goto擁護」 =複数の要員で開発している案件にも関わらず、 自分だけはgoto使用許可が与えられてると勘違いし 頑なに使い続けようとする自己中野郎が行う行為
>>167 そーだったんですか。
擁護擁護と何人かの人が書いているのでそのようなことをする人間は少なくないのでしょう。
それに「goto禁止規約を前提とした話はスレ違いだからおかしい」といっているのに止まないのは、
みなさんかなり御立腹なわけですか。
でもそれは「単に規約違反の一例」ですよね。「確信犯である」という厄介なおまけがついていますが。
プロジェクト管理方法論の話になってしまいますよ。
その話を始めるとさらにスレタイから乖離するので「goto擁護派を叩くスレ」でも作成して移行して欲しい
と思うものですが。
>37 カスはすっこんでろ。 わかったか?
>>166 お前が今までのスレを読んでいないことが良くわかった。
議論するつもりが無いならもう来るな。
>168 規約の有無に関わらず、保守の妨げとなる可能性のあるgoto使用は 仕事でやってる以上禁忌すべき行為だろ
172 :
仕様書無しさん :03/12/28 17:11
まずは、保守の妨げとなるかどうかから議論しないといけないな。
>>170 読んでいますよ。先頭スレからいますから。このスレはgoto擁護について議論するスレだったんですか?
どのレスがそれを示しているのかを回答下さい
>>171 それはもう議論されています。前スレの235あたりから参照してください
>>172 正論だとは思いますが、「同様の議論を繰り返すのはもうウンザリ」なので「どうぞ御自由に」です。
「よそいってやれ」といってもそうしないのは火を見るより明らかですしね
なるほどね。こうやって「前スレの234で述べた自分の意見を自分で実感する羽目になる」わけか。
>>37 >「gotoを擁護する」ってどういう意味なのでしょうか。
>「何からgotoを擁護するのか」が、わかりません。規約ですか。
この程度の読解力しかないくせに、自説は何度も何度も繰り返し垂れ流す。
人の話を聞かない。聞いても理解できない。
なんでこのスレにくるんだ?
>>37 つーか、お前がいったい何を主張したいのか一度簡潔にまとめてみる。
箇条書きで3つ以内。それぞれ40字以内でまとめてみろ。
>>174 私の個人的能力はさておき、どのあたりが「自説は何度も何度も繰り返し垂れ流す」
というのかを回答下さい。
>>175 goto禁止関連はスレ違いだ
gotoを使わない理由など存在しない
議論が終了した話題を蒸してほしくない
×議論が終了した話題を蒸してほしくない ○議論が終了した話題を蒸し返しててほしくない
何十年も前に議論が終了した話題を蒸し返しているのは誰なんだ?
>>178 私は何がいつ終了したのかを知りません。goto論争が終結したとは聞いていません。
あえていえば「蒸し返しているのは参加者全員」ですね。
ただこのスレ内だけでも「終わった話題を蒸し返す」という動きがあるので苦言を呈しただけです。
先頭スレから読めば「何が終わって何が終わっていないか」がわかるはずです。
納得いかないのならば、「蒸し返す様ですが」と一言、沿えていただきたいですし。
もしかして「蒸し返しているのは37だ」との見解ですか?自覚が全くありません。具体的に御指摘下さい。
>もしかして「蒸し返しているのは37だ」との見解ですか?自覚が全くありません。具体的に御指摘下さい。 うむむぅぅ、10年にいちど拝めるかどうかのすばらしい釣りですなぁ(^^;
181 :
仕様書無しさん :03/12/28 19:57
しかし、goto議論って面白いか? どこでも同じような話ししかしてないんだけど。
>>176 > goto禁止関連はスレ違いだ
その通り。
> gotoを使わない理由など存在しない
その通り。
> 議論が終了した話題を蒸してほしくない
その通り。
あ、議論が終わっちゃった。
しょうがないなぁ。
君って鳥頭だからちょっとだけ指摘してあげるよ。
>>151 >「goto使うの擁護している人」などいませんよ
>>166 >「gotoを擁護する」ってどういう意味なのでしょうか。
>「何からgotoを擁護するのか」が、わかりません。規約ですか。
ほらね(何が?
>>183 151を書いた段階では「goto使用を誤用も含めて全く自由にしろ」と主張している人のことを
意味していると思っていたのです。再度レスを読み返してどうもそのような人のことを
意味しているわけではなさそうなので166で尋ねました。
それが「繰り返し」とか「蒸し返し」になるのでしょうか
うむむぅぅ、今日はすばらしい釣り日和ですなぁ(^^;
>>182 ええ。議論が終わっているのだから、
>>166 の末尾に記述したレス内容で良いのだと思いますけどね。
ですが、多数の人が「goto禁止関連に使う」というのならイヤだけど止めさせる方法もありませんし。
>>37 キミこのスレに何時間費やしたかしらないけど、何か得るものあった?
>>187 すばらしい質問です。
私が個人的に期待することは「蒙を啓いてもらう」ことなのですが、残念ながらこのスレにおいてはあまりありませんでした。
しかしながら「とても楽しい時間を過ごせた」ので充分、満足しています。
口語的表現をすると「こんなにオモシレーことほかにないよ」ですね。
あー、そうなんだ。そりゃよかったな(皮肉でなく)。
で、みなさんは、そんなに
>>37 氏を煽って得るものはあったんでしょうか?www
>190 ヒマツブシにはなたYO!
Cでgotoを使わない理由 日常生活では微積分を使わない、って事かな...
せいぜい「日常生活では分数を使わない」って程度だな(w
Cでgotoを使わない理由はこれだ。 1.死んだ爺ちゃんが言ってた。 2.昨年のおみくじに書いてあった。 3.幼児期からトラウマを持っている。 4.何か得体の知れない力が働いている。 5.何となく。 6.生まれつき。 7.俺を振った女に似てる。
>>194 UTでバグでることが問題あるのか?
バカかおまえは。
gotoは某国が生産性低下を狙ってC言語の仕様に忍び込ませた罠なんだよ!
UTってなんだ?ユーザーテストのことか?それローカルだよ。 コーディングの段階でバグ出んのと、テストの段階でバグ出んのと どっちがデグレ率高いと思ってんの? 基本情報処理から勉強し直せよ、新米君。
あーもしかして、UNIT TESTか?単体って言えや、横文字かぶれが。
>199 おまえ今日英語禁止!!
194=198=199か。 このスレ一番のバカ出現だな。
理由も言えんとバカ呼ばわりとは、面白いのう。 >194=198=199 わざわざ書かなくても大概の奴はわかるって(笑
懲りずにまた書き込んでるよ。 このバカかなりスペシャルかもw みんなで育てまつかw
204 :
仕様書無しさん :03/12/29 05:30
はぁ?コードレビューしてる奴は皆このスレ一番のバカなん? じゃ、ISO取得してる会社は皆このスレ一番のバカってことかいな? でっかいトコはほとんどこのスレ一番のバカってことか? おー、強気やねー。単体とデバッグの区別もつかんくせに(爆
>>203 の開発手法
CD→UT→CD→UT→CD→UT→CD→UT→CD→UT→CD→UT→CD→UT→CD→UT→
CD→UT→CD→UT→CD→UT→CD→UT→CD→UT→CD→UT→CD→UT→CD→UT→
CD→UT→TO (CD:コーディング、UT:単体、TO:時間切れ)
>>202 > 理由も言えんとバカ呼ばわりとは、面白いのう。
最近こういうこという馬鹿が増えたね(ヤレヤレ
>>205 それってTDDだね。最後はTOじゃなくて"Finish"だがな。
ただいま、「ボキャブラリの貧困さ故に 煽りが園児の喧嘩レベルな方々」による 熱い議論をお送りしております。
オ マ ナ エ モ \
>>207 TDDなら最初は失敗するテストで始めないと
>>210 「そんな関数ありません」コンパイルエラーから、だろ?
まずはNUnitとJUnitを手に入れるところからだな。 それからCでコーディングっと。
どうせならxUnitコンプしる(w
テストコードを書くのもコーディングなわけだが。
TDDならどっちもどっち
テストコードにもデバッグが必要だったりして(w
またいつものように必死なやしがいるな。
またいつものように相手が一人だと妄想する馬鹿がいるな
221 :
仕様書無しさん :03/12/30 09:33
gotoを使うと
>>37 のようになってしまうのでgotoは使用禁止です。
どうです?今までで一番ナットクできる理由じゃありませんか?
>>221 そう言われると、おまえさんみたいになるよりはマシだと思う俺が居る。
が、俺も、また、だれかに俺のようになりたくないと突っ込まれるのだろうな。
分かってるなら書き込まなければいいのに
>>221 「ナットクできる理由」かも知れませんが「禁止関連はスレ違い」ですよ。
それに37が37であるのは、当然ながら、gotoを使ったからではありません。
>>221 224を見たら、221に対してさらに強く共感を覚えてしまった俺って。。。
よーし、じゃおじさん 今日から goto も if も 3項演算子も使わないぞ〜
>>225 いいえ。大変ノーマルだと思いますよ。
37はどこまでいっても37なんだし、単に共感を得るための発言もしませんからね、嫌う人が沢山出てきても全然不思議ではありません。
37も、好かれるためにいるのではなく、楽しむためにいるに過ぎませんから。
まずは、こんな置換から、 if ( a ) func1() ; else func2(); ↓ { void (*func[2])() = (func1, func2); func[a &1](); } これを引数付きで上手く表現できるマクロ書けないかな
処理はひとかたまり毎に手続化して変数は構造体メンバーにして void proc1(Treg * reg ) { reg->hoge = reg->hage*2;}; ... これら関数ポインタ配列で表現、 構造体メンバーには pc というのがあって メイン関数は while(reg.pc>=0) do proc[reg.pc](® ); ていうのはよく書くけどな。
ありゃ? &reg は ® に化けるのか。
それから 後の reg.pc は reg.pc++だ 。
® ©right &cr &right ©
なぜ、gotoを使わないのか? どんと来い! −−どんと来い!
お行きなさい
田宮®©カーグランプリ
237 :
仕様書無しさん :04/01/01 05:59
昨年はgoto肯定派の圧勝に終わったわけだが今年はどうかな? 安置ももっとがんばらないとgoto無限ループが終わってしまうぞww
>>237 目が悪いのか、頭が悪いのか。
どうやったらgoto肯定派が勝利したように読めるのですか?
神よ!どうか
>>237 をお救いください。
&って書くと&出る。
241 :
仕様書無しさん :04/01/01 19:24
ここって 極少数のgoto肯定派が大多数のgoto否定派に弄られて悦んでるスレ と理解しているが、なにか?
242 :
仕様書無しさん :04/01/01 19:40
>>241 まぁ、このスレでは考察するだけで、結論はスレタイに書いてあるからね。
「Cでgotoを使わない」理由を考察するスレ
>>241 初めて見る「理解」です。参考のために「どこからどこを読んでそのような理解に至ったか」を御教授願えますか。
244 :
仕様書無しさん :04/01/02 21:08
goto は無くても書けるから使わないんでしょ。 でもさ、for do 〜 while while の3つだって1つあればいいんだよね。 というか、 これら繰返文とgotoも無くたって再帰とcaseで書けと言われたら書けるし、 自分が良いと思ったら使ったらいいさ。 でも、チームでの仕事なら人を説得する手間が増えるかもな。 まあそんなゴチャゴチャ会議してる間に、どんどんコード書いてさっさと一人で仕上げてしまえ。 そしたら、そんな手間も不要さ。
gotoがあればうまくいく
>>245 =>247
いじめられにいらしたのですね?
ごくろうさまです...
きごうまちがえちゃいました。
>>245-247 いじめられにいらしたのですね?
ごくろうさまです...
なんだよオィ! だったら何か喋ってみろよ、ゴラァ! 肯定もクソもあるなら使うし、無いなら工夫するだけの事。 そんなクソの役にもたたん議論するより、 さっさとコード書いて小さな単位から書いては試験して仕上げてしまえってんだ。
いや
>あるなら使うし へぇ。近代兵器で武装した相手と戦う場合に、 自分にも近代兵器が与えられてるのに わざわざ「打製石器の斧があるから」という理由で イシオノ持って戦いに行くんだー。 漢だねぇ。
253 :
仕様書無しさん :04/01/03 22:30
254 :
仕様書無しさん :04/01/03 22:34
>>252 鉛筆を削るのにパトリオットが役に立つのか?
256 :
仕様書無しさん :04/01/03 22:57
>>252 近代兵器が抽象的で何を指すかわからない
gotoを石斧に例える理由がわからない
戦況が不明で最適な武器がわからない
============ ここからお得意の自作自演がはじまります ============
つまんねー煽り合いなんかやめてオナニーでもしろよ、餓鬼ども
260 :
仕様書無しさん :04/01/03 23:25
そういえばこの前第一エンジン停止で結局自爆した H2ロケットの姿勢制御のプログラムにはgotoが使われていたらしいね。
へ〜 へ〜 へ〜
すぐに高へ〜出すびびるウザ過ぎ
>>260 微妙にその話はおかいいな
"第一エンジン停止" ← 停止してない
"自爆" ← 自爆ではない
さすがに日本のロケット開発なんて超保守的な原始猿プログラムの話まで含めちゃ GOTO厨がかわいそうだ。 あんなの思考停止した一流気取りの奴らの溜まり場だろう?
なんかこのスレもレベル低くなったな… まぁ、新しい議題も出てこないし、もうネタも無いんだろうけどね。 目の悪い人or日本語が理解できない人がいっぱい居るのには笑えたけどwww これが冬厨ってやつなの?
37のレベルが低すぎるだけだろ。
下手な言葉遊びに終始しているし、
ちょっと手に負えなくなると「禁止はスレ違い」とか
すげー逃げをほざくし。
みんな気が付いてると思うが、
>>37 は他人の意見の
アゲアシとって暇つぶしをしているだけ。
相 手 す る だ け 時 間 の 無 駄 。
>>37 よ、一度でもいいから 自分の意見を書いてみろ(プ
というかこのスレでレベルの低くないレスって具体的にどれ?
Cでgotoを使わなかった。なぜか? 坊やだからさ
俺はどっちかって言うとgotoよりも2chからガンダムネタを永久追放したい。
「お前さんなかなかのgoto使いだが、日本じゃあ2番目だな。」 「何ぃ!じゃあ一番は誰だって言うんだ!」 男は、軽く口笛を鳴らすと、人指し指を3度振る。「ちっ、ちっ、ちっ」 その指で、深くかぶった黒いカウボーイハットを押し上げると、おもむろに親指で自分を指すと、ニヤリと笑った。 「この俺さ!」
その指で、深くかぶった黒いカウボーイハットを押し上げると、おもむろに親指で自分を指しニヤリと笑った。
その指で、深くかぶった黒いカウボーイハットを押し上げ、おもむろに親指で自分を指すと、ニヤリと笑った。
「お前さんなかなかのgoto使いだが、日本じゃあ2番目だな。」 「何ぃ!じゃあ一番は誰だって言うんだ!」 男は、軽く口笛を鳴らすと、人指し指を3度振る。「ちっ、ちっ、ちっ」 その指で、深くかぶった黒いカウボーイハットを押し上げ、おもむろに親指で自分を指すと、ニヤリと笑った。 「この俺さ!」
「お前さんなかなかのgoto使いだが、日本じゃあ2番目だな。」 「何ぃ!じゃあ一番は誰だって言うんだ!」 男は、軽く口笛を鳴らすと、右手のマラカスを3度振る。「ちゃっ、ちゃっ、ちゃっ」 その指で、深くかぶった黒いカウボーイハットを押し上げ、おもむろに親指で自分を指すと、ニヤリと笑った。 「この俺さ!」
>>268 ああ久しぶりにレスしたい書きこみが。
このスレしか読んでいないと
>
>>37 よ、一度でもいいから 自分の意見を書いてみろ(プ
の様に思われるのも無理はありません。
私の場合「自分の意見の書きこみ」はとりあえず一段落しているのです。
先頭スレ124と二番目スレ251が私のナンバーハンドルです。
全部読んでから
>みんな気が付いてると思うが、
>>37 は他人の意見の
>アゲアシとって暇つぶしをしているだけ。
という意見に変更があったならまたレスしてください。
というか、
> >みんな気が付いてると思うが、
>>37 は他人の意見の
> >アゲアシとって暇つぶしをしているだけ。
> という意見に変更があったならまたレスしてください。
じゃなくて、みんなが
>>37 の意見にアゲアシとって暇つぶししてるだけでしょ?
突っ込み入れやすい文章だもんね。
構造化プログラミングでは、まるで小説を読むかのごとく、上から1行1行、 順に読んでいけるコードが美しいとされる。 多くのプログラマが、変数名において、PREFIXやMFCの"m_xxx"に代表される ような命名規則や意味のわかる名前付けなどを駆使するのも、変数の型・ 用途・外部/内部等の情報を得るのに、いちいち前を読み返さなくても良い ようにする為の工夫である。 つまり行を飛ばすgotoは、構造化プログラミングでは美しいコードとは 認識されないようである。
続き... しかし、Cでgotoを使わない理由を考察すると同時に、Cでgotoがいまだ使える 理由も考察べきである。 関数内で多少のgotoを使用している場合は、その場でジャンプせず記憶して おいて、そのまま順々と読んでいき、ラベルが出た時点で読むことも可能 である。また、アセンブラやBASICでgoto(JMP)に慣れている人にはむしろ その方が読みやすいという状況もあるだろう。 つまり...お好きにどうぞっ! が俺の結論(w
#突っ込みが沢山来そうですが
>>281 私は「プログラムの美しさ」というものは理解できません。「プログラムの汚さ」なら理解できますが。
「いちいち前を読み返さなくても良いようにする為の工夫が、必要の無いコード」を書くべきです。
同様に「いちいち前や後をみて、飛び先ラベルを探さなければならないgotoの使用」は不適切ですね。
9分か・・・
>>282 ご意見ありがとう御座いました。
今度から「続き...」を後のレスの先頭につけるより、
前のレスの末尾に「続きあり」と書いていただけるとありがたいです。
>>284 ええ。書きこむ直前にリロードしなかった私が悪いんですけどね
>>285 >#突っ込みが沢山来そうですが
282は、そぉ思って入れたフォローだけどねwww
なぜプログラマ板なんだろう。 Cじゃないが、職業プログラマとしてgotoを一度だけ使ったことがある。 そのために、コーディング規約を変更して貰った。 今ではそのコミュニティに害毒を流した気がするが、 そのときはGOTOがエレガントだった。 下向きGOTOについてはそんなにシビアになる必要はないと思うが、 下向きでも多用すると可読性を損なうな。 といいつつ思い出したのは、エラー処理マクロでGOTOを使ったことがあった。 生産性は倍になったが、メンテナンス性は落ちたかもしれない。 可読性は損なわれてはいない。 立ってるものは親でも使えばいいんじゃないか。 GOTO使用不可ってのは「バカの壁」なのかもしれない。
。。。どこを縦読み?
じゃ の で の 向き 向き い 産 読 っ O
お前等、ソースを立てに四jから可読性がないんじゃ。
やはり日本人なら、ソースコードであっても縦書きしたいと思う
V 2 9 2 || の 縦 書 き フ ォ ン ト が 無 い か ら 駄 目 。
オレは何時もナナメに読んでます。
goto out2; out1: goto out3; out2: goto out1; out3; goto out2;
>>287 最後の結論にだけコメントします。馬鹿の壁って養老タケシ氏の語り活字化本のことですね。
「goto使用に対する理解が不充分であるからgoto使用不可というルールが出来てしまう」
ということで間違い無いですか。
ならば支持します。
どうも前スレを読むのに現在、金がかかるようになっているので、私自身も読めません。前スレに書いた私の
レスを別の書き方で書いてみます。#「繰り返すな」という突っ込みは御勘弁。
「gotoが誤用されているから保守不能になっているとされるプログラム」について、
保守不能である本当の理由は、「gotoが誤用されているから」ではない。
「関数が長すぎるから」換言すれば「正しく構造化プログラム設計されていないから」である。
>>296 現場でテンパッテる奴にそれ言ってみなよ。ヌッコロサレルのがオチ。
フト思いついたんだが 名前が固定→コテハン ならば 名前が番号→バンゴハン でつか?
_, ,_ パーン
( ‘д‘)
⊂彡☆))Д´)
>>298
>>297 そんなおっかないことしませんよ。「再実装の作業計画をたてるから、保守作業を中断しろ」の指示をつけるなら別ですけどね。
テンパってるやつには何を言ってもヌッコロされるだろうね。 んでもって、テンパるような状況に追い込まれる方が悪いというのは正論だ。
gotoの御用聞き
禁止されているからに決まっている
昔、ダイクストラが「これいいことねーよ」っていったのが、 「おぉー」となり、だんだん「やめよーよ」ってなっていったが、 そういう意見に賛成する流れん中でCが作られたから。 Cは原則としてそういう意見に賛成してるってゆーこと。 (たまたま見つけたんで書いたけど、この手の既出だろーね。すまんね。)
「原則として認めない」とは、禁止では無いなり
308 :
37(スカトロマニア) :04/01/09 18:53
あややのうんこは臭くないので食べても害は無いということですか。 ならば支持します。
>>307 だね。「原則」だからCにはgotoもつかえるように用意はされてる。
でも、基本的に「常用・多用するとわけわからんくなるから、使用はそれほどすすめない」
的な意識で解説されてるものが圧倒的におおい。(というか殆どじゃないか?)
「gotoを廃してわかりやすく書こうぜ」っていういわゆる「構造化プログラミング」の
パラダイムにCは明らかにあるってことだな。そういうイデオロギー持ってるってことだ。
使わない理由は「誤用するのでわけわからんくなるから」
gotoのすばらしい使い方を見出さないとこのスレの意味もないな。 goto禁止なんて、今の管理者や経営者が新人のころから言われてて いまさら原則禁止などど言っててもつまらな過ぎる。
Cのgotoはサポートを打ち切る前の猶予として入ってるだけだろ? gotoなんぞ使っているとJavaやC#で書けなくなる。
>>312 新鮮な視点ですね
とりあえず事実の指摘から。手続き型言語でgotoを備えていないのはjava(c#の事は知りません)のような
ごく最近の言語だけです。gotoは手続き型言語のほとんどすべてに、その歴史の始まりから備わっています。
そして、既存のソースの資産価値を守るという意味で、言語仕様の一部がサポートされなくなることは(絶対とは言いませんが)ありません
そして
>>45 も参照どうぞ
ほんとかよ。
最近の言語を含めないとしても、「高級」に分類される言語(アセンブラや擬似コードでない)で
gotoが含まれる言語ってそんなに多いか?たとえ手続き型に限定したとしてもだ。
とりあえず、
>>37 はソースを示してくれ。
あぁ、「そんなに多いか?」ってのは、そうでない言語に比べて、な。 マイナーメジャーとかアホくさいというなよ?
37は 話のすり替え を使った! しかし ななしさんには きいていない! 言語レベルでgoto禁止言語が増えてきていると言っているのに 何故にCのgotoが無くならないから大丈夫という話になるのか。
318 :
仕様書無しさん :04/01/10 22:23
37は K&RのCを読んだことがないようだな
37は つかはらの日本史も読んだ事がないようだな
>>314 ソースと言われてもねえ。
gotoを備えていないことを知っている言語はjava(c#もそうなんですか?)だけですしねえ。
私の知識が狭いだけかも知れないので、逆に他の「gotoが無い手続き型言語」をいくつか挙げてもらえれば
「嘘書いてゴメン」とレスしますが。
>>318 K&R、読んだことありますよ。第一版だけですが。もちろんもう手元にはありません。
やはり
>>37 はつかはらの日本史は読んだ事がないらしいな。
都合の悪い事にはレスしないのが
>>37 流だからな。
>>321 別に「都合の悪い事」だからレスしないわけじゃなくて、「スレテーマとは無関係」だと思ったから無視しただけですよ。
関係があるなら、少しは説明して欲しいですね。同種のレスが来るたびに調べるのはいやだし。
レスを読んだが、どう考えても
>>314 より
>>37 の方が
数段上手のような気が・・・
>>314 >>37 の言うとおり、
>>314 が知っている手続き型言語をリストアップ
してみな。それくらい出来るだろ?
あとはこのスレの連中がその言語が goto を含んでいるか否かを
判別してやるからさ。
322 名前:37 :04/01/11 16:53 ID:eT4VZRqf
>>321 別に「都合の悪い事」だからレスしないわけじゃなくて、「スレテーマとは無関係」だと思ったから無視しただけですよ。
関係があるなら、少しは説明して欲しいですね。同種のレスが来るたびに調べるのはいやだし。
323 名前:仕様書無しさん :04/01/11 21:26 ID:eT4VZRqf
レスを読んだが、どう考えても
>>314 より
>>37 の方が
数段上手のような気が・・・
>>314 >>37 の言うとおり、
>>314 が知っている手続き型言語をリストアップ
してみな。それくらい出来るだろ?
あとはこのスレの連中がその言語が goto を含んでいるか否かを
判別してやるからさ。
324 名前:37 :04/01/11 21:29 ID:eT4VZRqf
>>323 Java, C#, VB
自分に都合の悪い書き込みは全てたった一人の仕業に見えてくるのは何故だろう。 広い世の中、同じようなことを考える馬鹿が100人いたとしてもおかしくないのに・・・
もまえらのやっている事は全部まるgotoお見通しだ!
ついでに、Cには割り当て形GO TO文がない理由も考察していただけないでしょうか? 動的に飛び先を変更できないのはすごく不便だと思います。
>>323 そういうなら自分で列挙してみたら?
簡単なんでしょ?
ってゆーかさ、gotoを使わないだろ、通常
ってゆーかさ、gotoを使うだろ、通常
通常gotoを使うのは戻る意志がないからで、 関数ポインタは本意ではありません。
>>37 はおとなくしアセンブラ開発に専念してれば不毛な争いが起こらなくていいと思います。
>>336 はあ。なるほど。しかし「分岐先を動的に変更する」というのはcではほかに方法がないような・・・
「変数にラベルを何通りかにアサインして、その変数の示すラベルに分岐する」というのは、
いにしえの(fortranのような)非構造化言語にありましたが、現在の構造化言語規格にそれを望むのは
無理ではないでしょうか。cも例外ではないと思いますよ。
>>337 gotoを使う使わないは人によってそれぞれです。使う人は使わない人に「使え」と強制なぞしません。
しかし「使わない人が使う人に『使うな』との発言をする」のが散見されます。この種の発言は
「goto禁止が規約になっている開発現場での発言」なら妥当ですが、ここでは「スレ違い」だという主張を
しているだけです。つまり「禁止関連はスレ違い」です。この主張に反論があればどうぞ。
もっと根源的な視点から言うと、「goto論争は不毛な論争」です。
論争に参加することにより、「参加者がプログラミングについて考える」という利点があるのみです。
switch?
>>338 もっと根源的な視点から言うと、君の
>>337 へのコメントのようなメタ議論は不毛な論争だよ。
>>338 > はあ。なるほど。しかし「分岐先を動的に変更する」というのはcではほかに方法がないような・・・
はぁ?
>>338 事前に関数アドレス配列に用意しておいて、その配列の添え字を「何らかの計算」して呼び分けるって事か?
でも呼び元に戻ってくるぞ?てのが
>>336 ifとか使うしか無いのでわ?てのが
>>329 ,339
そんな分岐するgotoが必要な糞コードつくるんぢゃねーよってのが漏れの意見
産業排水を垂れ流す垂れ流さないは工場によってそれぞれです。垂れ流す工場は垂れ流さない工場に「垂れ流せ」と強制なぞしません。 しかし「垂れ流さない工場が垂れ流す工場に『垂れ流すな』との発言をする」のが散見されます。この種の発言は 「産業排水の垂れ流しが法律になっている国での発言」なら妥当ですが、ここでは「スレ違い」だという主張を しているだけです。つまり「垂れ流し関連はスレ違い」です。この主張に反論があればどうぞ。 天然公害goto厨氏ねや
あるのに使わない理由なんて好き嫌いか、そうじゃなきゃダメって禁止されたらそれっきりのお子様でしかないさ。 他人の好みにチャチャ入れる奴も、大抵はお子様だしな。 それでも、このスレが続くってのは、 結局 java厨がコード盗めないからダダこねてるって事かい?
>>342 職業としてのPGに限定すれば、妥当な「漏れの意見」だと思います。
ただ「『プログラミングを仕事として行っているわけではないという人の存在』も認めるべき」だと思いますが。
>>343 ×「垂れ流し関連はスレ違い」
○「垂れ流し禁止関連はスレ違い」
「goto≡産業排水」ですか。
(繰り返しになりますが)「gotoは無条件に有害。gotoを使用すればプログラムの解析性は低下する。例外は無い」と思っておられるわけですね。
gotoを使う人(少なくとも私)は、そう思っていません。ここに至るとこれは「主観の問題」となります。
主観が違うからと言って相手を公害呼ばわりするのは狭量極まりないですね。
>>344 基本的に同意。
ただgoto論争が続く理由は、「初級者の頃に『gotoは無条件有害であるとの刷り込み』がなされるからではないか」と考えています。
#「都合の悪い事にはレスしない」との批判に応える意味で、沢山レスしたけど少し疲れてきたな・・・
#やはり「レスするに足りるレスにだけレス」することにするぞ。
>ただ「『プログラミングを仕事として行っているわけではないという人の存在』も認めるべき」だと思いますが。 なんだ、素人か。
>>346 素人が存在するから、玄人も存在する。素人の存在を認めない玄人ってなんだ。
>>345 あのねぇ、何度も書くけどもはや君のやってるのは「goto論争」じゃなくて、「goto論争に関するメタ議論」
なんだよ。君がそれを続けたけりゃ続けてもいいけどね。ただしおそろしく不毛だが。
>>345 都合の悪いことにもレスするんなら、
>>332 >分岐先を複数箇所に変更したいときには、通常cでは関数ポインタの配列を使用します
みたいなアホなこと言ったことに決着つけろよ。つまり君の思考能力に対しての批判に
レスしろということだ。
>>338 > gotoを使う使わないは人によってそれぞれです。使う人は使わない人に「使え」と強制なぞしません。
> しかし「使わない人が使う人に『使うな』との発言をする」のが散見されます。この種の発言は
> 「goto禁止が規約になっている開発現場での発言」なら妥当ですが、ここでは「スレ違い」だという主張を
> しているだけです。つまり「禁止関連はスレ違い」です。この主張に反論があればどうぞ。
スレ違いじゃないでしょ。
「Cでgotoを使うとこのようなデメリットがあるから使うべきではない」
これのどこがスレ違いなんだ?
それに、「gotoを使うなと強制するな」と同じロジックで「gotoを使うなと言うなと強制するな」と言えるよね。
>>345 > gotoを使う人(少なくとも私)は、そう思っていません。ここに至るとこれは「主観の問題」となります。
人の意見に反対するのに、そう思わないから「主観の問題」としてしまうのはどうかと思うぞ。
そう思わないからと反対すれば、37の意見も「主観の問題」になる。
Xについては主観の問題(個人的な好き嫌い問題)なのに、 Xがキライを押し付ける言い方をする=個人の尊厳を冒す行為だという事でしょう。
書こうと思えば、goto だけじゃなく if 3項演算子、case を使わないでも書ける。 そんなコードを実際必要が生じて書いた事もあるよ。 理由は実行時間を一定にする為だ。 でもさ、そんな理由なく、それらを禁止するのって馬鹿だと思うだろ?
>>348 確かにそうです。不毛ですよ。
そしてgoto論争自体も不毛です。
「有意義な成果を得られる」と思っているのですか
>>349 どんなに複雑な条件であっても、内部コードを格納する変数を設ければ、
分岐自体はフラットになり、ifだろうがswitchだろうがスッキリ書けます。
#「条件群→内部コード」変換には、決定表を持つのが良い方法です
ですが
>>328 の求めていることはそういううことでは無いことを理解していますか?
ある人が「このように書きたい」とレスしたときに、「そんなんじゃ駄目だ。こう書けという」のと、
「似た書き方としてこのように書けますという」。の二者の違いだけがあるだけです。
さらに書くなら、「実装には多種多様な方法がある」という前提に気がついていますか?
>>350 「Cでgotoを使うとこのようなデメリットがある」はスレに沿った発言です。ですが
「Cでgotoを使うとこのようなデメリットがあるから使うべきではない」 はスレ違いです。
違いが判りますか?。すべての要素技術は、その欠片に至るまで、メリットとデメリットの双方を出して論争するのが正しいでしょう。
「使うべきではない」と短兵急に断言するなら、その人は「論争するつもりが無い」と判断されても仕方がありません。
ひいては何故このスレに書きこむのかも理解できませんね。
最後の文の「」の中はめったに見ない三重否定ですね。私の理解力の限界だと思いますが、よく理解できません。
「gotoを使うなと言うな」これは確かに言いました。そしてお互いにそうですがいかなる意味でも「強制」なぞ出来ません
事実を一つ指摘します。「なぜ使うべきではないか」という理由に、今に至るも論理的な理由を示している人はいないのです。
「解析性が低下するから」という理由はありました。しかし「なぜ常に解析性が低下するか」を論理的に説明した人はいません。
「規約だから」とか「法則だから」という理由もありました。しかしこれは単なる決まり事であって、論理的な理由ではありません。
特に後者を理由として掲げる人は思考停止に陥っていると判断しています。
#ああ疲れた。次々に新しい人が参加するからきりがないよ。
>>349 みたいに枝葉末節に拘る人もいるし。
#「都合の悪い事にもレスしろ」って書いてあるレスにもレスしたいのはやまやまだけど・・・。もう少し考えてからレスして欲しいよ
関数ポインタ使う方法って、大量にあると関数呼び出し/戻りの コストが気にならない? switch以外にjmpテーブルのコード生成ができればいいんだけど。 gccのラベルの仕様が標準で欲しいと思った。
>>351 「すべてが主観の問題である」とは言っていません。「プログラムのわかりやすさというものは主観の問題である」と言っています
私は「主観の問題である」と表明した。あなたは「主観の問題ではない」と表明した。
ならば、あなたは「どのような問題であるかを表明する必要がある」と思いますが。どうですか
>>356 #わき道ですが、良いレスをありがとう御座います。
>関数ポインタ使う方法って、大量にあると関数呼び出し/戻りのコストが気にならない?
ええ確かに。「その種のコストが無視出来るような情況で・・・」です
>switch以外にjmpテーブルのコード生成ができればいいんだけど。
はい。展開コードで確認するしか方法が無いのが現状でしょう。マニュアルにその種のことが書いてある例はみたこと無いです。
>gccのラベルの仕様が標準で欲しいと思った。
まあその種の要望が存在するからgccもそういう拡張をしているのでしょうね。ですが
>>338 にも書きましたが言語規格としては無理かなと思います
>>345 『プログラミングを仕事として行っているわけではないという人』
ならなおさら分岐するgotoが必要な糞コードつくるんぢゃねーよ
普通につくれ普通に
359 :
仕様書無しさん :04/01/13 19:47
結局、動的に飛び先を変更する機能がない理由は 解明されないってことか。 素人がどうのと脇道にそれちまったし。 冗長に書くことが良いとされる分かりやすさや堅牢性の尺度と 極限までのチューニングを求める尺度。 色んな使い方があるんだから、 一方的な押し付けや切捨ては止めて欲しいな。
>>358 「普通」ってのは最高難度。素人さんには無理
せめてfinallyさえあればだいぶ可読性あがるんだけどな。 try{ return; }finally{ // ここ通る。 } 例外処理はないけどfinallyのある言語ってないのかね。
いちいちtry書いたりブロックで囲むのは嫌だよな。 finaly: expr1; finaly: expr2; finaly: expr3; : みたいなのでいいよ。
>>355 >最後の文の「」の中はめったに見ない三重否定ですね。私の理解力の限界だと思いますが、よく理解できません。
三重否定じゃないよ。
>>350 >それに、「gotoを使うなと強制するな」と同じロジックで「gotoを使うなと言うなと強制するな」と言えるよね。
「gotoを使うなというな」というのは君。
そしてそれを強制するなと他人が君に言うのだ。
>>355 > 「Cでgotoを使うとこのようなデメリットがある」はスレに沿った発言です。ですが
> 「Cでgotoを使うとこのようなデメリットがあるから使うべきではない」 はスレ違いです。
違いはわかるが何でスレ違いなんだ?
なぜ君がスレの趣旨を規定するんだ?
>>365 世界は
>>37 を中心として回っていると思っているからさ
そうじゃなきゃいまどきgoto(ry
保守できりゃなんだっていいよ。
>>357 > 「すべてが主観の問題である」とは言っていません。「プログラムのわかりやすさというものは主観の問題である」と言っています
> 私は「主観の問題である」と表明した。あなたは「主観の問題ではない」と表明した。
> ならば、あなたは「どのような問題であるかを表明する必要がある」と思いますが。どうですか
主観の問題ではないのであれば、それは普通、客観の問題でしょう。
で、客観的にはプログラムのわかりやすさというものは測れないというのが君の主張なんだから、
351が何かを言ったとしても、それ以上議論は発展しない。
それなのになぜ「必要がある」のでしょうか?
それに351は君が読みそう読んだようなことは書いてないと思うし。
>>354 > どんなに複雑な条件であっても、内部コードを格納する変数を設ければ、
> 分岐自体はフラットになり、ifだろうがswitchだろうがスッキリ書けます。
> #「条件群→内部コード」変換には、決定表を持つのが良い方法です
> ですが
>>328 の求めていることはそういううことでは無いことを理解していますか?
理解していますかって、俺の方が言いたいね。
つーか、君、
・自分の書いたこと理解できてる?
・覚えてる?
・首尾一貫した発言をしていると思ってる?
・間違いは無いとでも思ってる?
>>355 > 「使うべきではない」と短兵急に断言するなら、その人は「論争するつもりが無い」と判断されても仕方がありません。
> ひいては何故このスレに書きこむのかも理解できませんね。
その「デメリット」がデメリットではないことを示すか、デメリットではあるが、それを上回る別の
メリットがあることを示せば、議論になるが。
思考停止してるのは君のほうじゃないの?
371 :
仕様書無しさん :04/01/14 01:25
>>368 さんとか
>>370 さんの言うとおりだと思う.
>>355 > 事実を一つ指摘します。「なぜ使うべきではないか」という理由に、今に至るも論理的な理由を示している人はいないのです。
>「解析性が低下するから」という理由はありました。しかし「なぜ常に解析性が低下するか」を論理的に説明した人はいません。
んでも,goto 使わずに構造化した方がスッキリすることが多いのは事実なわけで.
このスレから参加したので,できれば
>>37 さんがなぜ
「goto を使うなというな」って主張するのか知りたい.
37の書き込みって、人が何か書き込まずにいられなくさせるようなモノが必ず含まれてるよね。 ワザとでしょ? ギロンする気なんて全然無くって、ただ反応を見て、だらだらと書き込みを続けて楽しんでる だけでしょ? 相手するほうもするほうだけど。 (つーか、俺も俺だけど)
「goto を使うな」= 俺がキライな書き方を俺の目の前で使うな 「goto を使うなというな」 = 俺に押し付けをするな どっちも、俺中心って事じゃないの?
「goto 使わずに構造化した方がスッキリすることが多いのは事実」 どうして事実なのよ? goto 使わずに構造化した方がスッキリするような所で goto は使わないでしょ? ただし、 手続化、条件分岐・繰り返し命令で書いた方がスッキリしたと感じるのは個人差がある。 短いコードの方が好ましいと感じる人もいるし 判り易いコードの方が好ましいと感じる人もいる gotoを使うなという条件が与えられたらgotoを使わないで書くのは簡単な人でも、gotoがあるなら使うだけ。
>>371 >
>>355 > >しかし「なぜ常に解析性が低下するか」を論理的に説明した人はいません。
>んでも,goto 使わずに構造化した方がスッキリすることが多いのは事実なわけで.
AHO
反論なら更なる反論で返すことも出来るけど、単に「反対」としか書いてないと、
どうレスして良いものやら・・・
>>360 >結局、動的に飛び先を変更する機能がない理由は解明されないってことか。
元来、存在しない機能ですからね。特定の言語処理系にその機能があるからといって言語規格に
反映されることが常にあるわけではないです。なぜ無いかの私見を書いてみます。
この機能はgotoの拡張だからです。cの構造化言語としてのgotoについての方向性は、breakやcontinueという
文によってgotoの機能の限定化することです。つまり「方向性が逆であるから」だと思いますよ。
>>364 >>365 私は「禁止関連はスレ違い」との主張をしているだけですよ。私の主張に反対なら反論なさればよいでしょう。レスの内容がズレていますか?
>>368 「主観の問題」と「客観の問題」という認識の違いが存在するなら、それは議論の対象となります。
ただし、「客観の問題」であると主張する人が存在するなら、プログラムのわかりやすさを定量化する尺度を
提示していただかなくてはなりません。その尺度の正当性について論じることにより、
「主観の問題」であるか「客観の問題」であるかの判断が可能となります。間違っていますか?。
>>370 「議論したいのなら禁止を言うべきではない」と考えます。議論したいのなら、どうぞしてください
>>371 >んでも,goto 使わずに構造化した方がスッキリすることが多いのは事実なわけで.
>このスレから参加したので,できれば
>>37 さんがなぜ
>「goto を使うなというな」って主張するのか知りたい.
はい。ご指摘のとおりです。「構造化した方がスッキリすることが多い」は正論です。これも主観の問題
ですが。スッキリについての主観は一致しています(昔は一致していない人がいたのですが)
問題は「多い」というところでして、いみじくも正しい表現です。逆に表現してみます。
「構造化した方がスッキリしない場合が存在する」
つまり「すべての場合において構造化することが最善であるわけではない」
その様に思っている開発担当者が「gotoを使う方がスッキリする」と判断した場合、gotoを使うべきです。
これがgotoについての私の主張。もちろん規約の問題は別です。
gotoを使う/使わないがスレテーマです。gotoを禁止する/禁止しないがスレテーマではありません。
禁止論議は議論内容が空虚になります。これは前の2スレを見れば首肯してもらえるはずですが。
また「なぜgotoを使うべきで無いか」の理由として「規則だから」という倒錯した理由を掲げる人も出ます。
匿名掲示板で何ら強制力を持たないgoto使用禁止を決定したとて何の意味もありません。
また逆にgoto使用制限撤廃を決定したとて同様に何の意味もありません。御理解いただけましたか。
>>372 ワザとではないんですが・・・・
>ギロンする気なんて全然無くって、ただ反応を見て、だらだらと書き込みを続けて楽しんでるだけでしょ?
その様に受け取られるのも詮無い事です。ですが2スレを使用して沢山議論しました。
やっと「cでgotoを使用しない理由は存在しない」という結論に到達したと思ったら、
議論をまた最初から始める人がいて・・・。「終わった議論を蒸し返してほしくない」と主張しています。
また個人的にも繰り返しに飽きているところです。
「消えろ」とのレスがあればReadOnlyになる心境になっていますよ。背中を押してほしい。
#リクエストがあれば復帰しますけど
>>373 匿名掲示板では何を言われても「押し付け」などとは感じません。
上記371へのレスを参照してください。
>>374 総論支持
>>37 一つだけ忠告しておくよ。
ここであんたの主張を繰り返せば繰り返すほど
まわりの奴はgotoとgotoを使う人間とgotoを使うなと言うなという人間を嫌いになっていく。
gotoが人間の記憶から忘れ去られるほどの未来にならなければ
goto嫌いはなくならないだろうな。
>>379 まぁ、それだけの理由でgoto嫌いになって仕事の内容にまで影響するとしたら
そいつはバカなわけだが。
>>379 ご忠告ありがとう。
しかしながら誰が誰を(あるいは何を)嫌いになるかに関心はありません
論理でなく好悪で判断を行うなら「どうぞ御自由に」です
>>380 そうですね
>>376 >この機能はgotoの拡張だからです。cの構造化言語としてのgotoについての方向性は、breakやcontinueという
>文によってgotoの機能の限定化することです。つまり「方向性が逆であるから」だと思いますよ。
創造性に欠けるなあ。
>>376 > 「主観の問題」と「客観の問題」という認識の違いが存在するなら、それは議論の対象となります。
> ただし、「客観の問題」であると主張する人が存在するなら、プログラムのわかりやすさを定量化する尺度を
> 提示していただかなくてはなりません。その尺度の正当性について論じることにより、
> 「主観の問題」であるか「客観の問題」であるかの判断が可能となります。間違っていますか?。
「主観」か「客観」かだけが論点だということかな?
論点をずらさないでくれるかな。
君は「主観である」という主張なんだろ?だから「客観である」という主張とはそもそも
噛み合わないでしょ。それともアレかな。反論をしたいということかな。
>
>>370 > 「議論したいのなら禁止を言うべきではない」と考えます。議論したいのなら、どうぞしてください
この文章が370へのコメントというのが信じられないんだが。
番号間違えてないか?
384 :
仕様書無しさん :04/01/14 23:59
>>374 >>「goto 使わずに構造化した方がスッキリすることが多いのは事実」
>どうして事実なのよ?
>goto 使わずに構造化した方がスッキリするような所で goto は使わないでしょ?
コード化されていない処理をコードにする場合,
構造化するか, goto で処理を遷移させるかを選ぶならば,
たいていの場合,構造化を選択したほうが綺麗にコードが書けるだろうということだったのです.
言葉足らず過ぎましたね.すみません.
>>374 さんのおっしゃるとおり,コードの内容,
例えばエラー処理へ移行する場合や多重ループから脱出する際などには,
goto の使用もありだと思います.
>>73 >つまり「すべての場合において構造化することが最善であるわけではない」
>その様に思っている開発担当者が「gotoを使う方がスッキリする」と判断した場合、gotoを使うべきです。
正論だと思います.開発者が一人の場合や,同じようなプログラミングスタイルを
持っている場合などでは,goto を使っても問題ないでしょう.
384=371 です. 個人的に goto 論争は「違うプログラミングスタイルを持つ開発者が共同開発を行う」ような状況において, 開発者が自分のスタイルで goto を使うことは, 共同開発者に対して,無用の混乱を招くだけではないのか? また,goto を利用するとするならば,どのような状況において使用すれば, 開発グループ内で可読性のあるコードを維持することができるか, について論じられているものだと思っていたのです. ここでは「C 言語で goto を使うこと」についてのスレだったのですね. ってスレタイにもそう書いてあるし……. そういうことであれば,主観にしたがって思うままに goto を使えばよいと思います. スレ違いだったようです.お手数をおかけしてすみませんでした.
386 :
仕様書無しさん :04/01/15 00:00
結局 Cでgotoをうまく使えない奴が「禁止だ禁止だ」って事だろ? 無理矢理使うモンぢゃなくて、多重ループから脱出するなどにしか使わないのにな そーゆー事も理解できねぇんだ(w
Cでgotoをうまく使えない奴 = 正常 Cでgotoをうまく使えると思っている奴 = 異常 人間が扱うには泥臭すぎる。それがgotoだと知れ。
泥臭いって・・・・PICのgotoじゃあるまいし
正常とか異常って、お前はアホですか?>388 保守できるレベルならなんでもいいんだよ。 ループもネストさせてフラグなんかに頼ると読めなくなると同じ事だし。
C言語をうまく使えない(と思っている)奴 = 正常 C言語をうまく使えると思っている奴 = 異常 日々精進ですよ。
芸や技の道じゃあるまいし どんな道具でも必要に応じて使えればそれでいいさ。
>>387 全く同意するが、前スレだかで「Cのコメントを除去するコード」でgotoを使いまくった
コードを提示して、それが「保守性が高い」だの「可読性が高い」だの言い出す奴が
いるから困るんだよね。またおそらくそいつは、そのコードがエレガントだと思ってる
に違いない。
だから俺はgoto使う派だけど、無条件にチームメンバーに「goto使っていいよ」と言う
気になれないんだよね。
どこかで誰かがこんなこと言ってたな。
まず自由にgotoを使え。
次にgotoを使わないことを覚えよ。
最後にgotoを使うべきところで使え。
ちなみに俺は俺の課内のコーディング規約を書いているんだけど、Cのプロダクトでは 1. 多重ループからの脱出 2. ローカルリソースの解放をともなう異常処理ブロックへのジャンプ ではgotoを使っても良いことにしてる。 C++では2は、大抵設計が悪いので、基本的には1だけOKにしてる。
395 :
仕様書無しさん :04/01/15 20:08
1.多重ループからの脱出 これも 設計が糞の可能性がたかいな
ところでさ、設計がクソクソいう奴がマトモなもの作ったの オレは見た事ないんだが これってどいう事なんだろね?
カキコする人間のキャリアがもろに出てオモロいスレだ。 >多重ループからの脱出は設計が糞。 は 多重ループが存在するのは設計が悪いと言ってるのか? 普通にあるだろ。 データ構造が悪いのか? 対象の構造がそうであればしかたがない。 フラグだらけで、1週間後に見たとき訳がわからなくなるより gotoをお勧めする。
>>396 * 優れた批評家が優れた作家である必要はないと言うこと。
* 現場に批評家はいらないと言うこと。
>>398 優れた作家希望。
優れた作家はgotoを使用するとエレガントになるような設計はしない。
優れた作家はgotoの使用がエレガントで無様な代替手段を選択しようとは誰も思わない作品を作る。
優れた作家は上のどちらも自由に設計できるので、そもそもこんなスレには居ない。
あまりにも優れた作家は時代を超越してるので、そのよさが誰にも分からず、実装されることはない。
そこそこ普通の作家はそこそこ普通の設計をし、誰にでもつまらない思いの対価を簡単に受け取れるような作品を書く。
駄目な作家は作品を見ても駄目なんで、当然実装されない。
あまりにも優れていても駄目でも同じ憂き目にあうと。
過ぎたるは奈央及川ばざるが如し。
>>382 「貧困な想像力」という批判なら甘んじて受けます。
>>383 「わかりやすさ」がgoto使用についての最重要な論点だと認識しています。
これが主観なのか客観なのかはとても重要です。確かに私は「主観である」と表明しています。
そして「客観であると表明している人はまだいない」と認識しています。
「私が論点をずらしている」と考えているならば、「あなたが何が最重要な論点だと思っているのか」を
記述してください
>この文章が370へのコメントというのが信じられないんだが。
>番号間違えてないか?
私が舌足らずでしたね。370は「議論になる」という主張です。
「禁止を言うと良くない」という老婆心からの発言が一つ。
そして(その議論はもう終わっていて私は繰り返したくないので)「ご自由にどうぞ」との発言が一つです。
>>384 どうもありがとう
>>385 >個人的に goto 論争は「違うプログラミングスタイルを持つ開発者が共同開発を行う」ような状況において,
>開発者が自分のスタイルで goto を使うことは,
>共同開発者に対して,無用の混乱を招くだけではないのか?
>また,goto を利用するとするならば,どのような状況において使用すれば,
>開発グループ内で可読性のあるコードを維持することができるか,
>について論じられているものだと思っていたのです.
はい。私もそのようなスレになれば良いと思っています。同様な主旨で
>>166 の末尾にもそう書きました。
ですが
>>377 の後半にも書きましたが、いつまで経っても終わった話題を蒸し返す人が参入するのです。
匿名掲示板という特質上、これは避けられない事態だと、もう諦めています。
>スレ違いだったようです.お手数をおかけしてすみませんでした.
いいえ。スレ違いでは無いと思いますよ。
>>371 のようなレスはとても上質なレスだと思います。
ありがとうございました。
>>393 ああ。それは私です。正確には先頭スレの699(と700)です。
有限状態遷移の表現を行う場合、(ある程度以下の規模なら)状態遷移図をそのままコード化します。
構造化されたコードと見比べて、「gotoを使いまくったコード」が一番わかりやすいと表明した人が、
私以外にもいたという事実を追記させてください。
い つ ま で 経 っ て も 終 わ っ た 話 題 を 蒸 し 返 す 人 が 参 入 す る の で す。 誰の事だか考えてみた事ありますか?
私?(文脈から考えるとそうなるよーな)
私は「具体的に指摘してくれないと判らない」人間ですよ。記憶力がとても悪いので。
>>183 みたいに具体的に指摘してくれないと。
>>401 >有限状態遷移の表現を行う場合、(ある程度以下の規模なら)状態遷移図をそのままコード化します。
そうか? 表をそのまま関数ポインタの配列で表現するだろ、人間に分かりやすいし。
gotoを使いまくったものがわかりやすい、とは思わんなぁ。
>>404 >そうか? 表をそのまま関数ポインタの配列で表現するだろ、人間に分かりやすいし。
うーん。「表をそのまま関数ポインタの配列で表現する」って理解できません。
>405 は人間ではないので...
409 :
仕様書無しさん :04/01/16 08:15
そうか 状態遷移図から状態遷移表を作る作業を手抜きしたのね 状態遷移図のままプログラムをつくると gotoがないとどうしようもないな
手抜きというか、その方が仕様変更にも強いし、やっぱり速く結果が出せるからね。 それと遷移表まで作ったら、いっそ関数ポインタよりデータテーブルにした方がいいじゃない。 今の環境だとデータ表の方が関数ポインタより高速実行出来るでしょ。
412 :
仕様書無しさん :04/01/16 18:57
410へ 一ヶ月くらい仕事せずに ゆっくり温泉にでもつかってこい
>>404 の職種は技術系じゃねーな。
聞きかじりで理解してないこと書いててみっともねーぞ。
40代後半くらいか?
>>401 > はい。私もそのようなスレになれば良いと思っています。同様な主旨で
>>166 の末尾にもそう書きました。
なるほど,そうでしたか.
>>166 を読みこぼしていました.
>>スレ違いだったようです.お手数をおかけしてすみませんでした.
> いいえ。スレ違いでは無いと思いますよ。
>>371 のようなレスはとても上質なレスだと思います。
どうもです.そう言ってもらえてありがたいです.
>有限状態遷移の表現を行う場合、(ある程度以下の規模なら)状態遷移図をそのままコード化します。
この方法だと分岐のための if 文が大量に発生しませんか?
状態が 10 個あれば,最低,10 通りの分岐条件とそれに対する goto 文が必要です.
分岐先の決定を各状態ごとに関数化しようと試みても,
直接 goto で遷移するような書き方ではそれもできません.
結果,一つの関数が肥大化すると思うのですが…….
goto での状態遷移はやったことないので,説明してくださるとありがたいです.
>>404 >そうか? 表をそのまま関数ポインタの配列で表現するだろ、人間に分かりやすいし。
状態遷移表をそのまま関数ポインタの配列で表現することは現実的だと思いません.
状態数 10 で入力が 10 なら 10 × 10 の大きさを持つ表が必要です.
ある程度以下の規模って条件で話進められてるけれど,
3 × 2 みたいな大きさの状態遷移を思い浮かべてないよね(w
状態を示す変数をもってswitch,でイベントループ風にしないか? 状態遷移をgotoって、フローチャートじゃあるまいし。メンテ性悪すぎ。
>結果,一つの関数が肥大化すると思うのですが……. 肥大化するようなら別の方法を取るべきなんでは? なにも状態遷移すべてをgotoで書けといっているわけではないし。 まぁ、使うべきところがそんなに多くはないだろう事は認める。 字句解析とかなんかだと使ったほうがすっきりするかもね(複雑さによるけど)。
>状態数 10 で入力が 10 なら 10 × 10 の大きさを持つ表が必要です. それに何か問題が?
今日仕事でgotoを使いたいと思った場面にでくわした。C++で。 実際そうコーディングしたら、最初のgotoからラベルまでの間に初期化を伴う 変数定義ができないことがわかった。 もちろんgotoを使うのやめたよ。 gotoはCだけにしかなじまないね。
その変数が必要な部分だけ{...}で囲めば無問題。 もし本当にgotoが必要ならね。
ってC++の話じゃねぇかゴ━━━━(# ゚Д゚)━━━━ルァ!!
>>415 私もそうしてます.
>>416 >肥大化するようなら別の方法を取るべきなんでは?
>なにも状態遷移すべてをgotoで書けといっているわけではないし。
なるほど.ハイブリッドですか.
選択肢の一つとしての goto なら,状態遷移の方法としてありですね.
>>417 よく考えると問題ないですね.
>>414 書いたときは,「メモリの無駄使い」「手入力で状態遷移先を指定しなければならないこと」を
デメリットだと考えていましたが,先に挙げている 10 × 10 を例に取ったとしても,
メモリ使用領域はたかだか 400 [Byte].状態遷移の手入力することも,テーブルを使わない場合に
遷移条件と遷移先を記述しなければならないことを考えれば,むしろ,楽ですね.
(10 × 10 の表を全て埋めなければならないと勘違いしていました.愚かだ)
よく考えずに発言してしまいました.すみませんでした.
>>419 私も switch の中でインスタンス生成したかったときにエラー出されて悩みました.
確かに,goto は C++ には向かないですね.
なかなかいい感じだな。
>>421 >遷移条件と遷移先を記述しなければならないことを考えれば,むしろ,楽ですね.
人間にとってはあたりまえだ(w
switchは、 case HOGEHOGE: { : break; } とか書くことも結構有るな。 変数の適切なスコープ制御は結構基本だと思うけど…
このスレで何かを学んだ人の数→0
goto って存在を学んだ
427 :
仕様書無しさん :04/01/17 05:15
#include <stdio.h> #include <malloc.h> main(togo,toog) int togo; char *toog[]; {char *ogto, tgoo[80];FILE *ogot; int oogt=0, ootg, otog=79, ottg=1;if ( togo== ottg) goto gogo; goto goog; ggot: if ( fgets( tgoo, otog, ogot)) goto gtgo; goto gott; gtot: exit(); ogtg: ++oogt; goto ogoo; togg: if ( ootg > 0) goto oggt; goto ggot; ogog: if ( !ogot) goto gogo; goto ggto; gtto: printf( "%d goto \'s\n", oogt); goto gtot; oggt: if ( !memcmp( ogto, "goto", 4)) goto otgg; goto gooo; gogo: exit( ottg); tggo: ootg= strlen(tgoo); goto tgog; oogo: --ootg; goto togg; gooo: ++ogto; goto oogo; gott: fclose( ogot); goto gtto; otgg: ogto= ogto +3; goto ogtg; tgog: ootg-=4;goto togg; gtgo: ogto= tgoo; goto tggo; ogoo: ootg-=3;goto gooo; goog: ogot= fopen( toog[ ottg], "r"); goto ogog; ggto: ogto= tgoo; goto ggot;}
428 :
仕様書無しさん :04/01/17 08:30
>>427 ワラタ
>>428 走らせてみれば?
コンパイルは通るよ。
理解すんのがマンドクセーだけど。
430 :
仕様書無しさん :04/01/17 11:57
#include <stdio.h> /* リファクタリングしてみますた */ #include <malloc.h> main(argc,argv) int argc; char *argv[]; { char *pchar, inputed_line[80];FILE *file; int goto_counter=0, str_len, MAX=79, argc_index=1;if (argc == argc_index) goto ERROR; goto FIRST; READ: if ( fgets( inputed_line, MAX, file)) goto LET_STR; goto CLOSE; EXIT: exit(); INCREMENT_GOTO_COUNTER: ++goto_counter; goto MINUS_STRLEN; IF_BLANK_LINE: if ( str_len > 0) goto MEMCMP; goto READ; IS_OPEN: if ( !file) goto ERROR; goto OPENED; PRINT: printf( "%d goto \'s\n", goto_counter); goto EXIT; MEMCMP: if ( !memcmp( pchar, "goto", 4)) goto PLUS_CHAR; goto INCREMENT_PCHAR; ERROR: exit( argc_index); LET_STRLEN: str_len= strlen(inputed_line); goto MINUS_STRLEN; DECREMENT_STRLEN: --str_len; goto IF_BLANK_LINE; INCREMENT_PCHAR: ++pchar; goto DECREMENT_STRLEN; CLOSE: fclose( file); goto PRINT; PLUS_CHAR: pchar= pchar +3; goto INCREMENT_GOTO_COUNTER; MINUS_STRLEN: str_len-=4;goto IF_BLANK_LINE; LET_STR: pchar = inputed_line; goto LET_STRLEN; MINUS_STRLEN: str_len-=3;goto INCREMENT_PCHAR; FIRST: file= fopen(argv[argc_index], "r"); goto IS_OPEN; OPENED: pchar= inputed_line; goto READ;}
431 :
仕様書無しさん :04/01/17 12:08
#include <stdio.h> /* もうすこし */ #include <malloc.h> main(argc,argv) int argc; char *argv[]; { char *pchar, inputed_line[80]; FILE *file; int goto_counter = 0, str_len, MAX = 79, argc_index = 1; if (argc == argc_index) goto ERROR; goto OPEN; ERROR: exit( argc_index); OPEN: file = fopen(argv[argc_index], "r"); goto IS_OPEN; IS_OPEN: if ( !file) goto ERROR; goto OPENED; OPENED: pchar = inputed_line; goto READ; READ: if ( fgets( inputed_line, MAX, file)) goto LET_STR; goto CLOSE; LET_STR: pchar = inputed_line; goto LET_STRLEN; LET_STRLEN: str_len = strlen(inputed_line); goto MINUS_STRLEN_4; MINUS_STRLEN_4: str_len- = 4; goto IF_BLANK_LINE; IF_BLANK_LINE: if ( str_len > 0) goto MEMCMP; goto READ; MEMCMP: if ( !memcmp( pchar, "goto", 4)) goto PLUS_CHAR; goto INCREMENT_PCHAR; PLUS_CHAR: pchar = pchar +3; goto INCREMENT_GOTO_COUNTER; INCREMENT_GOTO_COUNTER: ++goto_counter; goto MINUS_STRLEN_3; MINUS_STRLEN_3: str_len- = 3; goto INCREMENT_PCHAR; INCREMENT_PCHAR: ++pchar; goto DECREMENT_STRLEN; DECREMENT_STRLEN: --str_len; goto IF_BLANK_LINE; CLOSE: fclose( file); goto PRINT; PRINT: printf( "%d goto \'s\n", goto_counter); goto EXIT; EXIT: exit(); }
432 :
仕様書無しさん :04/01/17 12:26
#include <stdio.h> /* リファクタリング完了 */ #include <malloc.h> main(argc,argv) int argc; char *argv[]; { char *pchar, inputed_line[80]; FILE *file; int goto_counter = 0, str_len, MAX = 79, argc_index = 1; if (argc == argc_index) goto ERROR; goto INITIALIZE; ERROR: exit( argc_index); INITIALIZE: file = fopen(argv[argc_index], "r"); if ( !file) goto ERROR; pchar = inputed_line; READ: if ( fgets( inputed_line, MAX, file)) goto READED; goto FINALIZE; READED: pchar = inputed_line; str_len = strlen(inputed_line); str_len -= 4; IF_LESS_LINE: if ( str_len > 0) goto SEARCH; goto READ; SEARCH: if ( !memcmp( pchar, "goto", 4)) goto FOUND; goto NOT_FOUND; FOUND: pchar = pchar + 3; ++goto_counter; str_len -= 3; NOT_FOUND: ++pchar; --str_len; goto IF_LESS_LINE; FINALIZE: fclose( file); printf( "%d goto \'s\n", goto_counter); exit(); }
ああ。組込み系の人達がこんなに書き込みを・・・
業務アプリしか知らない人の大半は、状態遷移って単語が出た瞬間から何が書いてあるか
わからなくなると思うけど・・・
>>404 「わかりやすさというものがやはり主観だ」と再認識させられるレスでした
>>409 もちろん「抜け」が発生しうる規模になったら表を作りますけどね
逆に、表を作っても、図をベースに記述することもありますよ
>>414 説明・・・ですか。「図をそのままコード化する」で御理解戴けないと、コードを示すのが
最善となってしまうなあ。もともと「このようなケースでは私はこれが一番判りやすいと思う」
という軽い気持ちでコードをさらしたのですが、大爆発になってしまって。大爆発を再現するのは
気が重いのですが・・・。でも半分、消える心境になっているし、見たい人もいるかな。
偶然にも
>>427 に邪悪なソースが出てるのでこれで免疫をつけてもらってと。4X2の
極小に近いものです。逆にこのような小さい場合で無いと、このような書き方はできません。
#define SLASH '/'
#define ASTER '*'
#define GET c=getchar();if(c==EOF)return
int c;
not_in_comment:GET;if(c==SLASH)goto seen_slash;putchar();goto not_in_comment;
seen_slash:GET;if(c==ASTER)goto in_comment;putchar(SLASH);if(c==SLASH)goto seen_slash;putchar(c);goto not_in_comment;
in_comment:GET;if(c==ASTER)goto seen_aster;goto in_comment;
seen_aster:GET;if(c==ASTER)goto seen_aster;if(c==SLASH)goto not_in_comment;goto in_comment;
詰めて書いてあるので読む場合は、適切な改行とインデントとスペースをいれてから読んでください
>>415 そう書くことももちろんありますよ。ですが上に書いたコードの方が判りやすい(&メンテ性高い)
と感じる人間が存在するという事実を認めていただかないと、「主観同士のぶつかり合い」
となってしまいます。
>>416 支持します
>>427 IOCCCのhtons.c(1987)、でしたっけ。本にも載ったし有名ですね。
case HOGEHOGE: { ...; } break;
あるコードが解りやすいか解りにくいかというのは、もちろん個々人の主観によるが、 客観的にその数を数えることは可能。タレントの好感度ランキングみたいのと同じだよ。 gotoの場合は「好ましくない」と考える人間がいるというのは客観的事実。
>>433 > ああ。組込み系の人達がこんなに書き込みを・・・
> 業務アプリしか知らない人の大半は、状態遷移って単語が出た瞬間から何が書いてあるか
> わからなくなると思うけど・・・
それこそ主観ですね。君が知らないだけ。
>>434 > そう書くことももちろんありますよ。ですが上に書いたコードの方が判りやすい(&メンテ性高い)
> と感じる人間が存在するという事実を認めていただかないと、「主観同士のぶつかり合い」
> となってしまいます。
誰もそれには異議を唱えていないと思うが。
>>433 >業務アプリしか知らない人の大半は、状態遷移って単語が出た瞬間から何が書いてあるか
>わからなくなると思うけど・・・
もしそうだとしたらGoFにState patternなぞ入るわけないのだが。
もしそうだとしたらUMLに状態遷移図なぞ入るわけないのだが。
なんというか、 「定説です!」 ってのを感じてしまった。 誠に「キモい」連中ですな。
>>433 (初期:コメント外)
コメント外で'/'に続けて'*':
コメント中
コメント中に'*'に続けて'/':
コメント外
コメント中は表示しない
ってところか?(とするとそのコード微妙に間違ってるが)
goto使って「このようなケースでは私はこれが一番判りやすいと思う」例にしちゃお粗末
>>445 翻訳環境/実行環境がないので。確かにお粗末です。すいませんね。
#この場合、「バグの有無がそんなに重要か?」ってんだ。
もれはバグの有無を問題にしてるわけではないのだが。 フラグで充分な例だろ?って事
>>434 >そう書くことももちろんありますよ。ですが上に書いたコードの方が判りやすい(&メンテ性高い)
>と感じる人間が存在するという事実を認めていただかないと、「主観同士のぶつかり合い」
>となってしまいます。
じゃ、この手のこと言うの止めてくれる?
つまりね、君自身がどう感じるかなんて問題じゃないし、他人がどう思うかということのほうが
重要であるということ。
>>448 >>415 みたいな書き方のことですね。いろんな書き方があるのは事実です。
同一の例で、5種類ほど書き方の提示がありましたよ(先頭スレ参照)。
どの書き方が一番良いのかを論じているのではないのです。
開発担当者が、「自分が一番良いと思う書き方を選択する」。それだけのことですよ
>>449 ご指摘の件が重要なのです。「プログラムのわかりやすさというのを判断するのはいったい誰なのか」という点です。
私は「開発担当」が判断すべきことだと思っています。
どうもあなたは「多数派」が判断すべきことだと思っている様に見うけられます。あっていますか?
>>451 「プログラムが自分(たち)の手を離れた後誰に参照されるかは予想できない。」
「最終的な全体コストを下げるためにも分かりやすいプログラムを書いておくべきだ。」
「gotoを好ましくないと考える人の方が多い。」
↓
「gotoは使うべきではない。」
予想できる反論としてはこんなところか。
ちがうちがう
S=0; /* 初期:コメント外 */
for(;;){
GET;
if(S==0 && prev==SLASH && c==ASTER) /* コメント外で'/'に続けて'*': */
S=1; /* コメント中 */
if(S==1 && prev==ASTER && c==SLASH) /* コメント中に'*'に続けて'/': */
S=0; /* コメント外 */
if(S==0) /* コメント中は表示しない */
putchar(c);
prev=c;
}
って書きゃ済むくらいなのに
goto使って「このようなケースでは私はこれが一番判りやすいと思う」
>>433 ってのがお粗末だって話
どの書き方が一番良いのかを論じているのではないよ
...ってまぁちょっとバグがありだが許せ
goto使いは粘着質で嫌だね。
main(argc,argv) int argc; char *argv[]; { char *pchar, inputed_line[80]; FILE *file; int goto_counter = 0, str_len, MAX = 79, argc_index = 1; if (argc == argc_index) goto ERROR; INITIALIZE: file = fopen(argv[argc_index], "r"); if ( !file) goto ERROR; pchar = inputed_line; goto LOOP1_EVAL; LOOP1: pchar = inputed_line; str_len = strlen(inputed_line); str_len -= 4; goto LOOP2_EVAL; LOOP2: if ( memcmp( pchar, "goto", 4)) goto NOT_FOUND; FOUND: pchar = pchar + 3; ++goto_counter; str_len -= 3; NOT_FOUND: ++pchar; --str_len; LOOP2_EVAL: if ( str_len > 0) goto LOOP2; LOOP1_EVAL: if ( fgets( inputed_line, MAX, file)) goto LOOP1; FINALIZE: fclose( file); printf( "%d goto \'s\n", goto_counter); exit(); ERROR: exit( argc_index); }
main(argc,argv) int argc; char *argv[]; { char *pchar, inputed_line[80]; FILE *file; int goto_counter = 0, str_len, MAX = 79, argc_index = 1; if (argc == argc_index) goto ERROR; file = fopen(argv[argc_index], "r"); if ( !file) goto ERROR; pchar = inputed_line; while(fgets( inputed_line, MAX, file)){ pchar = inputed_line; str_len = strlen(inputed_line); str_len -= 4; while( str_len > 0){ if (! memcmp( pchar, "goto", 4)){ pchar = pchar + 3; ++goto_counter; str_len -= 3; } ++pchar; --str_len; } } fclose( file); printf( "%d goto \'s\n", goto_counter); exit(); ERROR: exit( argc_index); }
多数派でいっこうにかまわんだろ。いろんな奴がコードいじるんだし。 「わかりやすさ」ってそういうもんだろう? 大昔はフローチャートを直接反映したfortranのgotoみたいなのがわかりやすかった。 ちょっと前までは構造化コードがわかりやすかった。 いまはオブジェクト指向で書くのがわかりやすい。 この先はどんな手法が「わかりやすく」なるかはど−だろーね。 goto使うのがわかりやすい人がいる、というのは認めるけど、そんな些細なことで 個性をださんでもと思うが。
>>宮坂さん
ネタの宝庫が見つかってよかったですね
>>37 今月のCマガ買って読め。
とりあえず
>>458 のgotoの使い方なら受け入れてもよかろう
>>453 了解しました。「サンプルとして提示するにはテーマが不適切」との御指摘ですね
「あなたがその書き方を選択する」ということもわかりました
>>454 はあ「粘着質」ですか。どこが粘着しているのかが理解できません。
>>456 (内容は
>>452 )
認めません。と、結論だけ書いてしまうと話にならないので理由を書きます。
>「プログラムが自分(たち)の手を離れた後誰に参照されるかは予想できない。」
yes
>「最終的な全体コストを下げるためにも分かりやすいプログラムを書いておくべきだ。」
>「gotoを好ましくないと考える人の方が多い。」
>↓
>「gotoは使うべきではない。」
「開発担当がgoto使う人である」&「保守担当が『gotoを好ましくないと考える人』である」という前提で書きます
gotoつかわない場合は、開発者の生産性やモチベーションの低下
gotoつかう場合は、保守時のモチベーションの低下
というリスクが双方に発生します。「後者のリスクが前者のリスクを上回る」という判断をされているわけですか
・・・それはPGが考えることではありません。
品質管理/品質保証/QA/保守などの担当がその様に判断すれば、goto使用禁止規約を設ければ良いだけのことです。
#そんなにgoto使ったプログラムが嫌ならリファクタリングすればいいのに。
#「goto使っているからリファクタリングします」が承認されるならネ
>>459 最後の文に感想をコメントさせてください。
「個性のつもりじゃなくって、昔から普通に使っているだけですよ。
使用禁止規約もないのに『使うな』という権限は誰にもないはず。
ましてや匿名掲示板で『使うなと言う』のは嫌がられるだけだと思いますけどね」
ハァ。それにしても「刷り込み」というは根強いものです。
この話題って、COBOLERとそうでない人達の確執と少し似ていますね。COBOLERといってもCOBOLやっている人の
ことではなくて、方法論固執、価値判断固執をする人たちの代名詞なのですが。(COBOLやっている人ゴメンナサイ)
どちらがCOBOLERなのかは御想像にお任せします。
「偏見や嫌悪感という感情が存在して、それによって判断が狂っていないか」を自問自答して戴きたいです。
#簡単に言うと「頭が硬いんじゃないの?」
まあ偏見や嫌悪感の払拭が終了している人や(私のような)もともとない人のレスもちらほらありますけどね。
開発者個人のモチベーションが下がってもいい現場はあるんだから、 そーいうとこは「マンドクセェから禁止ね」のほうがよさそう。
>>37 ねえCマガ読む気あるの?ないの?
もう読んでて都合が悪かったから無視なの?どれ?
>>465 読む気ありますよ。まだ買っていません。
買うだけの時間的余裕があればすぐ買います。
#せっかちなかたですね。
>>37 そうかすまない。
無反応だったから無視されたかと思った。
読んだら感想を語ってくれるんだよな?
何を書いてくれるか楽しみだ。
>>462 びっくりするほど視野が狭いね。あきれたよ。
>>463 >「偏見や嫌悪感という感情が存在して、それによって判断が狂っていないか」を自問自答して戴きたいです。
>#簡単に言うと「頭が硬いんじゃないの?」
どちらかというと、君のほうにその傾向があると思うのだが。
かたくなにある意見を「スレ違いだから持ち出すな」と主張するし、また君の口癖にも
それは現れてる。
>>462 ちなみにわたしなら(すてーとぱたーんは馴染めないので)関数ポインタの配列をつかうでしょう...
で、どんなサンプルを提示していただけるのでしょうか?
#「否定だけをするレス」にはレスしたくないなあ。
#反論ならレスしたいけど。
>>468 ここはプログラマー板です。現実の仕事が何であろうと「プログラマー」として発言します。
あなたはどのような職種としての発言をしているつもりなんですか?
品質管理やライフサイクルコストの話がしたいならこれも激しくスレ違いです。
>>469 確かに「禁止論議はスレ違い」と言っています。
そしてそれに反対なら反論してくださいとも言っています。
また「使うか使わないかはスレに沿った議論」だとも言っています。
私はあなたが何が主張したいかが良くわかりません。
「禁止」に拘っている様に思えますがその理由もです。
双方のレスに言える事ですが、記述にもう少し具体性を持たせてください。
gotoという具体極まりない特定の文について話をしているのですよ。
・「視野が狭いね」と思うのならどのような視野を持つべきだと思うのかを
・「傾向があると思うのだが」ならどこに(書いてあるように見えますが全然論理に繋がりが在りません)
・「ある意見を」ならどの種の意見か
・「君の口癖」ならどの口癖なのか
名前(番号)を書いてくれるのは有難いのですが、レス内容から意図的に具体性を落としている様に思えます。
だから「否定だけをするレス」だと思わざるを得なくなるのです。
'#' の使い方がキモイ
'#' の使い方もキモイ
452だけど、
>>452 は矢印の前後が論理的に全然つながってないって事に気づいた?
全くその通りとか思った人は、その辺を埋めて欲しい。よろしくっ。
↓のトコよりも >「プログラムが自分(たち)の手を離れた後誰に参照されるかは予想できない。」 >「最終的な全体コストを下げるためにも分かりやすいプログラムを書いておくべきだ。」 と >「gotoを好ましくないと考える人の方が多い。」 の関連が。。。
>>476 将来自分が書いたプログラムが参照されるときは、gotoを好ましくないと考える人たちが
見る可能性が高いから、最終的なコストを下げるためにもわかりやすいプログラムを
書いておくべきだ、ってことでしょ。
37が叩かれる理由はただ一点。 状態遷移をともなうコードでgotoを使い、それがすばらしいコードだと自画自賛しているから。
37は、これだけ長い間このスレで発言し続けて、そのほとんどが37対その他大勢という対立構造になって しまうことに関して、どのように自己分析しているのだろうか。
>>477 というと、gotoが好ましくないと考える人たちは、gotoがわかりにくい、ということ?
& gotoがわかりにくいケースが大多数なの?
>>480 >というと、gotoが好ましくないと考える人たちは、gotoがわかりにくい、ということ?
> & gotoがわかりにくいケースが大多数なの?
それは元のコードによるので、完全に筋違いな疑問。
>>478 同感です。
複数の状態遷移を並列動作させるとか、
イベントやメッセージで状態を遷移させるとか
そういったものはgotoを使うでは書きづらいと思うのだが。
>>479 どちらかと言えば「使うべき時は使うが、使うべき時は殆ど無い」派だけど、
どうせネタスレだし、
>>37 があまりにアレなので一緒にされたくない。
従って加勢せずに眺めて楽しんでいる。
骨の髄までフローチャートなひとがいるスレはここですか?
「状態」をカプセル化できない奴はクズ。 他言語に行って途方にくれるなよ。
組み込み系がこんなのだと思われると腹が立つ。
は、実は37は組み込みをCで書いてて関数ポインタでつまづいただけじゃないのか?
>>460 月間Cマガジン2004年2月号の53〜54頁のgoto論争についての記述を読みましたよ。
筆者の宮坂電人なる人物がいかなる人物か知らないのですか一見解として聞いておきましょう。
「これは筆者独自の意見であって、絶対の正解だと信じ込まないようにしてください。置かれている境遇や
条件が違う場合は違う結論が出てくる可能性があるます」と記述してありますし
反論するのは気がすすみませんね。理由はふたつあります。
@あなたが宮坂電人なら話は違いますが、再反論出来ない人に反論しても議論にならないから意味がない
A大半の人は該当記事を読んでいない
感想は「ああそうですか」ですよ。もっと感想が読みたいですか。ならば該当記事をすべて写してください。
法律違反になる可能性はあると思いますが。それとも宮坂電人氏がこのスレにいるのですか。
>>490 なぜこのスレに該当記事をすべて写さなければ感想がいえないのか理解不能。
それから(1)は君の認識違い。十分議論になると思うが。
なんつーか、今までとちょっと違ったキレ方だよな。 俺もうこいつにかかわるのよすわ。
電波を受信したようです。
494 :
仕様書無しさん :04/01/19 23:35
>>490 何故、女のプログラマーは少ないのか?
何故だと思うよ>女PG
>>478 「自画自賛」なぞしていません。「私はこの書き方を選択する」と言っているだけです
>>479 私は「ただ自分の楽しみのためだけに」ここにいる。しかし、飽きてきた。
>>484 「書きづらいと思う」という見解は否定しませんよ。同一の見解が多数派であるという事もね。
多数派がいれば必然的に少数派も存在するものです
>>485 私も同じです。
ところで繰り返しに飽きてきたのでバトンタッチしたいのですが駄目ですか?
そして「アレ」ってなんですか?
>>488 私は組込み系ではありません
>>491 >なぜこのスレに該当記事をすべて写さなければ感想がいえないのか
は、「大半の人は該当記事を読んでいない」からです
感想だけ書けば「知らない人は全く理解出来ないレス」になってしまいます。
該当記事があればそうはならないからですよ
>>495 > 「書きづらいと思う」という見解は否定しませんよ。同一の見解が多数派であるという事もね。
> 多数派がいれば必然的に少数派も存在するものです
どういうプログラムになるかちゃんと考えて書いている?
それとも単に「思う」に反応しただけ?
ここまでの議論の中間結果を2・30行に要約してくれ↓
gotoを禁止にするかどうかは主観の問題。
>>495 >>なぜこのスレに該当記事をすべて写さなければ感想がいえないのか
>は、「大半の人は該当記事を読んでいない」からです
>感想だけ書けば「知らない人は全く理解出来ないレス」になってしまいます。
そうならないように書けないということだな。つまり君の能力不足だ。
それをさも他者のせいであるかのごとく書くのはやめような。
>>490 (37)
該当部分全ての引用なぞ必要ないと思いますよ。
あなたは「大半の人は該当記事を読んでいない」事を理由に
都合の悪い事を書きたくないだけなのでしょう。
必要な引用は結論だけで十分です。
起承転結と起結承の中間のような文章なので出だしと終わりから引用します。
// 今どきgotoがよいか悪いかを論じるのは時間の無駄であるだけでなく,
// もっと論争すべき大事なテーマがあるので労力のムダですらあります。
// 誰もが上手にgotoを使いこなせる技量の持ち主であるとは限らず,
// またgotoを使うことを揶揄する人たちとの摩擦もあるので,
// 現代においてはgotoを使うデメリットをたくさん指摘できても,
// メリットはほとんど考えられないでしょう
あなたは都合の悪い意見を受け流しているだけでしょう。
宮坂氏の見解によればgotoはデメリットはたくさんあるが、
メリットはほとんどないと言っています。
そしてそのあるのかないのかわからないメリットの為に
あなたのように「大昔にカタのついた話」を蒸し返すのは
無意味を超えて害悪だと言っているのですよ!
goto の使えない言語を少し使えば、goto使わなくてもなんとかなるのはその通りと思うが、 gotoある言語で、わざわざ使わない理由としてはそれだけじゃ「十分」じゃないだろ。 それを禁止するなら3項演算子を先に禁止した方がいいと思うぞ。 誰もが上手に3項演算子を使いこなせる技量を持つとは限らない んだしな
それから、if( xx ) の xx の場所で && || を使う事も禁止した方がいいぞ。 こういう所で使ってる場合の間違い率はとても高い。 初心者にはgoto より余程扱いが難しい。
>>501 君、もうちょっと論理的思考能力を身につける必要性がありそうだぞ。
>>502 お話になりません。
>>490 >筆者の宮坂電人なる人物がいかなる人物か知らないのですか一見解として聞いておきましょう。
ヘーヘーヘー
>>497 思考停止してしまった37を改心させようと次々に人が現れるが、いずれも返り討ちにあう。
一方37はますます電波度を高めている。
ア、オワッチャッタ
>// 誰もが上手にgotoを使いこなせる技量の持ち主であるとは限らず, >// またgotoを使うことを揶揄する人たちとの摩擦もあるので, まぁ、どっちにしろプロジェクトマネージャが適切に判断すれば良いだけだね。 適切に判断できる自身が無いならとりあえずそのプロジェクトでは禁止しとけ、と。
17.10:gotoは悪で絶対に使ってはならないという人がいる。ちょっとこれは 行き過ぎではないか。 A:プログラミングの作法は文章作法と同じで、ちょっとした技能であっ てガチガチの規則で明文化することはできない。ただし書き方につい ての議論はもっぱらそういう規則を中心に回るようである。 goto文については、gotoを好き勝手に使うとすぐにスパゲッティのよ うにもつれた保守不能なコードになると昔からいわれている。しかし、 石頭にgoto文を使うことを禁止してもすぐに美しいプログラミングに 結び付くとは限らない。体系立てて考えないプログラマならgoto文を まったく使わなくても同じように複雑怪奇にもつれたコードを書いて しまう(たぶん代わりに妙に入れ子になったループやブール値の制御 変数を使って)。 プログラムの書き方に関するたいていの意見や"規則"は規則としてよ りは指針として考えたほうがうまくいく。プログラマが、この指針 で何を成し遂げたいのか理解すればもっとうまくいく。ある種の構文 を無闇に敬遠したり、理解することなく規則に従うことは、規則を使 えば避けられることになっているのと同じくらい多くの問題を引き起 こす可能性がある。 さらに、プログラムの書き方に関する見解は所詮見解にすぎない。" 書き方論争(style wars)"に引きずり込まれても、たいてい何も産み 出さない。一部の論点(質問9.2, 5.3, 5.9, 10.7で挙げたような)に ついてはお互い相手の意見を認めたり、意見が違うことを認めたり、 議論を打ち切ったりすることはないように見える。
>>497 37は、自分が書いたコードが糞コードだと言われて、その傷ついた自尊心を癒すべく
書き込みを続けてるだけ。しかも書き込みを続けていくうちに、読解力も、論理的思考能力も、
文章能力もことごとく欠けていることがばれてしまい、それを糊塗しようとさらにずるずると
書き込みを続けてるだけ。
ESQLのコードだとよくgoto使うよね。
512 :
仕様書無しさん :04/01/20 10:31
もげ
goto 禁止するくらいなら、goto のないmyC言語を作ればいいだろうに、 それも出来ないクセに運用で逃げようなんてのは、ヘタレだと思うね。 まあ、ヘタレ認定されてもいいならどうぞ。 おれは禁止されたって困らないけどね!
また一人電波が迷い込んだ模様。
515 :
仕様書無しさん :04/01/20 11:09
goto使わないとCでコーティングできない人間を破棄してもらいたいと 思うのは私だけですか? 使って悪いとまでは言わないが、的確に使ってもらわないと、 可読性が悪くてたまらん。
いやifyはswitchを使わない奴の方が厄介だろ思うが
>>515 37のように、糞コードなのに、自分は「適確に使えてる」と思い込む奴がいる限り、
「適確に使ってくれ」というのは無駄っぽいぞ。
で、「何が適確か」というのを議論し始めると「それは主観による」という結論に引きずり込まれる罠。
いいかげんC++に来いよ。
>>495 >
>>478 >「自画自賛」なぞしていません。「私はこの書き方を選択する」と言っているだけです
ではなぜその書き方を選択するのですか?
C++こそ、現場ごとに あれやコレや ヤカマシイ。
37ってFORTRANを何年もやってきて、最近Cを始めたとかなのかな。 それとも単に初心者なのだろうか。
>>519 そりゃ好みの問題だろ
俺だってgoto式状態遷移スタイルならgoto使う。それはgoto式だからさ。
>>521 キミは、C の仕事やってるの? C の仕事なんて組み込みかLinuxしかないだろうと思うが? どっちやってるの?
>>525 嫌だね。
スタイルは自分で身に付けるもの。 大事な財産さ。 盗りたいなら、それだけの覚悟でおいで。
>>524 Cの仕事もしてます。組み込みではありません。
アフォがまた一人光臨した模様。
>>529 ゲームじゃないし、そもそも質問の意図がわかりません。
おおぅ?37のゲロコードを擁護する奴の登場か?
>>531 Cの仕事を探すのが今では難しいからさ
パソコンならC++ で extern "C" だろうしね。
Cで書くならCのスタイルで書く。 JAVA/C++とスタイルを混同しちゃいけないよ。
>>533 言っている事がさっぱりわかりませんが。
誰かと混同してるんじゃないですか?
まぁJavaをJAVAと書く奴にろくな奴はいないわな。
>>533 >Cの仕事を探すのが今では難しいからさ
君が知らないだけという可能性は、考えたことあるのか?
>>536 そういうなら、組み込み、LINUX,ゲーム以外の C の仕事を紹介してくれたまえよ。
あ、俺への質問じゃなかったのか。
なんだかこいつ37より程度が低いね(プゲラッチョ
>>522 その「goto式状態遷移スタイル」が可読性、保守性に欠けてると非難されてるわけだが、
その点に関してはどう考えるのだ?
>>537 WindowsでもCの仕事あるし。
つか、それがいったいなんだというのだ?
544 :
仕様書無しさん :04/01/20 12:00
ふもー
>>539 Linuxなら goto out; とか普通に使わない?
>>542 俺の書いたコードを一番安価にメインテナンス出来るのは俺だから無問題。
俺の書いたコードを他人がメンテナンス出来ないのはそもそもgotoのせいじゃない。
>>543 そりゃ俺だって、10年前のWin3.1のソフトをその頃無くなったボードの代わりにコレ使いたいからってな仕事はあるよ。
組込系はどこも予算ないから、32bitに移植なんて話は出来ないしね。
>>501-502 でわかるとおり、
言語要素の1部を使用禁止にしろという馬鹿の脳味噌は春雨と豆乳でできている。
>>524 “goto 使うと読めなくなる”莫迦がこのスレにも沢山居るみたいだから
“C しか判らないから Win や Mac でも C を使う”奴が居てもおかしくはないでしょう。
バカとアホが戯言言ってるスレはここでつね。 Cマガでネタされてやんの(´,_ゝ`)プッ
>>548 (´-`).。oO(「ネタされて」?)
#define goto if(0) goto
#define goto if(rand() % 100) goto
また話を振り出しに戻す馬鹿が登場かよ。 こうやってgoto議論は果てしなく続いていくのさ。
ん、Cマガの記事ってこのスレのことネタにしてんの?
全部は読んでないしgotoネタがあったかは知らないけど 不毛な宗教論争ネタを並べて○側と×側双方の言い分を主張してた>Cマガ特集 まぁライターが2chでネタ探したとしてもおかしくはないな。
何十年も前から議論されてるのにねぇ・・・
>>545 >Linuxなら goto out; とか普通に使わない?
使わないよ。
やめてくれよ。 組み込み系には馬鹿が多いと思われるじゃないか。
>>557 使うのはカーネルくらいだからキミには関係ないんだろね
>>559 最近カーネルのソース読み始めた知ったか君ですか?
なんだよ、outって?
finallyブロックのことだろ
>>565 いや、それは想像できるが、どうして"Linuxならgoto out;"になるのかという疑問なのだが。
別にin/outという単語を選択したところで何の不思議もないだろ。
>>566 実際に沢山使ってるからだろ。たぶんソコを書いた奴がそういうクセを持ってたんじゃないの?
別に不思議は無いが、それは俺の疑問の答えじゃないな。
日本語勉強して出直しな。
Linuxカーネルコード至上主義者降臨中。
Windowsなら普通goto Exit;だな。
過去スレ読んでたら37がこんなこと言ってたよ。 >私は構造化言語が一般に使用されていない時代からのoldプログラマです。fortran66が母国語です。 >だからgoto使用には抵抗がありません。 >ですが構造化構文をサポートするfortran77となっても、あいも変わらずgotoを多用/誤用する人間も多く、 >「いつか必ずgotoレスが主流になる時代が来るに違いない」と考えていました。これはつい昨日の事の様です。 COBOL出身にも数多く存在するが、Fortran出身にも困ったチャンがいるんだね。
40超えた化石プログラマ?
なんだ、ジジィの戯言だったのか。
ああこんなにたくさんレスが。#やはり名指しされたとて選ばないと身が持たない
>>460 >あなたは都合の悪い意見を受け流しているだけでしょう。
いいえ。なぜそう思われるかが理解できませんね。
今までの私のレスにそのような行動を示唆するものがあったのなら具体的に指摘して戴きたいですね
宮坂氏は三種の「goto悪くない派」の意見を挙げてそれぞれに反論しています。
そしてgotoのデメリットと思われるもの二種を挙げています。せっかく写していただいたのででコピペします。
せっかくレスしていただいたので、それぞれに感想を付加します。
@誰もが上手にgotoを使いこなせる技量の持ち主であるとは限らず,
事実です。この指摘はこのレスでの言葉で言うと「goto誤用」のことです。
goto誤用について、私はコードレビューを行うことによって防止できると一貫して主張しています。
規約というものが技量が最下位レベルの人間に合わせて作成されるという現状から考えて、
goto禁止を規約とする場合があるのはこの見解を背景とするものでしょう。
だからといって、「一概にgotoを使うべきでない」とすることは無理がありますね。この見解から導出される私の感想は
「開発組織がその構成員すべてに上手にgotoを使いこなせる技量を持たせるべく教育すべきだ」ですよ。つまらない感想でしょ。
Aまたgotoを使うことを揶揄する人たちとの摩擦もあるので,
これは「gotoを使わない理由」にはなりません
(続きありますよ)
>宮坂氏の見解によればgotoはデメリットはたくさんあるが、 >メリットはほとんどないと言っています。 >そしてそのあるのかないのかわからないメリットの為に 宮坂氏の見解を正しいものと思いませんが、貴方は正しいものとして話していますね。 少なくとも「使わせないデメリット」は存在しますよ。 それは「開発担当者がgotoを使うことが正しいと判断する場合があるから」です。論理の設計は開発担当者の職掌です。 >あなたのように「大昔にカタのついた話」を蒸し返すのは >無意味を超えて害悪だと言っているのですよ! いつ誰がカタをつけたか教えていただけますか。私は知らないのです。 もう一つ教えて下さい。このスレは何を論じるスレなんですか 最後にひとつ。宮坂氏の記事には事実誤認があります。ダイクストラは確かに「gotoは有害を引き起こす」という論文を書きました。しかし、この論文の題名は単なるキャッチコピーに過ぎません。 内容は「構造化プログラミングの提唱」あって「gotoは無くすべきだ」ではないのです。
>>505 ワーニエ、ダイクストラ、クヌース、ミルズ、マイヤーズ、コンスタンチン、プローガ、ホア等なら知っていますが日本人は
全然知りません。教えて下さい。カリスマ?
>>506 えっ。そうだったの?。私は思考停止していたのかあ。gotoなんかの事より考えることは沢山あるしなあ。
でも本当に思考停止しているなら改心なぞするわけないと思うけど。ならば現れる人達は、無駄になる可能性が高いのを知っていて
私を改心させるべく書き込んでくれている慈悲深い人達なわけ?。拝んでイイですか?
電波って
>>490 の >それとも宮坂電人氏がこのスレにいるのですか
の記述のこと?。それは
>>460 の「宮坂さん・・・」が本当かも知れないと思ったから
>>519 開発担当者(私)が一番わかりやすいと思うからです。
>>559 ええ。一番寿命の長い論争です。
>>557 よく見つけていただきました。ありがとう。まあ「困ったチャン」かもしれないですね。少数派であることは確かです。
いい機会なので構造化言語を使い始めてからの実務における私のgoto使用回数を書いておきましょう。一回です。
#以前一行/二万行ともレスしました。考えて見たら二万というのは該当システムにおける私の担当部分の行数でした
#そういえばそれ以降は実務では使っていないな・・・(あれはもう15年以上前だ。cではなかったが)
>>577 ジジイかもシレンが現役
>>580 失礼しました。
s/557/575/
です。
それだけ経歴があってなおここで遊びたいのなら、せめてコード例くらいまともなものに していただかないと、後進のためになりませんよ。 # 状態遷移ごときで業務プログラマを馬鹿にするような発言をなさるとは。 # あ、だから2chにいるのか(あはは)
だいたい、ここでgoto論争を始めようという37の性根が腐っている。 ネタ板の(wここでならたいした論客もこねーだろーという見え見えの算段。 しかし出すもんは状態遷移(w。 無駄に歳食ったなぁ。ほんとに。
>>582 うーん。後進のことには興味がないですねえ。現実世界の後進もgotoについては興味がないようですし。
私がどう思うにしろ「我以外皆師」だから反面教師だと思ってくれれば良いのではないですか。
goto使用については支持/不支持の対立があっても、止揚する事がない話題です。(洒落のつもりはないのですが)
そして他の論争の様に、技術的ブレイクスルーによって論争が終わるということがありません。
どこまでいっても不毛で、かつ雑談(一部感情論)に過ぎません。そういうスレで「まとも」といわれてもねえ。
このスレに何かが得られる事を期待して、来る人がいるのでしょうか。考える契機は散らばっている様にも思えますけど
ですが、あのコードは大真面目ですよ。私はまともだと思って書いています。
今は、少なくともあなたにとって、この「あのコードに対する認識の違い」が話題であるのだと思っていますが
#現状認識について誤りがあると、なぜ2chで暇潰しすることになるのかが全然わかりません
もとはといえば自分からばらしたんだけど、正体がばれてしまったので、少し沈黙することにします。
飽きていたから、いいタイミングです。
>#現状認識について誤りがあると、なぜ2chで暇潰しすることになるのかが全然わかりません # そう考えてしまうあなたには解りませんよ。そこで「暇潰し」と書いてしまうあなたには。おそらくずっとね;)
cでgotoを使わないケース: ・ループを作る LOOP: if(〜) goto EXIT_LOOP; 〜 goto LOOP; EXIT_LOOP: →素直に制御文使え ・処理を飛び越す if(〜) goto JOB2; 〜 JOB1: 〜 goto END_JOB; JOB2: 〜 END_JOB: →ブロック構造にしる ・状態遷移(w
>>584 >どこまでいっても不毛で、かつ雑談(一部感情論)に過ぎません。
だから思考停止してるって言われるんだよ。
>>587 >>560 のコード でgotoを使ってる個所を書き換えてみてごらんよ。
http://www.linux.or.jp/JF/JFdocs/The-Linux-Kernel-images/linux/kernel/fork.c // goto repeat; を書き換えても、読みやすいさもメインテナンス上も上がりますか?
static int get_pid(unsigned long flags)
{
struct task_struct *p;
if (flags & CLONE_PID)
return current->pid;
repeat:
if ((++last_pid) & 0xffff8000)
last_pid=1;
for_each_task (p) {
if (p->pid == last_pid ||
p->pgrp == last_pid ||
p->session == last_pid)
goto repeat;
}
return last_pid;
}
for_each_task(p) {}などというキモチワルイ書き方をしている時点で糞コード。
他人のスタイルを糞々いう奴にロクな奴はいないと言われてない? 他人のスタイルを素直に受け取って投げ返すくらいの度量が欲しいねえ
キャッチボールにて 投げられた変化球を A君:バカヤロ どこ投げてやがんだ。(ボロ) クソボールなんぞ受けてられるか! B君:お!スルドイねえ。(キャッチ)これでどうだ!(同じくらいの変化球を投げ返す)
>>589 書き換え不能。
つか、このコードがすばらしいとでも思ってたりする?
>>593 なんで書き換え不能?
だからgoto不要派は 結局gotoが判らないヘタレだって言われるんだよ。
単に do 〜 while で書き換えられるでしょ
static int get_pid(unsigned long flags)
{
struct task_struct *p;
if (flags & CLONE_PID) return current->pid;
do{
if ((++last_pid) & 0xffff8000) last_pid=1;
for_each_task (p) ;
}while( ( p->pid == last_pid )
|| ( p->pgrp == last_pid )
|| ( p->session == last_pid) ) ;
return last_pid;
}
ただ、書き換えによって for_each_task の面白いスタイルを壊してしまうのは残念だけどね。
>>594 人のことを云々する前に、自分のコードをよく見ましょう。
>for_each_task (p) ;
意味判って書いてますか?
>これは、include/linux/sched.hで定義されるfor_each_task()マクロによって実現されています。
普通にフラグを使って書くとこんな感じかな。 使われていないPIDを求める関数ですかな? static int get_pid(unsigned long flags) { int found; struct task_struct *p; if (flags & CLONE_PID) return current->pid; do { if ((++last_pid) & 0xffff8000) last_pid=1; found = 0; for_each_task (p) { if (p->pid == last_pid || p->pgrp == last_pid || p->session == last_pid) { found = 1; break; } } } while(found); return last_pid; }
static inline int copy_mm(unsigned long clone_flags, struct task_struct * tsk) { if (!(clone_flags & CLONE_VM)) { : if (new_page_tables(tsk)) { tsk->mm = NULL; exit_mmap(mm); goto free_mm; } if (dup_mmap(mm)) { tsk->mm = NULL; exit_mmap(mm); free_page_tables(mm); free_mm: kfree(mm); return -ENOMEM; } return 0; } : } ↓
if (!(clone_flags & CLONE_VM)) { int done; : done=(new_page_tables(tsk)==0)?1:0; if(done && dup_mmap(mm)==0) return 0; free_mm: tsk->mm = NULL; exit_mmap(mm); if(done) free_page_tables(mm); kfree(mm); return -ENOMEM; }
static inline int copy_mm(unsigned long clone_flags, struct task_struct * tsk) { if (!(clone_flags & CLONE_VM)) { : if (new_page_tables(tsk)) { tsk->mm = NULL; exit_mmap(mm); } else if (dup_mmap(mm)) { tsk->mm = NULL; exit_mmap(mm); free_page_tables(mm); } kfree(mm); return -ENOMEM; } return 0; } 違う?
ちがうだおがヴぉけ
普通にフラグを使って書くとこんな感じ。 ||の(暗黙の)特性を使ってたりして、ちょっと嫌な感じかもね! static inline int copy_mm(unsigned long clone_flags, struct task_struct * tsk) { int dup_ng = 0; if (!(clone_flags & CLONE_VM)) { : if (new_page_tables(tsk) || (dup_ng = dup_mmap(mm)) != 0) { tsk->mm = NULL; exit_mmap(mm); if (dup_ng) free_page_tables(mm); kfree(mm); return -ENOMEM; } return 0; } : }
>>603 概ね正しいが、
>||の(暗黙の)特性を使ってたりして、ちょっと嫌な感じかもね!
この認識は誤り。
具体的に言うと?
"暗黙の"
||は論理式の論理和と違って・・・云々 という意味での「暗黙」ね。だから括弧の中に書いたんだけど。 こういうやつとか式の中で代入してたりすると、文句言う奴もけっこういたりする。 「分かりにくい」からってw (そういう意味で嫌な感じ「かも」だ。人によってはそう感じるかも、ってこと。) まぁ、Cとか類するプログラミング言語にどっぷり使ってると||の動作が 所謂「論理和」といわれたところから想像される機能とは少し違うってのは 気づきにくいかもしれないけどね。
>>603 だと、dup_ngが何者だったか覚えてないといけないので
>>598 のほうが理解はしやすいんだが。
しかし、ブロックの中に入るgotoは生理的に受け付けない。
何かよい書き方はないものか、うーん。
609 :
仕様書無しさん :04/01/23 07:59
>>598 if (new_page_tables(tsk)) {
tsk->mm = NULL;
exit_mmap(mm);
kfree(mm);
return -ENOMEM;
}
if (dup_mmap(mm)) {
tsk->mm = NULL;
exit_mmap(mm);
free_page_tables(mm);
kfree(mm);
return -ENOMEM;
}
return 0;
まだやってんのかこのスレ アメリカ様が勝つんだよ。少数派はテロでもやってろ
612 :
仕様書無しさん :04/01/23 21:16
>>589 ヒントだよ
static int get_pid(unsigned long flags)
{
struct task_struct *p;
if (flags & CLONE_PID)
return current->pid;
while(0==0){
if ((++last_pid) & 0xffff8000)
last_pid=1;
for_each_task (p) {
if (p->pid == last_pid ||
p->pgrp == last_pid ||
p->session == last_pid)
{}
else{
return last_pid;
}
}
}
}
0==0ってのも流儀なのか?
GOTOは使うな! TOTOも使うな! LINUXも使うな! INAXを使え! 直ちゃ〜ん
>>614 あなたの教えに従ったら腎臓をやられました。
賠償請求するので首洗って待っとけ。
>>607 なんか君も君の周りの人間もよく理解していないような気がする…
(なんだ「論理式の論理和と違って」ってのは)
「論理積・論理和が短絡評価される」のも
「代入も演算子であり、右辺値を戻す」のも
C の基本中の基本で、態々そう設計されている。
それが判り難いというのは、C を理解していないことの言い訳。
まぁ、オレもそう思うけどな>基本中の基本 そういうことを言う奴もいるって話だよ。 出来るからって無制限にやってもいいかとか言う話。 (gotoにつながったw)
条件式の中で代入するのはわかり辛いのは確かだろ。 なぜならやりたい事(intention)が二つ以上入っているわけだから。
ふーん、分かり辛いんだ。。。 ぢゃ、EOFになったらループ終了するような文字入力、ってもしかして for(;;){ 文字入力 if(EOF) break; : } とかてしてるの?
>>619 あなた中学生レベルの英単語の意味もよくわかってないでしょう?
bool endOfFile = false;
do
{
文字入力
} while(!endOfFile)
いや、そーゆーことではなくて。。。
>条件式の中で代入するのはわかり辛い
って、
>>621 なコードを書いてるのではっきりしました(w
こんなこと↓言われる人も居るらしいですよ。この後かなり喧喧囂囂なレスが続いてるw
http://pc.2ch.net/test/read.cgi/prog/1050835338/540- 540 名前:仕様書無しさん[sage] 投稿日:03/10/26 22:23
「ほかの香具師が理解できないようなコーディングはやめるべきだ。」
なんて、もっともらしい理由で注意を受けたんだが、
char *to;
char const *from;
...
while( *to++ = *from++ & 0x7f ); // これが気にいらんらしい・・・
なんでやねん。
誰だよ、そんなアホなコード書く奴は
do{ *to = *from & 0x7f; ++from; ++to; }while(*(to-1)); 。。。うーん(w
>>623 ああ懐かしいコード。私もそうだったけど、確かにすぐにわかる人があまりいなかったな。
0x80が出た時点で変換終わっちゃうじゃん!という人のための修正コード while (*from? *to++ = *from++ & 0x7f, 1: 0);
3項演算子もカンマ演算子も後置炭鉱演算子の挙動も演算子の優先順位も 全て基本中の基本ですね!
629 :
仕様書無しさん :04/01/25 09:27
>>623 せめて括弧をつけてほしい
*to++ = ( *from++ & 0x7f )
でなくて 問題は
char const *from;
時代遅れがタムロするスレはここですか?
時代遅れ? まあありがたいことだ。 そんなわけで10年前の自分のソースを改変する仕事がやってくるわけか。
俺10年以上前からプログラム組んでるけど 10年前にはすでにこの話題でもめてたな まさか10年前と同じ人が未だに粘着してたりして…
>>632 実はCが出来た時から…
>>625 やっぱり英単語の意味わかってないでしょう?
私にはこれとか直感的に読めないよ < while(*(to-1));
俺、20年前からプログラム関係の仕事してたけど その頃はそんな話題でもめてなかったな。 みんなアセンブラ上がりだからなあ
635 :
仕様書無しさん :04/01/25 11:42
戻り値は const char* function char* function const char*と、char*どちらがいいのでしょう?
一見分かりにくい「式」と goto の使用による「非構造」とは 似ているようだけど全く意味合いが違うと思うけどな。 基本的に漏れは、いわゆるトリッキーな演算子の使用法については 処理系によって動作が「定義」されているのであれば全然 OK だと思うが、 goto はやっぱりまずいと思う。 いわゆる複雑な問題に対して一般的にとられる手法は「問題を分割せよ」だが、 その手法は複雑な「式」に対しては適用できるが、goto の使用による「非構造」な ロジックの塊には何の意味も持たない。 処理系によって「解釈された式」に「決定不能」となる要素が 絡むことが無い以上(しかも言語としてその動作が「定義」されている以上)、 それらを制限するのは無駄且つ有害なことだと思うが、どうよ。 (あと一応書いておくが、脊髄反射で反論しようとする奴は せめて「決定不能」という言葉の意味を理解してからやってくれよな、 たのむから。。。)
んじゃ、脊髄反射しとく。 処理系によって「解釈されたプログラム」に「決定不能」となる要素が 絡むことが無い以上(しかも言語としてその動作が「定義」されている以上)、 それらを制限するのは無駄且つ有害なことだと思うが、どうよ。
>>636 頼むから「決定不能」なんていう俺用語を使わなくてすむように、勉強してくれよ。
君が言いたいことにはすでに規定された用語があるのだ。
>>639 >頼むから「決定不能」なんていう俺用語を使わなくてすむように、勉強してくれよ。
>君が言いたいことにはすでに規定された用語があるのだ。
面白い。是非その「用語」とやらを教えてくれ。
>>640 君が何を言いたいかによる。
>処理系によって動作が「定義」されているのであれば
勉強すれば、こんな言い回しだってしなくてすむ。
implementation-defined 処理系定義 unspecified 不定 undefined 未定義
つか、コンパイル&実行できる以上、決定不能なはずがない。
処理系で定義されているトリッキーな演算子の使用は、できればしないほうがいいだろ。 趣味のプログラムなら別にいいが。
英語でなくては専門用語として認めないって事か? それなら undecidable と読み替えてくれ(w
>>644 そうなると問題になってくるのは、
もともと「トリッキーである」と判断する基準が曖昧である為に、
それを使用してよいか否かの判断に常に迷うようになってしまう事。
人や環境によっては
int a, b;
a = b = 0;
もトリッキーと判断されるかもしれない。
>>636 なんで『「」』をいちいち付けるんだ?
普通「」を付けるときはどういうときなのかわかってるよな?
>>645 642を見てピンと来ないのなら、C FAQを読め。
>>646 それは処理系定義ではない。
while( *to++ = *from++); // OK while( *to++ = *from++ & 0x7f ); // OK できれば優先順位を明確にする括弧が欲しい while (*from? *to++ = *from++ & 0x7f, 1: 0); // 氏ね
>>642-643 >つか、コンパイル&実行できる以上、決定不能なはずがない。
はぁ、、、こういう奴がいるから、わざわざ
「せめて「決定不能」という言葉の意味を理解してからやってくれよな」
って言っておいてやったのに。
>>650 だから、俺用語を使わずに、万人にわかる言葉を使えといってるのだが。
君の説明能力不足を、他人の読解力の無さにすりかえないように。
お話になりません。君と話すの時間の無駄。
>>651 まずは、自分の知らない用語を全て「俺用語」と断定できる
お前の自信が一体どこから沸いてくるのか教えてくれ。
はぁ?trigraphを使うなだと?
>>653 642同様、君と話すのやめるよ。馬鹿の相手は疲れるから。
>>653 あのさー、君がどの分野の用語かを言えばすむ話じゃないか?
少なくとも、この分野ではそんな用語使わないんだしさ。
>>636 つか、言語としてその動作が定義されているなら、普通のコンパイラで決定不能になるはずがない。
>>653 まずは、お前の文章を他人が理解できて当然であるし、それができるレベルの文章を自分は書いてるという
お前の自信が一体どこから沸いてくるのか教えてくれ。
知識のレベル不特定多数の居るこういう場所では「馬鹿をケナす」のではなく「知識のすり合わせ」 ―相手にわかるように言い回しをカエル―をしなければならない。 ってことでお前ら落ち着きたまえ。
>>660 >―相手にわかるように言い回しをカエル―をしなければならない。
google も使わない奴が何を偉そうに・・・
たぶんこいつの言いたい事は、
>>638 のリンク先でダイクストラが使っている意味の決定不能だろう。
for や IF を適切に使えば、 goto を無配慮に使ったコードと違ってコードが終わる事を決定可能 という意味でね。
ただし、for や if に関係なく、構造化プログラミングであれば コードの終了は決定不能だから、あんまり意味ないよね。
>>662 >ただし、for や if に関係なく、構造化プログラミングであれば コードの終了は決定不能だから、あんまり意味ないよね。
喩えるならば、
家の中(C言語の「式」のような限定された表現)で素っ裸になるのは勝手にやればよいが、
街中(プログラム全体)で素っ裸になるのはやめとけよ
って事。
あ、それとそのリンク先は読んでいないが、 漏れの言いたい「決定不能」とは もちろん計算機科学での「決定不能」ね。
goto使っても「決定不能」にはならんだろ?
goto 使うのと 計算機科学での「決定不能」とどう関係があるんだ? それとも for if だけで書ける事をもって角谷問題の証明の代用になると電波でも飛ばすつもり?
最低でも「何が」決定不能になる(ならない)のかを明言して欲しい…
goto を使う・使わないに限らず、 プログラムは決定不能になりうる。 そんな状況で goto を使ってわざわざ問題の分割を し難くするのは愚かではないかって事。
ははあ、言いたい事は goto はブロックをまたぐから さらに小さく分割するのに不便という事かい? でもさ、結局大きなブロックを書けば、それは同じなんだよ。 そして、それを説明するのに 計算機科学での「決定不能」 は全く適切ではないと思うぞ。 構造化プログラミングを語るなら、まず概念を構造化しよう。 それには、決定不能という概念を自立させる事だ。
とりあえず、必ず難しくなることを示してくれ。 もしくは、我田引水をやめろ。
それともう一つ、 トリッキーな「式」はそうではないので 規制するのはいかがなものか、と。
釣れてますなぁ。
「分かりやすさ」も問題になってるはずだが? 適切に分割するのも一つの手段では有るが。
>>669 >そして、それを説明するのに 計算機科学での「決定不能」 は全く適切ではないと思うぞ。
言葉が適切であるか無いかはその人の判断次第だが。。。
>構造化プログラミングを語るなら、まず概念を構造化しよう。
>それには、決定不能という概念を自立させる事だ。
概念の構造化???
概念の自立???
あまり聞かない言い回しだな。ググってみても、
ちょっと電波がかったページにしか辿りつかないし。
是非説明してくれ。
>>670 >とりあえず、必ず難しくなることを示してくれ。
過去スレを読め。
一体いつの間に goto 支持論者が復活してきたんだ?
このスレで散々叩かれたんだがな。
はぁ?示されちゃいねぇよ。 このスレで叩かれてるのは、状態遷移図にgoto使うと分かりやすいってやつだろ?
>是非説明してくれ。 自分では説明しないくせに、人には要求するのか…
>>674 そうさ、俺は電波だからな。
だが、キミにも同じ電波のニオイがするぞ。
まあ俺の判断なんだがな。
lこれも自分の判断次第の範疇だろう。
てゆーか、
>>642 の言葉を使って議論できない奴は低脳
そもそも概念というのは 構造化により構築されるものだ。 具体の集合が抽象により包括され観念となり、命名により概念となる。 しかし、命名のままでは人に概念を伝えるのに十分ではない。 具体の列挙、包括方針、観念の共有をへて、概念の伝達が可能なのだ。 これらはまさに構造化プログラミングそのものだ。
んで?
つづきは自分が書けよ。 一人で演説ぶってもつまらんじゃないか。
おれもツマランと思ったから、続きがあるのかと期待したんだが…
計算機科学での「決定不能」ってどういうことですか?
>チューリングは,停止問題が決定不能 (undecidable)であることを証明した とかいう文脈で使用される。
>>685 全然解りません。
使用例じゃなくて意味をお願いします。
こんな↓記述を見つけた。 算術モデルにおける 決定不能性とは、 述語の真偽を有限回の 手続きで決定する方法が 存在しないことを意味し、 述語関数が帰納的に 定義されていないこと、 テューリング機械で計算不能な ことと同値である。
命題に対して使われる場合、日本語で読んだままの意味でいいとおもいます。 このスレで登場したモノはなにか専門の意味があるらしいのですが。
>>689 >>636 は、「不定」か「未定義」かどちらかの言葉に当てはまることを言いたいんだと思うよ。
本人がその言葉を知らないからごねてるだけで。
>>688 少なくともプログラマなら知ってて当たり前の用語だと思うが。
>goto を使う・使わないに限らず、
>プログラムは決定不能になりうる。
が
>>636 と同一人物なら、
>>686-688 でいいと思うけど。
(でも最初といってること違うね。)
>>692 不定=定まっていないこと
未定義=定義されていないこと
>>693 ・処理系によって解釈された式に
・決定不能な要素が存在するかどうか
ですよ?
そしてその「式」とは、一見分かりにくい「式」のこと。
その一見分かりにくい「式」が処理系によって解釈さされる、これはわかる。
それと「決定不能」がどう関連するのかがさっぱりわからない。
>>694 そちらではなくて、「決定不能」の意味のほうをお願いします。
>>694 それらは「何によって」定まっていなかったり、定義されていなかったりするんでしょうね?
なんだ、他人に分かり易い文章を書けないのを棚に上げて、他人の読解力がないだとか 知ってて当然の技術用語を知らないだとかほざいてるアホだったのか。つまらん。
>>695 言語の、それもCの話をしてるんだからさ、
>>642 の用語を使ってくれよ。
普通みんなそうしてるだろ?
>>695 ん?あぁ、一応「決定不能になるような要素を使ってはならない」とは言ってないか。
gotoと式は、決定不能性を含む/含まないの違いがあるって言いたかっただけだよね?
(そうすると、構造化の話をなぜだしたのか分からなくなってしまうけど…)
>>700 知らないんだよ。だから処理系定義されてりゃバンバン使ってもOKなんてアフォなこと書くんだよ。
処理系定義されていれば使ってOKというなら、gotoだってOKじゃん。
だから、
>>636 は違う意味で使っているんだと思っていたが?
まぁ、本人居るんだから、答えてくれよ。
>>700 出直してこい。
>>701 (そうすると、構造化の話をなぜだしたのか分からなくなってしまうけど…)
別に「構造化」についてどうこう言ってはいないと思うが、
要するに言いたいことは
>>663 って事。
>>704 君は636なんだよな?頼むから、
>基本的に漏れは、いわゆるトリッキーな演算子の使用法については
>処理系によって動作が「定義」されているのであれば全然 OK だと思うが、
>goto はやっぱりまずいと思う。
>処理系によって「解釈された式」に「決定不能」となる要素が
>絡むことが無い以上(しかも言語としてその動作が「定義」されている以上)、
>それらを制限するのは無駄且つ有害なことだと思うが、どうよ。
の文脈における「決定不能」の意味を説明してくれよ。
>>704 その例えは意味不明。
詳しく説明するか、別の奴をお願い。
ヲィヲィ、処理系定義なものは使っちゃまずいだろ。
>>704 >「非構造」な
は構造化の話じゃない?
3段落目は明らかに構造化のことを意識して書いてるよね?
>>704 なぜ、出直して来い、となるのかわからないが、君が
>>642 の用語を正しく使えていないということは、
Cに詳しくないと告白しているのと同義なんだよ。
>>705 決定不能性についての教科書は何冊も出ている。
どんな優秀な教師でも1冊の本の内容を
数行の2chのレスで説明することは出来ないと思うし、
もし仮に出来たとしても、それを誤解せずに読める人は
いないだろう。正直、自分で教科書を探して
勉強した方がいい。
>>710 つまり、説明できないということですね。
>>710 てゆーか、君はどうして自分の文章にそんなに自信があるんだ?
わからんという奴がこれほどいるのに。
>>710 決定不能となる要素が含まれている式をひとつ示せばいいんだよ。
>711-712
結局「誰にでも」説明できる文章は書けないし、
そんな努力をするつもりも無い。
>>714 ありがと。その通りだね。
>>636 は、
「自分は正しいと確信している。だが、具体的なことを書くと自分には無意味に思える
反論が帰ってきてウザイ。だから、説明しない。」
という議論スタイルだね。激しく誠実でない態度だが。
(んでもって、自分は正しいと確信しているところがイタイw)
ということは
>>687 でもOKだね。
なぜ説明したりポインタ示したりするだけで済むのにこんなかけるんだ…
>>717 まあ、基本的に分からない言葉は自分でググるというのは
2chのお約束な訳で・・・
それもやらない奴らに千篇万語を費やしても仕方ないかなと。
あと、もう一回書いておくけど >そんな状況で goto を使ってわざわざ問題の分割を >し難くするのは愚かではないかって事。 必ず難しくなることを説明してくれ。 前レスや前スレに書いてあるなら、具体的なレス番号を示してくれ。
それって構造化プログラミングを提唱しているだけなんだけど…
344 名前:251[] 投稿日:03/12/10 02:04
>>338 ありがとう。ああやはり。私の記憶は間違っていなかった。
Go To Statement Considered Harmful
の内容は単に「構造化プログラミングの提唱」だ。
「gotoは有害を引き起こす」というのは単なるキャッチコピーだ。
#ダイクストラは自らのキャッチコピーに起因するgoto論争に嫌気がさして
#晩年はgotoと聞いただけで不愉快になったとも聞く
gotoの話は別にして、 「決定不能性」を含んでしまう可能性が無いからって規制しては ならないってのも乱暴だなぁ。 それともなんか根拠になるようなデータなり論文なりがあるの?
>>721-722 文章とは生き物。
キャッチコピーだから、本人の意図ではないから
といって、それが真実を語っていないとは
限らない。
>>722 前スレの251って私のことですよ。
それともそれは「矛盾の指摘」なのですか?
レス間に矛盾があるようには思えないのですが
んじゃ、キャッチコピーが正しかったことを示してね。よろしく。
>>723 ていうか、結局は本人の趣味の問題。
>基本的に漏れは、いわゆるトリッキーな演算子の使用法については
>処理系によって動作が「定義」されているのであれば全然 OK だと思うが、
>goto はやっぱりまずいと思う。
まずいgotoの使い方がまずいのは当然だ! まずい式の書き方がまずいのも当然だ! まずいプログラムがまずいのも当然だね!
>>727 まぁ、結局、規制問題に関してgotoと式には決定的な違いはないわけだしね。
そういうことか。
Cでgotoを使わない理由はただ一つだ。 うっかり使うとへまをする奴があまりにも多いからだ。 "使えない"のだ。
「gotoを使わないほうが良いと教える理由」だね。正解。
733 :
仕様書無しさん :04/01/26 00:34
while( *to++ = *from++); // 氏ね while( *to++ = *from++ & 0x7f ); // 氏ね while (*from? *to++ = *from++ & 0x7f, 1: 0); // 氏ね
で、結局636は
>>636 の内容を説明しなかったわけか。
>>718 君間違ってるよ。
基本的には、主張したい側が自説の説明をする責任があるんだよ。
それに君の発言でわからないのは言葉だけじゃなく、その内容だったんだけどね。
>>635 てか、
>英語でなくては専門用語として認めないって事か?
などという恥ずかしいこと書いて、それに気づかないってのが痛い。
今日、Cでgoto使っても怒られなかったYo
厳密には昨日だGa
大雑把には今月Da
ヘタクソはgoto使うな いじょ
じゃ、オレはへたくそじゃないので使います。
>>733 一番上の
while( *to++ = *from++);
は普通だよ。
というより文字列複写の定式化された書き方だと思うけど。イディオムっていうのかな。
逆に聞きたいよ。strcpy使わずにどう書くの?
strncpy
ヴァカ
提案:素人にあえてgotoを使わせる ・代入 ・if ・ifとgoto でも関数(とその呼び出し)は必要だな... ifとgotoが理解できたらループを教えて、以後はgotoを使わせない これ最強!
...あ、"演算"が抜けてら
>ifとgotoが理解できたらループを教えて、以後はgotoを使わせない ループを教える前にifとgotoだけで作られた他人のプログラムを解析させれば完璧
>>743 while( *to++ = *from++);
が旧世代C使いの標準的イディオムな事くらい知っている。
あなたはJavaやC#などの先進的言語がwhile文に真偽値しか受け付けない事も知っていますか?
さらに下位層が何をしようが俺に迷惑がかからなければ預かり知らぬ所。
strcpyがどのようなコードで実装されようが、それがインライン展開されようが同じ事。
あなたの言っている事はこのスレでたまに出る
構造化構文もjumpやbranch命令になる
などという当たり前すぎて無意味な発言と同レベル。
>JavaやC#などの先進的言語がwhile文に真偽値しか受け付けない へ〜へ〜へ〜
>>749 あなたの言っている事はこのスレでたまに出る
発言の前半と後半が関係なさすぎて無意味
>>749 ということは、
while((*to++=*from++)!=0);
なら問題ないわけだな。
七五三
>>752 まだだ。インテンションが複数あるからわかり辛い。
意図は、「ヌル文字が来るまでコピー」だろ? b=a*4+3は「aに4を掛ける」「それに3を足す」という2つの意図があるから、 複数行に分けるべきだ、とか?っと代入も分けないと! ・・・なんてね♪
あ〜るぅはれたぁひ〜るぅさがりぃい〜ちぃば〜 へつづぅくみちぃに〜ばぁしゃあがぁgoto goto
>>755 >意図は、「ヌル文字が来るまでコピー」だろ?
「〜まで繰り返す」というインテンションの表現の為に while というブロックがあるわけだが、
「繰り返す条件」と「何を繰り返すか」は別にしないとわかりづらい。
下記くらい書き下しておくべきだ。
_Bool isFromNull = ((*from) == 0x00);
while (!isFromNull)
{
(*to) = (*from);
++to;
++from;
isFromNull = ((*from) == 0x00);
}
なお、真偽値は if や while の条件式にそのまま使ってもよいが
整数型やポインタはそのまま使うべきではないだろう。
整数型やポインタに前置の!を適用するのもやめた方が良い。
>>757 cってプログラマの「短く書きたい」という要求が言語仕様に結実している言語なんだ。
cらしくない。印象は単に「冗長」。
>>757 それだとヌル文字がコピーされないんでないの?
無様ね…
>>757 >>755 の後ろの例、
「2つの数を掛け合わせる」というインテンションのために*が、
「2つの数を足す」いうインテンションのために+があるわけだが
それは分ける必要ないのかね?
分かりやすいか分かりにくいかが問題なら、オレは分かりにくくないと思うな。
>>749 >あなたはJavaやC#などの先進的言語がwhile文に真偽値しか受け付けない事も知っていますか?
あなたは C に「真偽値」などというものが存在しない事も知っていますか?
そーゆー言語なのよ、C ってのは。
まぁ、素直に書くとこんなところか。 while (*from != '\0') { *to = *from; to++; from++; } *to = '\0'; あとなんでもかんでもtypedefするのも嫌い。 コメント付けすぎなソースと同様にね。 >整数型やポインタはそのまま使うべきではないだろう。 オレは使ってもいいと思うね。 最近の言語でboolしかダメなのは、データタイプが増えてきて、 何を真/偽とするかが(一貫性を持って)決定できなくなってきているから。 Cはそんなこと無い。 まぁ、要するに分かりやすく書こうと努力するのはいいが、やりすぎは遺憾だろって話だ。
whileは、"繰り返す"ことと"〜で無くなったら終わる"という 二つのインテンションを含んでいる! 下記くらい書き下しておくべきだ。 while (1) { _Bool cond = ....; if (!cond) { goto loopend; } : } loopend: while構文の意味が無い? 言語的に記述可能ならなんでも書いていいと思ってるのか?
>>764 じゃ、char は文字というインテンションを含んでいるので、
文字の保管にしか使うべきではない、と?
>>765 「『charで宣言した個所』に複数のインテンションが含まれていれば問題ない。」
×含まれていれば
○含まれていなければ
だったw。惨め…
まぁ、マジレスされるとは思わなかったけどw、
>>764 はただの皮肉だよ?釣りですらない。
はぁ。。。何度言ったらわかるんでつか! 下記くらい書き下しておくべきだ。 goto loopchck; looptop: *to = *from; to++; from++; loopcheck: if(*from != '\0') goto looptop; *to = '\0'; 「繰り返す条件」と「何を繰り返すか」は別にしないと(w
>>759 ミスった。
>>761 「〜を計算する」というインテンションだからわけなくていい。
あまりに複雑になったらexplaining variableを使ったりして分けるけど。
>>762 節穴?_Boolって何だか答えてみて。
>>763 typedefは使うべきだよ。C使いのソースは変数名が型の名前とほとんど変わらない事が多いが、
structやtypedef名に型の意味を、変数名には型以外の情報を入れるべき。
ソースの修正はサンクス。
>>764 インテンションを語る前にあんたのレスのインテンションを確認しろよな。
気に障ったからって意味不明な事書くの恥ずかしくない?
>>765 charって名前はCの失敗の一つでしょうね。
byteかoctetにするべきだったと思う。
>>768 まさしくこのスレにふさわしいね。
それ以上の意味をなんら見出せないけど。
それより突っ込まれる予定の事が突っ込まれてないぞ。
俺がおまえらなら
isFromNull = ((*from) == 0x00);
が重複して冗長だと言うはずだ。
おまえらコードの重複に対してあまりにも無神経なんじゃないのか?
なんだかキモチ悪い奴が常駐してるね。
>「〜を計算する」というインテンションだからわけなくていい。 同じ種類だから一つにまとめられるの?a=b+c*dなら「代入」もインテンションの一つだよな? それとも、人間の意志としてのインテンションが大事なの?だったらwhile(...も一つでしょ。
>>770 >おまえらコードの重複に対してあまりにも無神経なんじゃないのか?
>>763 で指摘してるじゃん。ソースで。
>>757 も冗長だっていってるし。
>>763 には書かなかったけど、宗教的な理由でwhile()の中に条件式が
使えないなんて大変だなwとかオモタよ。
インテンションって何だよ?
intention 【発音】inte'n∫n 【変化】《複》intentions [名] 狙い, 意志, 意図, 概念 ◆ I have no intention of entering the Cabinet : 私は内閣に入るつもりは全くありません. ◆ What are your real intentions? : 実のところどうするつもりだ?
『同じ種類だから一つにまとめられるの?a=b+c*dなら「代入」も「意図」の一つだよな? それとも、人間の意志としての「意図」が大事なの?だったらwhile(...も一つでしょ。』 まぁ、意思でも意志いい。
goto文を使うとソースがわかりにくくなる事を実感するためには、 HSPをやってみるのが一番手っ取り早いかと
最近はBASICですら構造化の時代だからな。 ある意味貴重な存在かもw
日本語が良く理解できないらしい人は、まぁ、置いとくとして…
また変なのが来てるな
プログラム&インテンションでぐぐったら、Lyeeのページが多くヒットしてワラタ
>>782 あんた何故行くスレ行くスレでなんで自分の事を書いてるの?
無様ね…
37==743 よく燃える燃料を投下してしまったようですね・・・ #まぁいいか。燃えるかなっ試して見たかっただけだから・・・。もう燃え尽きたみたいだし。
最初から読んでみたけど、なんか 「gotoを使わない理由」 じゃなくて 「gotoを使わせない理由」 しか議論されて無いように見えるんだが気のせい? まぁ、むやみに使わせないのは正しいと思うが、 使わない理由では無いよなぁ…
789 :
仕様書無しさん :04/02/13 21:51
790 :
仕様書無しさん :04/02/14 05:02
>>789 検索文字列"goto"
2895ファイル、合計41301個所見つけました
でWindowsでは使いまくりだな。
用途は終了処理ブロック・エラーハンドル処理へのジャンプが大半。
まれに永久ループにも使っていたり。
自分もちょくちょくgoto使っているけど
それよりもかなり積極的に使っている感じ。
それでもgotoのとび先が分からないので大混乱というのは見た限りなかった。
一関数のサイズが小さいからなのかもしれない。
一部コピペ。識別子はいじってある。 こんな感じでほとんど規約化してあるんじゃないかというくらい使いまくり。 BOOL AAAA(BBBB *p, CCCC *p) { INT icol; HDC hdc; hdc = DDDD(p->hdc, 0, 0); if(!p->fDealt) goto Return; for(icol = 0; icol < p->icolMac; icol++) DDDD(p->rgpcol[icol], msgcPaint, (INT_PTR) p, 0); Return: HdcSet(hdc, 0, 0); return fTrue; }
こんなところにも漏れてるのな
>>789 ま、OS の場合は純粋に実行効率の為に
使用しているだけかもしれないしな。
794 :
仕様書無しさん :04/02/14 12:23
>>791 ひどいですね。明らかにgotoの誤用です。
BOOL AAAA( BBBB *p, CCCC *p ){
INT icol;
HDC hdc;
hdc = DDDD( p->hdc, 0, 0 );
if ( p->fDealt )
for ( icol = 0; icol < p->icolMac; icol++ )
DDDD( p->rgpcol[icol], msgcPaint, (INT_PTR)p, 0 );
HdcSet( hdc, 0, 0 );
return fTrue;
}
795 :
仕様書無しさん :04/02/14 12:49
ヌルポ
>>794 中カッコ無しで for や if 書くのって気持ち悪くならない?
>>791 は BASIC 屋上がりな気がするけど。
797 :
仕様書無しさん :04/02/14 17:27
>>796 そうですね
かっこなしのが 混ざってると
読み間違えることが、たまにありますね
>>793 速度優先なら、全部で40GBとも言われる巨大なプロジェクトでも許されるのか?
しかも、長期間継続的にメンテされるであろうコードに。
すげぇダブルスタンダードだよな。
>>798 ダブルスタンダードと言い張る前に、
マイクロソフトが goto の使用を禁止している
証拠を出してくれ。
800 :
仕様書無しさん :04/02/14 23:12
>>798 , 799
たぶん、そうじゃなくて、単純にアセンブラかFORTRN,BASICか何かに
馴れていた椰子が、c言語でお気楽に従来の作法で書いたんじゃないかあ?
791のサンプルは典型的なFORTRNのサブルーチンスタイルだよん。
きっとねえ、途中からcに言語転換した椰子が動きゃええやないのって書いたんだよ。
801 :
仕様書無しさん :04/02/14 23:19
あとねえ、確かノイマン型コンピュータの条件に、逐次処理、比較判定、ジャンプがあるからgotoレスは不可能という見方はないかい? ただ、c言語ではジャンプ文の使い方を分類してif,for,while,switch/case, {}文の中で見えないところに押し込めるから椰子がジャンプ文を使う必要はないという考え方をだしたんだと思っているよん。
>>801 >あとねえ、確かノイマン型コンピュータの条件に、
>逐次処理、比較判定、ジャンプがあるから
>gotoレスは不可能という見方はないかい?
小学生レベルのネタだな。
>>799 gotoはあったよ。でも、そのせいでスパゲティになるどころか、
むしろ綺麗で分かりやすいコードになってた。
>>801 不可能・・・ではないんです。
構造化定理というものがあって、連接/選択/反復によって全ての論理は表現可能である
と証明されています。
ですがもちろん、「可能である」ということは「最善である」ということを意味しません。
>>803 の様な感想をもつ人もいるわけです。
今日、数学1+A 数学2+Bの模試があったんですよ。進研模試。 で、なんか、選択問題にプログラミングとかあって、 BASICのソースが二十行ばかり並んでるんですよ。 もうアホかと、馬鹿かと。 おまえらな、今ごろインタープリタのBASICなんか問題に出してるんじゃねえよ。 BASICだよ、BASIC。 このとき、goto文の後に入る行番号は?、とか言ってるんです。 おまえらな、せめてCにしとけと。 ソースコードって言うのはもっと目で追いやすいコードであるべきなんだよ。 goto文なんて多量にネストされたループからの脱出以外にはあまり使われない。 それがいいんじゃねえか。80年代の遺物はすっこんでろ。 ともかく、BASICはひどく読みにくいソースコードでした。 goto文の後がふせてあり、どの行番号に飛ぶか、という問題でした。 Cでループを使ったらスマートに書けるのになあ。 まるでHSPです。
806 :
仕様書無しさん :04/02/15 13:51
>小学生レベルのネタだな。 あおるなや。 アセンブラをみればgoto文が必須であることがわかるべ。 高級言語で、 >構造化定理というものがあって、連接/選択/反復によって全ての論理は >表現可能であると証明されています。 このように整理して追放できると言いたかったのだよ。 試しにif文のアセンブルリストを出力してみそ。 本人は奇麗なプログラムを書いたつもりでもアセンブルリストに してみるとJump文(gotoのことね)がスパゲッティのように とぐろをまいている。 goto文は使わないようにすべきであると思うが... 馬鹿だからgotoを使うという雰囲気はやだな。
>gotoレスは不可能という見方はないかい? という文から >このように整理して追放できると言いたかったのだよ。 という主張に辿りつくまでの論理が俺には理解できない。
どこかで拾ってきたM$のソースコードにはgotoが40000個ほど使われてますた。
>>805 べしっくは厨の時にN88ちろっといじっただけなんで、
センター試験に出すならCにしてホスィ…
Cなら試験にでてもかなり自信あるけど
漏れが受ける頃にはまだべしっくだなぁ…
最後にgoto打ったのいつだっけか。。。
810 :
仕様書無しさん :04/02/15 20:46
もうループしかしないな、このスレ。
if(i==1002)break;
C20xxでは是非gotoにthrow/catch、 せめてsetjmp/longjmpと同等の機能を持たせて頂きたいね したらgoto復活すんべ
×throw/catch ○try/catch
>>796 >中カッコ無しで for や if 書くのって気持ち悪くならない?
全然ならない。不要な中カッコを書くほうが気持ち悪い。
>797
「読み間違える」のは「ぶら下がりelse」だけだから、そこには必要な中カッコを書く
>>815 なんだっけ?必ず括弧をつけるのは、
if (hogehoge)
foo();
を修正やデバッグのために
if (hogehoge)
foo();
bar();
とか(不注意で)修正してしまってエンバグしてしまうのを防ぐため、だったかな?
聞いたときはそんな馬鹿な奴いるのかよ?とか思ったものだ。
if (0 == hoge) { ...
とか書くのと同じかねぇww
>>791 は所謂典型的な例外処理の形じゃない?
if(!p->fDealt)
goto Return;
みたいな部分が複数個あると、
>>794 みたいに変換すると
ifのネストがすごいことになるよね?
>>816 いるんだなこれが。
それに、そのソースコードを一生責任持って保守なんて無理だし。
だから漏れは for/if には常に中カッコつけるし、if (0 == hoge) { ... も使う
>>817 例外処理を1個の関数にして、その関数の中での例外処理も、1個の関数で処理すればよかろう。
でも、関数呼び出しのオーバーヘッドを考えると、gotoの方がいいのだろうか…?
>>816 if (hogehoge)
foo();
は、
if (hogehoge) foo();
って書くからバグらないよ。「ぶら下がりelse」ってのは
if ( foo )
if ( bar )
baz = hoge;
else
baz = boo;
みたいに、else部分を読み誤る場合のこと。
>>818 ああ。「そんな馬鹿な奴」、確かにいるよ。そして
>そのソースコードを一生責任持って保守なんて無理だし。
も正しいよ。
でもそれが常に中カッコつけるのにつながるのはムリが在るような気がするなあ。
正しく修正しないと正しく動かないのは当たり前だし。
>>819 その場合は、gotoよりもマクロ化のほうが良いと思われ
823 :
仕様書無しさん :04/02/16 06:36
ある処理をどこから呼び出しているのか調べようと思って #define Hoge() Hoge(); fprintf(stderr,"%s%d\n",__FILE__,__LINE__); ってしたら、ブレイス省略していた所がダメダメになった。 #define Hoge() { Hoge(); fprintf(stderr,"%s%d\n",__FILE__,__LINE__); } ってしたら、なんとHoge()に戻り値があった事が発覚。 やっぱりダメダメだった。 はじめから常にブレイスつけてればすぐにバグ修正できたのにー! この件についてブレイスつけない派の意見がききたい。
return_type HogeWrap(char* file_name, int line_number) { fprintf(stderr, "%s %d\n", file_name, line_number); return Hoge(); }
#define Hoge() (fprintf(stderr,"%s%d\n",__FILE__,__LINE__),Hoge())
>>819 俺は逆にそこまでしてgotoを排除しなくてもイイのでは?と思ってしまうわけだが。
その関数で行ったことはその関数内で始末をつけるということで一貫性も保たれるし、
定型的に使用されるなら分かりにくくなることもない。
(でWindowsでgotoが使われているのはそういうことではないか、と思うわけだ。)
>>823 >なんとHoge()に戻り値があった事が発覚。
>はじめから常にブレイスつけてればすぐにバグ修正できたのにー!
…そう思うか?
必ず{}つけると言う規約がたとえあったとしても、 本当に全てに{}が付いていると仮定するのは危険だ。
cだから { int i; for ( i = 0; i <=maxi ; i++ ) hoge( i ); } みたいに、変数iのためだけにブレイス書いてみたりする
全角と半角が入り混じってる・・・('A`)
>806 しかしですね。 何もCで言うところのwhileループの変わりにしなくても……。 仮にも(何十年前の?)高級言語なわけですから。 BASICは方言だらけの言語だという認識があるのですが、 ループする命令のひとつぐらいはないのですか。 >809 あぁ、それなら数学も好きになれるんだけどなぁ。
・・・真剣の模試
>ある処理をどこから呼び出しているのか調べようと思って grep
C99 なら for(int i = 0; i<=maxi; ++i) hoge(i);
C99 といえば、正式に // 以降、行末までがコメントになったNe
836 :
仕様書無しさん :04/02/18 00:46
windows_2000_source_code でも goto 使いまくりなのを知って勇気付けられますた。
ミンゲンヒ〜ナ〜
Windowsソースの援護によりgoto擁護派の完全勝利!!
>>838 「goto擁護派」って
「goto禁止の規約が存在するにもかかわらず、goto使う人」じゃなかったでしたっけ
「規則を守るか守らないか」と
「goto使うか使わないか」というのは全然別の議論だと思いますが
842 :
仕様書無しさん :04/02/18 17:01
結局
>>791 はなぜ駄目なのかという具体的な指摘はなかったな。
>>819 は関数分割のタイミング・指標としては完全な下策だし。
# finallyブロックをいちいち別関数に切り出せと?
>>819 はこのスレには居ないと言われてたgoto否定原理主義者なのかな?
>>841 むむ。やっぱ安易な釣りはいけませんな。
まぁ、「gotoを使わせない理由」は有る(これが規約の話)が、
「(わざわざ)gotoを使わない理由」は無い、という結論がもう出てるから
これ以上議論することも無いわけだけど。
MSのソース流出事件は↑の結論の妥当性を再確認させてくれましたね。
みんあ、MSがバグバグなのは後藤のせい、って考えられないか?
安置は具体的な話が全く出来なくなったな
>>846 過去のバグの流出したソースで対応する部分を見つけて、
gotoのせい(と思われる痕跡がある)か検証してみてくれ。
結果を報告してね!待ってる。
MSのソースで使ってりゃOKというなら 定数ベタ書き連発もOKだな。
安置は具体的な話が全く出来なくなったな
>>894 オレはまだソース見て無いんだけど、連発してるの?
それは、
>>849 から見てまずい使い方が大半なの?
もしくは、すべての定数はdefine, enumしなければならないという原理主義者?
数値定数で許されるのは、0と1だけ。 文字定数はハードコード不可 文字列定数の場合は・・・少し難しい。 ハードコードされている方が判りやすいという事情もあって、 把握出来ないほど多数使う文字列定数のみconst char * にする。 define は時代遅れ
うわ、やっぱり原理主義者が居るんだ…。 何でもtypedefしちゃう人と同じ人かな?
>>852 しまったー!
こないだ書いたコード、1時間を 3600秒と決め付けて
ハードコードしたまま納品しちゃったよ!
そうそう、うるう秒をちゃんと考慮しないと。 (論点が違う?)
>854 #define SECOND_PER_MINUTE 60 #define MINUTE_PER_HOUR 60 #define SECOND_PER_HOUR (SECOND_PER_MINUTE*MINUTE_PER_HOUR)
gotoがだめだ、って言ってるやし ソース見て分かる唯一ダメ(と世間で言われている)ぽいんとだからだろ? クラスの分け方がダメだなぁ、とか話できないもんナ(w
もう終了ってことでよろしいか?
そろそろ、まとめて
・gotoの構文糖を積極的に使え ・while,if,switch/case等 ・Cにない構文を再現する為にgotoを使うのはあり ・try/catch/finally, 多重ループからの脱出等 ・gotoを使わない為にがんばりすぎてはいけない ・バランスの悪い関数分割をしない ・他人の書いたソースを無理に書き換えない ・掲示板等でgotoを見つけても(そのことで)攻撃しない ・M$のソースを嫁
できれば「goto使うな」の方も...
>>862 ・一度しかループしないブロックにforを使ってはいけない
・for(i=0; i<1; i++)等
なんて言い方に意味あるか?
ifはgotoの糖衣構文なのか!? それはともかく、糖衣構文にbreak, continueも入れといて(関数途中のreturnも入る?)
gotoを使うなと主張している意見をまとめてくださいという意味でした
>>864 >ifはgotoの糖衣構文なのか!?
昔こんなコードをよく書いてたから個人的には構文糖なんだけど。
話が長くなりそうだから削っとくか。
100 IF A=1 THEN GOTO 120
・・・
110 GOTO 130
120 'ELSE
・・・
130 'ENDIF
>>862 =
>>865 採り上げるべきまともな主張が全く見当たらないんだけど。
37と愉快な仲間たちがなにか有益な主張をしてたんなら教えて。
>>866 それは if ではなく if goto だne
>>867 >if goto
こういう表現初めて聞いたんですけれでも
よかったら原典ご教授願えませんでしょうか
#define JMP(d) goto d;
if-then-gotoも構文糖だわな
871 :
仕様書無しさん :04/02/23 10:26
>>868 確か、
if x then goto yy を if x then yy とgoto の方を省略出来るんだったような
いや、 then そのものを省略出来たんだったっけ?
あれはポケコンだったっかな?
>>866 >昔こんなコードをよく書いてたから個人的には構文糖なんだけど。
それはifの機能じゃないですよ。強いて言うならブロックの機能?
C言語ではifはif以外の構文を用いては実現できないんだから(関数ポインタでごにょごにょするの除く)、
プリミティブな構文の一つでしょう。したがって糖衣構文ではない。
873 :
仕様書無しさん :04/02/23 11:46
>>872 if は 3項演算子やcaseで代用出来そうだが?
case( (a==b)&1){ 1:goto xx;};
ハッ ・・・・休日のDel遊びのクセが
gotoは式ではないんで、3項演算子では使えませんな。 まぁ、3項演算子が「選択」の機能を持っているのは確かだが。 というか、極論すると、gotoもwhileもforもifもswitchも使わなくても3項演算子と関数のみで 全てのプログラムが記述できますよ、と(多分)。末尾再帰が無いのが残念だね!
ほら話が長くなったよw おまいら正直gotoなんてどうでもいいんだろ・・・
わかってるんなら、そんな微妙な話題をまとめに入れるな、と。 しかもこのスレ敵に重要な、break, continueが入ってないし…
>>875 3項演算子無くても関数ポインタあればなんとかなるね
関数ポインタの配列添え字を演算で出せばいい
糖衣構文かどうかとう文脈上だと、それでは「なんとかなる」とは言わない予感。 同じようなことは実現できるけど、whileをgotoとifで書き換えるのとはレベルがちょっと違うよね。
論点はそこじゃないし。 はっきり言ってそんなのはどうでもいい話だな。
いや、論点はそこだよ。 はっきり言ってgotoの糖衣構文はbreak, continueだけだろう。
・・・本末転倒もいいとこだな まぁ好きにしてくれ
???わけわからん。 まぁ、ifを糖衣構文だと言うくらいだからなぁ… つっかかったオレが悪かったYO
糖衣構文って「ある構文と等価でかつ人間にとって書きやすいように簡略化された構文」
(シンタックスシュガー)のことですね。
#読みやすいかどうかはケースバイケース
ifの場合、読みやすくも書きやすくもなりますけど・・・
「ifはgotoの糖衣構文」はあきらかにツリのような。
>>866 あなたもベテランですか・・・
>>872 そうですね
>>876 >gotoなんてどうでもいい
yes.仰るとおりです。しかしながら、goto禁止を唱える人の無明さは「どうでもいい」問題ではありません。
goto禁止が高品質(この場合の品質特性は可読性と保守性)なプログラムを書くための方法論の一部である
と思っているなら、なおさらです。
goto誤用をしたプログラムの保守で苦しいあるいは苦しんだという経験を軽視する訳ではないのですが、
「gotoを禁止すればgoto誤用はなくなる」という短絡的な判断をせずに、
goto誤用を防止するために、何をすればよいかを考えるべきだと思いますよ。
#まあ題材がgotoであるだけであって、cに話を限っても、「大域変数」「三項演算子」「論理構造化」「データ構造化」「識別子命名」
#等々の、粒度/レベルのさまざまな題材はほかにもありますね
#ありていに言えば「gotoなんてどうでもいい」と考える様になって欲しい
>>881 いや確かに、それは正しいのだけど・・・。釣られすぎのような・・・
#知らなかったなあ。私には「愉快な仲間」がいるのかあ
「何をすればよいか」の答えの一つがコードレビューですな。 まぁ、俺的にはプロジェクト員の構成によってはばっさり禁止しちゃっても いいと思ってるが。 ただ、そういう何でもかんでも禁止という規約文化を他のプロジェクトに 輸出(というか俺の居るプロジェクトに輸入)して欲しくないなぁ。
ずっと疑問だったんだけど、gotoを禁止することでコードの品質が劇的に向上した、とかの事例って有るの?
>>886 劇的に悪化するのが防がれたかもしれない。
しかしそれは、シュレディンガーの猫だ。
>>887 は?シュレディンガーの猫?
言わんとすることはわかったような気がしなくもないけど、
それでもやはり用法を誤っているのではなかろうか。
あるいは、どこかの新しい猫ですか?
シュレディンガーの猫を検索してたらフィギュアに捕まっちゃって戻るのが
遅くなった。
>>887 なるほどね、観測(解釈)不能ってことか。
規約を導入せず惨憺たるコードが生成されてしまった例は枚挙に暇がないが、 その例で規約を導入したとしてもまともなコードになったかどうかはわからない。 規約を導入し、かつ、まともなコードが生産された例も枚挙に暇がないだろうが、 規約を導入しなかったら惨憺たる結果になってしまったか否かは検証不能。 ・・・とこんなところか。 両方を体験して、有意に違いがあると言い切れる人はいないものか。 やっぱりgoto禁止(などの多くの規約)はただの気休め?
そう、生きているとも死んでいるともいえるのだ。
ところで、観測と言えば
同一仕様のプロジェクトをふたつやればいいだけでは? 要員の能力差が気になるなら、何個もやる。 巨額の資源が必要だけど(w
895 :
仕様書無しさん :04/02/25 22:05
>>894 南極といえば「けっきょく南極大冒険」【ループゲーム】。
goto スタート地点;
けっきょく南極大冒険といえば、夢大陸アドベンチャー。 こっちはショートカットgotoゲームだ。 しかも、ポーズ回数というグローバル変数によってエンディングが変わるという凶悪さ。
897 :
ブッシュ大統領 :04/03/15 15:14
三大悪の枢軸国の紹介 C++帝國(北朝鮮) ← C++厨代表の正体は、何と! 金正日だった! VB帝國(イラン) ← VB厨代表はイランに潜伏していいた! Perl帝國(イラク) ← Perl厨代表フセインがついに逮捕された!
Java帝国(オウム) ← Java厨代表は何と!地図夫(趣味:ソフマップ通い)だった!
Ruby厨、OO厨、Lisp厨、Smalltalk厨、アセンブラ厨、HSP厨なども定義してくれ!
高 橋 と 長 嶋 い な い ア テ ネ 五 輪 ばせう
ニッポン勝った!
902 :
仕様書無しさん :04/04/11 18:24
http://d.hatena.ne.jp/sasayuki/20031108 2003-11-08
■ [豆知識][プログラミング]
今、2chでは『Cでgotoを使わない理由を考察するスレ』ってのがあって、その中に↓のようなものがあった。
539 :仕様書無しさん :03/11/02 05:42
さっき最近自分が書いたコードを眺めてみたが、2000行中gotoは一個も無かったなぁ。VC。
BASICでgoto 行番号なんて書いてたのは今思うと狂気の沙汰だと感じる。再利用性なんて考えたことも無かったあの頃。
今更goto使うところなんて無いんじゃない?エラー処理もtry〜catchやdo〜break〜while(false)で代用できるし。
do〜break〜while(false)で代用ってのは思いつかなかったなぁ。一応覚えておこう・・。gotoのないphpなんかではこれ使ってgotoを実現できるんだろうなということもメモ。
こいつ頭悪そうだな。オブジェクト指向くらいちゃんと学べや
>>903 >オブジェクト指向くらいちゃんと学べや
って言いたかっただけでしょ?
do〜while(0); は何がしたいのかを的確に表してないから
避けるのが無難。
素直にブレークダウンさせれ。
do 〜 while構文を本来と違う意味に捻じ曲げて使ってまでgotoをなくしたいのかよw ・・・とか反論されたレスだな。
906 :
仕様書無しさん :04/04/13 15:47
結局、所詮 C なんだから goto 使おうが使うまいが関係ねーって
まああれだ、Cすらまともに扱えないマは自然淘汰されるって事で。
まぁ、gotoや大域ジャンプを使っても大概問題ない使い方が、 最新の言語で言語仕様として取り込まれてるんだから、 その辺を参考にしろってこった。
つーか、goto使ってソースが複雑になるのは低能力なマが原因。 だから、むしろgotoを使わせてスパゲッティーコード書く奴を あ ぶ り 出せ。 ちなみにミートソース・スパゲッティーは自分でソース作るほど大好きだがな。
もれはスパゲッティ・ミートソースだな
レバニラとニラレバ ライスカレーとカレーライス
ソックリとクリソツ ハワイとワイハ
スパゲッティ・アルゲリータ
914 :
仕様書無しさん :04/05/13 20:30
>>909 入れ子のswitch〜caseの下から抜け出す時とかたまに使うぞ。
仕事で組んだこと無いんだろ?
916 :
仕様書無しさん :04/05/14 12:14
傾向として、「組む」と表現する奴はかなり素人に近い。
しかし
>>915 にはそれ以前に
>>909 >ソースが複雑になるのは
日本語が読めない。という大きな問題がある。
917 :
仕様書無しさん :04/05/14 12:25
入れ子のswitch〜caseを平気で作れる時点で 自分は無能だと自白しているようなものだが。
>>917 多分岐の入れ子は確かに感心しないですね。「無能である」とは思いませんが。
「関数単体の複雑さを、どの程度まで低減させるべきか」についての認識が違うのでしょう
プログラムの構造設計自体に問題がありますね
919 :
仕様書無しさん :04/05/14 19:45
>>918 昔のWinProc では結構良く見たけどね。
Msg で一段 wParam で一段って作り。
920 :
名無し@沢村 :04/05/14 20:11
おまいらよ、Cでgoto使わなくたって、goto使ったバイナリコードに翻訳されるんだから、同じことだよ。
921 :
名無し@沢村 :04/05/14 20:20
break文、cotinue文などはすべて、goto文のバイナリに翻訳される。 またfor文、while文、switch文などを使うと、必ずバイナリにgoto文が混じることになる。 強いていえばif文とelse if文は注意深く書けば、無条件分岐のgoto文を使わず、すべて条件分岐文だけで澄まされる可能性がある。 だがif文の最後にelse文をつけるな。elseを書いたら、必ずgoto文が使われるぞ。 おまいらよ、これがバイナリにgoto文を使わない方法だ。
ソースは「プログラム」ではありません ソースは「プログラムの表記」です
プログラム 〔program=「実行に先立ってその手順を書いたもの」の意〕 1 〔演芸・放送などで〕出し物の名と順序・時刻などを書いたもの。プロ。 2 計画。予定。また、それを表にしたもの。 3 ―する コンピューターに実行させる△計算(処理)の手順を、コンピューターに受け入れ可能な一連の命令文の形で並べて△書いたもの(書くこと)。コンピュータープログラム。 用例・作例 ―を組む〔=作る〕 Shin Meikai Kokugo Dictionary, 5th edition (C) Sanseido Co., Ltd. 1972,1974,1981,1989,1997
924 :
仕様書無しさん :04/05/14 21:17
goto使ったからって、コードの見通しや見栄えにさほど影響は ない。ただし、俺は最初にBASIを覚えてコードを書いていたので 使いたくない。一種のトラウマですな。
BASI ってなに? BASIC です。疲れているのか、今日はいつ帰れるのか・・・・・・・
926 :
名無し@沢村 :04/05/14 21:23
>>924 >goto使ったからって、コードの見通しや見栄えにさほど影響はない。
さほどじゃねーよ。全々影響ねーよ。
goto使わなくたって、バイナリじゃgotoが出てくるんだからよ!!
927 :
名無し@沢村 :04/05/14 21:29
WinMain関数をバイナリレベルで見ると、いきなり最初のコードがgotoって知ってるか?
>>926 >goto使わなくたって、バイナリじゃgotoが出てくるんだからよ!!
なら、全てのプログラミング言語はバイナリコードに翻訳されるんだから、
プログラミング言語なんてものは不要だな。
929 :
名無し@沢村 :04/05/15 05:17
オブジェクト指向も同じこと。 いくらソースレベルでオブジェクト指向やって知的ぶったって、 バイナリじゃオブジェクト指向になってないんだから意味ねーよ。
930 :
仕様書無しさん :04/05/15 06:36
gotoといっても、使い方次第。
やたらと使うものではないが、goto使ったほうが奇麗に
処理できるものもある。
ただ、バイナリになればgotoが出てくるというのは
おかしい議論だな。
C言語のソースと、それがコンパイルされたオブジェクトを
比較するのは、ちょといきすぎだと思うぞ。
>>928 や
>>929 は、まあ、煽りなんだが、どうしたんだい?
何かいやなことでもあったかい?
>>930 多重ループからの脱出ではきれいに書けると聞いたことがあるが、
仕事してて使ったことは一度もない。
昔、仕事していたところで、
あの人のソースgoto使っているんだって初心者だねえ、という発言を聞いたことあるし、
同じ時期、gotoを使わないでください、っていうアナウンスが流れた。
>>1 マジレスすると、Cが構造化プログラミングで設計されているから。それだけでしょ。
LISPで安易にループを使うと馬鹿にされるのといっしょ。
>>930 沢村はそういうキャラなので放置してください。
こいつの面白いところは天然バカなのかマジなのか、判断を迷わせる部分なので(w
>>932 =沢村
>こいつの面白いところは天然バカなのかマジなのか、判断を迷わせる部分なので(w
それを面白がっているのはお前だけだよ
>>931 マジレスすると、Cでgoto使わざるをえない所なのに無理して使わないのはアフォだって
>>1 は。それだけでしょ。
>>935 マジレスなんかすんな。
>マジレスすると、Cが構造化プログラミングで設計されているから。それだけでしょ。
>LISPで安易にループを使うと馬鹿にされるのといっしょ。
こんな事言ってる奴だぞ、
>>931 は。
>>937 「構造化プログラミングで設計」が既に意味不明だが、
C の言語仕様の何処が構造化プログラミングに関係しているのか
説明してもらうかな。
…構造体があるから、とか言うなよ。
あと制御構造なら FORTRAN からあるからな。
>>938 偉そうにw
制御構造があるからに決まっているだろ。
FORTRANの頃からあるから何だって?
構造化プログラミングの提唱はFORTRANよりも後かもしれないが、
制御構造を取り入れているということは、順次、分岐、繰り返しで書ける事を
経験的に取り入れているのは明らかだろ。
まあ、俺が知っているFORTRANの仕様は77だけどな。
むかつくのでこのスレはもう見ない。
941 :
仕様書無しさん :04/05/29 11:40
>>931 >仕事してて使ったことは一度もない。
おまいさんの言うgotoとはジーオーティーオーという綴りのことか?
フラグ立ててreturnの連鎖を作ったり、if breakだの、ループの途中でreturnだの、
やらない人の発言には聞こえないな
ぬるぽの中の人が後藤さんだってことに気づいてないやつ痛杉
>あの人のソースgoto使っているんだって初心者だねえ、という発言を聞いたことあるし、
聞いたことあるのは解ったが、肝心なことが書かれていない
つまり、お主のリアクションはどうだったかと・・・
ちなみに正解は (プ
>Cが構造化プログラミングで設計されているから
SP用に設計されてるってのは間違ってないのに
安易な表現で書くと、ほら馬鹿にされた・・・
SP用に設計された言語の特徴が人に聞かなきゃわかんないレベルの人にまでw
GOTO禁止でいいだろ おしまい
・・・エンドレスだなぁ 「こんなところで禁止なんて決めても何の意味もない」って何度いえば理解できるんだか まあ自分の考えを表明するのは勝手だけどね
printf("gotoの使いすぎです。\n") goto 943;
946 :
仕様書無しさん :04/05/29 18:44
switch caseで状態遷移を表現していると、遷移条件が複雑になった場合、 caseもラベルの一つだから、どこからジャンプしてきたのかわからなくなり、 結局、gotoを使ったのと同じややこしさになる。 プログラムを一読しただけではフローが思い浮かべられなくなる。
947 :
仕様書無しさん :04/05/29 18:50
>>946 必ずbreak;を書くようにして串刺し実行をさせないようにしてればgoto的なデメリットにはならないよ
つーか巨大なswitch見てると関数ポインタ使えないアフォをぶん殴りたくなる
948 :
仕様書無しさん :04/05/29 19:03
>>947 >
>>946 > 必ずbreak;を書くようにして串刺し実行をさせないようにしてればgoto的なデメリットにはならないよ
breakはしてるけど、次のステートへの遷移条件が
case HOGE0:
if(foo == 0){
state = HOGE1;
}else{
state = HOGE2;
}
break;
だったりするので、いまいち。
> つーか巨大なswitch見てると関数ポインタ使えないアフォをぶん殴りたくなる
ぶん殴りたくなるようなプログラムのデバッグを、今、してるところ_| ̄|○
こんなの書くなよ、ホントに。。。
つかレベル低すぎ、このスレ。
950 :
仕様書無しさん :04/05/29 19:38
951 :
仕様書無しさん :04/05/29 19:42
>>948 stateが待ち行列じゃないとこ腐臭がするな
>>949 × このスレ。
○ この板。
まあネタ隔離板だしな。
953 :
仕様書無しさん :04/05/30 09:57
自分はレベル高いって言いたそうだなw
>948 おまいのコードを見て同じこといってるやしが・・・
#define gogo goto これでgotoつかうのが楽しくなるだろ。
( ´・∀・`)へー
#define itteyoshi goto のがいいな
960 :
仕様書無しさん :04/06/06 01:09
#define orz goto hell
テスターに嫌な奴がいる時はこれがお勧め #define goto if(rand()%100>=5) goto
962 :
仕様書無しさん :04/06/08 20:20
#define orz goto hellBOOL foo_func(){ : if (doHoge(....) == FALSE) orz; if (doHage(....) == FALSE) orz; : return TRUE;hell: abort();}
Cでgotoを使わない理由は...ない!
Cでgotoを使う理由は...ある!
Cでgotoを使わなければいけない理由も...ない!
Cで、なんでここでgoto使ってんだヴォケ、とか、どうしてここでgoto使わねーかな(w、とかは...たまにある
ところでこのスレって、アンチ goto 派の中で、拡張 goto、(つまり return, break とか) まで 禁止する or したいと思っている人ってどのくらい居るの?
968 :
仕様書無しさん :04/06/13 17:51
あれのどこが拡張だよw 縮小だろうがよ 禁止って用語は論点先取 始める前に終わってる議論だ
制限付 goto だったかスマソ
970 :
仕様書無しさん :04/06/14 19:38
全く無制限 最長不倒プログラムへの 自衛策をやっていると 結果的に頻度が下がる
971 :
仕様書無しさん :04/07/17 22:29
>>963-965 他にいろいろ立てたら?
Cでifを使わない理由を考察するスレ
Cでwhileを使わない理由を考察するスレ
Cでforを使わない理由を考察するスレ
Cでdoを使わない理由を考察するスレ
Cでswitchを使わない理由を考察するスレ
Cでbreakを使わない理由を考察するスレ
Cでcontinueを使わない理由を考察するスレ
Cでstructを使わない理由を考察するスレ
Cでunionを使わない理由を考察するスレ
Cでintを使わない理由を考察するスレ
Cでfloatを使わない理由を考察するスレ
Cで#defineを使わない理由を考察するスレ
CでCを使わない理由を考察するスレ ...C++でつよ、それ。Cとは違いますってば。
>>972 なにが「でつよ」だC++だからC的記述を排除するスレ
の方がおもろいぞ。
974 :
仕様書無しさん :04/08/18 21:41
恣意的な記述
問題はgotoとbreakとコンパイルした時どっちがバイナリ小さくなるかじゃないのか? ケースバイケースで使い分けろよ
また変なのが現れた。
すこしほのぼのするけどw
978 :
仕様書無しさん :
04/08/24 18:56