1 名前:仕様書無しさん mailto:sage [2007/07/06(金) 14:42:11 ] この会社辞めようと思ったソースコード。 プログラマとして幻滅するソースコード。 プログラマを悩ませるソースコード。 をつらつらと綴っていって頂戴。 ちなみにここは質問スレじゃないので 技術的な質問がしたいならム板 pc11.2ch.net/tech/ に逝って。 前スレ この会社辞めようと思ったソースコード#16 pc11.2ch.net/test/read.cgi/prog/1175485506/
2 名前:仕様書無しさん mailto:sage [2007/07/06(金) 15:27:05 ] >>1 乙である
3 名前:仕様書無しさん mailto:sage [2007/07/06(金) 15:35:51 ] goto >>1 ;
4 名前:仕様書無しさん [2007/07/06(金) 16:11:29 ] Try Call 新スレチェック Catch 1_Exception Messagebox.Show(">>1 乙んでれ","新スレ記念") Finally if >>1 Is Not Nothing Then >>1 .Dispose End Try
5 名前:仕様書無しさん mailto:sage [2007/07/06(金) 22:48:15 ] Try Dim i As Integer Dim s As String While True i = 1 / 0 s = Nothing.ToString Loop Catch NRE As NullReferenceException MessageBox.Show("ぬるぽ") Resume Next Catch ex As Exception MessageBox.Show(">>1 乙") Resume Next End Try
6 名前:仕様書無しさん mailto:sage [2007/07/06(金) 23:01:29 ] throw new NullReferenceException;
7 名前:仕様書無しさん [2007/07/06(金) 23:28:18 ] if ( i < 8 ){ 〜 } else if( i < 19 ){ 〜 } else { 〜 } っつーコードを今日見た。
8 名前:仕様書無しさん mailto:sage [2007/07/06(金) 23:43:08 ] 定数直書きしてる以外は、まぁアリかなと思ってしまった。
9 名前:仕様書無しさん [2007/07/06(金) 23:43:31 ] >>7 ん?
10 名前:仕様書無しさん mailto:sage [2007/07/06(金) 23:57:35 ] >>7 どこら辺がだめなん?
11 名前:仕様書無しさん mailto:sage [2007/07/07(土) 00:04:49 ] else ifで8以上という条件が入ってないのがいやなのかね。 それはelseが含意してるからなくても問題ないよな。
12 名前:仕様書無しさん mailto:sage [2007/07/07(土) 00:28:02 ] マジックナンバーがいやなんじゃない?
13 名前:仕様書無しさん mailto:sage [2007/07/07(土) 00:29:16 ] 別に会社辞めようと思うほどではないな
14 名前:仕様書無しさん mailto:sage [2007/07/07(土) 01:22:14 ] かといって、「辞めようと思ったほどではないが嫌になったソースを晒せ」スレを わざわざ立てるまでもないような。
15 名前:仕様書無しさん mailto:sage [2007/07/07(土) 01:51:29 ] setHoge(int hoge) { hoge = hoge; } 一瞬スルーしそうになった label: for(int i = 0; ; i++) { s = fs.readline() switch (i) { case 0: ... case 1: ... ... case XX: break label; } この意味の分からない switch 文、全く関係のない VB 屋も書いてたけど、何か意味があるのだろうか
16 名前:前スレ996 mailto:sage [2007/07/07(土) 02:09:12 ] >>前スレ997 >配列参照って START TO END みたいな指定出来るん? いや、それはさすがに。 考えてることが違うと思うけど、漏れが使ってるのはこんなんです。 Dim Data1(1 to 6) As Integer Dim a As Variant For i = LBound(Data1) To UBound(Data1) a = Data1(i) Next i >>前スレ999 >あ、ごみん、そういう意味じゃなかったのね>996 >なんかボケてた済まん いえいえ、こっちこそ説明が足りなかった。
17 名前:仕様書無しさん [2007/07/07(土) 02:23:21 ] optionで配列開始番号固定すれば良いのに。
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は、仕事でもタコミスを連発していることだろうな