1 名前:仕様書無しさん mailto:sage [2007/07/06(金) 14:42:11 ] この会社辞めようと思ったソースコード。 プログラマとして幻滅するソースコード。 プログラマを悩ませるソースコード。 をつらつらと綴っていって頂戴。 ちなみにここは質問スレじゃないので 技術的な質問がしたいならム板 pc11.2ch.net/tech/ に逝って。 前スレ この会社辞めようと思ったソースコード#16 pc11.2ch.net/test/read.cgi/prog/1175485506/
18 名前:仕様書無しさん mailto:sage [2007/07/07(土) 02:25:28 ] >>16 おまえのソースで辞めたくなったヤツ多そうだな。
19 名前:仕様書無しさん mailto:sage [2007/07/07(土) 02:28:16 ] >>17 >>18 書いておくけど Dim Data1(1 to 6) As Integer の部分は前スレ998をコピーしただけだから。
20 名前:仕様書無しさん mailto:sage [2007/07/07(土) 02:29:48 ] while(rs.next()) { ~~ break; } を見て嫌になった。本人に↓と同じ意味だよね?と確認しつつ直した。 if(rs.next()){
21 名前:仕様書無しさん mailto:sage [2007/07/07(土) 03:01:48 ] >>20 何か問題でも?
22 名前:仕様書無しさん mailto:sage [2007/07/07(土) 03:10:39 ] >>21 詳しく書かなかったから伝わらなかったかな。 while(rs.next()) { System.out.println("hoge"); break; } って書けばわかるかな。
23 名前:仕様書無しさん mailto:sage [2007/07/07(土) 03:16:32 ] あー、無条件にbreakしてるのか
24 名前:仕様書無しさん mailto:sage [2007/07/07(土) 03:23:34 ] >>23 そうそう!そうなの。そういえば更に思い出したんだけど、こんな感じだったなあ↓ while(rs.next()){ if(cond) { // some statement } break; } もちろんif(rs.next() && cond)に書き直した。 VB6とかやってる人間は、if(cond1 && cond2)の中身が &&とか関係なく全て評価されると思っちゃうから、 二重if文とかを書く傾向があるように見える。
25 名前:仕様書無しさん mailto:sage [2007/07/07(土) 03:23:35 ] breakとcontinueは好きな奴はホント好きだよなあ
26 名前:仕様書無しさん mailto:sage [2007/07/07(土) 03:34:14 ] >>25 思考が構造化されてないんだよ
27 名前:仕様書無しさん mailto:sage [2007/07/07(土) 04:48:50 ] while(1){ if ( hogehoge ){
28 名前:仕様書無しさん mailto:sage [2007/07/07(土) 04:50:00 ] 書きこんじったorz while(1){ a++; if ( hogehoge[a] ) { b++; continue; } break; }
29 名前:仕様書無しさん mailto:sage [2007/07/07(土) 05:10:30 ] >>24 実はその while は中で break や continue を使ってジャンプするためのもので、 そしてさらに実は別のループ文に含まれていて、内側の while を if に置き換えると それまで配置されていた break や continue が外側のループに適用されるように っていう悪夢が頭の中をよぎった。
30 名前:仕様書無しさん mailto:sage [2007/07/07(土) 05:38:34 ] >>28 文字数のカウント? どこから教えるべきか悩むな
31 名前:仕様書無しさん mailto:sage [2007/07/07(土) 05:39:08 ] >>15 どの言語でも何故か for { case } が好きな奴いるよな。何故だろ
32 名前:仕様書無しさん mailto:sage [2007/07/07(土) 09:18:30 ] if(なんか条件) { } なにも実行しないんですか? 気になって眠れません><
33 名前:仕様書無しさん mailto:sage [2007/07/07(土) 10:35:50 ] >>32 その「なんか条件」の式は副作用を持っているのかなあ。 それとも将来その中に何かを書きこむのが100%確実だからそう書いているのかな? 気になって(ry
34 名前:仕様書無しさん mailto:sage [2007/07/07(土) 12:12:43 ] >>32 その条件のときは何も処理しないということを明示するために敢えてそういう風に書くことはあるけど グダグダ陰口叩かれないように今度からコメントを書いておくか
35 名前:仕様書無しさん mailto:sage [2007/07/07(土) 12:37:39 ] >>34 if (条件) { 空 } else { 何かする } ならまだわかるけど(条件逆転しろとは思う)、 上から下に流れるだけの状況でelseもなくif (条件) { 空 } と書く理由はよく わからんな。
36 名前:仕様書無しさん mailto:sage [2007/07/07(土) 13:11:54 ] 空の関数DoNothing()を入れとくとか。
37 名前:仕様書無しさん mailto:sage [2007/07/07(土) 13:14:28 ] >>35 たしかに if(条件){ 空っぽ }else{ 処理 } はあるけど if(条件){ 空っぽ } はないな 失礼した。
38 名前:仕様書無しさん mailto:sage [2007/07/07(土) 14:11:20 ] if (a = 0) { }
39 名前:仕様書無しさん mailto:sage [2007/07/07(土) 14:56:37 ] 削るとバグが出るって奴か。
40 名前:仕様書無しさん mailto:sage [2007/07/07(土) 15:24:23 ] >>32 条件のところが関数とかメソッドを呼んでいるならば怖いね 条件式というか関数実行後の副作用がありえるし、エラーコード判定の名残の可能性がある・・・ 例外使えないような連中とJavaとかやるとよく出くわすコードかも
41 名前:仕様書無しさん mailto:sage [2007/07/07(土) 15:30:07 ] >>40 中途半端に使えると、 } catch( Exception e ){ } と書いて揉み消してくれるので、余計タチ悪い。w 何度出くわしたことか。orz
42 名前:仕様書無しさん mailto:sage [2007/07/07(土) 15:47:04 ] >7 昔DOSプログラマだったころ、MSC6でそれ書いてはめられたことがある。 オプティマイザが順番を入れ替えやがって、>7のコードでいえばi < 8のときも else if (i < 19)の部分が先に評価されて条件が成立してしまうという…。 そのときは#pragmaで部分的にオプティマイザを切ったけど、それ以来 冗長でもelse if ((i >= 8) && (i < 19))と書くようにしてた。
43 名前:仕様書無しさん mailto:sage [2007/07/07(土) 16:35:07 ] >41 それは中途半端に使えるというレベルでもないw
44 名前:仕様書無しさん [2007/07/07(土) 21:05:11 ] >>42 初歩的な言語仕様から外れてるんだから それはコンパイラのバグだと思うが。
45 名前:仕様書無しさん mailto:sage [2007/07/07(土) 21:05:22 ] >>42 それはオプチマイザのバグだろ・・・
46 名前:仕様書無しさん [2007/07/07(土) 21:08:52 ] ♪〜キチガイの国〜アメリカ〜銃乱射〜豚32匹死亡〜いいザマだ〜♪ ♪〜キチガイの国〜アメリカ〜銃乱射〜豚32匹死亡〜いいザマだ〜♪ ♪〜キチガイの国〜アメリカ〜銃乱射〜豚32匹死亡〜いいザマだ〜♪ ♪〜キチガイの国〜アメリカ〜銃乱射〜豚32匹死亡〜いいザマだ〜♪ ♪〜キチガイの国〜アメリカ〜銃乱射〜豚32匹死亡〜いいザマだ〜♪
47 名前:仕様書無しさん [2007/07/07(土) 21:17:10 ] >>38 誰を騙そうとしてんだよw
48 名前:仕様書無しさん [2007/07/07(土) 21:39:55 ] >>45 最適化もコンパイラの一部だろ
49 名前:仕様書無しさん mailto:sage [2007/07/07(土) 21:42:27 ] >>45 は>>42 へのレス
50 名前:仕様書無しさん mailto:sage [2007/07/07(土) 21:48:54 ] それは見ればわかるよ
51 名前:仕様書無しさん [2007/07/07(土) 21:50:48 ] if((((式1)&&(式2)) || ((式3)||(式4)) && ((式5)||(式6))){ --意味不明なスパゲッティが数十行-- }else if(--眩暈がするたくさんの式--){ --以下略-- } せめてコメント付けておいてください…
52 名前:42 mailto:sage [2007/07/07(土) 21:53:07 ] いや、当然コンパイラのバグだよ。だからといってそのコンパイラを使うのをやめるわけには そう簡単にはいかないから、防御的プログラミングをしたっていう話で。
53 名前:仕様書無しさん [2007/07/07(土) 22:11:27 ] >>42 コンパイラの不具合にあわせて防御的プログラムをしたのはいいと思うよ。 でもね、このスレは会社をやめようと思ったソースコードなんだよ。 そのソースコードで会社を辞めようと思ったのか?
54 名前:仕様書無しさん mailto:sage [2007/07/07(土) 22:23:42 ] コンパイラのバグをどうにもせず、防御的コーディングのみで 対応するような会社だったら辞めたくなるな。 まぁ、製品によっちゃどうしようも無いこともあるだろうけど。 そうだとしたら、間違って最適化された箇所を早期に 発見してくれるツールなり何かが欲しくなってくるな。
55 名前:仕様書無しさん mailto:sage [2007/07/07(土) 22:25:39 ] コメントも無い 変更履歴も無い あるのはコピーライトだけ
56 名前:仕様書無しさん [2007/07/07(土) 22:28:24 ] >>54 テストをちゃんとすれば気づくだろ。 テスト時は最適化せずに、リリース時だけ最適化してコンパイルする奴ならむしろ辞めてほしい
57 名前:仕様書無しさん [2007/07/07(土) 22:38:42 ] >>51 どうせ正解はこんな感じ。 if((((式1)&&(式2)) || ((式3)||(式4)) && ((式5)||(式6))){ //もし今年が閏年なら --意味不明なスパゲッティが数十行-- }else if(--眩暈がするたくさんの式--){ --以下略-- }
58 名前:仕様書無しさん mailto:sage [2007/07/07(土) 22:42:58 ] 一番辞めようと思ったというか辞めたのはアプリケーションを改修のために引き継ぐ事になった時の話だ。 外注に作らせていて炎上したらしく、酷いことはまあ予想していた。 だが、本気で辞めようと思ったのはその時が最後だ。 ソ ー ス コ ー ド が 存 在 し な い
59 名前:仕様書無しさん [2007/07/07(土) 22:46:25 ] >>58 逆アセンブルでGO!
60 名前:仕様書無しさん mailto:sage [2007/07/07(土) 23:00:21 ] >>58 うちのプロジェクトではよくあることだ 10年勤めて2回はソースコードがまったく存在せず、 2回は偽物またはバージョン違い(つかそもそもコンパイルエラーが出る)のソースコードが提供された。 もちろん仕様書つきのプロジェクトなどお目にかかったこともない。
61 名前:仕様書無しさん mailto:sage [2007/07/07(土) 23:03:12 ] >>58 ソースコードがないのも、ソースコードのバージョン管理ができていないのも 経験したけど、 ど っ ち も 嫌 だ ! >>59 最初から組み直したほうが早いこともあるかも……。 俺が経験したのは、マシンごとバイナリが失われて、ソースコードも無くて、 あったのはインタフェース仕様書だけという、かなりアレな状況だったけど。www
62 名前:仕様書無しさん mailto:sage [2007/07/07(土) 23:05:53 ] >>60 >コンパイルエラーが出る さすがに都市伝説かと思ってたけど、本当にあるんだな。w
63 名前:仕様書無しさん [2007/07/07(土) 23:15:19 ] >コンパイルエラーが出る VisualStudioの古いバージョンで作ったのを 新しいバージョンでコンパイルしようとすると コンパイルエラーはしょっちゅうでる
64 名前:仕様書無しさん mailto:sage [2007/07/07(土) 23:18:43 ] >>60 そんなプロジェクトにしか回されないお前って一体・・・
65 名前:仕様書無しさん mailto:sage [2007/07/07(土) 23:19:12 ] ソースコードないのはないので好きだけどな。 1年ぐらい時間くれるし。ないならしかたないよねって感じで 今時年契約で5000万とかうますぎるし
66 名前:仕様書無しさん mailto:sage [2007/07/07(土) 23:21:37 ] コメントアウトされたコードあるのは全て糞 消せよ読みにくいんだよ
67 名前:仕様書無しさん mailto:sage [2007/07/07(土) 23:23:57 ] >>66 NEC様のご命令で消せません><
68 名前:仕様書無しさん mailto:sage [2007/07/07(土) 23:24:41 ] 結構変更履歴として残させるとこ多いね。 ローテクな感じでかわいそう。
69 名前:仕様書無しさん mailto:sage [2007/07/07(土) 23:33:30 ] >>66 お前が消せよ
70 名前:仕様書無しさん mailto:sage [2007/07/07(土) 23:43:54 ] >64 でもそんなプロジェクトこそ実力と経験は必要だよな 全然報われないだろうけどw
71 名前:仕様書無しさん mailto:sage [2007/07/07(土) 23:45:54 ] >>68 コードの90%近くを書き直してコメント率が70%位行った時は、さすがにorzってなったな。
72 名前:仕様書無しさん mailto:sage [2007/07/07(土) 23:47:57 ] コメント率って何? ソースコード中のコメントの量?
73 名前:仕様書無しさん mailto:sage [2007/07/08(日) 00:17:26 ] そうだよ
74 名前:仕様書無しさん mailto:sage [2007/07/08(日) 00:20:19 ] もしくは各行に対してコメントの記述してある割合 // 変数i の宣言 int i ; // 変数i に0を代入 i = 0; とか死にたくなるくらいくどいソースは見たことある 肝心なi が何に使用されているかは記述されていないんだがなw
75 名前:仕様書無しさん mailto:sage [2007/07/08(日) 00:43:16 ] >74くらいのコメントなら自動生成できるなw そんな機能絶対いらないけどw
76 名前:仕様書無しさん mailto:sage [2007/07/08(日) 01:00:55 ] >>74 を短くしてみた。 // int i; int i; // i = 0; i = 0
77 名前:仕様書無しさん mailto:sage [2007/07/08(日) 02:36:11 ] // もし a と b が等しいなら if(a==b){ // c に func() の戻り値を代入 c = func(); // それ以外なら }else{ // 何もしない } ..._| ̄|○
78 名前:仕様書無しさん mailto:sage [2007/07/08(日) 02:46:53 ] >>77 小学校の卒業式を思い出した
79 名前:仕様書無しさん mailto:sage [2007/07/08(日) 04:09:29 ] まともなコメントは最後のだけか
80 名前:仕様書無しさん mailto:sage [2007/07/08(日) 04:38:53 ] >79 最後はコメント以前にelse{}自体が要らない…
81 名前:仕様書無しさん mailto:sage [2007/07/08(日) 04:44:45 ] いらないけど、会社で書くことが決まってるかもよ? うちはdefaultは書く決まりになってるし。
82 名前:仕様書無しさん [2007/07/08(日) 05:09:37 ] width を本気で ワイズと全員が言っていた時。。。
83 名前:仕様書無しさん mailto:sage [2007/07/08(日) 05:12:09 ] スレ違い 変な読み方スレへお帰りください
84 名前:仕様書無しさん mailto:sage [2007/07/08(日) 06:15:04 ] >>82 ワイドって読んでたけど、本当はなんなの?
85 名前:仕様書無しさん mailto:sage [2007/07/08(日) 06:31:05 ] >>84 辞書引け
86 名前:仕様書無しさん mailto:sage [2007/07/08(日) 06:34:11 ] 辞書を引いてみたが、ウィドスと読むのかな? 発音記号はこんな感じだった → widθ
87 名前:仕様書無しさん mailto:sage [2007/07/08(日) 06:49:15 ] え、俺はずっとwithと同じ発音だと思ってた・・・やべぇw
88 名前:仕様書無しさん mailto:sage [2007/07/08(日) 11:27:34 ] Javaで一時的に2MBほどのbyte配列を確保しなければならなかったと言うことがある。 簡単なアップロードモジュールなんだが、実装をさせてみた所、単体テストでOutOfMemoryが炸裂。 嫌な予感がしたのでソースを追ってみた。 byte[][][] fileDate = new byte[2][1024][1024]; 協力会社からきた30台Java経験3年の奴だったんだが、Fizz-Buzzやらせて辞めさせた
89 名前:仕様書無しさん mailto:sage [2007/07/08(日) 11:31:31 ] >>88 それでいいんじゃねーのw?それで2MBって思えばさw
90 名前:仕様書無しさん mailto:sage [2007/07/08(日) 11:48:07 ] 何か見落としていたらすまんが>>88 の何が悪いのかわからん
91 名前:仕様書無しさん mailto:sage [2007/07/08(日) 11:52:56 ] >>88 分かりやすくていいじゃんw
92 名前:仕様書無しさん mailto:sage [2007/07/08(日) 11:57:15 ] >90 オレも分からなかった Javaの多次元配列だとなにかあるのか?
93 名前:仕様書無しさん mailto:sage [2007/07/08(日) 12:00:54 ] >>90 参照するたびにオフセットから3つのインデックスを算出しないといけないのはナンセンスだな。
94 名前:90 mailto:sage [2007/07/08(日) 12:04:39 ] >>93 JVMの仕様はオブジェクトの構造を定めていないから実装依存だと思うんだが。 というか何がわからんかって、>>88 のコードでOutOfMemoryが炸裂する理由がわからん。 配列アクセスで参照を辿るという「普通の実装」で考えても byte[1024][1024][2]ならタコだがbyte[2][1024][1024]なら問題ないと思うが。
95 名前:88 mailto:sage [2007/07/08(日) 12:07:57 ] 訂正 byte[][][] fileDate = new byte[1024][1024][1024];
96 名前:仕様書無しさん mailto:sage [2007/07/08(日) 12:10:26 ] >>95 ちょww
97 名前:93 mailto:sage [2007/07/08(日) 12:15:31 ] 4GB積んだ企業向けシステムなら問題なしw
98 名前:仕様書無しさん mailto:sage [2007/07/08(日) 12:18:03 ] >>88 つまり、その最初の2つのインデックスしか使用してないわけだなw >>97 JVMって4GBもヒープとれたっけ?
99 名前:仕様書無しさん mailto:sage [2007/07/08(日) 12:21:27 ] >>93 それに関しては多次元配列にする方が効率が良かったりする new byte[2*1024*1024] だと2MBの連続した領域がヒープに確保される筈 だけど、new byte[2][1024][1024]だと1KBの連続した領域がバラバラに確保されて参照されるんで、OutOfMemoryが発生しにくい 最近の実装が最適化でもするならばスマソ
100 名前:仕様書無しさん mailto:sage [2007/07/08(日) 12:21:56 ] 88は、仕事でもタコミスを連発していることだろうな
101 名前:90 mailto:sage [2007/07/08(日) 12:33:40 ] >>99 あまり詳しくないがGCがコンパクションくらいするのでは? そもそも2MBの配列をローカルで使い捨てするようなプログラムなら そっちの方が問題が大きい気もするが。 そもそも「2MBの配列」を byte[2 * 1024 * 1024]で取るかbyte[2][1024][1024]で取るかというのは、 性能よりも何よりも、まずはその配列の意味を考えて決めるのが正しい姿勢だと思うが
102 名前:仕様書無しさん [2007/07/08(日) 13:20:04 ] ファイルのアップロードという話だから new byte[2*1024*1024]のほうがストリームと つなげやすくていいんじゃないだろうか それはそうと、「fileDate」に誰もつっこんでないんだな
103 名前:仕様書無しさん mailto:sage [2007/07/08(日) 13:25:00 ] >>102 よくあるスペルミスだし、辞めるほどじゃないから
104 名前:仕様書無しさん mailto:sage [2007/07/08(日) 13:37:46 ] JavaだったらNIOのDirectByteBufferとか使うんじゃね?
105 名前:仕様書無しさん [2007/07/08(日) 13:44:40 ] >>99 OSによるだろうが仮想メモリ空間が提供されている以上は メモリに空きさえあればOutOfMemoryの発生頻度は同じ
106 名前:仕様書無しさん mailto:sage [2007/07/08(日) 14:13:52 ] >95 おいおい, 全然意味合いが違うじゃないかw >102 byte型に独自フォーマットで日付の何かを入れてるんだと解釈していた
107 名前:仕様書無しさん mailto:sage [2007/07/08(日) 15:32:14 ] 32bitフラットメモリモデルでは、たとえば、 DLLのコード部分も同じ4GBの空間に読まれるので、 そこで仮想メモリ空間が分断化されることは多々ある。
108 名前:仕様書無しさん [2007/07/08(日) 20:27:13 ] ソースコードじゃないが 仕様書のタイトルを♪で囲ってた時・・ ♪○○○○システム♪
109 名前:仕様書無しさん [2007/07/08(日) 20:56:23 ] >>107 なに適当言ってるの?
110 名前:仕様書無しさん mailto:sage [2007/07/08(日) 22:22:40 ] いいか、みんな (゚д゚ ) (| y |) 安部政権になれば「いい国」になると信じてたのに、 いつまでたっても苦しいままだ。 それどころか、ますます国じゅうが狂ってきて、 日本人同士が憎しみ合うようになっている。 美しい ( ゚д゚) 国 \/| y |\/ ひらがなにして ( ゚д゚) う つ く し い く に (\/\/ 逆から読むと… ( ゚д゚) 憎 い し 苦 痛 (\/\/ そういうことだったんだ。
111 名前:仕様書無しさん mailto:sage [2007/07/08(日) 23:32:49 ] >74 今追ってるソースがさー ' SQL文を作成 (コード略。まぁベタベタに文字列連結してると思いねぇ) ' レコードセットオープン (コード略。単にOpenメソッド呼んでるだけだが) ' フェッチループ (コード略。毎度おなじみ、Do Until .EOF〜.MoveNext〜Loopだ) もうDB読みに行くたびにこればっか。下の二つのコメントいらんから何がしたいのかを書けよと > 書いた香具師 明日もまた最初の「SQL文〜」のとこに「何を照会するのか」書き足す作業がはじまるお……
112 名前:仕様書無しさん mailto:sage [2007/07/08(日) 23:33:09 ] >>110 死ね
113 名前:仕様書無しさん mailto:sage [2007/07/08(日) 23:38:52 ] >109 何、どの辺りが適当なわけ?
114 名前:仕様書無しさん mailto:sage [2007/07/08(日) 23:39:54 ] 書かなくとも解るコメントって本当に邪魔だよな そんな時に限って重要なコメント(目的とか制限とか)が記述されていない
115 名前:仕様書無しさん mailto:sage [2007/07/09(月) 06:19:47 ] 「コメントは全行に書け」という規則があったので、コーディング用紙の右側に全部 /* */ を書いた奴を大量コピーして使用。そのままパンチに出したから、隙間の所も全て 空のコメント行になってた。しかも肝心のコメント文はカタコト(w
116 名前:仕様書無しさん [2007/07/09(月) 14:21:50 ] >そのままパンチに出したから、 50年くらい前かな?
117 名前:仕様書無しさん mailto:sage [2007/07/09(月) 16:21:34 ] >>116 おいおい、25年くらい前まではあったぞ。
118 名前:仕様書無しさん mailto:sage [2007/07/09(月) 17:26:27 ] 確かに、紙カードを最後に使ったのは、25年前だなぁ