1 名前:仕様書無しさん mailto:sage [2007/04/02(月) 12:45:06 ] この会社辞めようと思ったソースコード。 プログラマとして幻滅するソースコード。 プログラマを悩ませるソースコード。 をつらつらと綴っていって頂戴。 ちなみにここは質問スレじゃないので 技術的な質問がしたいならム板 pc11.2ch.net/tech/ に逝って。 前スレ この会社辞めようと思ったソースコード#15 pc11.2ch.net/test/read.cgi/prog/1167117526/
203 名前:仕様書無しさん [2007/05/14(月) 19:31:37 ] ここってCの人が多いみたいね。 じゃあ、vb系を代表して: Dim a, b As Integer Cとは違います。多分正しくありませんよ〜
204 名前:仕様書無しさん mailto:sage [2007/05/14(月) 19:34:04 ] >>203 普通にそう書いてる奴多いな 俺はメンテの時に困るから書いてないけど
205 名前:仕様書無しさん mailto:sage [2007/05/14(月) 19:37:00 ] >>203 aはIntegerと見せかけて、バリバリのバリアントだな。 そういう紛らわしい書き方ができてしまうVBの言語仕様はどうみても糞だな。
206 名前:仕様書無しさん [2007/05/14(月) 19:37:30 ] 上の方でtrue=1, false=0とかあってけど、VBAではTrue=-1ね 多分VBも
207 名前:仕様書無しさん mailto:sage [2007/05/14(月) 19:44:45 ] >>203 そーいや専門学校で教師がそのソース書いてたな。
208 名前:仕様書無しさん [2007/05/14(月) 19:45:10 ] やめて〜(実話) For i=1 To 10000 Cells(i,1) = "なんたらかんたら" Next ExcelVBA だが、行は何行あるか分からないらしい。動けばいいのかな? 上級SEさんのコードでした。
209 名前:仕様書無しさん mailto:sage [2007/05/14(月) 19:51:16 ] >>205 更に、.NET 以降はあれで「どっちも Integer」という軽い罠。 >>208 まあSヨなら普通。
210 名前:仕様書無しさん [2007/05/14(月) 19:52:34 ] >>209 そうなの?違うんじゃない?
211 名前:仕様書無しさん [2007/05/14(月) 20:01:01 ] ソースじゃないけど聞いていい? PL/SQLとTransact-SQLって同義なの? 前者はOracleで後者はSQLServerに使うものだと思っていたんだけど。 今日、面談で言われたよ〜
212 名前:仕様書無しさん mailto:sage [2007/05/14(月) 20:01:03 ] >>209 セル1つ1つに値を入れる奴はヘタレ。
213 名前:仕様書無しさん mailto:sage [2007/05/14(月) 20:33:28 ] >>210 …あのさ、君が前段と後段のどっちに疑問を呈しているのか解るのって君だけなんだが。 (7:3 で前段と踏んだ) >>211 ここが質問スレじゃないことくらい理解してほしいところなんだが。 >PL/SQLとTransact-SQLって同義なの? 「ストアドプロシージャの記述に使用できる」という一点のみが共通項。
214 名前:仕様書無しさん [2007/05/14(月) 20:39:13 ] >>213 >>210 どす。 前段どす。 Dim a, b As Integer って.netでもaはVariantじゃないの?
215 名前:仕様書無しさん mailto:sage [2007/05/14(月) 20:41:35 ] 「VB.NET 変数宣言」でぐぐれかす
216 名前:仕様書無しさん [2007/05/14(月) 21:03:36 ] ホントだ。知らんかった。
217 名前:仕様書無しさん mailto:sage [2007/05/14(月) 21:21:01 ] Dimってさ、もともとDimensionの略で、配列の次元を宣言するための ものだったのにどーしてVBは一般の変数宣言に使うようになっちゃった んだろう。
218 名前:仕様書無しさん mailto:sage [2007/05/14(月) 21:30:23 ] RubyとかLispとか動的型付けの言語でもコードが書かれてるんだから、 Variantでもいいじゃないか。
219 名前:仕様書無しさん mailto:sage [2007/05/14(月) 21:31:21 ] >>218 底辺乙
220 名前:仕様書無しさん [2007/05/14(月) 21:55:27 ] そもそもoption explicitにしない奴もいるわな。 いいんじゃない?最近のPCは性能がいいから。
221 名前:仕様書無しさん mailto:sage [2007/05/14(月) 22:00:50 ] >195 Variant
222 名前:仕様書無しさん mailto:sage [2007/05/14(月) 23:14:36 ] >220 ハードウェアの進化には楽天的であれ ソフトウェアの進化には悲観的であれ エンジニアの技術力の進化には絶望的であれ # 上の2つは201の鉄則より
223 名前:仕様書無しさん mailto:sage [2007/05/14(月) 23:59:36 ] pc11.2ch.net/test/read.cgi/prog/1129522233/711
224 名前:仕様書無しさん [2007/05/15(火) 10:31:23 ] 昨日を today-1 と書くか dateadd("d",-1,today) と書くか
225 名前:仕様書無しさん mailto:sage [2007/05/15(火) 10:56:39 ] 普通下だと思ってた俺はどうなのよ?
226 名前:仕様書無しさん [2007/05/15(火) 10:59:04 ] 反省しろ
227 名前:仕様書無しさん mailto:sage [2007/05/15(火) 11:36:02 ] ボリューム(D:) ↑ このへんがやる気ナイ・・
228 名前:仕様書無しさん [2007/05/15(火) 11:43:17 ] >>225 すまん。Date-1だった。最近、VBやってないから忘れてた。
229 名前:仕様書無しさん [2007/05/15(火) 12:07:08 ] >>203 あれ? 確かVB4か5までは a = variant, b = integerになるが、 VB5か6からは両方ともintegerになるような解釈になってなかったっけ ま、毎回1つ1つきっちり書いている俺には関係ないが
230 名前:仕様書無しさん mailto:sage [2007/05/15(火) 12:17:15 ] ならん
231 名前:仕様書無しさん [2007/05/15(火) 12:23:57 ] 今確認したけど dim a,b as integer ってVB6SP6でやると a=Empty b=0 になってたからaの型はVariantになってるね
232 名前:仕様書無しさん [2007/05/15(火) 12:27:45 ] バージョンで仕様が変わったら、やってられないだろ〜 .netはいいチャンスだと思ったんじゃない?
233 名前:仕様書無しさん mailto:sage [2007/05/15(火) 13:35:50 ] >206 その解釈は微妙。(VB(A)でもCでも) どちらも、0が偽でそれ以外が真。 ただし、比較式などが返す値が、Cでは1、VB系は-1てこと。 >206自身はわかってるならそれはいいんだけど、 わかってない人が>206みたいな記述を読むと勘違いしたりする('A`)
234 名前:229 [2007/05/15(火) 16:09:20 ] >>231 ああ、.NETからの間違いだったかも すまそ、ちょっとunicode変換されてくるは
235 名前:仕様書無しさん mailto:sage [2007/05/15(火) 22:23:41 ] >>228 そんなの書けたか?
236 名前:仕様書無しさん mailto:sage [2007/05/15(火) 22:37:00 ] >>235 今ちょっと試してみたけど、Excel VBA で Date 型だと書けてしまうな。気持ち悪い。 整数が日付、小数点以下が時刻ってことか… 俺はDateAddの方がどんな変数を操作してるかわかりやすいので安心できる。
237 名前:仕様書無しさん mailto:sage [2007/05/16(水) 00:22:54 ] 真値を数値として扱うと-1になることを利用した演算式が 昔のBASICにゃたんまりあってのう…… a = a + (h > 3) * 1 とか
238 名前:仕様書無しさん mailto:sage [2007/05/16(水) 00:44:08 ] Oracle とかもDate型は数値扱いだろ よくあるよくある
239 名前:仕様書無しさん mailto:sage [2007/05/16(水) 07:10:34 ] >>237 むしろ条件式を使うことがコード量を節約する手法の一つだったのさ。
240 名前:仕様書無しさん mailto:sage [2007/05/16(水) 09:46:11 ] >>237 の動作ってどうなるんだ? こんな書き方しらねぇ・・・・ (h > 3) この部分の解釈
241 名前:仕様書無しさん mailto:sage [2007/05/16(水) 10:15:20 ] >>240 真なら -1 で偽なら 0 になる。 つまり C で書きなおせば if (h > 3) a += 1; ってこと。 この例だとコード量節約にもならないような。
242 名前:仕様書無しさん mailto:sage [2007/05/16(水) 10:35:26 ] BASICならIF文使うと遅いからじゃね?
243 名前:仕様書無しさん mailto:sage [2007/05/16(水) 10:41:02 ] サンクス なるほど そういう解釈になるのか! しかし・・・可読性が落ちるな(;´Д`) 昔は遅かったからその辺のテクなんだろうなぁ・・・
244 名前:仕様書無しさん mailto:sage [2007/05/16(水) 12:02:18 ] 最近のCPUで当時のBASICコードが動かせるとすると ループで時間稼いだりしてた部分が瞬時に終わったり 笑える動作になるんだろうな
245 名前:仕様書無しさん mailto:sage [2007/05/16(水) 12:03:41 ] >>238 は何を言ってるんだ…?
246 名前:仕様書無しさん mailto:sage [2007/05/16(水) 12:06:52 ] >>244 ウチは実際にそれで問題が出てたwwww
247 名前:仕様書無しさん mailto:sage [2007/05/16(水) 12:47:25 ] >>244 昔でもあったぞ。 ゲームでPC-9801VM(V30)でスピード最適化したシューティングゲームを PC-9801RA(i386)で動作させてみたらレーシングゲームになった、とか
248 名前:仕様書無しさん mailto:sage [2007/05/16(水) 13:30:20 ] MSXturboRの通常モード(8ビットモード)で普通に出来たゲームが 高速モード(16ビットモード)では早すぎてゲームにならなかったり。
249 名前:仕様書無しさん mailto:sage [2007/05/16(水) 19:37:21 ] >>237 俺は Pascal(Delphi) で似たようなコードをよく書く。 Salary := BaseSalary + 1500 * OverHours * Ord(chkOvertimePaid.Checked); Pascal では Ord(False) = 0、Ord(True) = 1 と言語で定義されている。 でも確かに 8 ビット時代の悪しき習慣のような感じもするな。
250 名前:仕様書無しさん mailto:sage [2007/05/16(水) 20:39:53 ] 俺は同じ書き方やって言語で動作が違うような書き方はしないように心がけてる
251 名前:仕様書無しさん mailto:sage [2007/05/16(水) 20:44:09 ] じゃあ、Cで短絡評価は使わないってこと?
252 名前:仕様書無しさん mailto:sage [2007/05/16(水) 20:50:09 ] >>251 C・C++は別格
253 名前:仕様書無しさん mailto:sage [2007/05/16(水) 20:51:54 ] >>251 短絡的な発想だな
254 名前:仕様書無しさん mailto:sage [2007/05/16(水) 20:57:30 ] >>253 だれがうまいこと言えとwww
255 名前:仕様書無しさん mailto:sage [2007/05/17(木) 11:43:10 ] >>250 言語が変わったら、同じ書き方は出来ないと思うんだが。
256 名前:仕様書無しさん mailto:sage [2007/05/17(木) 12:56:49 ] >>255 なにその柔軟すぎる発想 お前PGとかこの業界やめたほうがいいよ それとも釣りですか?
257 名前:仕様書無しさん mailto:sage [2007/05/17(木) 14:00:51 ] >>256 「同じ言語で、同じ書き方をして、違う動作をするような書き方」 であれば、しないのが当たり前。素人じゃあるまいし。
258 名前:仕様書無しさん [2007/05/17(木) 14:17:15 ] >>257 日本語嫁よwwwwww
259 名前:仕様書無しさん mailto:sage [2007/05/17(木) 14:53:11 ] おいおい COBOLでかちゅーしゃ作れねーだろ
260 名前:仕様書無しさん mailto:sage [2007/05/17(木) 15:32:20 ] .netコボルならできるんじゃね?
261 名前:仕様書無しさん [2007/05/17(木) 15:42:57 ] COBOLでJavaのVM作ればOK。
262 名前:仕様書無しさん [2007/05/17(木) 16:12:45 ] Valiantをブリリアントと読んでいた。 そんな時期もありました。
263 名前:仕様書無しさん mailto:sage [2007/05/17(木) 17:02:51 ] ━━ a. 勇敢な. ひょっとして: variant valiantly Valerian
264 名前:仕様書無しさん mailto:sage [2007/05/17(木) 17:58:31 ] 今年入社した会社のコード if(《BOOL型変数》!= TRUE) { }else { 処理; } もっと簡潔に書いてくれ・・・
265 名前:仕様書無しさん mailto:sage [2007/05/17(木) 18:14:47 ] BOOLというのが実は独自定義の真偽値型で、 TRUE==0でそれ以外がFALSEだとか?
266 名前:仕様書無しさん mailto:sage [2007/05/17(木) 18:15:54 ] >>264 既出のものかと思いきや応用編か……。
267 名前:仕様書無しさん mailto:sage [2007/05/17(木) 18:48:13 ] >>265 それにしたってブロックからっぽにするんだったら 条件ひっくりかえしてelse削除でしょう。
268 名前:仕様書無しさん mailto:sage [2007/05/17(木) 18:52:06 ] >>267 ご指摘の通りだけど。else部分は省略禁止という規約も実在するしw
269 名前:仕様書無しさん mailto:sage [2007/05/17(木) 19:07:26 ] いや、条件に一致した場合の処理も後で書き加える可能性があるとか。 コメント残せよって話だけど。
270 名前:仕様書無しさん mailto:sage [2007/05/17(木) 19:39:21 ] Dim bFlag As Boolean = False If bHoge Then bFlag = True If bMoge Then bFlag = True If bNuge Then bFlag = True If bHage Then bFlag = True : : If bFlag = False Then CB.Checked = True なんつーか、下っ手くそなコードだなあ…
271 名前:仕様書無しさん mailto:sage [2007/05/17(木) 22:03:48 ] 真偽定数と比較する奴ウザイ。
272 名前:仕様書無しさん mailto:sage [2007/05/17(木) 22:30:17 ] おれ明示的に描くようにしてるわ
273 名前:仕様書無しさん mailto:sage [2007/05/17(木) 22:50:57 ] 真偽値と比較するのならなぜその結果をさらに真偽値と比較しないのか。 そしてその結果をさらに……
274 名前:仕様書無しさん mailto:sage [2007/05/18(金) 00:13:13 ] >>270 こういう、似たような処理をひたすら羅列して、ウォーリーを探せみたいな ソース書いてる人って、どんな気持ちで書いてるんだろう?
275 名前:仕様書無しさん mailto:sage [2007/05/18(金) 00:14:06 ] あーめんどくせー
276 名前:仕様書無しさん mailto:sage [2007/05/18(金) 01:57:47 ] >275 きっと本気でそう思ってるんだろうなぁ…… 恐らく「コピペでガンガンコードが書けて俺様ってば超Cool!!」とは思ってない気がする
277 名前:仕様書無しさん mailto:sage [2007/05/18(金) 07:36:40 ] コピペでコード書くのは全くCoolでない件
278 名前:仕様書無しさん mailto:sage [2007/05/18(金) 08:12:42 ] >>277 おまけにバグまでコピッてるのを見ると殴り殺したくなる。 こういう時はgrepするとワラワラと湧いてくるんだよな。orz
279 名前:仕様書無しさん mailto:sage [2007/05/18(金) 09:16:43 ] >>276 しかしどこぞの馬鹿に言わせると 馬鹿でも理解できるため良質なコードということになる。 良質なコードを生み出すことが超Coolでないわけなかろう。
280 名前:仕様書無しさん mailto:sage [2007/05/18(金) 09:26:30 ] 正しくは「馬鹿だけ」が最小コストで理解できるコードだろ
281 名前:仕様書無しさん mailto:sage [2007/05/18(金) 09:31:22 ] >280 何か問題でも?
282 名前:仕様書無しさん mailto:sage [2007/05/18(金) 09:41:40 ] >>281 一般人には理解できないコードなのだが。
283 名前:仕様書無しさん mailto:sage [2007/05/18(金) 09:46:16 ] 自分が一般人に含まれると勘違いしているのはイタさ倍増
284 名前:仕様書無しさん mailto:sage [2007/05/18(金) 10:26:37 ] 多分、板住民同士でレビューしたら自称一般人だらけだろうなw 自分の知識が普通とか一般だと思うのは非常に危険だぞ。
285 名前:仕様書無しさん [2007/05/18(金) 11:19:51 ] >>274 ステップ単価だったりして。 ステップ単価の文化に浸った人はコピペ多いよなぁ。
286 名前:仕様書無しさん mailto:sage [2007/05/18(金) 17:23:52 ] 人月の狼
287 名前:仕様書無しさん [2007/05/18(金) 17:25:39 ] ほら吹き狼
288 名前:仕様書無しさん mailto:sage [2007/05/18(金) 19:41:19 ] >>270 こういうふうに書き換えるのは、上手普通下手で言えばどれですかね? Dim bFlag As Boolean = False If (bHoge Or bMoge Or bNuge Or bHage Or ...) Then bFlag = True End if If Not bFlag Then CB.Checked = True 他の人のコード見て勉強する機会があまりないので。 270は、どれか1つのフラグがいらなくなったら1行削ればいいので、 案外上手なのかもしれんと思いました
289 名前:仕様書無しさん mailto:sage [2007/05/18(金) 19:56:25 ] Dim bFlag As Boolean = False If (False _ Or bHoge _ Or bMoge _ Or bNuge _ Or bHage _ Or ..._ ) Then bFlag = True End if
290 名前:288 mailto:sage [2007/05/18(金) 20:11:38 ] >>289 ナルホド、これなら1行で消せますね。 他のコードで同じ書き方してました。 If 条件式でやるのはためらいますが。
291 名前:仕様書無しさん mailto:sage [2007/05/18(金) 20:52:54 ] hogeとかmageをセットしてるコードのほうが気になる。
292 名前:仕様書無しさん mailto:sage [2007/05/18(金) 23:47:38 ] 自分はVB(でしょ?)知らないんだけど bFlag = bHoge Or bMoge Or bNuge Or bHage Or ... とは書けないの?
293 名前:仕様書無しさん mailto:sage [2007/05/19(土) 00:04:03 ] そこまで分岐するならビット演算とかどうよ?
294 名前:仕様書無しさん mailto:sage [2007/05/19(土) 01:06:41 ] VBScript環境やまして.netはよー知らんが、レガシVBとかVBAでは s = "hogehoge" _ '& "piyopiyo" _ & "fugafuga" は文法エラーということを忘れてる人はおらんか。 いや忘れていいなら忘れてしまいたい貴方♪だが。 >292 書けるお。
295 名前:仕様書無しさん mailto:sage [2007/05/19(土) 02:05:39 ] >>288 cb.checked = cb.checked Or ( Not ( _ bHoge _ Or bHage _ Or bHuge _ : ) )
296 名前:仕様書無しさん mailto:sage [2007/05/19(土) 02:28:24 ] C言語で。 typedef void (*func)(void); ・ ・中略 ・ func pFunc = (func)0x00010000; pFunc(); 辞めよう、とまでは思わないが、組み込みってこえぇ、と思った。 他には void free(struct Data *pstData){ struct Memory *pstMemory; if(pstData==NULL)return; pstMemory = (struct Memory *)(((char *)pstData) - sizeof(struct Header)); pstMemory->stHeader.nUsed = 0; } とか value = array[-2]; とか 自分が今まで覚えてきたことを色々否定された気分になった。
297 名前:仕様書無しさん mailto:sage [2007/05/19(土) 02:49:14 ] >>296 俺も怖い。組み込みは鬼門と考えるようにする。
298 名前:仕様書無しさん mailto:sage [2007/05/19(土) 02:56:53 ] >>296 スマン。 2つ目のやつの問題点を教えてくれ。 これよくあったよ・・・@携帯電話の網の中の人
299 名前:仕様書無しさん mailto:sage [2007/05/19(土) 03:10:34 ] というか普通のfreeも大雑把に見ると>>296 の二つ目みたいなもんだ。
300 名前:仕様書無しさん [2007/05/19(土) 03:15:26 ] せめて (uintptr_t)pstData - (unsigned)(&(((Memory*)0)->データ)); にできないかねぇ。
301 名前:仕様書無しさん mailto:sage [2007/05/19(土) 03:20:18 ] >>298 プログラム全体で見ると整合性が取れてるんだけど、 free関数単体で見ると、引数pstDataからさらに前のアドレスってことは 一見アクセス出来る範囲外のアドレスを叩いてるように見える。 極端な話すると int main(int argc, char *argv[]) { char *str = argv[-1]; printf("%s\n",str); return 0; } みたいなコトをしてるように見えるわけだ。
302 名前:仕様書無しさん mailto:sage [2007/05/19(土) 03:29:37 ] >>300 うは・・・。 構造体のアライメントを運用で気ぃつけるとかはあったけど、 そういう発想は無かったな・・・。 さんきぅ。参考になります。
303 名前:仕様書無しさん mailto:sage [2007/05/19(土) 08:47:17 ] >>296 value = array[-2]; これの動作は未定義なのでは?