1 :
仕様書無しさん :
02/05/16 23:50
2get!
3 :
仕様書無しさん :02/05/16 23:58
char s1[256], s2[256] ...; strncpy(s1, "", 256); strncpy(s2, "", 256); ... 初期化しているつもりなんだろうけど・・・
新スレに来てもstrcpyネタかよ・・・。
>>3 なんでそれで辞めたくなんの?
文字列の初期化っぽいからそれで問題ないと思うんだけど。
6 :
仕様書無しさん :02/05/17 00:14
char *message; message = malloc(256); message = "hello, world";
>5 前スレの959タンですか?
前スレ990より引用 ---- srcのnバイトを越えない数の文字がコピーされるこ と を 除 け ば、strncpy()関 数も同様である。したがって、もし srcの最初 のnバイトの中にNUL文字が無ければ、コピーの結果としてできる 文字列はNUL終端していないものになる。 src の長さが n よりも少ない場合は、 dest の残りはNULLで埋 められる。 ---- ということは char s[256]; strncpy( s, "", 256 ); で、s[]は256バイト全部、NULで埋まるんかな?
???
>6 すなおに memset 使え、ってことだろ。
場合によっては char s[256]; s[0]='\0'; で十分だろ。
いい加減情けない話はやめようなー。(T_T
情けないコードを晒すスレなわけだし。(笑
15 :
仕様書無しさん :02/05/17 09:16
char *a = "100"; char *b = "200"; char *c; *c = *a + *b; printf("%s\n", c); あの〜、300 って表示されないんですけど。 とのたまふ人がいたの。
16 :
仕様書無しさん :02/05/17 09:21
受け継いだコードのエラーメッセージがこんなん。 問い合わせをお前の名前に変えておけ。と言われたし。 FILE *fp = fopen(file, "r"); if (fp == NULL) { fprintf(stderr, "%s(%d)\n", __FILE__, __LINE__); fprintf(stderr, "問い合わせ:門田(2465)\n"); exit(1); }
17 :
仕様書無しさん :02/05/17 09:25
>>16 オープンエラーごときでいちいち問い合わせなきゃならんのかよ!!
ユーザー泣かせなプログラムだな。
別にエラーメッセージに問い合わせ先入れなくても・・・・
外部のリソースにしておくべき。(問題がずれてる)
>16 Perlを教えてあげよう!
21 :
仕様書無しさん :02/05/17 09:46
>>16 です。
門田(仮名)はその問い合わせ処理を仕事にしてた。
というよりそれしかやっていなかった。
今度から漏れも、それを仕事のうちにいれよう! といってみるテスト。
>>19 外部のリソースファイルを開くときにまたエラーが発生する罠。
>25 エラーコードとその説明を出すようにしておく。 説明が出せないときはエラーコードのみ表示。
27 :
仕様書無しさん :02/05/18 23:25
>>16 じゃないけど
引き継いだソースコードの
エラーメッセージがすべて「予期せぬエラーが発生」。
FILE *fp = fopen(file, "r");
if (fp == NULL) {
fprintf(stderr, "予期せぬエラーが発生\n");
exit(1);
}
>26 ユーザーが厨房なら、対応策も入れとくと尚良。
30 :
仕様書無しさん :02/05/21 00:38
>>27 > エラーメッセージがすべて「予期せぬエラーが発生」。
あなたはMicrosoft社員ですか?
31 :
仕様書無しさん :02/05/22 02:58
自分が一から書いたコードを 上司が勝手に改造してバグを作りこみ 俺にデバッグしろと命じるんですが このような要求は拒否すべきですか? 仕様を決める立場の上司が 自分でソース変更したほうが 早いと判断してやっているみたいです。 それを見た運用者(開発経験ゼロ)が同じように 見ようみまねでソースをいじるんですが これまた滅茶苦茶にしてくれる。 双方ともROOT権限を持っている。 知らない間に機能が追加されていたりする。
>>31 社員モラルが低い会社だな... どうせ上役が「開発なんて誰でも出来
るだろう」とか考えてるんだろうな。
33 :
仕様書無しさん :02/05/22 03:35
>>32 31です。
「開発なんて誰でもできる」
まさにその通りです。
アプリのコンフィグレーションファイルを編集するのと
プログラムを作成するのを同等レベルだと思っているようです。
「自分で直せそうなら人に頼らず直せ」みたいな。
そんなコードには初歩的ミスである、
文字列ポインタの代入と文字列のコピーが混同している。
変数も既存のものを使いまわしたり
名前もAとかBとか思いつきで追加したり。
他のソースからのコピー&ペーストも目立つ。
fopen のチェックもなければfclose もない。
コンパイルしてエラーが出なければ合っていると信じている。
論理エラーという概念がない。
ソースのバージョン管理は? エンバグしたのは、いつ誰のせいか明確にならんの? ソースいじる=責任を負う、ってことだと思ってないんだ…。 同様にroot権限=root責任だってことも判ってないのかなぁ…。 ご愁傷様です。
ゴメソ。 超バージョン管理的問題だたね…。
36 :
仕様書無しさん :02/05/22 04:22
>>34 31です。
「ソースを改竄した人が責任を負ってください」と訴えたことがある。
そしたら俺の信用ガタ落ち。
「ソース貰ったから改造して」と言うのもある。
それが自分の専門以外の言語だったりする場合、
「分からなかったら分かる人に聞け」。
言語仕様を分かる人に聞けと言われてもねぇ・・・
37 :
仕様書無しさん :02/05/22 12:38
バックアップとっておいて比較して差異のチェックすれば?
38 :
仕様書無しさん :02/05/22 13:04
勝手にソースに手をいれるヤツだから… 「式を分かりやすく変えておいたよ」とかいってi++をi=i+1とかに書き換えたり、 「インデントを分かりやすくしたよ」とかいってソース全部のインデントを変えたり、 「変数名を分かりやすくしたよ」とかいってローマ字変数名にかえたりしそうじゃん。 差分をとっても全然約に立たんかったりする罠。
39 :
仕様書無しさん :02/05/22 13:57
わかりやすくしただけなんでしょ? 元に戻すだけで良いのでわないでしょうか? 機能変更部分だけ確認して Myソースに組み込んで UPすればいい。 勝手にいじられてるんだったら 勝手にいじり消せばいい でも・・・早く転職されることを希望します(w
40 :
仕様書無しさん :02/05/22 13:59
なんか危なく間違った。 消せばいい × 返せばいい ○ ローマ字入力ばればれ?(w
#if MD == MD_PRG if (RdPrg() == FALSE) #elif MD == MD_POI if (RdPrg() == FALSE) #elif MD == MD_BOT if (RdPrg() == FALSE) #elif MD == MD_MAP if (RdMap() == FALSE) #endif goto END_MAIN; もうね、あほかと、馬鹿かと。
42 :
仕様書無しさん :02/05/22 14:43
43 :
仕様書無しさん :02/05/22 22:16
if文で条件に引っかかったときと、そうでない時の処理が全く同じ。 そんな記述が何箇所も何箇所も出現。 もうね、アホかと。バカかと。
44 :
仕様書無しさん :02/05/23 16:00
menyu
45 :
仕様書無しさん :02/05/23 16:02
メニューです。メニュー。
>>43 多分仕様書にそう書いてあったのを「忠実に」インプリメント
したんだろうな...
>>43 開発中に仕様変更何回かあつて、気が付いたら
数カ所そんなふうになってたことがあったな
パフォーマンスがあがらないと漏れのところに持ち込まれたプログラム。 1億回以上も同じファイルをオープンして読んでクローズしていた。
49 :
仕様書無しさん :02/05/28 22:46
age
50 :
仕様書無しさん :02/05/29 00:26
ret = func1(...); if (ret == OK) { 長〜い処理1 } if (ret == OK) { 長〜い処理2 } : : : if (ret == OK) { 長〜い処理n } return (ret); 最初っからreturnしてくれれば、どれだけ見やすくなったことか...
51 :
仕様書無しさん :02/05/29 00:36
長〜い処理 が1〜nに分かれてるのはなぜ?
>>50 まさか…途中の「長〜い処理i」の中で、変数retをコソーリ書き換えたりしてないよね…。
「長〜い処理」の中で ret = func2(); とかしてるんじゃねーの?
54 :
仕様書無しさん :02/05/29 01:49
タブ、スペース一切無し。 しかも{}が入れ子になると、 for(){ if(){ }} こういう形式。
55 :
仕様書無しさん :02/05/29 01:57
いや、 ptr = &ret; .... .... *ptr = func2(); ... .. に、違いないズラ。
type &ref = ret; こんなんだったり
[[2ch-itteyoshi-ma]] <<retがグローバル変数で長〜い処理から呼ばれている関数で書き換えられてる>> に一票。
59 :
仕様書無しさん :02/05/29 23:28
すごいコードが会社にありました。 超マイナーな言語なので、Cに移植してみました。 void main(void) { func1(); } void func1(void) { func2(); } void func2(void) { 長い処理がえんえんと } mainとfunc1は何のためにあるんだ?
try { ・・・ } catch (Exception ex) { ・・・ } finallry { //接続をレリーズする this.releaseConnection(); } ・・・レリーズ!!Σ( ̄□ ̄lll)!!
× finallry ○ finally まちがえた・・・
>59 さくらタン、ハァハァ…(´Д`;)
違う。>60だった… じゃ、もう一丁 >60 さくらタン、ハァハァ…(´Д`;)
65 :
仕様書無しさん :02/05/30 22:53
ループが回るたびにファイルのオープンクローズ繰り返すなよ! そういうんはループの外にだしとけよ! あー、しかもエラー処理で1回クローズしたハンドルをもう1度クローズ しようとしてるし・・・・ちゃんとテストしたんか?これ? しかもこのソース書いたの半年前の俺だし。 もう穴があったら入りたいよ
>>27 うちなんかこんなん
FILE *fp = fopen(file, "r");
if (fp == NULL) {
fprintf(stderr, "プログラミング不正\n");
exit(1);
}
最近メンテしているプログラムなんだが、異常系の処理が全部、M$の「不正な処理」と同じメッセージを出して落ちるだけ。 でもなぜか客は文句を言わないらしい・・・ある意味正しいのか?(藁
a = a << 1 << 1 << 1 << 1; // aを4ビットシフト ……もしもし?
>70 バイナリに落ちるときは、a=a<<4と同じ結果にオプティマイズ されるだろうと期待する罠
72 :
仕様書無しさん :02/06/01 03:45
>>69 その手、漏れもよく使う。
漏れの技は、もう少し洗練されているぞ。
0x0 + 漏れ独自のエラー番号のアドレスを読みにいく。
本当にワトソン博士が起動して、エラー番号まで判別できる。
それでもって、責任はMSになすりつけ。漏れって天才?
73 :
仕様書無しさん :02/06/01 06:15
>>75 諸悪の根源は簡単に落ちるOSを作るM$だったのか(W
77 :
仕様書無しさん :02/06/02 14:44
78 :
仕様書無しさん :02/06/02 15:28
HPUXだって簡単に落とせるじゃん?
79 :
仕様書無しさん :02/06/03 22:26
case (int)NULL:
>>78 正しく表記出来ない人の話は信用出来ません。
漏れがHP-UX落としたら、一週間その事でからかわれ続けた。
82 :
仕様書無しさん :02/06/03 22:59
VB以外のソースコードがなかった。 笑いながら就職はなかったことにしてもらった。
// このゴミを消すとプログラムが止まるので、絶対に消さないこと。 static char gomi[4096] ; と書いてあったが、どこでも参照してないので削除した。 ちゃんとコンパイルが通ったので、実行したら… 止まった。 アンドウして見なかったことにしますた。
>83 それって、オーバーランしてるのを受け止める為の 領域って事?
85 :
仕様書無しさん :02/06/03 23:09
>>84 それだねー。頭悪いって言うか、いいって言うか(w
10年選手でこんな汚いことしてたら、転職すべきだが。
purifyやboundscheckerでチェックしたらいいのに。 ああ、できるならもうやってるか。
>>84 PGとして原因をちょっと追いかけたのだけど、
その gomi の前にstaticの構造体が宣言してあって、
その構造体のアドレスを要求してくる関数boo()が、
その構造体の大きさを超えて書き込んでくるらしいことが判明。
で、その関数boo()は、客先から「このライブラリを使ってくれ」
って言われた関数なので、修正できましぇんでした。
普段なら「この関数boo()がバグっているよ」と
親切に教えたのですが、
そいつとは口もききたくない喧嘩状態だったので言いませんでした。
普通の人なら教えたのにね。
付き合い(コミニュケーション)は大切であるという教訓かもね。
void write_checksum(int *data_area, int data_size) { int i, sum = 0; for (i = 0; i < data_size; i++) { sum += *(int *)((long)data_area + i * sizeof(int)); } *(int *)((long)data_area + data_size * sizeof(int)) = sum; } なんでわざわざlongにしてるんだろう……。
>>88 data_area[i]って書けることを知らないみたいだね(笑)
longのサイズでポインタが表しきれない環境(Win64など)ではクラッシュするね−
90 :
仕様書無しさん :02/06/04 12:54
>>89 Win64 ではデフォルトで上位32ビットを0で埋めるから32ビット依存アプリも動くよ。
91 :
仕様書無しさん :02/06/06 14:54
///////////////////////////////////////////////////////////////////////// //四捨五入(小数点第二位以降) //date h9/12/17 ///////////////////////////////////////////////////////////////////////// void CSailcadView::Round1(double Value1,int syousu,double *Value2) { //Value1: 入力値 //syousu: 小数点以下有効桁数(2だったら3桁目の四捨五入) //*Value2: 出力値 char ans[15]; int precision=15; const char *sy; if (syousu == 1) { sy="%.0f"; } if (syousu == 2) { sy="%.1f"; } if (syousu == 3) { sy="%.2f"; } if (syousu == 4) { sy="%.3f"; } if (syousu == 5) { sy="%.4f"; } if (syousu == 6) { sy="%.5f"; } if (syousu == 7) { sy="%.6f"; } if (syousu == 8) { sy="%.7f"; } if (syousu == 9) { sy="%.8f"; } sprintf(ans,sy,Value1); //文字列に落とす *Value2 = atof(ans); }
///////////////////////////////////////////////////////////////////////// //小数点第一位が0かそれ以外か ///////////////////////////////////////////////////////////////////////// void CSailcadView::Intchk(double Value1,int *ok) { int decimal,sign; char *buff; int precision=15; CString ms; buff = _ecvt(Value1,precision,&decimal,&sign); < なんでこんな得体の知れない関数平気で使うかなあ。 CString s(buff); ms=s.Mid(decimal,1); //小数点第一位の値の取得 < それだけのためにわざわざCstringなんて使うか? if (atoi(ms) == 0) *ok=0; else *ok=1; < う〜ん、つっこむ気力が無い。 }
漏れが数年前にいた契約社員としていた会社・・・・・ 「ウチで一番デキる奴」というのがいて、そいつの作ったソフトの 動作が不安定だったので調べました。 他のマシンと通信してスキャンするソフトだったのですが仕様書通りに作ってありました。 「もし、自分のタスクが止まったなら・・・」というif文が!!!(w 自分自身が止まってたらそんなコード動かないと思うぞ!
>>93 遺言かコメントだと思われ
// 自分のタスクが止まったとき
void OnStop(){
// ここにある処理を外部から適用しる
...
tel('070-****-****');
}
95 :
仕様書無しさん :02/06/06 18:40
#define SIZE_DWARD (BUF_SIZE / sizeof(int))
96 :
仕様書無しさん :02/06/06 22:57
>>93 後でメンテするやつを楽しませる為のサービスだよ。
漏れも良くやるぞ。
>>1 前の人が作ったスパゲッティプログラム。。。。
98 :
仕様書無しさん :02/06/07 01:27
/*-------------------------------*/ /* init */ /*-------------------------------*/ /** * * init * * @since 1.0 * */ /* set init */ public void init() { : 先輩…。 何が言いたかったのですか…。 まぁ、JavaなのにStep数で仕事量を評価、 かつコメントもステップ数に含めるこの職場が DQNなんですけどもね。 でもでもjavadocでコメント抜き出して納品するって言ってなかった…?
あ、このコメントはソースからそのまま持ってきました。
いやあ、初めて見ました。 ソースファイルの名前が a.cpp, b.cpp, c.cpp …… なんてプロジェクト。
102 :
仕様書無しさん :02/06/07 03:47
>>101 俺は1関数1ファイルで0000.c,0001.c…8XXX.cというのを観ました。
いちお、千の位の数字は「サブシステムID」,百の位は
「モジュールID」、下2ケタが「関数ID」なのだそうです。
103 :
仕様書無しさん :02/06/07 04:07
ふー。書くのが嫌になってきたよ。 関数の先頭2文字を大文字にするコーディング規約。 これ決めた奴はもう社に居ないというのに。
>102 現在進行形で、ファイル名と関数名がその形式のプログラムと戦っています これでコメントも仕様書も当然ないんだから、 どうするんだろうね、ホントに... はぁ...
#define mallok(hensu, size) ((hensu = malloc(size)) != NULL) なんだこりゃ? if (mallok(...)) { 正常処理 } else { エラー処理 } みたいに使うようだけど、なんで"k"? と思ったけど、設計書見たらちゃんと書いてありました。 mallok : Memory ALL OK関数
106 :
仕様書無しさん :02/06/10 20:26
8bit整数の上限値のマクロ #define INT8_MAX (pow(2,7)-1) 間違いじゃないんだけどさ、毎回べき乗の計算させるのか? 127でいいだろ。
新人が俺に見せたフロー。ファイルの処理なんだが…
スマソ コードにすると… FILE *fp; START: *fp = fopen(file1 , "r"); while(*fp != EOF){ 計算処理 ・・・ 文字列処理 ・・・ } goto START; …? 何で強制的に無限ループするんだ?出力は? goto使うなって言っただろ? 「コレでいいですか?」って聞かれて、「やってみりゃ分かるだろ」 って答えたら、「やってみます」だと。 ジョークだよ。頼むからやめてくれ。
109 :
仕様書無しさん :02/06/11 00:29
大変だねぇ〜
110 :
仕様書無しさん :02/06/11 00:31
例外処理の中身が空で、例外だけ食いつぶしてた。。。。 そりゃあ、落ちるだろ・・・。
前の職場でコボラーだった人が
>>102 みたいに番号で管理したがる奴だった。
当時OS2+C言語で作ってて、
そいつが言うには「ドキュメントさえしっかり作れば関数名が番号でも一目瞭然!」とのたまった
漏れは後々の悲惨な状況が目に見えるような気がしてそいつと喧嘩してたら
同じプロジェクトの他の奴が「やかましい!」と一言。
そんとき思ったよ、「やかましいぐらい言ってても止めさせないとお前も苦労するんだぞ」と。
結局、標準ライブラリだけは普通の名前の付け方(意味のある)を承知させたんだが
仕様レベルの処理については関数名を番号で管理する事になった(TT
数ヶ月後、その「関数名を番号で管理すると言い張ってた奴」が漏れのところに来て一言。
「やっぱりわかりにくいわ〜。 普通の名前にしてもイイ?」と。
もうね、あほかと。馬鹿かと。
もちろん「駄目!最後までその仕様で作って責任とれ!」って言ったやった。
112 :
仕様書無しさん :02/06/11 12:24
下請けが作ったコード if(a < 0.0 && a >= 1.0){ 処理A } else { 処理B } よくあるバグだから、間違いに文句は言わないけどさ、 === これで「試験完了しました」っていうのはやめれ! === しかも試験成績書に処理Aの試験項目があって、結果が○になってるし。 信用できなくなったので、次のプログラム発注のとき、結果をログに出してそのログ ファイルとドライバのソースも提出して、と言ったら、仕事放棄された。
113 :
仕様書無しさん :02/06/11 13:02
COBOLなんですが、 COPY文1(入力) ADDR-BNTI-SU PIX(05) COPY文2(出力) ADDR-BNTI-SU PIX(04) SOUCE MOVE I-ADDR-BNTI-SU TO O-ADDR-BNTI-SU 住所の番地を数字で保存してあるDBから抽出して、 別のDBに入れるためのファイルを作成する処理ですが桁落ちしてますた。 入社したときにCOPY文及びDBレイアウト決定済み。 見落としていた自分も悪いんだけど、 使用通り入力ファイルの内容を出力ファイルに渡しただけです。 係長が部長に「新人が何も知らずにやってしまいました」と報告してました
114 :
仕様書無しさん :02/06/11 13:28
>>103 うちは、単語を_で区切って、更に頭文字が大文字だったよ。
Uza_Sugi
どっちかにして(TT)
115 :
仕様書無しさん :02/06/12 00:22
>115 禿げ同
117 :
仕様書無しさん :02/06/12 00:34
118 :
仕様書無しさん :02/06/12 00:41
Javaなんだけど、 なぜかifやwhileを{}でくくらないんだよね、1行だけの場合。 インデントに頼るのはヤメレって!! あと1つのメソッドの中に、StringBufferで10こも100こもappendするのは 本当にヤメレって!!!
119 :
仕様書無しさん :02/06/12 00:49
プロジェクトソース全検索したら「強制」が山ほどヒットした。 「ここで強制的に・・・」 「強制xxxxフラグ」 「xxxxなときは強制的に・・・」
120 :
仕様書無しさん :02/06/12 00:52
121 :
仕様書無しさん :02/06/12 01:06
>>118 > なぜかifやwhileを{}でくくらないんだよね、1行だけの場合。
> インデントに頼るのはヤメレって!!
何でヤメレなのかわからん
122 :
仕様書無しさん :02/06/12 01:10
>>118 > インデントに頼るのはヤメレって!!
気持ちはわかるけど現状、{}つけないヤツのが多いんだから馴れてください。
>119 ワロタ 「曖昧」とか「柔軟」とか「なんとなく」が滝のようにヒットするよりはるかにマシと思われ
>>122 多い?漏れはCのコーディング規約があたまにあるから必ずつける。
インデントに何を頼ってるのか、そっちの方がよくわからんが。
コンパイラはそんなこと知ったこっちゃないと思うが。
>>122 そう?
漏れの周りはそうでもないよ。
126 :
仕様書無しさん :02/06/12 01:23
>>114 それってコンパイラが
「到達不能コードです」とかって、教えてくれないの?
10000000b get!
>>118 StringBufferにアペンドしまくりって、「あり」かと思われ。
JSPからコールされることが前提のメソッドとか....
こんなやつ
public Sting toString() {
StringBuffer b = new StringBuffer(100000000000);
b.append("<table><tbody>");
b.append("<tr>");
:
:
:
b.append("</table>");
return b.toString();
}
>>125 別にインデントに頼ってるわけではないのでは?
それに、インデントなんて、エディタやツールがきれいにしてくれるんで、
頼っても良いとおもうけど。
つーか、インデントに頼るな、ってことの意味が分んない。 例えば while( i++ < MAX ) { s += i; } はインデントに頼ってなくて while( i++ < MAX ) s += i; はインデントに頼ってるの? ?? っていうかもしかして、 while( i++ < MAX ) { s += i; } とかって書くように勧めてますか?
>>131 while( i++ < MAX )
s += i;
って書くなってことだと思われ<インデントに頼る
インデントはコンパイラには無意味だぱ。
134 :
仕様書無しさん :02/06/13 00:01
135 :
仕様書無しさん :02/06/13 00:51
前に読んだけど、やっぱり{}付けないよ
>あと1つのメソッドの中に、StringBufferで10こも100こもappendするのは >本当にヤメレって!!! なんで?
ぶら下がりif文がどうのこうのという問題か? 必ず { } 付けると思い込んでいる奴がいると痛いかも。
わしは耄碌しておるので、自分のソースを後で見たときに 括弧ありと括弧なしが混在してると混乱するのじゃ。 ゆえに一行でも{}でくくるが、それを他人に強制しようとは思わん脳。
139 :
仕様書無しさん :02/06/13 21:47
140 :
仕様書無しさん :02/06/13 23:17
マクロがやたらあってソースがわけわからんツーの。
141 :
仕様書無しさん :02/06/13 23:19
// ここで一服 // 帰ってきてから書く予定 とかいてあるのに何もしたにソースが書いてなかった。
142 :
仕様書無しさん :02/06/13 23:20
/* 動けばラッキーあとはテスターにまかせる */
>>141 昔から「予定は未定」と言われていますからね。
144 :
仕様書無しさん :02/06/13 23:27
神PGと普通PGでの能力の差は10倍以上あるといわれている。 しかし、神PGはありがたがられるので、残業が多い。
>>141 そのまま帰ってこなかったんじゃねーの。
void debug_log(long line_no, const char *message) { #ifdef DEBUG FILE *fp; #endif #ifdef DEBUG fp = fopen("debug.log", "a"); #endif #ifdef DEBUG if (fp) { #endif #ifdef DEBUG fprintf(fp, "%s: %ld: %s\n", MODULE_NAME, line_no, message); #endif #ifdef DEBUG // MODULE_NAMEはファイルの頭で必ず定義しておくこと #endif #ifdef DEBUG fclose(fp); #endif #ifdef DEBUG } #endif #ifndef DEBUG // 何もしない #endif }
148 :
仕様書無しさん :02/06/14 10:35
ifの{}は、ダブルスタンダードであるのが問題なのでは? 何かの具合でインデントが崩れることもあるし、 括弧無しであることを第三者が見逃して、バグを誘発する 危険性も有る。コードというのは、その生涯の大半が第三者 による保守に費やされる事を忘れちゃ駄目だよ。 インデントはツールで自動的に修正できるけれど、 そもそもコーディングミスを起こすような時は、インデント が崩れている事にコーダが気付かない時だから意味が無いし、 コンパイルエラーにもならないからタチが悪い。 そもそも括弧を省くのはキータッチを僅かに省略する程度しか 利点がないから、そんな詰まらない理由で保守性を下げても Payしないと思う。
149 :
仕様書無しさん :02/06/14 10:39
ライトオンリーと酷評されるPerlでさえ、ぶらさがり文は禁止なのです。
150 :
仕様書無しさん :02/06/14 23:54
「もう完全にコーディングと単体テストできてるよ。」といって辞めていった 社員が残したプログラム、引き継いで、全然テストが通らなくてソースを見たとき。 int CommOpen(COMM *comm) { /* あとで書く */ } int ReceiveFromBuffer(COMM *comm, char buf[], int *bufsize) { /* あとで書く */ } int SendData(COMM *comm, const char *buf, int bufsize) { /* あとで書く */ } int CommClose(COMM *comm) { /* あとで書く */ } こんなのが数百関数。
>>148 > 括弧無しであることを第三者が見逃して、バグを誘発する
そんな莫迦が保守するんじゃ、どう書いたって大差ないと思うが。
保守作業を何度かしたけど、括弧付きのほうが圧倒的に楽。 ロジックに専念するためにも、括弧はつけて欲しい。
153のような馬鹿とは一緒に仕事はしたくない。
括弧無しは見難いとは思うけど圧倒的な差まではないと思うねえ。 ただ、括弧無しでもいいって意見には納得いきかねるけど。 なんだかこぼらーなんかに通ずるものがあると思う。
ホントに糞なソースコードに比べたら どーでも良いことだ
コメントで、動作に関係ない日記とか上司のグチとか書くのはやめてくれ 消す作業が増えて鬱
〜ではだめぽ とか 〜だぴょん だとか書くのもやめて欲しい
つーかさ、ずっと if(){ 処理 処理 }else{ 処理 処理 処理 } とか書いてるのに、急に if() 処理 else{ 処理 処理 処理 } とか書かれるとまぎらわしいのよね そんなつまんない省略すんなよ。と
確かにこれで見落とすのも保守側のケアレスミスだけどさ、 省略する意義がワカランのよ。正直
161 :
仕様書無しさん :02/06/16 13:15
↓俺はマジでこういうソースを見た事がある(汗 if (condition) statement; statement; if (condition) { statement; while (condition) statement; statement; if (condition) statement; }
if ( result == true ) return true; else if ( result == false ) return false; ・・・もう、ナニがどうだか。
163 :
仕様書無しさん :02/06/16 13:32
久しぶりに見たらあがってるので記念に。 これはまだまだ現役ソース一部改変。 オリジナルのコンパイルアップは20年前という、 筋金入りの化石だ。 言語名を特定できたら結構なオヤジとケテーイ(w 漏れ、オリジナルができたときリア消だったよ・・・。 初めて見たとき、マジで脱走しかけた。 003000 #10. ================================= ヒヅケ/チエツク XXXXXX 003100 ZERO ---> トウロク/ネンガツピW1. XXXXXX 003100*-----------------------------------------------------------------XXXXXX 003200S !1!2!3!4!5!6!7!8!9!.XXXXXX 003300*-----------------------------------------------------------------XXXXXX 003400C (トウロク/ネン :マスタ01 ガ スウジ) AND XXXXXX 003500- (トウロク/ネン :マスタ01 > ZERO) !Y! ! ! ! ! ! ! ! !.XXXXXX 003600C (トウロク/ツキ :マスタ01 > ZERO) AND XXXXXX 003700- (トウロク/ツキ :マスタ01 < '13') !Y! ! ! ! ! ! ! ! !.XXXXXX 003800C (トウロク/ニチ :マスタ01 > ZERO) AND XXXXXX 003900- (トウロク/ニチ :マスタ01 < '32') !Y! ! ! ! ! ! ! ! !.XXXXXX 004000C トウロク/ツキ :マスタ01 = '01' OR '03' OR '05' OR '07' OR XXXXXX 004100- '08' OR '10' OR '12' ! ! ! ! ! !Y! ! ! !.XXXXXX 004200C トウロク/ツキ :マスタ01 = '04' OR '06' OR '09' OR '11' XXXXXX 004300- ! ! ! ! ! ! !Y! ! !.XXXXXX 004400C トウロク/ニチ :マスタ01 < '31' ! ! ! ! ! ! !Y! ! !.XXXXXX 004500C トウロク/ツキ :マスタ01 = '02' ! ! ! ! ! ! ! !Y! !.XXXXXX 004600C トウロク/ニチ :マスタ01 < '30' ! ! ! ! ! ! ! !Y! !.XXXXXX 004700C トウロク/ネンガツピW1 > ヒヅケ ! ! ! ! ! !N!N!N! !.XXXXXX 004800C (トウロク/ネン :マスタ01 > '40' OR XXXXXX 004900- トウロク/ネン :マスタ01 = '40') AND XXXXXX 005000- トウロク/ネン :マスタ01 < '65' ! ! !Y! ! ! ! ! ! !.XXXXXX 005100C トウロク/ネン :マスタ01 > Wワレキ/ネン ! ! ! !Y! ! ! ! ! !.XXXXXX 005200*=================================================================XXXXXX 005300A トウロク/ネンW1 = トウロク/ネン:マスタ01 + 1925 ! ! !X! ! ! ! ! ! !.XXXXXX 005400A トウロク/ネンW1 = トウロク/ネン:マスタ01 + 1988 ! ! ! ! !X! ! ! ! !.XXXXXX 005500A トウロク/ネンW22 ---> トウロク/ネン:マスタ01 ! ! !X! !X! ! ! ! !.XXXXXX 005600A トウロク/ツキ:マスタ01 ---> トウロク/ツキW1 ! ! !X! !X! ! ! ! !.XXXXXX 005700A トウロク/ニチ:マスタ01 ---> トウロク/ニチW1 ! ! !X! !X! ! ! ! !.XXXXXX 005800A '1' ---> ネンガツピ/エラ-:マスタ01 ! !X! !X! ! ! ! !X!.XXXXXX 005900A #10 オ デル ! !X! !X! !X!X!X!X!.XXXXXX 006000*-----------------------------------------------------------------XXXXXX 006100E トビサキ !3! !6! !6! ! ! ! !.XXXXXX 006200*-----------------------------------------------------------------XXXXXX 006300 -EJECT- XXXXXX
>> 149 perlには後置ifがあるから、それでも困らないし、インデントについては害も少ない。 …つーか、Cにも後置if欲しい。
165 :
仕様書無しさん :02/06/16 14:00
とある参考書には、こういうコードがあったけど。 public void function() { while (condition) { if (condition) { statement; statement; }//if }//while }//function() 非常に見づらかった。
>>160 「統一されてない」のがまずいね。
どちらかに統一されているのが原則でしょう。
>163 ぴゅう太って汎用機でも動くのきゃ?
あらららら、空白が全部ケズられてました。失礼。 これは目立のC○RALの真髄(wであるデシジョンテーブルです。 やっぱ化石なのね・・・でも目立関係者のオヤジ! こら見てんだろ! オマエらシカトこいてんじゃねえ! てめえらがふざけたモン置いてった(まさに「置いてった」)せいでなあ(涙 正確には言語ではない、という位置づけらしいが詳しいことは目立の人に聞いてくれ。 どうもこれを作った人は目立を辞めて観音に逝き、 C○RALをもとにCAN○−AIDなるツールを作り、 でもって今はRES○UE(!)の会社にいるらしい。 オマエよぉ。RES○UEのリポジトリ、 CANO−AIDはともかくC○RALもぜんぜんサポートしてねえじゃん。 作りっぱなしはカンベンしてくれマジで。 で、このC○RAL、コンパイルすると一度COBOLソースが生成されるんだけどさ、 デシジョンテーブルが全部IF文のネストになりやがんの。しかもELSEなし。 想像してみ? 発狂するから。
目立は糞
172 :
仕様書無しさん :02/06/18 20:43
>>159 あ〜、片方だけ括弧を省略するのは激しくやめて欲しい。
173 :
括弧絶対書く派 :02/06/18 21:03
括弧を”省略したい”ケースってどんなの? 思いつかん。
人に括弧{}をつけろと強制したことはないが 括弧{}をつけないメリットってなにがあるの? 逆に括弧{}がついてると何かデメリットがあるの? だからオイラはいつも括弧{}を付けてるよ
おまえら括弧つけてんじゃね〜YO!
176 :
仕様書無しさん :02/06/18 21:53
/* 1999/XX/XX チョメチョメ追加 XX Start */ チョメチョメ処理; /* 1999/XX/XX チョメチョメ追加 XX End */ ↑ こんなのうじゃうじゃソースに埋め込まれたら わけわからんよ、邪魔だっつーの rcs とか cvs でバージョン管理しろよ あと、???.c.bakとか???.c.oldとか???.c.orgだとか うぜぇよ、リリース環境ゴミだらけにすんなオヤジ
>>176 俺はソースの99.89%がそのようなコメントで埋めつくされているコードを
見た事がある。
そしてもう二度と見たくない。
( の相方を省略されるものむかつく。 「(w」とか。 プログラムと関係ないのでsage。
))) まとめて閉じておきました。
>181 サンクス。
( この会社辞めようと思ったソースコード#4:183: parse error at end of input
184 :
仕様書無しさん :02/06/18 23:27
>>176 それとまったく同じフォーマットのソース見たことある...
さすがに99.89%はなかったけど。
ちなみに、その会社辞めたけど、そのソースコード見て
辞めようと思ったわけではない
あと、多いのが、
#ifdef 0
昔使ってた処理;
#endif
頼むから消してくれ VSS使ってんだから
185 :
仕様書無しさん :02/06/18 23:29
>>181 1個足りないんだが…
”「」”の中は>178的には文字リテラルだからOK、なのか?
>>185 わたしの担当は ( のみです。( は別の方に任せたいと思います。
.
お前ら!行末につける";"が抜けてるぞ!; コンパイルエラーになるだろうが。;
エバンゲリオンをばかにするな!;
193 :
仕様書無しさん :02/06/19 01:25
>>176 ,177
おお、御同輩。もしかしてどこかでお会いしてる鴨…
/* 1999/XX/XX チョメチョメ削除 XX Start */
/* チョメチョメ処理; */
/* 1999/XX/XX チョメチョメ削除 XX End */
/* 2000/XX/XX チョメチョメ復活 XX Start */
チョメチョメ処理;
/* 2000/XX/XX チョメチョメ復活 XX End */
もうね、なにがなんだか…
1関数1ファイルのくせに、ほとんどのソースファイルが1000行を
越えているのであった…(これをSCCS管理、ってツールが泣くよ…)
だんきち〜、エバの〜、おまけコ〜ナ〜
最近配属された部署で契約している派遣プログラマ様の perl 力作 その1) if ( $RecordCnt < 10 ){ $AddUserTmp = $OutputPath.'/rec0000'.$RecordCnt.$AddUserFile; }elsif ( $RecordCnt < 100 ){ $AddUserTmp = $OutputPath.'/rec000'.$RecordCnt.$AddUserFile; }elsif ( $RecordCnt < 1000 ){ $AddUserTmp = $OutputPath.'/rec00'.$RecordCnt.$AddUserFile; }elsif ( $RecordCnt < 10000 ){ $AddUserTmp = $OutputPath.'/rec0'.$RecordCnt.$AddUserFile; }else { $AddUserTmp = $OutputPath.'/rec'.$RecordCnt.$AddUserFile; } その2) @Time_Element = localtime(time); ... $Year = sprintf( '%02d', $Time_Element[5]+1900 );
元上司の書いたコードで、突然無条件ジャンプで後ろのほうに 飛んでいって、また無条件ジャンプで戻ってくるのが無数にあった。 エディタで行を挿入できることを知らなかったらしい(禿しく実話)
>193 うわ、その形のコメントにソースの長さ、SCCS管理って見覚えがあるよー。 もしかして漏れが昔関わっていたプロジェクトなのか、 それともこんなソースは珍しくないのか…(鬱)
Webアプリケーションなんだけど、サーバー側開発言語がなぜかVB。 4種類のデータのマッチング(1:n:m:m*l)あり。 サーバー→クライアントの転送データはJavaScriptの配列イメージ。 サーバー(VB)でマッチング済みのデータをさらにクライアント(JavaScript)側 でもマッチング。 クライアントからのデータ送信時にもまたマッチング。サーバーでデータ更新する ときもマッチングしながら更新。 読み書きしてて気ぃ狂いそう・・・もう勘弁してくれ・・・・・・。
>197 BASICで行番号が足りなくなって泣く泣くそういうコードを書いたことはある。
>200 行番号を再割り当てする命令なかったっけ? 機種依存?
Public Function A_Kannsuu() As String On Error GoTo Error '処理 Exit: Exit Function Error: Resume Exit End Function なんかもうやる気がだめぽ。
>>201 「RENUM」だったらたいていの機種にあったんじゃないかな。
あ、初代PC-6001にはなかったかもしれない。
りにとか ぬわ せすにみか ふくいりりらるふ ふわ きらから ぬわ すなみ くいりりらる くいりりらる くいりりらる . . .
なんかここに晒されてんの目立のコードばっかりな気がする
#include<stdio.h> #include"m.h"//これがミソ in m(in ac,ch**av){ F*fp;ch*fn;in a,i,l; f(i=1;i<ac;i++){ fn=av[i]; if(!(fp=fo(fn,"r")))perror(fn); e{ l=0; w((a=fgetc(fp))!=EOF)if(a=='\n')l++; fc(fp); p("%s:%d\n",fn,l); } } r 0; } そこまでしてタイプ量を減らしたいのですか
p("%s:%d\n",fn,l); <− ワラタ
>206 VZのマクロのノリだな...... 補完機能の無いエディタつかってたんだろーなー。
>203 RENUMが無かったか、 あるいは行番号を使いきってたか、 どっちか。覚えていない。
>>206 f とか w なんかのアルファベット1文字を(ローカルな)変数名に使えないのがなんかイヤ。
さらに、in だの ch だのといった2文字までダメなのは疲れそうだ。
そんなことを気にしてハゲるより、指の運動量を増やしてボケを防止しようよ。
>>209 もしかしてMERGEとかCHAINとかの絡みもあった?
か 絡み と
MERGE の た ?
て か っ
し と CHAIN
し か あ
>>209 も
も
彡
(,,ノ゚д゚)ノ
投げんなよオメー
>>206 怖いけど m.h を見てみたいなぁ .....
216 :
仕様書無しさん :02/06/23 10:51
>>215 想像して書いてみる
#define f for
#define F FILE
#define fo fopen
#define fc fclose
#define r return
#define p printf
#define w while
typedef char ch;
typedef int in;
でも、
e{
l=0;
のところはいったい何なんだろう。
>>216 chもinも#defineだろ。
あとは
#define e else
かぶりますた皮。
221 :
仕様書無しさん :02/06/23 13:43
>211->213 激ワラタ
>>220 のようなプログラム書いたことがあるぞ♪
マクロを使って、どこまでC言語から離れられるのかの実験。
客先のC言語マンセー野郎が気に食わなかったので
ワザとそういう書き方をしてやった。
「え?マクロもC言語でしょ?」
224 :
仕様書無しさん :02/06/23 14:55
しかし、
>>220 のようなコードの BEGIN を { に変更するとなると、
変更のところに、
/* 2002-06-23 T.Yamada 変更 開始 */
/* BEGIN */
{
/* 2002-06-23 T.Yamada 変更 終了 */
なんてのを 1 行ごとに書く規約があったりする現場もある。
225 :
仕様書無しさん :02/06/23 17:25
StringBuffer が単純な文字列連結よりも、 *どんな時でも*速いと信じている人が多くて困る。
>客先のC言語マンセー野郎が気に食わなかったので >ワザとそういう書き方をしてやった。 いやがらせするなら #include "line1.c" #include "line2.c" #include "line3.c" とずらずらっと1行ずつファイルを作って、それを インクルードしる。怒られたら 「え?インクルードもC言語でしょ?」 と反論しる
プリプロセッサ通してindent(1)とかされたら終りじゃないの?
228 :
仕様書無しさん :02/06/23 18:54
プリプロセッサはC言語の一部じゃねーだろ。 Cコンパイラの一部だろうけどさ。
プ
>>216 #define m main
も入ってそう。
しかし、空白も極力省く徹底ぶりなのに
インデントだけはきっちりつけてるのが笑えるな。
>198 俺も俺も。 見憶えあるよ>193のやつ。 あのプロジェクトのDQNリーダーがなつかすぃ。
>198 やっぱりどこでもあるんだな。 うちの会社は '200x/xx/xx XXXX追加 開始 処理 '200x/xx/xx XXXX追加 終了 とか '200x/xx/xx XXXXのため削除 開始 なが〜〜いコメントアウトされた処理 '200x/xx/xx XXXXのため削除 終了 こんなコードをVSSに入れて管理してるし。 VSSは単なるファイルの置き場所かっ!
ふっかつのじゅもん?
234 :
仕様書無しさん :02/06/25 01:31
198ではないがうちも同じだ。VSSってところも一緒。 元々「最新のソースどれだっけ?」とか言っていた寒い状況だったので、 ソース管理の必要性を訴え、何とかVSSを導入してもらった。 その後、修正履歴のコメントを入れないで開発していたら、 糞SEが「コメント入れろ」と文句言ってきた。 「ソースの可読性が著しく落ちる」 「VSSで以前のソースは参照できる」 と主張しても、 「前担当のプログラマがコメント入れてたから」 と言って、聞く耳持たない。 頭来たんで、徹底的にコメントを入れるようにした。 それから、半年以上たっているから、軽く1,000行は入れているはずだ。
>>234 VSS上でコメント入れれるからそれを使え。
またはChangeLog.txtファイルをプロジェクトに追加して
それに履歴を書き込め。
236 :
仕様書無しさん :02/06/25 06:39
>>235 そういう正論は通用しないのが世の中...
前職もそうだった
237 :
仕様書無しさん :02/06/25 07:07
>>228 え、#define とかって ISO/ANSI C で決められていないんですか?
>糞SEが「コメント入れろ」と文句言ってきた。 コメントにその糞SEへの恨みつらみを書いておくとよい。
>234 あとから見た人に「わかってない奴」と勘違いされない為に以下のコメントを挿入せよ。 /* 「ソースの可読性が著しく落ちる」 「VSSで以前のソースは参照できる」 と主張しても、 「前担当のプログラマがコメント入れてたから」 と言って、聞く耳持たない。 頭来たんで、徹底的にコメントを入れるようにした。 */
引き継いだプロジェクトのうち、辞めてったやつのソースが無かった。 資料の中にプリントアウトしたものがあって、 しょうがなく手打ちで入力しようと思ったらソースの部分だけ白地に黄色で印刷してあった。 コピーしたらマシになったから打ちこんだら動かない。 よくみると変数の1(1)とl(エル)が変則的に代わっていて、違う変数だと気が付いた。 このために明朝体で印刷したらしい。 あまりの徹底振りにただ苦笑いしてたが、あとでため息が出た。
241 :
仕様書無しさん :02/06/26 00:46
>240 すげー。 漏れも会社辞めるとき、そー仕様。 それか、ふぁいあーうぉーるに○あける。
>>241 そんなんじゃダメだって。
もっとこう、カットオーバーの時まで発覚しないようなバグを仕込まなきゃ(w
>242 熱転写用紙にあぶり出しで書くとか。
244 :
仕様書無しさん :02/06/27 01:35
for (i=0; i<データ件数-1; i++) { for (j=i+1; j<データ件数; j++) { if (Data[i] == Data[j]) { データ重複時の処理; } } } これを、”ソート済みのデータに対して”やっていた。
>244 いいな、それ。ちゃんとテストやらなきゃ発覚しなさそう。
ここをよんで、ある意味元気が沸いてきました。
247 :
仕様書無しさん :02/06/27 04:26
>230 C言語だったら 「言語仕様上は改行いらないよね?」 とか言って改行全部無くす。これ最強。
perl -pie 's/\n//;' こうだっけ(w
250 :
仕様書無しさん :02/06/28 00:04
Javaなんだが、メソッド名がすべて連番で 処理1() { ... } 処理2() { ... } って書いてあった。 脱力した。
251 :
仕様書無しさん :02/06/28 00:11
複数のパラメータの値の組み合わせでで決まる「なんとか状態区分」っていうのが 至る所にあって、その名前に、shori_kbn だとか data_mode とか 意味不明な名前が付けられてた。 もちろん、ディシジョンテーブルなんてドキュメント化されていない。 ってのを読まされたときは、疲労したな。
252 :
仕様書無しさん :02/06/28 00:15
変数がすべてグローバルで定義してあるVBAのプログラムには呆れた。 一応、関数の中にも変数定義できる言語のはずなんだけど。。 漏れが新人の時の先輩社員(10年目くらい)の話。 しょうがないので、漏れがこっそりリファクタリングしてやったから、 顧客の目には触れずに済んだがな。
以前関わったプロジェクト 関数名・変数名ともにタイプと日付時間でつける(ワラ void vf20020627001100(void) { int i20020627001234; ・・・ }
254 :
仕様書無しさん :02/06/28 00:20
>>253 それで、どう幸せになるのか教えてくれ。
255 :
仕様書無しさん :02/06/28 00:24
>>254 プログラマが遊んでいないことを監視できる。
256 :
仕様書無しさん :02/06/28 00:25
>>254 関数単位でスケジュールが組まれており、
実績が人目でわかる。
257 :
仕様書無しさん :02/06/28 00:28
一応抗議したんだが、風習(ワラ らしい。 コード打ってると、目がちかちかしてくる。 あと、時間の経過がわかってなんかやだ。
259 :
仕様書無しさん :02/06/28 00:52
>>258 その風習に逆らうとどうなるんだ?
秒まで書くようだが、打ってる間に秒なんて変わっちまうぞ、
そもそも、いつの時点の時刻を書けばいいんだい?
>>259 そこらへんは意外とあいまい。
みんな分までは大体見て書くけど、秒はつじつまあわせくらいしか書いてなかった(当然だが)
>風習に逆らうと
さからったやつを見たことが無い。
漏れも結局はそれでやってしまったから・・
同じ瞬間に同じ引数型、復帰型の関数作ったらア・ウ・ト
じゃあ、名前も入れる void vfIchiro20020627001100(void)
>>253 それって関数名と関数機能をどうやって結びつけて管理するの?
関数仕様書とか書かないの?名称がコーディングするその瞬間まで 決まらないなんてオトロシイ…。共通関数とかはどうすんのよ。
>>262 同姓同名がいたらまずいのでさらに生年月日、
それでも重なる可能性を考えて社員番号を加えるべきだろう。
void vf164428Ichiro1973Oct22_20020627001100(void)
満を持してお前等に uuidgen コマンドを教えてやる
>>266 社員番号入れるなら名前や生年月日は必要ない罠 (w
269 :
仕様書無しさん :02/06/28 23:36
Cって21文字までじゃなかったっけ?
270 :
仕様書無しさん :02/06/29 00:02
>>254 関数名・変数名を考える時間を省略でき、
生産性が向上する。
・・・とか考えたのかも。
>268 同姓同名はどう回避しようかねぇ
272 :
仕様書無しさん :02/06/29 00:57
>>272 こんな仕様考え出すくらいだから、
社員番号=入社年月日+名前の適当な数値化
見たいなフォーマットで作って、結局「重なるよ、どうしよう?」
とか言って悩むと(w
>273 名前を変えてください。
275 :
仕様書無しさん :02/06/29 09:43
デバッグ中にN○C系ソフト会社の作ったソースに以下のコメントを発見。 /* 超暫定!!このまま使うと危険 */ /* 今日はここまで・・・あとはケンさんよろピクピク(^o^)丿 */ /* 本当はここでループするはずだけどフリーズするからとりあえず削除 */ /* あとは○○社で対応してくれるはずだから安心してね */ /* 外部提供関数が削除されちゃってるからとりあえず削除(動かないよ) */ 全部コメントどおりバグだらけ、しかもgoto連発。 更にgoto先はreturn NG;するだけ・・・。 コーディングは完全に終わっててテストも結合レベルまでやったって言うから 仕方なく合同デバッグを引き受けたのにこんなソースをデバッグさせんなゴルァ!
南無ぅ
昔いた会社で「一番デキる奴」と評判の奴のソースを直す必要があった。 C言語なんだが・・・・マルチステートメントの嵐!!(藁 一度本人に聞いたんだけど、「あれ作った頃はどれだけ縮められるか燃えてたしな」とシャアシャアと。 横に2画面ほどもある計算式をどうしろと???(w 試しにいくつかに式をぶった切ったらなぜか動かなくなってしまったことがあったりして 最後の方までほったらかしでした。 でとうとう手を付けないと行けなくなって・・・・ 作り直しましたよ。 全動作パターンでチェックリスト作って手直し手直しの連続。 んで完成してしばらくしてからそいつにあった時、「あれはどーなった?」と聞かれたので 「あーあれね。 もう大丈夫。 完璧だよ」と言ったら喜んでた(汗) あの・・・・漏れが直したんですけど。
278 :
仕様書無しさん :02/06/29 15:14
... etc ... /* 一応完成 */ ... etc ... とか ... etc ... /* まだ少しバグあり */ ... etc ... わかんねーよ。
>一番デキる奴 たいてい「一番キテるやつ」の間違いという罠
280 :
仕様書無しさん :02/06/29 19:00
>>278 /* 後で手直しが必要 */
前担当者が辞める前に残していったソース。
え?これもしかして折れが手直しするの?
281 :
仕様書無しさん :02/06/29 19:26
「OK」で commit、「キャンセル」でそのまま終了... もう、アフォかヴァカかと...
282 :
仕様書無しさん :02/06/29 22:18
>>277 ちゃんと、「あんなクソは捨てて、作り直した」と言わんかい!
バカが調子に乗るだろ。
>282 いや、作り直したって事知ってるもんだとばかり思ってて あーいったんだよね・・・・ まぁあの会社もそんなやつがトップレベルらしかったから、もう関わりたくないんだよね(w
質問 あのお、ここにあるソースって、よほど稀ですか、 それとも会社に入ったらいつか出会うと覚悟しといたほうがいいですか? <アマチュア
>>284 私の上司は汚いプログラムが出来上がってくることに対して
ほとんど悟りの境地でしたが何か?
287 :
仕様書無しさん :02/06/30 23:10
>>284 ,285
それぞれのソース自身は稀ではあるが、同じようなレベルのソースには
いやと言うほど出会う、かも。
環境によりますね。
288 :
仕様書無しさん :02/06/30 23:40
>>284 稀かどうかは、会社および組織による。
まともなところならば、「対岸の火事」だろうが、
はずれの会社とかだとどこのプロジェクトに行っても
糞ソースからは逃れられない。
そういうところに入ってなまじ実力あるところを示すと、
他人の尻拭いをしつづける羽目になるので気をつけよう。
ここに書いてあることが事実なら、給料泥棒ですな(w
290 :
仕様書無しさん :02/07/01 11:29
>そういうところに入ってなまじ実力あるところを示すと、 >他人の尻拭いをしつづける羽目になるので気をつけよう。 (T_T)はげどう
同意。
しかし糞ソースを見ると自分の時間を削ってでも治したい衝動に 駆られるのも事実である。
>292 「見て見ぬふり」が出来るようになれば立派な「大人」になった証拠です(w
漏れもだいぶ大人になったよ。 糞ソースを見ると反射的に治したときのテスト工数を考えるようになったよ。 そして泣く泣くあきらめるんだ。
さらに、そんなところに居続けると 「糞ソースを解析する技術」 「動作が変わらないように糞ソースをいじる技術」 が身につきます。ぜんぜん嬉しくない。 > ここに書いてあることが事実なら、給料泥棒ですな 給料泥棒というよりは、詐欺です。 そんな糞ソースで動作も怪しいプログラムを納品する上、 エンハンス要求が発生すれば、必要な工数分の費用を要求します。 まともなソースなら1〜2日ですむ話も、糞ソースの場合 数倍に膨れ上がります。
296 :
仕様書無しさん :02/07/02 00:13
char *f20011112162430(char *p20011112162431,char *p20011112162432)
{
int i20011112162433 = 0;
int i20011112162434 = RET_FALSE;
for(i20011112162433 = 0;i20011112162433 < 15;i20011112162433++){
if(*p20011112162431 == NULL)return i20011112162434;
p20011112162431++;
・・・
ちょっと
>>253 でコード書いてみた、、、、、
これは暗号だな。
つまり、プロテクトの一環だったわけか。
298 :
仕様書無しさん :02/07/02 00:21
>296 #include "m.h" これで完璧W
>>296 日本語Cのプリプロセッサが吐いたコードに見える(w
お前ら現実をわかっていないだけ。 C++>>COBOL>>>>>>∞>>Java>>>>>C>>> >>∞>>VB=Delphi
302 :
仕様書無しさん :02/07/02 21:48
う〜ん、
>>301 には判断付かない筈なんだがなぁ。どれも難しすぎて。
304 :
仕様書無しさん :02/07/02 22:34
いやぁ、296みたいなソースあったよ int a[32]; って宣言してその32この変数使いまわすの a[12]がカウンタとx軸と関数の戻り値の3通りの 使われ片してた
Dim args As String args = CStr(arg1) & "/" & CStr(arg2) & "/" & CStr(arg3) Call Process1(args) Sub Process1(args As String) Dim arg1 As Long Dim arg2 As Double Dim arg3 As String arg1 = CLng(Decode(args, 1)) arg2 = CDbl(Decode(args, 2)) arg3 = CStr(Decode(args, 3)) .......... .......... .......... .......... End Sub Function Decode(args As String, i As Integer) As String Dim arg As Variant arg = Split(args, "/") Decode = arg(i - 1) End Function もうね。アフォかと。 しかも変数名は全部日本語でしたわ...。 8 年前のソースにしてもひどすぎる。
306 :
仕様書無しさん :02/07/03 01:39
>>304 自分もそういうコードを見た経験あり。
うちもこのスレでの報告とたいして変わらない。
他にも、修正履歴が全部コメントで残ってたり、担当者が辞めてしまったり、
変数が作業者の名前と番号だったり、処理系依存だったり、
間違えて古いバージョンのソースを使いバグが復活したりしていた。
(バグを修正した直後に、4年前のバグ修正の報告書がでてきた)
>304 それじゃアセンブラじゃねーか。 と書いてみる。
haxa??
開発課の人間が書いたコードより、ユーザーサポートの人間がサポートの片手間に書いた コードの方が品質が高いのを見たとき。 そして、その人から、「サポート担当の私でさえ、このぐらいできるんだから、開発課で できない訳ないですよね」と言われたとき。 ここまで言われて悔しくないお前らにプロとしてのプライドはないんかと小一時間(以下、略)
「//* ここは後で、・・・と直しといてね。」 というようなコメントをしょっちゅう書いてますが何か?
>>309 そりゃあ、忙しい人が必死で書いてるコードより、
暇な人が暇つぶしに書いたコードのほうが、品質は高いだろう。
312 :
仕様書無しさん :02/07/03 11:18
>>309 そりゃユーザーサポートのほうには優秀なヤシを回すからな
ロクに人とクチも聞けないカスみたいなのを開発にまわしているんだ
って、おたくの会社のえらいさんが考えていると思う。
バグの調査を頼まれたのでソースを見てみたら、 long main(long ac, char **av) と書いてあってここだけでもう見る気がしなくなった。 おまけにmainが1000行近くもあるし、グローバル変数ばっかりでほとんどの関数は引数なし。 こんなソースの複合系のバグを潰せと? (゚∀゚)ムリ!!
>304 とある社内言語→C移植する時、 面倒なんでソースをコンバートしてそんな風になったことがある。 正直、すまん。
>304 逆アセしたソースからCに移植したとき 時間足りないんで、そのままにしてた事がある。
>>311 それがわかってないSヨがどれだけいることか・・・
>>309 「んじゃお前明日から開発な。見積提出、納期厳守で」
と云います。
最近、C で組んでないなあ。 専らJavaの仕事しか来ない。
319 :
仕様書無しさん :02/07/05 21:37
あんだなぁ 1分半で終わってた処理が72分にもかかるようになってたから なんじゃこりゃって思ってソース覗いたら ループの中でSQL文を発行してやんの しかも、プライマリキー無視して検索してやんの おいおい、こんなもん放置していいのかよ 全体の処理が3時間だったのに、今じゃその1つのプログラムのせいで 4時間越えてるよ、なんだかなぁ アホなPGが居ると思いきや、それを放置するリーダーが居る それにクレームつけない客が居る アホばっかやなぁ
仮説1:日本においては、批判は悪とみなされる。 仮説2:仕事してる間は同僚に悪者扱いはされたくない。 結論1:社内の誰かが"アホだ"と気付いても批判しない。 結論2:アホが書いたアホなソースコードは改良されない。 補足1:日本においては、これが普通。 補足2:批判しすぎると、首が飛ぶ(w
>>320 深読みしすぎだよ
そのソース書いたのたんなる害虫だよ
しかもペーペー、でも29歳
確かに明らかにドアホ過ぎると指摘しずらいな
でも1分半だった処理が1時間越えるんだぞ
黙って直すか、ハァ...
>319 そもそも前の処理から今の処理に変えた理由は何? それが例えば顧客からの要望で、なおかつそれまでとは全然違う SQL に なってしまって(抽出条件が違うとか)、んでインデックスが使えなくなってい るとかじゃないの? 挙げ句にインデックス張りなおしたくても DB の容量見積もりしなおす必要 があって、そんな費用でない、って顧客が言ったんで放置プレイとか。
検索に主キー使うのか? インデックス別の使えば無視したっていいだろ。 プロシージャ内でなくプログラム内のループでSQLを何度も発行するのだって 時と場合によってはそのほうがいい事もあるだろ。 致命的な性能劣化がなければメンテ少なくて済むし。 私はできます。他人はできません。 と言いたがる典型的な厨PGだな。 多分たしかにひどいプログラムを見たのだろうけど 文章じゃ何が悪いのかさっぱりわからん。
>322 >そもそも前の処理から今の処理に変えた理由は何? 変えたというか追加だな、その追加したところがアホなんだな インデックスもテーブルレイアウトも変わってないんだな >323 ばーか、別のインデックスにひっかかってれば遅くねーだろ つーか、プライマリキーしかないテーブルだけどな(w ばーか、1分半が72分に膨らむのは致命的じゃねーのかよ(w プライマリーキーの項目が3つあったとして、前の2つの項目を 指定するのと真ん中の1つの項目しか指定しない違いわかる? あんたバカだからわからないだろ(w >プロシージャ内でなくプログラム内のループでSQLを何度も発行するのだって ハァ?なに言ってるかわからんね 発行する回数が同じでプログラム内なら許されて プロシージャ内なら許されないの? つーか、プロシージャって何を指してるの? プログラム内って何を指してるの? あんた、とんちんかんだよ 人の文章のこと棚に上げてウンコちゃん丸出しだな(w
325 :
仕様書無しさん :02/07/05 23:22
>>325 2ちゃんだからな
要するに、俺が思うに
322にはまともな人だ、323はたぶんブサイクだよ
>325 禿同 「ばーか」とか書いてないで少しは伝える努力をしろよ。
できないプログラマは、定石を覚えようとしない。 定石だけ知っていても駄目なのはもちろんだが、 定石を知らないのは論外だな。
>>323 >検索に主キー使うのか?
そりゃ使うだろ、別にインデックスがあるならそれでもいいけど
主キーの中で間に合うならそれ使うでしょ
キー項目がa,b,c3つあったとしたら
aだけ、またはa,bで指定してもインデックス効くんじゃないのか
ただし、b単独、またはb,cだと速くないと思ったけど
作成されてるインデックスの順に指定しないと遅いんじゃないのか?
それとも最近のDBってえらく賢いのか?
>>324 ひとつ聞きたいんだが、
「変えたというか追加だな」な割に、
「1分半で終わってた処理が72分にもかかるようになってた」
って、その1分半ってどこから出てきた数字?
333 :
仕様書無しさん :02/07/06 09:22
DB周りの開発をやっていると、わりと遭遇する事例
だと思うのだけどなぁ。俺は
>>319 の内容で充分に
判ったが。
たとえば、よく動作原理を理解せずにカーソルの二重
ループなんかが書かれちゃうと、ループの度にカーソル
の作成しなおしが発生して、単体テスト時の少ないデータ
量だとなんとも無いのだけど、ちょっとデータが多くなる
と途端に処理時間が何倍にも膨れ上がるなんて事になる。
そういう事じゃないの? 優香、そういうの放置している
とまた同じ事をやらかすから、早めに教育したほうが良い
と思うのだが。
>>329 わかる。
アルゴリズムを今まで知らんかったって言っていたヤシが上の奴にいて驚いた。
不勉強なのはいかんね。
>>331 実行ログから出た数字
そのプログラムの全体の実行時間が1分半だったものが
その処理を追加したら72分になっていた。
>>333 それなら、まだかわいいんだけどな
10万件弱のデータで単体テストした結果を見て
放置したわけだ。
つまり、鬼のように遅くなったが
まあ、動いてるからいいやと言うアホ人間だ。
わざわざ共有メモリを使うようにして
パフォーマンス上げた人たちを侮辱してるとしか思えんよ。
教育かぁ、2、3年目くらい奴なら教育というのもいいんだがね。
つーか、そいつデブでブサイクなんだよ
俺、嫌いなんだよそういう奴
プログラマのくせにアルゴリズムの計算量評価が 出来ないだなんて。 と、愚痴ってみてもそれが出来る人って少ないよ。
>335 ちょっと待て。 「ほぼ同じ処理だけど SQL を書き換えた」だと思ってたんだが、そうじゃないんだな? 文字どおり「処理が変更されて、機能が増えている」んだな? だとしたら追加分の処理が、それまでの処理とうまく整合させられないのであれば、 こういうことは十分あるぞ。 で、追加分の処理を早くしようとすると、上のほうまで手を入れなくてはならなくて、 どうしようもなくて放置せざるをえない(データベース構造から考え直す必要があっ たり……)ってのも結構ある。 その辺の兼ね合いで、遅くてもとりあえず動くからこれで我慢してもらおう、って のはごく普通の選択肢。むろん、それをきちんと顧客に伝えて、了承貰うのは 当然だけどな。
>>331 のツッコミの意味が良くわからなかったんだけど
>>337 で理解できたよ。
もうちょっと具体的に処理の内容をわかるようにしてくれないと
>>319 が「あんだなぁ」になってしまうね。
>319 はマネージメントの経験はないのかな? 一度でもマネージメントやってみると、「性能のためには最善なんだけど、取ること のできない手段」なんてジレンマはよくわかるんだが。 例えば君がこっそり直すってのは、システムマネージメントの面からすると、やって はいけないことなのだよ。 なぜなら、 ・余分な工数が発生する 工数はすなわち作業であり、顧客に対して「これこれの作業をするので、これだけの 費用を請求いたします」ってやらなきゃならない。むろん顧客側も予算があり余るわ けではないから、その費用見積もりに対して、それを行うかどうかを決定するというリ アクションがある。それによっては作業自体をキャンセルすることは十分あるわけで。 君が勝手にやってしまうと、ただ働きになっちゃうよ。ただ働きってのは利益が出ない んじゃなくて、損失なんだってことも肝に銘じとこう。 ・もしかしたら挙動が違ってしまうかもしれない 全く同じ動きをする、と言い切れるならともかく、そうでないならば安全のためにも 「今まともに動いている部分は触らない」ってのが原則。迂闊に手を入れておかしくなっ たら洒落にならんのでな。
>>322 おまえもバカか?
333が言うように普通ならわかると思うよ
だから、その追加分の処理単独で遅いんだよバカ!
そいつが追加したループして何千回もSQL実行してるところが
単独で遅いんだよ、他との関連もねーんだよバカ!
おまえ言ってるようなことがあったらアホ扱いしねーだろがぁ!
当然全部見てアホだと言っているんだよ。
339の内容は心配しなくていいよ、だって元々俺がそのプログラム修正する
から、それに気づいたわけでテストするもの
それに、そのSQLが遅いだけだもの
そのSQL文しか直さないから、そのSQL文の結果が同じなら結果は同じ
おまえ仕事遅いだろ、工数なんてかからねーよ
なんだよおまえのマネージメントって、おまえバカばっかりやってんだろ
おまえこそマネージメントの経験ないんだろ
プロジェクトにはバカが混ざるんだよ
そのバカ相手におまえが言ってることは当てはまらないんだよ
>ただ働きになっちゃうよ
ああ、ものの2、3分くらいなら
ただ働きでもいいよ(w
>全く同じ動きをする、と言い切れるならともかく
言い切れるよ
できるやつは少ないってこった。
>余分な工数が発生する あのねSQL文ちょこっと直してぎゃーぎゃー騒いで 金取れるほど甘くねーんだよ 見積もりね保守の中に入ってるの おまえなんちゃってSEだろ? 大体なてめーんとこのPGがミスった分の金を 請求できるわけねーだろバカ! わかった、おまえNT○データとかの なんちゃってバカSEだろ
344 :
仕様書無しさん :02/07/07 03:29
(`・ω・´)オチケツ!
なにも最速にしよーって言ってるんじゃねーんだよ ループの中で何回もSQL文実行するような ロジック組んだからには 最低でもそのSQL文の時間を計って確かめてから リリースしろやってことよ いまさらそのアホが書いたロジック全部直さねーよ SQL直して処理時間が4分の1になるなら直すだろが
>>343 こんなアマちゃんに
マネージメントだのなんだの説教された日にゃ
キレるっちゅーの
>340 少なくとも 319 で君が書いた事柄からだと、333 の言ったような可能性もあるけど、 他の可能性だって捨て切れないんだよ。その辺の情報提示もしない状態で出された 可能性に対して、馬鹿呼ばわりかい? なんで 338 が具体的に説明を求めたのか、理解しているか?
348 :
仕様書無しさん :02/07/07 03:33
>>319 は最近よっぽど嫌なことがあったに違いない・・・
>>322 具体的に書いたらそいつにバレちゃうだろうが
それは別としておまえがバカなのはわかるだろ
>少なくとも 319 で君が書いた事柄からだと、333 の言ったような可能性もあるけど、 >他の可能性だって捨て切れないんだよ。 いいや捨て切れるね 最初文だけならともかく、その後のきたない文をプラスすると おまえさんみたいななんちゃってマネージメント理論を出さないね つーか、おまえの言ってるマネージメントは そうなったらいいねって奴であって現実的じゃないんだよ それにマネージメントやったことある奴なら もっと別のことを言うね
実は 322 は学生
>>342 >あのねSQL文ちょこっと直してぎゃーぎゃー騒いで
>金取れるほど甘くねーんだよ
>見積もりね保守の中に入ってるの
うーーん、駄目処理の手直しもお仕事のうちっていうのは同意するし、
これで客から金とれるかっていうと、、たいていは難しいよね。
だけど例えばの話、馬鹿がつくったコードを違う馬鹿に直すようなことさせたいかね?
# 319がそうだと指す気は全然ないんだけどさ。
つーわけで、力量がわからないPG使ったり、本気で駄目なPG使う時は332のような
判断はアリでしょう。いかが??
そんなオイラはなんちゃってSEさ・・
>だけど例えばの話、馬鹿がつくったコードを違う馬鹿に直すようなことさせたいかね? ># 319がそうだと指す気は全然ないんだけどさ。 バカが作ったコードをバカに直させると誰が言った。 俺を指してないというなら、上の指摘は違うだろ。 >つーわけで、力量がわからないPG使ったり、本気で駄目なPG使う時は332のような >判断はアリでしょう。いかが?? ぜんぜんズレてないか? なんの判断なんだよ、そのときだけ金取れればいいのかよ つーか取れないし
>>352 なしです。
とりあえず、私がリーダーなら納品する前にチェックして
なんでこんなに遅くなったか聞きます。
たぶん、そこでボロがでるでしょうから
そしたら、他の人に頼みます。
そしてその修正をした彼を以後プロジェクトから
外す計画を立てます。
>>352 その作業に金額が発生するのかという話よりも、そもそも、
「そんなダメ処理で客から金が取れるのか?」
という視点が欠けて居るのではないかと思うのでつが。
まぁ、客がそれでも満足するのであれば、敢えて直すのもどうかと思うが、
それは普通作業量と相談した結果決めるだろうと思われ。
356 :
仕様書無しさん :02/07/07 04:24
>>319 バカバカうるさいぞ。
とりあえず、少しおちけつ。
そのアホ外注がダメなことはよくわかったから。
>>だけど例えばの話、馬鹿がつくったコードを違う馬鹿に直すようなことさせたいかね? >># 319がそうだと指す気は全然ないんだけどさ。 >バカが作ったコードをバカに直させると誰が言った。 >俺を指してないというなら、上の指摘は違うだろ。 だーかーら、例えばと書いたでしょうに。。 じゃなんで書いたのというと >>つーわけで、力量がわからないPG使ったり、本気で駄目なPG使う時は332のような >>判断はアリでしょう。いかが?? >ぜんぜんズレてないか? まず、引用先ずれてました332→339です。スマソ 319の上役にすれば、馬鹿が馬鹿を直すという風に見えたのでは といいたかったのさ。 と書いてみたが、見えてない点があるんで質問 「かくかくしかじかで直す」といって「直すな」言われたの? # 最初っからダマで直すという話なら、オイラの書き込み自体が意味ないなこりゃ >なんの判断なんだよ、そのときだけ金取れればいいのかよ >つーか取れないし 金とれるなら取るというのが主眼の発言ではないです。 客もクレームはつけてないらしいし、直しにかかるリスク (チェッ、糞コードだろうと動くコードなのさ) と手間の兼ね合いで判断すべきでしょって話。 ここはオレの書き方悪かった。
とりあえず、319は日本語が下手だと言うことだけは理解した。
>>357 まずは前のレスを読んでから書けよ
1分半が72分になったらいつか気づくんだよ
リスクはねーんだよ、それもそれとなく書いてある
客が後から気づいたら
後から手を入れた奴がクレームつけられるだろ
本当はそいつが悪いのに、客はそんなの知らねーんだから
つーか限度超えてるだろ兼ね合いのレベルじゃねーだろ
なんちゃってSEなら、黙ってろよ
まあ、整理するとだな 1分半で終わってたプログラムが72分もかかるように なったら、まずリーダーはチェック入れるわけで そのまま納品して客が文句言わなかったらありとはならないわけだ。 で、システム全体の処理がおよそ3時間で そのプログラムが元々1分半だったものが72分になったら それは大事なのだよ、通常は許されないケースなのだよ で、よほどのワケがあると思って見てみたら アホがアホなことをやらかした結果で どうにもならないようなことではなかった。 それを放置して納品したわけだ、たまたま客が気づいていない。 いつか気づくだろう、現時点で気づいていない客もバカだな。 しかし、このまま放置しておくと後から手を入れた奴 客に疑われる。リーダーはバカなのでバカを指摘すればキレる。
片方で試行錯誤して処理を速くした輩がいるわけで 片方でアホがなんにも考えないで処理を遅くして無にする。 それをチェックできないリーダーがいる。 そしてバカな客はすぐに気づかないが、忘れたころに発狂しだす。 こういうことは、この仕事をしているとたまにあることなので 黙って直すかとなる。 それをマ板のレベルにあわしてダラダラ書いてやったんだろうが わかったか糞ども!
なんか彼女から電話かかってきたから、この話もういいや なんか今日晴れてるみたいだし、どうでもいいや 悪かったなバカバカ言って リーダーには一応断っておくよ それでダメって言っても説得するわ じゃあな糞ども
>>319 整理おつかれさんです。
>なんちゃってSEなら、黙ってろよ
なんちゃってでもSEでも気にはなるのさ。
>1分半が72分になったらいつか気づくんだよ
>リスクはねーんだよ、それもそれとなく書いてある
プラス
>アホがアホなことをやらかした結果で
>どうにもならないようなことではなかった。
(多分)察しの通り、「どうにもならない」可能性捨てていなかったのさ。
>それを放置して納品したわけだ、たまたま客が気づいていない。
>いつか気づくだろう、現時点で気づいていない客もバカだな。
>しかし、このまま放置しておくと後から手を入れた奴
>客に疑われる。リーダーはバカなのでバカを指摘すればキレる。
聞く耳がついていない上もつと、兵隊はマジつらいね。
お付き合い感謝、ではおやすみ
もう起きた?
319が必死な奴だって事はよくわかる
整理とかいいつつ、最初のカキコに書かれてなかった 新事実がてんこもりな気がするのは俺だけか? 頼むから、自分の正当性を主張したいなら、 判断に必要な最低限の情報くらい最初にきちっと提示してくれよ。 それが出来ないなら、ただグチだけたれてさっさと消えるか。 俺に言わせれば、馬鹿だから話聞かないキミのリーダーも、 有能だから話聞かないキミも、付き合う分には同じくウザイ。>319
>>369 だから、319は日本語が不自由なんだから腫れ物を扱うように扱えよ。
一日あえて放置してみたが、痛い奴だな >319 黙って直したら、また同じことを他のときに繰り返すだけだ、ってのになぜ気づかんかね。 きっちり原因と対策を周囲に徹底させろよ。再発防止策を取れよ。 それでキレる奴がいるから、こっそり直す? 馬鹿じゃん。 まあそれやって会社での立場が悪くなるんだったら、さっさと見切りつけて別会社に転職 すりゃいいだろ。自分の力量に自信があるなら、それくらい冒険でもあるまい?
まぁまぁ、319はまだ2ちゃん慣れしてないみたいだから大目に見てあげようよ。 ネタ板のマターリ愚痴スレで「バカ」とか連発してるし、バレバレの自作自演してるし(ワラ そっとしといてあげよう。
間抜けな 319 がいるスレはここですか?
>322が良いこと言った! 「馬鹿なコード書いて他人に迷惑かける奴」は皆に知らせてやらないと そいつ=1人月OKみたいな計算されてデスマーチ化するかもしれんぞ!
てか、「この会社辞めようと思ったソースコード」なんだろ? さっさと辞めろ、その方がお互いのため...
しかし負け組みは彼が居るときは反論できかったが 居なくなったらボロ糞言うね しかも、技術的なことは全然なしでと言ってみる。 319の説明は親切じゃないにしろ、負け惜しみ言ってる奴はかっこ悪いね。
ひょっとしてまた (・∀・)ジサクジエン?
>>377 コラァ!俺は口悪いが自作自演なんてしねーぞ!
>>322 以外の奴
悪かったな、いや〜悪い悪い、ホントすまんかった許せ
直したよ結果もあってた。
即効で終わったよ、つーか実際黙って直せねーんだけどな
変更点シートにまとめて提出しないといけないから
リーダーには説明したんだけど、そいつに説明するのがな
なんかぁ気が引けるわ。でも言わんとな。
322のなんちゃって君、なんちゃってマネージメント理論を
否定されたからってキレるなよ、ボクちゃんのところでは
てめーんとこのPGがミスった分の工数を見積もって
利益だ損失だって言って通るのかもしれけど
ボクちゃん以外のところじゃ通用せんよ、痛いのはボクちゃんだよ
ぺっ!ぺっ!ぺっ!
あっ、そうだ 322 はたぶんデブでブサイクだよ
ここまでくると放置が最善なのかな・・・
>>380 プッ、放置できない負け犬
必死だな(ワラ
チャチャ入れて煽ってるのは 過去にアホなコード書いてアホだって指摘された奴等だな アホな奴はアホって言ってやればいいんだよ。 それと厨房の特徴として 〜のいるスレですか?、必死だな、自作自演、放置 この言葉を出す奴にろくな奴はいない。 まあ、ちゃんと言い返せない奴にありがちなパターンだけどね。 あと自信満々に語った後に否定されて 本人が居る間は言い返せないが、どうしても我慢できなくなって レスする奴もダサいね。レスしなきゃいいのにダサっ。 と思ったりしました。 ちょっとウザかったけど素直に謝ってる319のほうがマシかとね。
383 :
仕様書無しさん :02/07/09 04:20
久々に見たら荒れてるね、上のほうにさかのぼって読んでみたけど
>>319 のバカバカ言うところと説明不足と黙って直すって
いうのは俺も良くないと思う。
が、7割くらいは言ってること正しいのでは
気になったのは、
遅くてもとりあえず動くからこれで我慢してもらおう、って
のはごく普通の選択肢。と言ってる人が居たが
これ普通なのかな?1分だった処理が3分になって全体の処理が3時間とか
いう比率ならありえる話だけど
1分そこそこのものが1時間越えて、全体の処理が3時間から4時間に
なって、とりあえず動くからという安易な選択が許されるのだろうか?
今まで俺がやってきた仕事でこんなことが許されたケースはないけどな。
これが普通の選択だったらボッタクリだよね。
ちゃんとレビューしてればそこで検出されるし
テスト結果見たら一目瞭然だろうし、最後のところでしょうがないね
という選択にはならないと思うんだけどね。
最近はこういうのアリなのかね。
コードの内容をレビューしている所が少ない気がするのは気のせいであって欲しい。
>>383 まぁ、どのへんに判断ラインを置くのかはそれぞれ違うとは思うけれども。
例えば、11秒を10秒にするために血眼になったりはあまりしない。
コードの隅々までいちいち最善の処理かどうかを検証しながら書くのは無理だ。
こーいう場合は、どちらかというと解りやすく、堅く書く。
そりゃ、その処理が10000回繰り返される……とかいう話であれば、念入りに検証を行うし、
メンテナンス性を犠牲にしてでも、速さを追求するコードを書いたりするけれども。
まぁその場合でも、とりあえず堅く書いたあとに弄るなんてのはよくやる。
全体を満足行くように仕上げられるのが理想ではあるのだけど、
要求された納期にモノを納めるためには、ヘタレな漏れにとっては力の配分が重要だったりするよ。
ああスマソ。全然
>>383 に答えてないや。
もちろん、同コストでヘタレたコードを置き換えれば改善される場合は許される話じゃないけれど、
納品済みの物件に対する改修などで、改善のためにコストが高く付く場合は、
顧客にコストを提示した結果、速度的に最善な処理を採らない場合は出てくるかとは思うです。
漏れは「そんなことせんでええ」と云われたこともある。
というか、ここまで活発になった理由は319の内容よりもその文章と行動だが。
もういい加減止めようよ。
過去ログ読めば、こういう議論をするスレじゃ無いことは判ると思うんだけど。
まぁ
>>319 についてはコードに対する愚痴で良いかも知れないけど、その後の罵倒はどうかと思う。
だいたい319はなんでそんなに必死なんだろ、このスレの住人を片っ端から馬鹿呼ばわりして荒らしに来たの?
内容云々より、場の雰囲気が読めない319はカコワルイ。
>>388 > 内容云々より、場の雰囲気が読めない319はカコワルイ。
オマエモナ。罵倒や荒しごときに反応してしまう388もカコワルイ。
罵倒や荒しが嫌いなら2chに来るな。yahooにでも逝っていろ。
389==319 必死だな (ププッ
>>388 罵倒されたらギャフンと言わせろよ
もしくは徹底して放置しろ
それもできないで反応して喚くんじゃない
ひょっとしてまたまた (・∀・)ジサクジエン?
390=392 なんかしつこいヤシが一人居るな おまえ罵倒されて相当悔しいんだろ(w 素直にyahooで遊んでろ
悔しいですが何か?
今日、Cのやたらデカイソースファイルがあったので 中を開けてみたら、なんと9万行以上あった。 恐ろしいほどのif文の羅列があって しかも、グローバル変数バリバリだった。 頭から追いかけようとしたがmainが見つからず 下にあるのかと思いきや、なんとそれは巨大な関数だった。 早くこの現場から逃げなくては。。。
>395 そのソースを開いた時点で、キミはかなりヤバイ状況にあるな
>>395 凄いな9万行は
俺が見た最高は3万行弱だったが、負けたよ
>>395 >頭から追いかけようとしたがmainが見つからず
めっちゃウケタ(w
腹いてぇ・・・・
>>398 いやだって、9万行ある時点でこれはと思ったのだけど
たまに下にmainを書いてるソースあるでしょ
だから一番下にジャンプしたらないから
まさかと思って検索したら、なかった。
この関数使ってる本体はどうなっているんだろう?
見なきゃよかった。明日から鬱だな。
400 :
仕様書無しさん :02/07/09 21:19
>395 明日からそのコードのメンテか何か?お疲れさん。 その「関数」の中にもまだまだこのスレに書けるようなネタが埋まってるはず。紹介よろ。
宝の山を発見した
>>395 がいるスレは、ここですか?
こんな宝は発見したくもなかったな・・・・ しかし、掘り当ててしまった物は有効に活用(投稿)しる!(w
そしてmain()も9万行…(以下自粛)
404 :
仕様書無しさん :02/07/09 22:43
mainっていうぐらいだから18万行くらいあるでしょう。 グローバル変数も意味なく200個くらい。 そして局所変数なし。
・・・・なんて言うか、そんなソースで全てを把握してる奴がいたら ある意味「凄腕」なのかも知れないな。
406 :
仕様書無しさん :02/07/09 22:59
structが見当たらない・・・
407 :
仕様書無しさん :02/07/09 23:01
構造体ハケーン! ・・・ と思ったらメンバが1000個
main()は1行、その関数を呼び出してるだけだったりして。
おお、Template パターン!
410 :
仕様書無しさん :02/07/09 23:56
>>408 例えばこんな感じですか?
void program(void)
{
main();
}
411 :
仕様書無しさん :02/07/09 23:58
何が起きたんだ?
412 :
仕様書無しさん :02/07/10 00:11
こうだろ int main(void) { program(); }
413 :
仕様書無しさん :02/07/10 00:13
そのソースを遠目で見た感じ ─ ←int main(){program();} ■ ←void program(void){・・・・・ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
>413 17インチディスプレイ+10.5ポイントフォントで見たら富士山一個分ぐらいはあるのでしょうか?(w
>>414 10.5ポイント×9万行≒33メートル
オレって何計算してんだろう・・・
>>415 私の計算では
25.4/72*10.5*90000/1000で333メートルでしたが…
今日あらためてみたら、いやーなものを発見してしまった。 static int i,j,k,l,m,n; static?なぜに?やっぱりそうなのか。。。 ご丁寧なことに9万行コード相手に ループのカウンタ及び配列要素までがグローバル変数だった。 しかも、内部関数は全部引数なし。かっこいいな。 ははははははは、もう嫌だよ。
>>417 > static int i,j,k,l,m,n;
これってスタックに積まないので繰り返し呼ばれる関数では効率いいかも。
でも絶対にこんな変数はGlobalにはしないけどね。
ついでにもう1つ残念な新事実が ほぼ同じくらいのサイズで この9万行ファイルと同じ名前に「2」が付いてる ファイルがあったのだけど これは単なるバックアップファイルだと思い込んでいたら 残念なことに正式に使用されているようだ ほとんど同じ内容なのだが、DIFFをとると1万行ほど微妙に違う。 ははははははは、涙でスクリーンが見えないよ。
>>418 1回しか呼ばれてない関数です。
特に意味はないと思われます。
俗に言うコボラーの...
421 :
仕様書無しさん :02/07/11 00:04
//嫌な予感。これを何かに流用するときは要再チェック
>>419 バックアップかどうかはmakeファイル(もしかしてbat?)を見れば
解決かと。残りの8万行が同じならバックアップだろうけど。
ここまでくるとタイムスタンプもあてにならなそうだし、
何を信用していいかわからないよね。
18万行の荒野に挑まんとする英雄に敬礼!
>>423 >バックアップかどうかはmakeファイル(もしかしてbat?)を見れば
>解決かと。残りの8万行が同じならバックアップだろうけど。
makeファイルにありました。
もう、今日は疲れたので落ちます。
>i,j,k,l,m,n こんな変数に一口で言えない内容の値が割り当てられ、 参照だけならまだしも方々で変更されてる罠 18万行か...マジで合掌(カワイソ
>i,j,k,l,m,n さらにローカルとして宣言されている罠。
東京タワーに匹敵ですか・・・ がんがれ・・・
>i,j,k,l,m,n 局所的に"違う意味で"使われてる罠
>>399 実は全然使われていないソースだったりして。
メンテ者への嫌がらせ&めくらましトカ
もしくは何らかのユーティリティを通して ジェネレートされたソースと言う可能性も。 9万行のソースを直すより、ジェネレート元 のソースを直すと簡単とか。 ・・・と夢を見てみるトカ
最終的に、9万行のうち、5千行のソースで事足りるとか・・・
ステップ数を稼ぎたかったんじゃないの? と言ってみる
VC++だと65536行以上のファイルはコンパイルできないらしい。
クローンの逆襲・・・・うまいっっ!!
>437,438 滑ったギャグほど悲しいモノはないという意味ですか?(追い打ち)
440 :
仕様書無しさん :02/07/13 19:05
>>418 いや、ROMが1MバイトでRAMが64バイトのシステムがターゲットだったら
きみでもそうするよ、きっと。
>>440 RAMが64ByteならCで書く気になりませぬ。
>>417 関数の引数無しは純粋に良いね。
クラス作ると引数なし関数が1つくらいはできるけど、ことごとく無いようなクラス作ってみたいなぁって。
444 :
仕様書無しさん :02/07/13 23:30
>>442 アセンブラみたいに、
i=14;
j=22;
function();
とする。
>>441 つか、書けるわけないよね。
あっと言う間にスタックオーバーフロー。
標準関数は怖くて使えない。
>>446 > あっと言う間にスタックオーバーフロー。
スタックがROM上にある。
* どの関数からreturnしても戻り先は同じ
* auto変数は全部auto定数に
>>447 うむ、"漢"専用の環境だな。
漏れは軟弱なんでパス。
449 :
仕様書無しさん :02/07/14 00:20
>>447 そういうのは巷ではすたっくとはいいません。
>スタックがROM上にある。 ちょっとわろた。
451 :
仕様書無しさん :02/07/14 00:28
>>446 ふ〜ん、そういう環境なんて実際には無いと思ってるんだ。
平和でいいね〜。
>>451 ふ〜ん、RAMマップを書いたこと無い世代だと思ってるんだ。
世間狭いね〜。
453 :
仕様書無しさん :02/07/14 00:39
>>451 ピンフ?漏れはタンヤオでロンしたんだけど・・・。
454 :
仕様書無しさん :02/07/14 01:16
>>453 にいさん。
その袖の下に隠しているもの出しな。
>>454 これ? 7489が二つあるだけだけど。
>453サン、どっちもゴミ手だYO!
七対子…
稲妻ツモでリーチ一発
脱線してる・・・。
460 :
仕様書無しさん :02/07/14 23:25
このまえどこかで、 「漏れ、チャンタタンヤオであがったことあるんだぜ!」 とか逝ってるヤシがいた。
461 :
仕様書無しさん :02/07/14 23:28
リーヅモトイトイ
VCなんだけど、wsprintf()するまえに必ずZeroMemory()してあんの。 まあ、別にこの程度のことで会社辞めようとは思わんが。
>462 おいおい、頭がドラじゃないか。マンガンで 2000・4000ね。 といって、8000・16000 を回避するテスト。
四暗刻だろ?
>>465 なぜそこで「ドラ2つならハネ満だろ?」と突っ込まないんだこのバカチンがっっ!
467 :
仕様書無しさん :02/07/16 16:13
マージャンネタの続きがみたいのでhage
ループしている処理が、すべてgoto文とif文で制御されてい
漏れは最近UNIXの部署からVBの部署に移ったのだが そこのコード見て唖然・・・ --なんかのクラスの中のコード-- Private Const mcon相手先インターフェイス状態_実行 As Long = 1 Private Const mcon相手先インターフェイス状態_休止 As Long = 2 Private Const mcon相手先インターフェイス状態_障害 As Long = 3 Private Const mcon必要メディア枚数 As Long = 10 Private Const mconディスク最大容量 As Long = 40 : : (ここからMSSQLのテーブル名らしい。"XXX振り分け"はDB名) Private Const mconXXX振り分け_業務稼働状態 As String = "業務稼働状態" Private Const mconXXX振り分け_ファイル格納フォルダ As String = "ファイル格納フォルダ" :(以下続く) : ---- もちろんこれらを使ったif文やSQLクエリーの作成がイパーイ こんなんがVBでは普通なん? コード読む気力が萎えるんですが。(つД`)
普通です
471 :
仕様書無しさん :02/07/17 08:41
昨日、下請けから来たプログラム(C言語)のソースを眺めていたら… a=(data1&0x80?(data2&0x40?false:true):true)?func:0; こんなん感じで、やたら ? を使用しまくっていました。 まだ、このソースに手をつけてないけど、納期とか厳しくなったら 自分が、このソースに手をつける事になるのかなぁ…と思うと鬱です。
イタイね
>>469 そーとー技術力低いんじゃないか?その部署
>477 まぁ出来ることなら無駄は省きたいとは思うな〜 けどソースが読みづらくなるまでするのはやりすぎだと思われ。
479 :
仕様書無しさん :02/07/17 11:42
for(;;) { } 文1っ個もなく while(1) { } で全部書いてある オマケに変数がすべてグローバル。 特に int i; をグローバル化して定義している所が超笑える。 理由を聞くとよく使うからだそうだ...。 どうしろっちゅ〜ねん!
> "int i" グローバル定義 わし、昔、似たようなコトしたことある。 いや、ループカウンタの領域が一個だけで済むから、 すごっく、賢くて、経済的なやり方に思えてさ・・・ はっはっはっ、昔の話さぁ。
ループの中で知らない間にiの重複利用みたいな事起こったら収集がつかんだろが int i; void funca() { for(i=0;i<10;i++) 処理; } void funcb() { for(i=0;i<10;i++) funca(); } funcb呼び出したら、一発で戻ってくるとおもうんだけどさ。 も〜、誰か仕事変わってくれ〜 助けて〜
ちょーめんどくせぇ・・・ ダレダヨんなこと考えた野郎は
483 :
仕様書無しさん :02/07/17 13:15
>481 基本的には関数内部に int i; と一行追加すれば済む話だろ?
>483 呼んでる関数の数が少なければ大丈夫だろうけど・・・・ 2レベル下の関数とか、果てはライブラリなんかで呼ばれてると すぐには気が付かないと思うぞ(w ・・・・まじで触りたくないソースだな
485 :
仕様書無しさん :02/07/17 13:19
しかも、使ってるところ検索しようにも、"i"ではgrepしにくそうだ。 いっそ、すべての関数に無条件で int i; っていれてみるとか(W
>int i; >と一行追加すれば済む話だろ? もう既に300箇所くらい修正した所だよ。 あと何箇所存在するか、あ〜考えたくない。
んでもって、ある場所では関数間どうしでグローバルなiの受け渡しとか してるもんだから、わけわかんねぇよ
ただ単に int i;を追加して済めば良いけど 関数間でこのiを通信に使っているところがあるかも知れないぞ。と脅す
i= I_DENTASU_SOUSHIN_HAISOUCODE_2 ; common_dentatsu(); ヤメレ〜! これ作った人は、引数の使い方知らんのか?
>>489 面白すぎ、N88-Basicから移植したのか?
479可哀想(w
>>483 そうそう
関数内部で一度初期化してやればいいんだよな。
素直にローカル変数にしろや!!!!
493 :
仕様書無しさん :02/07/17 14:54
>>485 グローバルに定義されてる
int i;
をコメントアウトしてコンパイル。
で、コンパイルエラーを潰していく。
494 :
仕様書無しさん :02/07/17 15:07
495 :
仕様書無しさん :02/07/17 16:23
>>494 でも、共有していた場合、初期化していない変数に対して
参照が行われた場合、警告が出るんじゃないのか?
…で、その警告が出た所が共有している所と。
>495 どこかで初期化されてたりして、それを参照していれば警告もなーんも出ないと思われ。 グローバル宣言をコメントアウトして、一度コンパイラに掛けて、 エラーてんこ盛り状態から ちまちまと直していくしかないんじゃないかな? 想像したら気が遠くなるけど、実際に気が遠くなるのは479だが(w
その昔の、草の根ホストプログラムKTBBSのソースを思い浮かべてしまいます。 疑似マルチタスクなのに、ローカル変数とグローバル変数の見分けがつかない。 変数名はwk1、wk2で未使用変数、未使用関数も多い・・個人の趣味ソフトです からまあいいんですけど、自分の会社で作ったソースだったら身の振り方を 考えます。
KTBBS!!!ナツカスィ・・・・・ 漏れはX1TurboのBASIC+マシン語で細々とやってますた
Javaだけど、なぜフラグにStringを使う・・・? しかも、ソース全部読んだけど結局代入されるのは"0"と"1"だけ・・・。 booleanの存在すら知らんのか? これ書いた奴は元コボラーと見た。
99999999 XXXXXXXX
>>499 そもそも、やたらとパラメータ増やすプログラミング作法はよくないことを知れと
小一時間ほど。。。
>>501 無駄にフラグを作りたがるのもコボラーの習性です。
>>502 フラグを多用されるくらいならgotoの方がましだ。
PERFORM CHECK-MSTREC. IF FLG-MSTREC-NG = C-ON PERFORM DISPLAY-ERROR STOP RUN. 正常時の処理記述が続く : COBOLだと関数の返値は気軽には使えないので、上のような感じで、 どうしてもフラグが多くなってしまうんですが、もっとエレガントな 方法があるんでしょうか・・・
>>505 COBOLでやる分には構わないけど、別の言語に持ち込むなって事。
コボラーがJavaに手を出すと、COBOLでいうルーチンをそのままクラスにしようとするから
厄介なんだが。class PageCheckProだのclass OutputDataMakeProだの・・・。
ついでにfilenamaeとかfailnameとかいう中途半端な変数名もどうかと。
これはコボラーに限らずだが。
507 :
仕様書無しさん :02/07/20 00:21
>>506 >ついでにfilenamaeとかfailnameとかいう中途半端な変数名もどうかと。
前半はワロタ。
後半はある意味正解。
>>507 そうかな?
コボラーに限らず、アセorCからオブジェクト指向に来たヤシも
同じだと思うよ。
コボラーというのを「古いやり方にしがみついて開き直る人」の意味で 使う場合もあるから、わからないことはないです。 「java使うのにオブジェクト指向を知らない人を間違って採用した」 「オブジェクト指向を知らない人を採用していることを知りながら放置した」 どっちが理由にしても、会社の方針に疑問を抱くのはわかる気がします。
>>509 「オブジェクト指向を知っている人は非常に少ない」
に1票
プログラミング言語を知ってる奴は捨てる程いるけど、 プログラミングを知ってる奴は少ない。
512 :
仕様書無しさん :02/07/20 17:49
>>511 しかし、みんな自分だけはプログラミングを知ってると思っている。
513 :
仕様書無しさん :02/07/20 18:17
最低限、構造化手法くらい身に付けとけ。
>>499 > Javaだけど、なぜフラグにStringを使う・・・?
web アプリケーションのようみ結局は文字列 (HTML) を出力する
ものや、扱ったデータを最終的に別サーバにテキストで送信する
ような場合はフラグを String で持つのも一つの手。
その場合、DB も全項目 char/varchar にしたりする。
>>514 > web アプリケーションのようみ
web アプリケーションのように
>>499 > Javaだけど、なぜフラグにStringを使う・・・?
> しかも、ソース全部読んだけど結局代入されるのは"0"と"1"だけ・・・。
> booleanの存在すら知らんのか?
絶対にtrueとfalseしかありえなくて、他のフラグとまとめることも
できないのならbooleanでいいかも知れんが、
Java使いなら普通はType-Safe Enumを使うだろ。
>>514 伝送データとフラグの違いが分かっていないね。君。
伝送すべきものと内部処理に使用するフラグとは明確に分けなさい。
「画面からほにゃららフラグを入力する」は文脈的におかしいことを知れ。
> その場合、DB も全項目 char/varchar にしたりする。
こういうことをする人とは、一緒に仕事したくないね。
519 :
仕様書無しさん :02/07/21 04:10
>>517 そうだ!そうだ!
>扱ったデータを最終的に別サーバにテキストで送信する
>ような場合はフラグを String で持つのも一つの手。
こういうオッサン居るんだよね、もうバカ丸出し。
ネットワークトラフィック無視しやがってアホか
テキストで送信するなよ、受け取った側でテキストにしろや
変なとこで楽しようとすんなよボケが!!
520 :
仕様書無しさん :02/07/21 04:19
>>514 >その場合、DB も全項目 char/varchar にしたりする。
ん?数値(少数値)もchar/varcharにするの?
いちいち計算するときに内部処理で文字列から数値に変換するのか?
データ量が多いとき数値をchar/varcharなんかで持ってたら
領域無駄じゃないか
521 :
仕様書無しさん :02/07/21 05:48
>>517 > 伝送すべきものと内部処理に使用するフラグとは明確に分けなさい。
おお、それは確かに言葉足らずだった。内部のフラグは boolean にすべきだね。
うちの場合、web で入力する 2値 (ON/OFF) のフラグ、多値のフラグ (1, 2, 3 とか)
それぞれが数十項目ずつある。で、うちのマシンの主目的は入力データを別サーバへ
送信することなんだな。また、現時点では 2値のフラグであっても もう一つ値が
追加されないという保証はない (実際、ある)。
> テキストで送信するなよ、受け取った側でテキストにしろや
インタフェース仕様は別サーバのベンダが決める。それが「テキストで送信」と
決まっているから仕方ない (2値フラグは 0/1 にマッピング)。
で、この場合「2値のフラグを boolean、多値のフラグを int や String で持つ」
というのはメリットがないと俺は判断した。よって、全部 String。String で
持つなら DB も全部 char/varcahr。
この判断が間違いというなら、理由を明記してくれな。「気持ち悪いからイヤ」
というのは理由にならんよ。
522 :
仕様書無しさん :02/07/21 05:53
>>520 > ん?数値(少数値)もchar/varcharにするの?
業務 (商品購入サイトだと思ってくれ) の性格上、小数は扱わない。
> いちいち計算するときに内部処理で文字列から数値に変換するのか?
内部で計算もしない。というか、基本的に入力データを内部で変更しない。
客が入力した商品購入の情報を、受付側が改編することはないから。
でも、もし小数を扱うとして、それが web から入力するような
類のものなら char/varchar にするよ。内部で計算するとしたら
ちょっと考えるけど。
もうちょっと反論しておこう。
>>519 > ネットワークトラフィック無視しやがってアホか
圧縮して送信してるよ。
> テキストで送信するなよ、受け取った側でテキストにしろや
なぜ? 転送量削減以外の理由があるの?
バイナリだとバイトオーダーの扱いとかでバグの出る余地が高くなるし、
そもそもわかりにくい。データを直接エディタで見られないと、バグの
原因究明もしにくいね。
一番考えなきゃいけないコストは、トラフィックより人件費でしょ。
スキル低い奴でも理解できて、勘違しにくいようなものがいい。
基本的には人間が楽に理解できるようにすべきでしょ。
ちなみに HTTP も FTP も SMTP も POP も IMAP もテキスト
プロトコルだね。
>>521 >>522 を書いたのも漏れね。念のため。
これを言うとさらに非難を浴びそうだけど、DB では date も使ってないよ。 全部 char。理由は以下の通り。 - 他の項目 (数百項目) が char/varchar だから、統一したかった。 - 年月日時分秒系のデータも結局別サーバに char で送らなきゃいけない。 これも反論するなら理由を明記してくれな。「普通は date だろ」 というのは却下だよ。
>>524 > 年月日時分秒系のデータも結局別サーバに char で送らなきゃいけない。
「テキストで送らなきゃならない」の間違いでした。
>>514 1.
データ量が少なく内部で計算等改編をしないというのが大前提だね
それを最初に書くべき反論されて当たり前
かなり用途が限定されているときだけだね。
例え内部で計算等改編をしない場合であっても
データ量が多ければDBの数値データや日付データを
char/varchar で持つのは問題
2.
>バイナリだとバイトオーダーの扱いとかでバグの出る余地が高くなるし、
>そもそもわかりにくい。データを直接エディタで見られないと、バグの
>原因究明もしにくいね。
>一番考えなきゃいけないコストは、トラフィックより人件費でしょ。
>スキル低い奴でも理解できて、勘違しにくいようなものがいい。
>基本的には人間が楽に理解できるようにすべきでしょ。
「1.」のようなときは以外で上記のことを言うなら間違い。
データを直接エディタでと言ってるということは
ファイルということだよね、DBに入ってからなら当然見れるわけだし
これはバイナリ/テキスト変換ツールを1つ作っておば済む話でしょ
あとはレコードフォーマットを定義してツールで見ればいいわけだし
その人間がスキル低い奴でも構わないよね
まぁ、あれだ。 簡単に言うと、514と仕事はしたくないと。
安易に制御用フラグを使うような人とは仕事したくない。 ほんの数個の制御用フラグを使うだけで、どれほど複雑さが増すことか。 制御用フラグは応急処置であって、解決策ではない。
>>527 >これも反論するなら理由を明記してくれな。「普通は date だろ」
>というのは却下だよ。
おまえんとこの変な仕来りで統一して
普通は date だろというのは却下だよと言われてもな
>>528 514のやってる仕事がなんか見えてきたよ
元コボラーに設計されたシステムなんだよきっと
フラグに頼るのは良くないです。 きちんと設計しましょう!
受付側はデータのチェックはしないのでしょうか? データ入力側を100%信頼して、データ入力側がバグって 不正データが送られてきても素通りされるのでしょうか? そのまま不正なデータで処理続行なんですか。 素人なのでわかりません。
>>523 > バイナリだとバイトオーダーの扱いとかでバグの出る余地が高くなるし、
こりゃ恥ずかしい台詞だなぁ、と思ったら、
> スキル低い奴でも理解できて、勘違しにくいようなものがいい。
“耐莫迦性”ってやつですかね。ご苦労さまです。
しかし、それを強引に一般化するってのはあまり感心しませんね。
因に、DB に与えるデータを文字列にすると、後になってデータ形式が
変更になったときに大変な思いをすることになりますが、そういう
想像力はなかったんですね。それも“対莫迦性”ですか?
伝送上のデータってバイトひっくりかえらねー 68系で統一されてねーの ウィンテルちゃんとこしか使ってねーのか
てゆーか「今日注文を受けた商品一覧」とかはどうやって検索するんだ?
>>532 さあな、514のとこはなんにもしないそうだから
そのまま別サーバに送るんじゃないの
そんで別サーバに流れ着いたところでエラーになって
どうなんだろうね
人間のスキルが比較的低い汎用機環境ですが、 加工しなくても、数値項目、日付項目はBCDのパック10進で持ちます。 数値項目に変換するようにすれば、ニューメリックチェックを漏らしても 異常終了するからDBやファイルを痛めなくてすみますし。 DB上の日付項目「取引日付」の中身が「2002/7/21」「H14.7.21」 「21-JUL-02」か予測できない、もしかしたら「アサッテ」なんて入っている かもしれない、という「懸念を抱かせる」だけで、 「項目を使用する側からみれば悪い設計」と思わせるに充分じゃないかと。
538 :
仕様書無しさん :02/07/21 09:35
まぁ、あれだ。 簡単に言うと、514と仕事はしたくないと。
なんか自分さえ良ければいいっていう考えだよな>514 どうせどっかで数値変換するんだろ だったら最初のところでやっとけよ あっちこっちの別サーバにいったところで テキストからデータ形式変換するのかよ 困ったちゃんだな、そんなもんばら撒いて
自分のところのはなしだが。。。 レコード上に持つフラグはバッチ等の処理での 対象データの判別とかにしか使わない。(論理削除フラグとか) 名前の付け方だけなのかもしれないが 業務にかかわる項目にはフラグなんて一切ない。 画面内のデータでフラグは持つが(画面上ではない) そのデータがテーブルに収まることはない。
DATETIMEだったらINDEXにかかわる日付項目はCHARのほうがいいかも。 基本クラスでDATE型作ってるからフォーマットのチェックもいらないし。 インタフェースをテキストでやり取りするのはいいんじゃない? 受け口さえ決まってればデータの変換なんてクラスに勝手にやらせるし。
>>521 >送信することなんだな。また、現時点では 2値のフラグであっても もう一つ値が
>追加されないという保証はない (実際、ある)。
「2値」と、「値が2種類しかない多値」を混同していると思われ。
本来、2値であれば、後から値が追加されることなどありえない。
俺の場合、「Yes/Noで答えられるならBoolean」が基準。
単純明快。
ダイクストラ: COBOL を使うと頭が悪くなる。したがって COBOL を教えることは 犯罪とみなされてしかるべきだ。
ダイクストラって、今何してるの?
CORBAは「全て」stringで渡す仕様だったりします。 IOP的に問題が起こりにくいから、だそうです。
数値項目を文字形式で持つこと自体はわからないことは無いです。 でも、「持つなら DB も全部 char/varchar」としたら「基本クラスで DATE型作ってるからフォーマットのチェックもいらない」みたいな根本的な 手を打っておく。言語に型を作る機能が無ければ素直に数値形式に変換する。 514の発言上は、そういう考慮をしてなさそうに見えるのがなんとも。
547 :
仕様書無しさん :02/07/21 13:39
まぁ、あれだ。 簡単に言うと、514と仕事はしたくないと。
>>521 > うちの場合、web で入力する 2値 (ON/OFF) のフラグ、多値のフラグ (1, 2, 3 とか)
> それぞれが数十項目ずつある。
それをフラグと呼んではいけないと言ったのだが、
その文意は読み取ってもらえなかったようだな。
入力項目はフラグとはなりえない。もしそう呼んでいるのなら、
自分たちだけでしか通じない語彙だということを知れ。
>548 その入力項目が、内部でフラグと等価であるとしたら? 確かに自分達だけでしか通じないかもしれないが、 とりあえずエラそうな事言ってるお前は、己の想像力の無さを知れ。
>>549 > その入力項目が、内部でフラグと等価であるとしたら?
その時点で、その「フラグ」と呼ばれているものが
フラグではなくなるということを言っているのだが?
もう少し抽象度を上げた考え方はできないかね?
君がそのような勘違いをしていることを想像するのは容易だ。
>>551 551 が 549=514 なら、まあその程度ってことだな。
>>552 514 の人の名誉の為に書いておくけど、549!=514 だYO!
>>553 549=551 は正しいなら、君がその程度ってことか?
>>554 いや、俺に聞かれても…。読んで各自で判断してくれ。
>>548 に一票。
フラグとは、内部処理に使用するものであって、それを外部から操作する場合には
別の名前を考えなさいってことでしょ。
ただ、カプセル化などを考えていなかった時代のシステムでは、そのままI/Fに使わ
れている例もあるのは事実。
>>556 > ただ、カプセル化などを考えていなかった時代のシステムでは、そのままI/Fに使わ
> れている例もあるのは事実。
その事実は承知しているが、514 は web アプリケーションと言っているから、
最近の話題だと思われる。
558 :
仕様書無しさん :02/07/21 17:30
まぁ、あれだ。 簡単に言うと、514と仕事はしたくないと。
>>524 レコード作成日時やレコード更新日時のカラムの定義はどうしてるのかな?
DATE型でないにせよ、きちんとDBサーバの日時を取ってきてるといいのだが。。
たまーに、クライアントの日時やAPサーバの日時を、
レコードの作成日時や更新日時と称して格納している設計に出くわすが、
まさか、そんなことやってないだろうねえ。
ちょっと不吉なにおいがプンプンしてきたぞ。
あと、別の話だが、「レコード作成日を伝票作成日と兼ねたりはしないで欲しい」と、
言わなきゃわからないSEが多いのにも困ったものだ。
>>517 514のところはデータをなにも改編しないらしいから
どうせクライアントの日時かAPサーバの日時なんじゃないの
>>560 web でそうやてしまうと、時間の順序性が保証されないので、
そのことが問題にならないだろうか?
少なくとも、まっとうな企業のシステムなら、問題視すべきだ。
レコードの更新日時、メタデータですよね。ファイルでいう mtime みたいな。 そういうのは DBMS の拡張機能を使うんですか?
>>562 うんにゃ。
SYSDATE 埋め込むだけ。
564 :
仕様書無しさん :02/07/21 21:17
char FV0I0AC[FDAT2]; char FV1I0AI[FDAT2]; char FV1I1AI[FDAT1]; . . . モウ カイシャ イキタクナイyo-!
565 :
仕様書無しさん :02/07/21 21:28
あなたの会社の発ガン性物質的な命名規則教えてください。 うちはCなんですが、変数名が大文字英語と数字のみでこんな感じです。 「AAABC0」 AAA・・・システム名(固定) B・・・・・メイン名(連番) C・・・・・サブ名(連番) 0・・・・・予備(連番) 御上がいうメリットは、 ・変数名を考える手間が省ける。 ・名前がバッティングする可能性が低い。 ・集中管理しやすい。
>>564 , 565
会社を選ぶにあたって、御社のような会社に当らないようにするには
どうしたらいいですか?
567 :
仕様書無しさん :02/07/21 21:37
ソースと仕様書を見せてもらうってのが、その会社の実態をみる一番の 方法だと思った。実際にはできないだろうけど。
>>566 面接の時、コーディング規約を見せてもらう。これ最強。
>>565 変数名だけでなくて、仕事する手間も省いてやったほうがよいのでは?
>>526 > 「1.」のようなときは以外で上記のことを言うなら間違い。
> これはバイナリ/テキスト変換ツールを1つ作っておば済む話でしょ
じゃあ、date や内部フラグ云々は除くとして、「基本的にインタフェースや
プロトコルはコンピュータよりでなく人間よりに作る方がよい」という原則は
納得かい? バイナリ/テキスト変換ツールを作る必要すらなくなるから。
例外は、データ量削減とプロトコルを公開したくない場合ね。
>>530 > 元コボラーに設計されたシステムなんだよきっと
別サーバとのインタフェース部分は元コボラーが設計したのかもしれない。
>>548 > それをフラグと呼んではいけないと言ったのだが、その文意は読み取って
> もらえなかったようだな。入力項目はフラグとはなりえない。
そう? じゃあ呼び方は「2値の入力項目」でいい? 入力された内容を if で
判定して処理を振り分けるようなところだから「フラグ」と表現したんだけど。
よくわからんなぁ、特に
>>550 あたり。web のチェックボックスを「フラグ」と
表現しちゃいかんの?
571 :
仕様書無しさん :02/07/21 21:44
>>566 業務内容に
・官公庁系のシステム開発とWebアプリ開発が混在している。
開発環境に
・メインフレームとWin、Linuxが混在している。
使用言語に
・COBOLとC/C++、Javaが混在している。
以上の場合、
過去のメインフレーム系で培ったノウハウが受け継がれている場合が多い。
つまり、プラットフォームや言語が変わっても
開発手法は20年以上前のままで変わっていない。
>>559 > レコード作成日時やレコード更新日時のカラムの定義はどうしてるのかな?
> DATE型でないにせよ、きちんとDBサーバの日時を取ってきてるといいのだが。。
char。sysdate を埋め込てる。伝票作成日時とレコード作成日時はあるけど、
クライアント側の時刻は取ってない。
>>542 > 俺の場合、「Yes/Noで答えられるならBoolean」が基準。
賛成だけど、そう簡単にもいかないでしょ。当初は
「選択肢が2つしかなかった → Yes/No で答えられた → boolean」
としたけど、その後もう一つ選択肢が増えちゃったとかさ。
結局は顧客業務の分析ミスなんだけど、そのミスに対する耐性を確保したいから
char にしてある (それと、結局は別サーバに 0/1 の文字を送らなきゃいけない、
っていうのもある)。
573 :
仕様書無しさん :02/07/21 21:54
>「AAABC0」 > >AAA・・・システム名(固定) >B・・・・・メイン名(連番) >C・・・・・サブ名(連番) >0・・・・・予備(連番) > >御上がいうメリットは、 >・集中管理しやすい。 先輩曰く、 変数名の記号とその意味を暗記すればスラスラ読み書きできるらしい。 一番コワイのがこの習慣が身についてしまうことだろう。。。 ほかでは使い物にならなくなってしまう。
>>572 > 賛成だけど、そう簡単にもいかないでしょ。当初は
> 「選択肢が2つしかなかった → Yes/No で答えられた → boolean」
> としたけど、その後もう一つ選択肢が増えちゃったとかさ。
これは、ありえない。
Yes/No で答えられたものに別の選択肢が増えたのではなく、
新たな別のパラメータを導入する必要が出てきたということだろう。
こういう場合は、新たな値を作り出すのではなく、
項目自体を増やすということをしなければならない。
>>570 >じゃあ、date や内部フラグ云々は除くとして、「基本的にインタフェースや
>プロトコルはコンピュータよりでなく人間よりに作る方がよい」という原則は
>納得かい? バイナリ/テキスト変換ツールを作る必要すらなくなるから。
あんたの原則を押し付けるなよ
もうあんたと話しても意味ないわ
>>570 > よくわからんなぁ、特に
>>550 あたり。web のチェックボックスを「フラグ」と
> 表現しちゃいかんの?
いけない。
チェックボックスはあくまでチェックボックス。
表示上の話だ。内部モデルとは関係ない。
仮に、そのチェックボックス項目が、テキストボックスでも同じことはできるはず。
web やってるのなら、MVCくらいの分離は考慮して欲しい。
577 :
仕様書無しさん :02/07/21 22:23
なんか514の人は「フラグ」と「区分もしくは種別」とを勘違いしてるな On/OffまたはYes/Noを内部の制御で使うのをフラグって言うんだろ 1,2,3,4とか言うのは区分や種別だろ フラグの意味をわかっているのか?
まぁ、あれだ。 簡単に言うと、517は頭が硬いと。
579 :
仕様書無しさん :02/07/21 22:29
>>578 頭が固いのは514だと思うが。
っていうか、もう凝り固まっちゃって「メタ化」ということが
不可能な頭脳構造になってしまっているんだろう。
>>578 いや、517はいいこと言ってると思うぞ。
勉強になる。
コンピュータがやり取りする上でのプロトコルやインタフェースの 中身を人間が簡単に観覧できればいいんだろ だから汎用的な変換ツールを1つ用意すればいいって言ってるわけで 大した手間でもなかろうに コンピュータがやり取りする上でのプロトコルや インタフェースそのものを人間よりに作るのがベスト言う考えは邪道 DBの内部形式は人間よりではないだろ ただ、SQLやSQL*Loaderやら人間よりのインタフェースが用意されている だけで、内部形式まで人間よりにするのは単なるエゴ
>>567 ,568,571
ありがとう。参考になります。
>>575 > あんたの原則を押し付けるなよ
じゃあなんで HTTP や FTP はテキストプロトコルなの?
メリットもないのにわざわざバイナリデータ/バイナリプロトコルにして、
「俺ってすごい」とアピールしたいだけっしょ?
>>577 > On/OffまたはYes/Noを内部の制御で使うのをフラグって言うんだろ
> 1,2,3,4とか言うのは区分や種別だろ
チェックボックスで入力したものは 0, 1 という値にマッピングして
別サーバに渡さなければならない。
さて、チェックボックスはフラグと言えるか? フラグと言えるならばweb アプリ
内部で扱う値をフラグと呼んでよかろう。チェックボックスがフラグじゃないなら、
web アプリ内部で扱う値をフラグと呼んではいけないだろう。
てゆーか、フラグの定義って何?
2値しか取り得ないものをフラグって呼んじゃダメ? フラグかどうかと入力項目か
どうかは、直交した概念じゃないのけ?
584 :
仕様書無しさん :02/07/21 22:40
プロトコル関係の仕事やったことありますが プロトコルモニタとにらめっこで人間的とは思えませんでしたけど
>514 もういいよ おまえバカだよ
会社を選ぶにあたって、514 のような人に当らないようにするには どうしたらいいですか?
>>514 そうだ、受付側でデータのチェックはしないのですか?
「インタフェース」はもっと対象を絞ってもらわないと、議論はできない。 ここでいう「プロトコル」って伝送データのフォーマットのことを指している? 要件にもよるが、必要とする表現の自由度や伝送量などいろ−んなことを総合的に判断して、 XML形式にするなり、固定長バイナリにするなり決めることだろう。 そのデータをどう見せるかは、ログ設計なりで、別の問題として扱うべき。
>>581 DB は速度を稼ぐ必要性があるからね。必要性があるなら、いくらでも
バイナリで送ればよい。
昔ならコンピュータよりに作らなきゃいけなかっただろうけど、今は速い
CPU と山のようなメモリがある。それで解決するようなことならさっさと
高性能なマシン買えばよい。
金がないので現在のマシンでなんとかしなきゃいけなくなった状況で、
はじめてコンピュータよりに作ればいいじゃん。
ソースの高速化だって同じでしょ。可読性重視で作って、問題があるなら
プロファイリングしてボトルネックを突き止め、そこを高速化。当然でしょ
(組み込み/ゲーム系なんかはそうもいかんだろうけど)。
「変換ツールを作ればすむ話」って言うけど、それすら作らなくて
すむならそれがベストでしょ。
>>514 >2値しか取り得ないものをフラグって呼んじゃダメ? フラグかどうかと入力項目か
>どうかは、直交した概念じゃないのけ?
と言ってるが、前のレスでは
>現時点では 2値のフラグであっても もう一つ値が
>追加されないという保証はない
↑なに言ってるのかわからないよ、だからフラグじゃないんだろ
>>590 「現時点」ではフラグでしょ。「値が追加された時点」でフラグではなくなる。
明快じゃん。揚げ足くんはウザイので消えてね。
もっとも、「多値のフラグ」と書かれていた部分は「?」と思ったけどね。
>>588 > ここでいう「プロトコル」って伝送データのフォーマットのことを指している?
もともとは、俺が「扱ったデータを最終的に別サーバにテキストで送信するような場合は」
と書いたら、
>>519 が
「もうバカ丸出し。ネットワークトラフィック無視しやがってアホか
テキストで送信するなよ、受け取った側でテキストにしろや」
と言ったのが始まり。
それに対して俺が
>>521 で、
「インタフェース仕様は別サーバのベンダが決める。それが「テキストで送信」と
決まっているから仕方ない」
と言ったが、それは別として、一般的な考え方として
伝送データやプロトコルをテキストにするかバイナリにするかを考えるとき、
特に理由がないなら人間が読みやすいテキストの方がよい
と言ったわけ。
>「変換ツールを作ればすむ話」って言うけど、それすら作らなくて >すむならそれがベストでしょ。 だからなにがそんなに面倒なわけよ 変換ツールなんて1日あればできちゃうでしょ。 たかがそれくらいの理由で高い高速マシンに頼るなよ ハードスペックに頼るのは最後だろ、最後の手段にとっておけよ 凄い複雑なものになるからそれを避けるというならわかるが 大して難しくもないところで大口叩くなよ
>>590 572 を読んでくれ。外部要因や分析ミスにより、2値のフラグと思っていたものが
多値を取るようになるケースが出てくる。それに対する耐性を確保するために、
現時点では 2値のフラグと見えるようなものでも boolean でなく char で保持する、
ということ。
>>591 > もっとも、「多値のフラグ」と書かれていた部分は「?」と思ったけどね。
それは俺の書き方が悪かった。スマソ。
>>591 >現時点では 2値のフラグであっても もう一つ値が
>追加されないという保証はない
もう1つ値が追加される保障がないものを
フラグとは言わないよ
>>593 解析時にいちいちツールを通さなきゃならないので、すげー面倒なんですけど。
597 :
仕様書無しさん :02/07/21 23:02
まぁ、あれだ。 簡単に言うと、514と仕事はしたくないと。
>>596 解析時にエディタは通すんだろ(w
同じじゃん1クッション置くのは
>514 あのー素人ですけど 受付側でのデータのチェックはしないのですか?
>>593 > だからなにがそんなに面倒なわけよ
> 変換ツールなんて1日あればできちゃうでしょ。
フォーマットが変更されたら、そのたびに追随していなかいといけないね。
変換ツールにバグがあったら、原因究明ではまるよね。作業に 1日かかるのと、
全く作業が必要ないのと どっちがいいのさ。
> たかがそれくらいの理由で高い高速マシンに頼るなよ
結局は、人間よりに作るにせよ、コンピュータよりに作るにせよ、
それぞれにメリットとデメリットがあるでしょ? (ない、とは言わせんよ)
で、メリットとデメリットを天秤にかけて どっちを取るか決める
んでしょ? 人間にとっての可読性や、高速化はメリット/デメリットの
一要素でしか過ぎない。
しかし 526 の言う通りにすると、XML でデータ通信なんて絶対
導入できないね。XSLT とか web サービスとかも嫌いなん?
>>598 ありゃ、ツールって単なるフィルタじゃないの? ツール+エディタだと2クッション。
>>599 > 受付側でのデータのチェックはしないのですか?
してるよ。
>>601 そんなのシェル用意しておけば済むじゃん(w
小さいデータだったらコマンド+moreでもいいし(w
> 2値しか取り得ないものをフラグって呼んじゃダメ? フラグかどうかと入力項目か > どうかは、直交した概念じゃないのけ? 2値しか取らないからといってフラグであるとはいえない。 web アプリケーションという視点でシステムを見た場合、入力項目とフラグは排他的であるべきだ。 もちろん、チェックボックスはフラグではない。
>>514 じゃあ数値項目のチェックは一度変換するの?
>>595 > もう1つ値が追加される保障がないものをフラグとは言わないよ
だ・か・ら、外部要因や分析ミスにより、もう1つ値が追加される
場合だってば。
例えば、もともとは部門内から商品購入の入力を行うシステムだった。
そのうち支社からも商品購入できるサイトを作ろうとなった。
そのとき「投入システムフラグ」を持って、社内システムから
の投入なら 0、支社からなら 1、とすることになった。
そのうちインターネットの web からも商品購入ができるようにしよう、
ということになった。そこから投入されたら 2 とすることにしよう。
この時点で「投入システムフラグ」はフラグじゃなくなる。
この例だと分析ミスかもしれんが、こういうことに対する耐性を
付けるってことさ。
>>514 >フォーマットが変更されたら、そのたびに追随していなかいといけないね。
>変換ツールにバグがあったら、原因究明ではまるよね。作業に 1日かかるのと、
>全く作業が必要ないのと どっちがいいのさ。
この程度のツールでバグって原因究明にはまってたら
本体はバグだらけだろ
あんたが安易に人間よりにしろって言ったから反論したの
人間よりにして問題がなければ人間がわかりやすいほうが
いいに決まってる。
>>605 > じゃあ数値項目のチェックは一度変換するの?
文字列のまま。m/^[0-9]{16}$/ とか。
>>603 ああ、aliasで一発なら変わんないか。まぁ、でも、俺はやっぱ面倒だな。
>>606 それは分析ミスじゃなくて、フラグの使い方を間違えてるだけ。
>>607 > 人間よりにして問題がなければ人間がわかりやすいほうが
> いいに決まってる。
同意。この点についてはおしまい。
>>606 「社内」か「支社」かというなら
それは区分なんじゃないの
〜を「する」か「しない」かというのなら
フラグだと思うが
>>610 > それは分析ミスじゃなくて、フラグの使い方を間違えてるだけ。
じゃあ、610 ならどうするの?
614 :
仕様書無しさん :02/07/21 23:22
くだらない反論、揚げ足取りしている暇が あったら、自分の仕事のやり方を、本当に それで良いのか自問して居ろ。 どっちもな。
>>609 そうね、aliasでもいいね
で、なにが面倒なの?
>>606 別の人が書いていたが、それは初めから2値項目ではなく、
たまたまとりうる値が2種類しかない多値項目だ。
>>614 揚げ足取りじゃないだろ
大前提だろ
要するに自分のところのシステム設計のヘボさを
さも世の中の一般論として語るから突っ込まれるんだよ
>>615 なんとなく、感覚的に。変換が必要であるという事実が。って感じです。
>>616 分析ミスでも使い方のミスでもどっちでもいいけど、要は設計時の
ミスなわけでしょ?
支社が出てきた段階で
社内投入であるかどうかは Yes/No で答えられる→フラグだ→boolean
とやってしまうと、その後多値項目であることに気がついたときの
変更コストが高くなる。だから
社内投入であるかどうかは Yes/No で答えられる→フラグだ→char で 0/1 にしよう
と俺はしている、ってこと。
結論は
>>527 で出ている。あとはそれをどう証明するかだ。
Yes(はい)/No(いいえ)に対して、「どちらでも無い」という回答。 On(入)/Off(切)に対して、「開放」という状態。 true(真)/false(否)に対して、「灰色」という結果。 いずれも、現実には存在しますので、フラグは使用禁止でおながいします。
>>514 結局、おまえのところの仕事が変なだけじゃん
その変な考えに油を注いでその場だけのコスト意識で
やっちゃってるのね、まあよくあるヘタレ集団の集いだね
そんなわかりにくいものが山のように増えたら
後から来た人が泣くよ
自分が楽ならば、今は大丈夫だからで仕事する奴は氏ね
>624 いや、だから まぁ、あれだ。 簡単に言うと、514と仕事はしたくないと。 なんだよ、きっと
「なになに有無」って項目名にできない項目は、2値しかとらなくても 「フラグ」とは呼ばずに「区分」と読んでます。型はchar。
みんな514をいじめるなよ 俺も良くないと思いながら 別に俺が設計したわけじゃないし 長い間いるわけじゃないし 正しいこと言っても通じないし ここは黙って見過ごすか というときは確かにある。 以後関わらないようにするけどね。
>>621 2値だからといって、フラグとは言わないということは別として。
社内であるか?
だけを判定すればよかった要件に、社外については、
webであるか?
という判定が必要になったのなら、パラメータが増えたということになる。
決して、Yes/No で表現できていた項目が新たな選択肢を持ったわけではない。
>>626 > 2値しかとらなくても「フラグ」とは呼ばずに「区分」と読んでます。型はchar。
うちも同じだよ。ただ、「なになに有無」という項目名であっても
char で 0/1 を入れてるってこと。
# 最終的に別サーバに 0, 1 のテキストで送信しなきゃいけない。
>>619 大前提?あほか?
そんな当たり前の話を得意げになって語ってる暇あんのか。
ほうっておけ。スレを汚すな。
Lisp みたいに述語関数を作れば良いんじゃなかろか。 (社内からの投入-p) (支社からの投入-p) みたいに。そうすれば最初からフラグなんて要らんだろ。
>>630 いいだろ、ぜんぜん関係ない話してるわけじゃないのだから
おまえだよスレ汚してるのは
>>628 だから、最終的に別サーバに送信するインタフェースは、別ベンダが
決めるんだってば。
当初は 0,1 を送るというインタフェースだったのが、あるとき 0,1,2 に
なったりするの。
そこらへんはウチが口出ししてもどーにもならないこともあるの (どうにか
なることもある)。その別サーバはウチだけじゃなく、進捗管理システムは
商品発注システムや料金管理システムともつながってるから、別サーバ都合で
あっても受け入れなきゃいけない場合があるの。
そういうときに困らないように boolean でなく char で持つって
言ってるの。
てゆーか、どうせなら フラグの定義云々に噛み付くより、↑の判断に
噛み付いてくれよ。
628が正しいね もともと多値項目という前提であるのなら 新しい値が追加されたとなるが フラグとしてYes/Noという概念ならそれは汚さずにしておくべき。 別の判断をするフラグが増えたということだよね。 Yes/Noを前提にされているところに新たな値が入り込むのは 良くない。混乱をまねく。
>>633 そういう外的要因に左右されがちなシステムであればなおさら、
伝送フォーマット、内部モデル、UI は分離したほうがよい。
分離せずに柔軟に対応できなくなっているよくありがちな例だ。
階層化は、項目間のマッピング作業のコストは高いが、
変更時の柔軟性は確保できる。
ただし、階層化と称して本当の意味での階層化になっていない場合もあるが、
それはSEの能力が低いだけだ。
>>635 > そういう外的要因に左右されがちなシステムであればなおさら、
> 伝送フォーマット、内部モデル、UI は分離したほうがよい。
俺には何がなんだかわからん。
俺は、web から入力されたものは String, char/varchar で持つ、
と決めただけよ?
これが分離されていない証拠だ、と言いたい? 分離したいからこそ
String, char/varchar で持つことを決めたんだが。
>>514 しつこいようだが、それはフラグじゃないんだろ
別に区分をcharでもってもだれも文句言わないでしょ
仕様書にも区分と表現され、あくまで現時点では2値しか
存在しないだけで、新たな区分が追加される可能性がある。
となっていればいいのでは
有無というのは2値限定を連想させるわけで
仕様(設計)バグなら仕様書は変更しないとね
あと、本当にフラグならフラグで通すべきだね。
それはSEの能力が低いだけだ。 これにつきるね 考えるのは面倒くさいからイヤだ なんでもありにしておけば楽チンだ なんでもありは楽なところは楽かもしれんが それはそれでツケがまわってくる。 考えるのがイヤならばSEなんてやるなよと言いたい。
>>637 だから〜、フラグじゃないってば (
>>606 のことでしょ?)。
フラグだと思ったのは分析ミスで、実はフラグじゃなかったってこと。
でも、仮に本当のフラグがあったとしても char で持つよ、ってこと。
それは上記のような分析ミスに対する耐性を付けるため。
何度も何度も書いてるんだけどなー。
>>636 伝送データのフォーマット変更によって、
2値項目を多値項目にしなければならないという発想が起こること自体、
分離されていない証拠。
階層化について分からなければ、それは自分で調べること。
議論することではない。
>>633 >当初は 0,1 を送るというインタフェースだったのが、あるとき 0,1,2 に
>なったりするの。
だたら、0、1だけを見てBooleanにするなっての。
その見極めができないような奴が設計するから、あとで2が追加になって慌てるんだよ。
それが「2値」なのか、「2種の値しかない多値」なのかは、よーく考えればわかる。
どーしてもわからないんだったら、適性がありません。業界の未来のためにも転職してください。
>>514 >でも、仮に本当のフラグがあったとしても char で持つよ、ってこと。
DBの項目で有無フラグ等がcharなのは別にいいと思うよ。
>それは上記のような分析ミスに対する耐性を付けるため。
分析ミスをごまかすのは良くはないよねと言われてるのでは
良いことではないが現場が現場だから
しょうがないのでそうしてるというなら納得するのでは
「実際の値」と「意味」の区別がついてないんじゃないの? 結論は変わらないんだが。
>>640 > 伝送データのフォーマット変更によって、2値項目を多値項目にしなければならない
そんなことは誰も言っていないが。
データを String や char/varchar で持つことに異論があるの?
ないのならこの辺で終了でよい?
517 とは一緒に仕事すれば、自分も勉強になると思うが、 514 と一緒に仕事しても、場当たり的な作業者に成り下がってしまいそうで怖い。
514とは一緒に仕事すれば、お客さんに喜ばれると思うが、 517と一緒に仕事しても、お客さんに逃げられそうで怖い。
まぁ、あれだ。 簡単に言うと、514と仕事はしたくないと。
>>644 DBを入力項目の単なるスナップショットとして位置づけているような
システムであれば、異論はない。
ただ、ある程度の複雑性を持った業務モデルを実装しているのなら、
大反対だ。
>>641 > だたら、0、1だけを見てBooleanにするなっての。
してないってば。
> その見極めができないような奴が設計するから、あとで2が追加になって慌てるんだよ。
設計者だけじゃなくプログラマだって「フラグかどうか」を判断
しなきゃいけないでしょ? そういうとき
「web から入力データについては下手に boolean を使うな。String にしておけ」
「プログラム内部のフラグは boolean でいいよ」
「お前はフラグと思っていても、実はフラグじゃなかったということはよくある」
「そのとき boolean なソースを書き換えるのは面倒だぞ」
と言ってるの。
プログラマには、新人もいれば外注もいるし、外注先の新人もいる。
スキルの低いのだってたくさんいる。
だから基本ルールは String, char/varchar にしている。
スキル低いプログラマがたくさんいるなら、 なおさらダメだろ。
>>648 > DBを入力項目の単なるスナップショットとして位置づけているような
> システムであれば
その通りです。
> 異論はない。
ということで、おやすみ〜。
>>650 当然だ。あなたと逆にかいたのだから…。
なんだ、もうおしまいかあ。
514 は真面目な奴なんだろうが、517 の意図はぜんぜん伝わっていないんだろうな。
> 「そのとき boolean なソースを書き換えるのは面倒だぞ」 確かにcharならコンパイルは通るかと思いますが、 事前に増える項目を想定したプログラミングをすることは不可能なので 結局周辺のルーチンを調べなければならないことは変わりません。 むしろ、変数の意味を事後に変更するcharの方が潜在的なバグが発生する可能性が高いはずです。
>>656 514 はもっと素直に人の言うことを聞いたほうがいいね。
きっと我流ハンガリアンで、変数名に型の情報が入ってたりするんだろ。
>>659 見つかっちった。いや、一人だけ叩かれてるの見ると応援したくなっちゃうんだよね。
>>649 わかった。
しかし、
>設計者だけじゃなくプログラマだって「フラグかどうか」を判断
>しなきゃいけないでしょ? そういうとき
には賛成できない。
もし、プログラマが「設計しない人」という位置付けなら、その判断をプログラマにさせてはいけない。
2値項目か多値項目かの判断を各プログラマがそれぞれ行なうなど、悪夢だ。
設計者が判断を示した上で、2値項目はBooleanで実装するのが正しいと思う。
俺も元は汎用機コボラだったので、 DEL-FLG PIC X(01). なんてのはしょっちゅう使っていたが、危険性は常に意識していた。 IF DEL-FLG = '1' (削除されているときの処理) IF DEL-FLG = '0' (削除されていないときの処理) などというコードを見て、恐怖を感じない奴はいないだろう? (COBOLでごめんね)
664 :
仕様書無しさん :02/07/22 00:39
>660 馬鹿じゃねえの? >514の作ってるシステムがそんな間抜けな設計のわけねえだろ。 ちゃんと計算されてる。角度とか。
>>657 そうだよね値が追加されたら結局ソース直すわけじゃんね
スキル低い奴が入りこんで来るならなおさら
〜有無フラグと言っておきながら2だの3だの追加されたら
余計混乱するわな
>>661 たしかに 514 もがんばったと思うよ。
でも、応援するなら、内容で 517 と戦って欲しかったな。
実を言うと514には同情してるんだよ俺は 右も左も言っても聞かない奴ら 集まったメンバはロースキ まともな設計はされていないわけで ベンダーは言うこと聞くわけないので 現実的に楽をしようと思うとそうなると ただ、間違った考えではある。 でも、世の中正論が通るとは限らない。 かわいそうになぁ。
>>667 あるべき姿を思い描けないようでは、環境はいつまでたっても変えることはできない。
>>668 あるべき姿を思い描けても、政治力が働いているときは
環境は変えることはできない。
>>667 514 は正論を言っていない。
多分、彼の環境が正論を言うという行為すら
できなくさせてしまったのだろう。
いや、環境は変えられないと信じている 514 がそういう環境を創り出していると
言ったほうが正しいか。?
あるべき姿を思い描くのは簡単だけど それを実現するのは難しいよ 相手が某大企業、省庁の輩とかだと
>>669 環境は変えれないとあきらめた時点で、
環境は変わらなくなる。
環境は変えることができると信じている者だけが、
環境を変えることができる。
>>670 自分でも正論を言ってないのは514もわかっているのでは
514のところだけでもまともにすればいいと思うけど
相手のベンダーはフォーマット変える気はないのだろうし
自分のところだけでやるとなるとわざわざ
相手にあわすために変換したりすることになるわけで
こういう場合は仕事する場所を変えるべきであって
考え方変えようとしない連中と議論しても結果は変わらない。
もし、そのような環境を変えることができる人なら
他でシステム構築して好きに仕事するのでは
674 :
仕様書無しさん :02/07/22 01:06
>>672 立派なこと言ってるけど
おまえはそれほどの奴なのかよ
そもそも環境を変えるのではなく
そうならない環境をはじめから作るほうが楽だろ
となると別のところでやる罠
>>673 まあ、514 のような立場で仕事している奴は多いだろうな。
ただ、同情してやっても彼のためにはならないと思うぞ。
この業界、戦わないと悪しき慣習の餌食になってしまう。
漏れの会社でも 514 のような環境で仕事せざるを得ない
部署もあるが、漏れはそういうところでは徹底的に戦うことにしている。
ただ一ついえることは、一番の強敵は自社のやる気のない社員だったりする。
戦ってみると分かるよ。周りの無関心さとか、面倒くさがる態度とか。
>>675 俺も言うべきときは言うのだけど
簡単には言うこと聞かないね
だから相手の言うこと半分聞いてあげて
半分は言うこと聞いてもらう。
言ったことの半分でも実現できれば良さがわかってもらえるから
その後は相手も徐々に素直になってくれる。
でも簡単ではないね。
>>675 要約すると一人だけ浮いてるってことですね。
>>677-678 確かに浮いているな。
ただ、この程度浮いただけで不利益をこうむることがあれば、
そんな会社には未練はない。さっさと辞めてしまえばいい話だ。
やる気のある社員も少なからずいるので、
今の職場はそんなに捨てたものじゃない。
君たちは浮いていないんだね。
そのほうが可愛そうな気がする。
何のために仕事してるの?楽しい?
>>679 > 何のために仕事してるの?楽しい?
よっぽど恵まれてないんだね。
ご愁傷様。
>>679 何でもいいから、目立つべき。
悪役でもいい。活発な議論こそ、いま必要とされるものだからだ。
議論下手は論理的思考の素養がないので、システム開発には向かない。
そんな人は別の業界に行ったほうが、本人のため。
>>681 > 何でもいいから、目立つべき。
おいおい、基地外はどっか行け。
韓国人かよ。
>>682 なぜ、韓国人を見ると腹が立つのだろうか?
そんな生理的な嫌悪感が人種差別の根底にあるな。
Σ(゚д゚lll) 叩かれるどころか、哀れまれてるよ…。話が発散してしまったので、再度聞きたい。条件は以下の通り。 - web アプリで商品購入サイトを作る。 - 入力項目は 500 程度。 - web で入力した内容 +α (投入日時など) を、テキストで別サーバに送信する。 チェックボックスなどは 0/1 にマッピング。 - 別サーバへの送信フォーマットは、別ベンダが決める。 - フォーマットの内容はよく変わる。 - 内部で DB の内容を更新する処理はあまりないが。ゼロではない。 例えば「受け付けました」メールを出す際、メール送信フラグをいじったり、 メール送信履歴テーブルにレコードを生成したり。 このとき、 Q1. web から入力された値を格納する DB の項目は全て char/varchar にする? それともフラグ系は boolean にする? Q2. web から入力されない値 (システムが作る値) を格納する DB の項目は全て char/varchar にする? Q3. メール送信フラグや、メール送信履歴テーブルなどは、char/varchar にする?
>>684 漏れは今まで韓国なんて目になかったがW杯以降変わった。
もちろん、この板(?)で発言できるくらいは自分で
いろいろ調べたよ。
生理的なものではなく理性的なものだよ。
なお、DB の常識としては「フラグは boolean とか、日時は date で持つ」 というのは理解しているつもり。 でも、「web」+「別サーバにテキストで送信」という条件が加わってくると、 全て char/varchar という選択肢もアリなんじゃないか、と思っているわけで。
>>514 もういいよ
結論出てるからさ
まぁ、あれだ。
簡単に言うと、514と仕事はしたくないと。
>>689 Oracle に boolean 型ってあったっけ?
DBMSは何?
692 :
仕様書無しさん :02/07/22 02:03
>>691 おれも、そうおもったよ。
でも、あったらいいなぁとおもったよ。
boolean なかったっけ? PostgreSQL にはあったかな。 今使ってるのは Oracle8 (古っ) と PostgreSQL。 ただ、DMBS に依存するようなことじゃなくて、 一般的な DB 設計の方法を知りたい。
>>514 一般的には日付や数値(金額や数量)を
char/varcharでは持たない
終わり
>>695 > 一般的には日付や数値(金額や数量)を char/varcharでは持たない
「一般的には」って何さ? 例外的にははchar/varcharの場合もあるの?
WEB から個数を入力して、別サーバにテキストで送信するのなら、
char/varcharでもいいんじゃないと漏れは思たよ。
真面目に書くとすれば、勝手にJavaで実装する前提だが Strutsフレームワークを利用したりすると HTML Form:文字列(しか扱えない) HTTP リクエスト:文字列(しか扱えない) FormBean:文字列 モデル:型を区別 DB:型を区別 ってのが一般的だ。 HTTPやサーブレットに関係する階層はすべて文字列で扱い。 業務モデルを扱う層では、各フィールドの属性を考慮した型で格納するのがよい。
>>697 普通はそうだろうね。俺もそうするよ (実際そういうシステムは
何度も作った)。
今回は
>>687 のような条件が付いた場合はどうする? ってこと。
>>696 [一般的]
特別な物事に限らないで、広く全体に通ずる状態であるさま。
>>698 基本的には
>>697 のアーキテクチャは変えない。
これに、送信フォーマット用のトランスレータクラスをくっつけるだけ。
そうしておいたほうが、その後の仕様変更に対応しやすい。
>>699 「一般的には〜とすべき」は「あらゆる場面で〜とすべき」と等価ではないよ。
>>696 おまえはバカか?
「あらゆる場面で〜とすべき」となどいつ言った?
基地外か?
一般的にはと聞かれたから一般的な答えをしただけ
514は
>>687 の場合はどうするか、ということを聞きたいんだと思うが。
>>695 は
>>687 の条件を前提として答えてないんでないか?と思ったからさ。
そろそろ無能を晒すのはヤメにしませんか?
>696
>>687 を前提としても
一般的にはDBの層では型を区別するでしょ
514が無能なようには思えないんだが。 無能な相手にあきれつつ仕方なく付き合ってやってるような。 だいたい送信フォーマットがころころ変わるてのは設計段階のミスだろ。 おそらく514は設計にはほとんどタッチできない立場なんだろう。 意見は出せるかもしらんが立場は弱いと。 上流の工程でミスった場合コストが異様にかさむんだよな。 設計ころころ変えるやつはその辺わかってねえんだろ。 つまりな、514が言ってるのは本質的には愚痴なんだよ、多分(w ってここは愚痴スレだったか。
708 :
仕様書無しさん :02/07/22 03:04
>>514 反論してる人は無能じゃないと思うよ
だって言ってること正しいもの
それを無能と思うなら、あなたが無能なんだよ
むしろ514が愚痴を正当化しようとして認めてないだけ
寝ろよ>514
>>708 おれ宛か?
すまんが、514に反論してるやつらには言及しとらんぞ。
ヘンな煽りとか除けば正論だと思ってるしな。
>>707 その辺の弁護をしてくれてる人が居たのだけど
彼はそれをも認めていないのよ
なんかさ、これって別サーバ担当のベンダーが糞なんだよね ユーザ→UI→受付側→別サーバ側 となっていたとして、受付側が単なるトリガー的な存在で そこには業務の処理がなくて 別サーバ側に業務の処理が乗ってるってことでしょ そこがどっかのベンダーが担当してて、ろくな設計できない糞だとすると そのまま逆を辿るとUIに負担がかかってユーザが割を食うと 設計のお粗末さがそのままユーザに見えちゃうと なんでこんなもんいちいち入力せなあかんのやと そもそもころころフォーマット変えろって言ってくるような ところと一緒にやるときは、自分のところでもある程度吸収できる ようにしておく。ユーザが割りを食うと評判悪くなるから。
>>687 DBの使い道と、システム開発コスト(期間)によるんじゃないかと思います。
DBが汎用機世界の「マスターファイル」扱いなら、後で使い回すことを
考えて、項目名称にふさわしい適切な型をつけて、入出力方法が変わったら
DBのレイアウト(項目数、項目名称、項目の型)を適切に変更して
DBも移行するでしょうし。
ダイアログボックスになんか表示するためにDBつかってるくらいなら
極端な話、型なんてどうでもいいです。
と、ここまで書いて、684の書き込みと同じですね。
まあ、DB作った本人は「このDBのデータ精度に期待しないで欲しい」と
思っていても後の人が「このDB使える!」と勘違いすることもあるので、
コストが許せば適切な型で作りますね。データ精度を保証する手段としては
「項目の型を適切に定義する」のは有効な手段でしょうし。
715 :
仕様書無しさん :02/07/22 10:52
みんな人の仕事にくちだすほど暇なんだね。 うらやましひ…
716 :
仕様書無しさん :02/07/22 10:57
>>715 お前も、このスレ読む程度にはヒマなんだろ?
717 :
仕様書無しさん :02/07/22 11:12
>716 まーね(笑)
> プログラマには、新人もいれば外注もいるし、外注先の新人もいる。 > スキルの低いのだってたくさんいる。 > > だから基本ルールは String, char/varchar にしている。 うーん。フラグって事でbooleanで保持してあれば、新人でも「ああ、ONか OFFだな」って分かるけど、char/varcharだとむずかしいと思う。ソースを 追うか、仕様書見ないと分かんないんじゃない?
719 :
仕様書無しさん :02/07/22 13:57
皆さん社会人何年生ですか? 賢いですね それにひきかえ漏れは・・・鬱
720 :
仕様書無しさん :02/07/22 15:56
具体的なソースは出せんが 1スレッドを構成する関数が約2000行。 気の利いたことに関数名は「HeavyWork」だった(w
>>719 人にものを聞く時は、まず自分を名乗るように。
社会人1年生でもできる基本だぞ。
722 :
仕様書無しさん :02/07/22 16:26
研修の練習問題だが、サーブレットでオンラインバンクを作る時、隣の 中国人なぜかメモリー足りなくて落ちた。ソースコード除くと、客のデータ を配列で保存している。stringの配列がたくさん。それはまあ新人だから許せるが、 配列を100億で取ってたのが落ちる原因でした(;´Д`) 大国な発想ですね。
中国人が落ちたのかと思ったじゃないか。
>>723 すんげー、速度優先のプログラムだな(w
>>725 スワップしまくるからなあ。
挙げ句に落ちるし(w
激しくスレ違いなんだけど,なんかそれっぽい話題が出てるんで便乗〜 今やってる仕事で, Y年M月D日 h時m分から勤務時間を累積していって, その累積時間が P 時間 Q 分に達した瞬間の時刻を得る とか Y1年M1月D1日 h1時m1分から Y2年M2月D2日 h2時m2分までの間に 勤務している部分について,いろんなフラグを見ながら N 分区切りで 時給 X と乗算して,統計を出す てな処理が満載。 こういう場合,DB 内では日付データを int 型で持っていたいなーって いう衝動にかられますか? ていうか,かられますよね?
729 :
仕様書無しさん :02/07/22 23:02
>>727 とりあえずお使いのDBMSの関数マニュアルをご一読ください。
>>727 差分とれば、1次関数で事足りるだろ!
厨房レベル。
世の中にはbooleanさえ理解できない人もいるんだよ。 514くらいなら、まだ根拠を説明できるだけましってモンだ。
日付の足し算引き算がわかんないヤシもいるんだから・・・
734 :
仕様書無しさん :02/07/23 00:02
>>732 うちの女子社員は、booleanは理解できないが、
ブリリアントは理解しています。
ブリリアントグリーンを理解しているのか、それともブリリアントカットを買ってほしいのかは謎
735 :
仕様書無しさん :02/07/23 00:21
>>514 ていうかさ、入力されたものが「数値か」とか「日付か」とか「区分か」って
どこでチェックすんの?DBに納める前じゃないの?
元上司の書いたコードでファイルをソートするやつ。 ・ファイルの内容を配列に読み込む ・配列をソートする ・ファイルに書き出す スワップしまくりで遅いのは仕方ないと思っていたらしい。
今日はやらないの?
flagだったらbooleanだって 単純すぎたよ 不論理と正論理と言うのがあるのは、知ってるか ある関数が TRUEをかえしたときは正常に終了した FALSEをかえしたときは、異常終了した としよう そのシステムのなかに、エラーフラグ(この名前自体問題があるが) というシステムが正常に動作してるかどうか示すものがあったとしよう その場合エラーフラグがTRUEの場合はなにを示すのかな FALSEの場合はなにを示すのかな 混乱を起こさないか エラーフラグというのは、システムが正常に動作していないことを示す というのがただしいのかも知れないが この場合は、フラグがFALSEの場合は、二重否定になって宜しくない その混乱を防ぐのは、フラグに文字列をつかうのも一つの手だな。
740 :
仕様書無しさん :02/07/23 00:54
Cのif〜else文に{}をつけない奴は逝ってくださいね。
741 :
仕様書無しさん :02/07/23 00:55
ついでに、{を条件文の横につける奴も逝ってください。
742 :
仕様書無しさん :02/07/23 00:56
744 :
仕様書無しさん :02/07/23 00:57
俺は三項演算子しか使わないから関係無いな。
>739 何の話? 単に名前付けの問題?
748 :
仕様書無しさん :02/07/23 00:59
何でGNUのコーディング規約はアレなんだ?
>747 if 〜 else と等価ですが何か?
>>746 booleanをflagにするのは(・∀・)イクナイ!
って話に読めたんだけど。
>750 ではどうしろと
>>751 いや、漏れは
>>739 の意見に同意してるわけではない。
booleanは本来のflagとして使うには有効だと思うよ。
>752 入れ子にできるから問題ないなぁ。 return (p != null) ? p.do() : ((q != null) ? q.do() : 0); こんな感じのコード書くと外道かな、やはり。
えー,ちょっと待ったちょっと待った。便乗の便乗で申し訳ないけど,質問。 「予定」テーブル 2002-07-22 出勤予定 8:00〜 退勤予定 17:00 2002-07-23 出勤予定 9:00〜 退勤予定 17:00 2002-07-25 出勤予定 10:00〜 退勤予定 18:00 「実績」テーブル 2002-07-22 出勤10:52〜外出15:03〜戻り15:34〜退勤18:46 2002-07-23 出勤8:41〜外出12:14〜戻り13:20〜退勤16:20 2002-07-24 出勤10:48〜外出12:28〜戻り12:56〜退勤18:17 2002-07-25 出勤11:12〜退勤20:14 ていうデータで,各日とも出勤〜退勤予定に収まっている実績データについて 15分単位で「出勤」「戻り」は切り上げ,「退勤」「外出」は切捨てを行い, 7月22日昼12時から集計を始め,12時間が経過した瞬間の 日付と時刻を求めたいんだけど(正解は25日の12:45 .. 計算違いがなければ ..) まさか,DB の機能だけでちょこちょこっと計算できたりしますか? Yes か No だけで構いませんです。 # 長くてすまんです。あと,予定・実績テーブルが分かれているのは私のせいじゃないです。。。
>>756 はっきり言って う ぜ え よ バ カ
とりあえず答えだけ言えば、Noだ
ストアドでも使えば多少は楽になりそうだが、
そこまで細かい計算はどっちにしてもプログラマ自身が頑張るしかないと思う
つかあんた新人さん?そんなもんでネをあげてどうするよ…
俺なんか前に(以下略
>>754 とりあえず君は、式の評価順とそれに係る副作用に付いて調べて
レポートを提出する様に。
それまでは、三項演算子を使う事を禁ずる。
>>756 君のやりたいことが、集合演算で表現できるなら計算はできるが、
この例では、ちょこっととは行かないだろう。
>>754 その式を見て、君は分かりやすいと感じるのか?
こんなときってどうしてる? ブラウザからの日付入力で、日単位までしか要らないやつ。 例えばショッピングサイトなら、お届け日とか。(秒以下の単位までいらないもの) DBに日付型で持ってた場合って、その日の0時0分0秒とかで保持するの? YYYYMMDDのcharで持ってるシステムよく見るんだけど。
>>739 > そのシステムのなかに、エラーフラグ(この名前自体問題があるが)
> というシステムが正常に動作してるかどうか示すものがあったとしよう
この仮定をする前に、それが混乱を引き起こさないかを十分検討すべきだ。
すべきでない仮定しての議論は、詭弁でしかない。
そもそも、マイクロコンピューティングにおける flag は 0/1 の2値である。
それを、プログラミングに適用したとすれば、boolean でよい。
> 不論理と正論理と言うのがあるのは、知ってるか
君は、論理学の話を言っている?
論理学で flag や boolean という用語は扱うものか?
>>761 HiRDBならDATE型があるので万事解決。
つーかお前が言いたいのは日付時刻型のことか?
さすがに三項演算子の入れ子はネタですがな。
フラグってね旗なんだよ。 印なの。 印が付いてるか付いてないかを表すのがフラグ。 白と黒や正と誤とかじゃないんだよ。 データに印が必要な時にフラグ項目をつけるんだよ。 あと型は何でも良いんだよ。 でもできる限り小さいほうがいいってだけ。
>>766 フラグとは本来、データにつけるものなのだろうか?
処理結果の格納場所ではないだろうか?
だからフラグとは本来、データに属するのではなく、
処理系に属すべきではないか?
だから、DB項目においても「フラグ項目」ではなく「状態項目」とでも言うべきではないか?
すべて疑問形なのは、主張ではなく単純な問いかけだからだ。
意見求む。
論理削除フラグなんてよく使うけど これは後の一括物理削除を行うためのデータに対する目印だと思う。 論理削除された状態も示すかもしれないが、 使用目的は後の処理を待つためのフラグでしょう。 状態はもう少し段階があるし、目印とは少し別のものではないかな。 ちょっと微妙で難しい。
>>768 後続処理で利用されることを前提とする項目を「フラグ」と呼ぶのなら、
同意できる。
ただ、純粋に状態であるにもかかわらず、2値であるからというだけで
「フラグ」と呼ぶことには抵抗を感じる。
論理削除フラグの例では、一括物理削除のためだけでなく、
履歴を残さねばならないという要件によるものだとしたら、
「状態」と呼ぶべきと考える。
あと、2段階しかなくても「状態」であるなら「状態」と呼ぶべき。
段階の多少には関係はないだろう。
>2値であるからというだけで「フラグ」と呼ぶことには抵抗を感じる。 これはそうだと思う。 2値でも区分とかだってある。 >論理削除フラグの例では、一括物理削除のためだけでなく、 >履歴を残さねばならないという要件によるものだとしたら、 >「状態」と呼ぶべきと考える。 今のところでは業務処理内でのレコードの物理削除は認めてないので 論理削除フラグを立てるか、もしくはレコード状態区分を持ってもらっている。 論理削除フラグは短期的な一定保有期間後の一括削除を行う場合。 レコード状態区分はもし容量が許すなら永久に残す場合。 (実際はデータメンテによる削除が絶対発生するが。) うちは単語3つの組合せで項目名をつけるルールがあるので レコードの状態の区分にしている。 >あと、2段階しかなくても「状態」であるなら「状態」と呼ぶべき。 >段階の多少には関係はないだろう。 状態はもう少し段階がある場合があるしと書きたかった。 状態はレコードだけでなく取引の状態にも使っている。 でもそれを示すのは区分としてる。 フラグは今のところ論理削除フラグ以外は禁止している。
>>770 > うちは単語3つの組合せで項目名をつけるルールがあるので
なんと!!
>>763 HiRDBって初めて聞いたっす。
ユニシスってこんなの出してたのね。
「日付型」があるのなら、確かにそれ使えばよさそう。。
OracleやSQLServerみたいに「日付/時刻型」の場合はどうするんでしょう。
それとも、俺が知らないだけで、日付だけ保持する型が存在するのか???
>>739 不論理と言う言葉は知らんが、負論理のタイプミスと言うことで
話をすすめる。もし違ったら指摘してくれたまえ。
--
負論理・正論理がなんで文字列使うって話になるのかさっぱりわかんね。
>>772 Oracleだったら
TO_DATE('2002/07/23', 'YYYY/MM/DD')でぶち込めばいいのでは
775 :
仕様書無しさん :02/07/23 15:50
プログラマー ・・・ぷっ
大変です! 話の内容判んないクセにちょっと偉そうな素人が紛れ込んでますよ!
777 :
仕様書無しさん :02/07/23 17:28
>>776 素人じゃありません。
コンピュータ部の部長様ですよ。
779 :
仕様書無しさん :02/07/23 18:58
>778 違います、ド素人です!!(w
不倫理
782 :
仕様書無しさん :02/07/24 11:34
xxx.h ------------- void hogemoe( int ahya ) { short manuke; return( manuke ); } xxx.c ------------- line 5: #include "xxx.h" line 12: #define hogemoe(ahya) Func_HogeMoe(ahya) line 45: #define Func_HogeMoe(ahya) hoge(ahya) line 122: #define hoge(ahya) FUNC_HOGEMOE(ahya) line 131: #define FUNC_HOGEMOE(ahya) fnc(ahya) line 182: #define fnc(ahya) HOGEMOE(ahya) line 227: #define HOGEMOE(ahya) Hoge_Moe(ahya) 実話
>>782 各#defineの間で何やってるのか激しく気になる。
まさか空行……でわないよね……
>>783 関数作成者が各々好きな関数名に書き換えて使用しています。
変数名も実体は1つだが別名定義が1つにつき3〜12個ぐらいあるので
デバッグ死にそうです
>>784 プリプロセッサに掛けてそっちを正式ソースにする
というのはどうか。
786 :
仕様書無しさん :02/07/25 00:20
派遣されてきたらこんなのひきつぎました。 関数の末尾にて。(VB6) End If Next End If End Select End If End With Next End Select Next さあ、つっこんでください。
>>786 VB ではありがちなソースですね。
今更突っ込もうにも手遅れです……
PIC X(02)
791 :
仕様書無しさん :02/07/25 00:51
>>790 そうしました(w
ちなみにそのPGがオーナーのHPに日記があり
<以下引用>
06/24 Sun ケチ
ワシが作成したプログラムにケチをつけられた(--#
ワシのプログラムは見やすいと評判らしいのに、
ケチをつけたオヤジが見やすいように直せときたもんだ!
だったらテメエで直せボケ!!!っていうより解読能力無いんじゃねぇ?
ネトヲチでURL晒してやろうかと・・・
>>791 ソースは解読するものではない
と言っておいてくれ。
>>793 ワラタ
このスレのURLをメールしてやろうかと思った。
795 :
綺麗なソースを書く男 :02/07/25 01:28
原型が見たい
796 :
仕様書無しさん :02/07/25 01:31
>386 VBは、DQNが多いな。
797 :
仕様書無しさん :02/07/25 01:40
>>791 06/01 Fri ブチ切れ
仕事でブチ切れ・・・・(--#
今週末は携帯の電源を切っております。
俺がいなきゃ何もできないプロジェクトリーダーって皆さんどう思います?
んな事して、そいつはクビにならないのか?
>>797 ひょっとしてこいつの書いたコードを誰も理解できなくて
作業が止まるんじゃないの(w
人間PGPだな
799 :
仕様書無しさん :02/07/25 02:02
>>791 06/29 Fri 肩の荷
ストレスが温和されていくぅ〜♪
「この会社を辞めようと思った部下の一言」ってとこか?
>>791 トップページの
> −−−注意−−−
> 当ホームページにて、作成された作品の説明等、記載されている
> 画像及びデザインを、著作権者の許諾なしに使用する事は、法律
> により固く禁止されています。
を見た後で、“壁紙”ページを見てしまいました。
801 :
仕様書無しさん :02/07/25 03:30
自分でたいしたことできないクセに、問題を部下のスキル不足と決め付けることと、上司に自分が仕事しているフリだけに長けたグループリーダーにブチ切れ。 俺は5年後には出世して、奴を左遷する。 てか、その前に誰か奴を飛ばしてくれ。
802 :
仕様書無しさん :02/07/25 03:40
その前に左遷されるのはおまえだよ。
803 :
仕様書無しさん :02/07/25 05:40
お前がそのスキルを学べ。出世するための技術はプログラミングとは別だ。 「人の生き血を吸う」のも技術のひとつだ。
804 :
仕様書無しさん :02/07/25 13:03
なんか
>>514 さんの件で論争が起こっていますが、それについて
1つ確認させてください。
514さんの例ってDBを使わないとダメな理由は何なんでしょうか?
レコード毎のファイルを作るってだけでも済むような気すらするのですが・・
805 :
仕様書無しさん :02/07/25 16:07
>>786 私も派遣先で似たようなコードを見たことがある。
私が見たのは、ノートPC一画面に
if文がネストしていて、真ん中に1行コードがあった。
当然、コメントは全くない。
ソースをいじっていたのはSE。
そいつが書いたのか、人のコードを修正していたのかは知らんが。
806 :
仕様書無しさん :02/07/25 17:56
strcat(buf,yyyy); strcat(buf,"/"); strcat(buf,mm); strcat(buf,"/"); strcat(buf,dd); strcat(buf," "); strcat(buf,hh); strcat(buf,":"); strcat(buf,mi); strcat(buf,":"); strcat(buf,ss); 年/月/日 時:分:秒 の形で文字列作りたいてのは分かるんだが。 分かるんだがコロしたい。
807 :
仕様書無しさん :02/07/25 18:16
これくらいエエやんけ
>>806 これよりはマシ
#define strcat SC
SC(SC(SC(SC(SC(SC(SC(SC(SC(SC(SC(
buf,yyyy),"/"),mm),"/"),dd)," "),hh),":"),mi),":"),ss);
>>804 実は俺もそう思ったのよ
全部char/varcharなDBを作るって言ってて
理由はなにもデータの改編をしないとか言うから
だったらDBいらねーじゃねーかよって
DB使うほどのものなのかよって
>>786 みんなで、このコード書いた奴にどこがどう悪いか直接教えてやれ。
ネストが深いのは、カッコつかいまくりの複雑な論理式よりは マシと思うけど・・・こっそり入るEnd Withがいやな感じ。 ループ内でする必要のない判定をやってる雰囲気も感じる。
害虫さんのコメントの入れ方 /* flagが0のときは終了します */ if (flag == 0) return; そのまんまやんけ・・・
813 :
仕様書無しさん :02/07/25 23:24
ごとーさんが一杯・。
>>806 memset(buf, 0, strlen("9999/99/99 99:99:99") + 1);
memcpy(buf, yyyy, strlen(yyyy));
memcpy(buf + strlen(buf), "/", strlen("/"));
(以下略)
なんてのに比べれば……
>>786 1: Dim a,b,c,d,e
2: Dim daita[300000], daita2[400000];
3: Dim i,k,j
4: sub copys()
5: getdaita2();
6: for i = 0 to 400000
7: if i > 300000 then goto 11
8: daita[i] = daita2[i]
9: end if
10: next i
11:
12: end sub
とかいうのを見たことはある。
>>815 ……化石ですか?
VBで行番号使う椰子がいるなんて((((;゚Д゚)))ガクガクブルブル
>>815 普通にExit Subじゃだめなのか?
あと微妙に1-3行は外部変数?
>>804 検索したり統計とったりくらいはするんでしょ<DBの必要性
' 軽微なエラーを無視して処理を継続 ' On Error Resume Next 見てのとおりコメントアウトされてるわけですが、そういう意味と 認識してること自体が恐ろし過ぎる。
>>821 ちょっと異なるが、
たしかこのスレのPart3のとき書いたと思ったが、
全てのプロシージャのアタマで
On Error Resume Next
と書いていた上司がいた。経験12年・・・。
6: for i = 0 to 400000 ←なぜ400000?300000じゃだめ? 7: if i > 300000 then goto 11 8: daita[i] = daita2[i] ←i > 300000のときって、この行動くの? 9: end if 10: next i コードカバレッジを確認せずにリリースしたソースのような感じ。 「ホワイトボックステスト」という言葉を知らなさそう・・・
>>820 いや、検索したら統計とるなら、char/varcharは向いていないし、
grepとかで十分調べれそう・・。
>>804 違うだろ検索するのはいいけど統計とるのは向いてないしだろ
str_data[31]=str_data[0]+""+str_data[1]+""+str_data[2]+""+str_data[3]+""+str_data[4]+""+str_data[5]+""+str_data[6]+""+str_data[7]+""+str_data[8]+""+str_data[9]+""+str_data[10]+"" +str_data[11]+""+str_data[12]+""+str_data[13]+""+str_data[14]+""+str_data[15]+""+str_data[16]+""+str_data[17]+""+str_data[18]+""+str_data[19]+""+str_data[20]+ ""+str_data[21]+""+str_data[22]+""+str_data[23]+""+str_data[24]+""+str_data[25]+""+str_data[26]+""+str_data[27]+""+str_data[28]+""+str_data[29]+""+str_data[30]; これ書いた人の設計でコード書かされてます。
↑の補足、 改行ありません(長すぎて書き込みできなかった)。 二重引用符の中はタブ(\tじゃなく、本当にタブ)です。
forでやったら短くなるのに...ってそれ以前か。
最後にもタブがつくからforは使えないと思ったのでは
>>826 みたいに\tを使わずにコード書いてた奴見た!!!!
前、行ってた会社で実際に動いてるソフトであった・・・
最初見たときはなんでこんな所にコントロールコードが直接書いてあるんだ??と
思って一瞬わけわからんくなった(w
831 :
仕様書無しさん :02/07/28 02:57
年寄り連中がCOBOL得意だったのは時代ってもんだから構わないが、 なんで若い俺たちがJava使ってCOBOLみたいなコード 書かなきゃいけないんだよ! クラスどころかメソッドも勝手に作れないんじゃ何のためのJavaだよ・・・
クラスもメソッドも詳細設計で設計します。 PGが勝手に作成するものじゃありません。
833 :
仕様書無しさん :02/07/28 03:24
プログラムなんかちゃんと動けばいいんだよ。 なにきどってんだコノヤロウども。 凝ったプログラムなんざ単なるオナニーだっつーの。
凛々しく仁王立ちして力強くこするオナニーは見ていて 気持ちいいものです。
動けばいいなんて思ってるクソプログラマは全員駆除してしまえ。
836 :
仕様書無しさん :02/07/28 08:05
うちの会社のソースの雛型。 /**************************************** INDENTIFICATION DIVISION ****************************************/ /**************************************** ENVIRONMENT DIVISION ****************************************/ /**************************************** DATA DIVISION ****************************************/ /**************************************** PROCEDURE DIVISION ****************************************/ int main(int argc, char *argv[]) { return 0; }
>>832 つまり糞な詳細設計するヤシが一番つかえねーヤシという事なのでぃすね(w
実際にはコーダー専門なんてのはほとんどいないという罠。
838 :
仕様書無しさん :02/07/28 11:23
if 0 // ここは不要 if ( 〜〜〜〜 ↓ #else // こっちへ移行 if ( 〜〜〜〜 ↓ #endif ・・・・どっちがどっちで、どうなのよ!! 不要な方は消せ!!
>836 そこまでやるなら素直にCOBOLで組めばいいのに。 しかも、INDENTIFICATION DIVISION とかスペル違ってるし。
>836 あと、INDENTIFICATION DIVISION と、ENVIRONMENT DIVISION の所って何を書くの? DATA DIVISION がグローバル変数の嵐なのは想像できるが...
(◎`ω´◎)
どうせなら全部大文字で書いた方がカッコいいぞ!
>>816 いた。4年前に仕事で行った客先で、自称VB凄腕プログラマーでアセンブラも理解しているという人。
実は98BASIC経験、後はデータ入力しかやったことがなかったらしくて3ヶ月で首になっとった。
>>817 本人はそのスペルで「ディタ―」と読んでいたよ
>>818 ローカル変数0個。
顧客データ管理システムのログイン画面だけで、グローバル変数30個ぐらいあったっけな。
テキストボックスに入力された名前とIDをDAOで接続しているDBに検索かけて、一致しているかどうか
判断、一致していれば次へ・・・だけの画面で変数30個、検索SQLは名前とIDを別々にやっていて、
検索結果を全てIFでチェックしてた。
入力チェックなのに10秒ぐらい固まることもあり、本人は「これがVBの限界です」と客に説明。
漏れが直して1秒もかからなくなったのを見て「すごい!そんな技術が!」と真顔で客の前で驚いていた。
>>819 引継ぎ後、見やすくするために行番号は全て消しました(w
で、その人の担当した ・ログイン ・顧客検索 ・顧客編集(追加、削除、変更) ・一覧のプリントアウト の画面はグローバル変数が200個ぐらいあって(しかもa1,a2,a3,a4,a5とかb[300000]とかで) EXEファイルのサイズが6.5Mぐらいになっていた。 検索すると、10〜15分固まったりしてた。「VBの限界です。どうしようもありません。」 漏れが直したのでは、グローバル変数5つ程度、EXEファイルにして800kb。 検索は1秒未満。 爆笑。
>844 ある意味たしかに限界に挑戦かも(藁
DQNな人といえば、単体テストもシステムテストも完全に終了といってたから、 それを信じて客先にもってったら、、、 起動直後にいきなりエラー終了。しかも「エラーです OK」のみ。 どうやら特定のファイルが存在しないとアウトになるらしい、と判りそれを送ってもらって 再起動。おお起動した。さてデータファイルを選んで・・・選べない。固定らしい。 さっき読み込んだファイルしか読み込めないらしい。 ・・・まあいい、デモみたいなもんだし。「次へ」。異常終了。 いろいろソース修正しつつ進んでいくと・・・・・紙芝居であることが発覚。 その後2週間で首になってたな。
法律の改正により計算方法が変わりました。でも、その計算方法 のプログラムを作成するスキルがありませんでした。 仕方がないので電卓で弾いた数値をカキコしました。 ......そりゃー、その人の計算はそれでいいけど、他の人のはどーすんのよ! お客さんがその項目はどの人もおなじ数値なのに気がついて大騒ぎ...... 他にも、月次データのクリア作業をさぼって毎月おんなじ数値が載った 統計帳票を納品したり。 『この統計帳票、ここ数か月間毎月おんなじ価なんですけど、ホント?』 ......懲戒免職処分の検討中らしい。 お客さんは某役所。当然この数値が県に行き、国の統計の一部になるわけだよな。 おめでとう!キミの所業は国の統計の中に永遠に刻み込まれるであろう!! 済まないが漏れは他人のふりをさせてもらうよ......
848 :
仕様書無しさん :02/07/30 08:23
>>844-847 ううう、すげーな。
このジャンルは、ここより「ドキュソプログラマ列伝」とかの専用スレ立ててやったほうが
いいかも。
>>846 >DQNな人といえば、単体テストもシステムテストも完全に終了といってたから、
>それを信じて客先にもってったら、、、
こいつは、こいつで、DQNな気がする。
自分じゃプログラム組めないのか、テストの意味が全然分かってない。
普通二人とも首だろ。
850 :
仕様書無しさん :02/07/30 08:56
ASPソースコード中で発見 MsgBox "編・・・(略 ※On Error してるからエラーが出ずに気づいていない
html化されてないのか?
>>851 貴様!ASPやったことないな!?
∧ ∧_
_(,,゚Д゚)ヾ____ ∧∧
| ∨/| ̄ < |つ||━━━━━━ (゚д゚,,)
i | // | i_ < | |つ つ
○|||//. | | ̄ ̄ @| |
| ||=∞=| | ∪∪
l_| i |__|
/ | ヽ
L__⊥___」
/Y_l 〈_Yヽ
>>852 誤爆ですた。微妙にスレと関連ありそうですみません
854 :
仕様書無しさん :02/08/01 15:19
多分、俺の作ったPGを見て、辞めたいと思ってる奴がいると思う・・・ ごめん m(__)m
>>854 どんなコード書いてたの?
ネタになるから言ってみ?
if(syori1(p)==0){ if(syori2(p)==0){ if(syori3(p)==0){ これが30以上続きましたとさ。
>>855 いや〜 もう、全体的に・・・
仕様が後出し後出しで、PGもつぎはぎだらけで、
最初から設計をきちんとして欲しかった
自分で作っておいて言うのもなんだけど、作った本人が見るのも嫌だもん!!
>>857 それは漏れもいつも思っていることだが。
そのうち慣れて気にならなくなるから大丈夫。
つーか、仕様を後出しする設計者が悪い。
>>857 そういうのはよくあるから気にするな。
俺の場合も口頭で仕様説明受けて作ったがその翌日休んだ時仕様変更で勝手に弄られた挙句に
さらに仕様追加で修正する羽目になったことがある。
当然ソースは無茶苦茶。
ていうか、昔のコードは糞!最悪! と言える人のほうが安心できるな。
>>860 あ〜それはあるね(w
確かに昔のソフトの事を話に出されたらちょっと恥ずかしい♥
>>860 成長したのか洗脳されたのか、それが問題だ。
>>862 まぁな(笑
確かに「昔のソースは汚かった」と言っているけど、
どう見ても2〜3年前のほうがコメントもきっちり書き、関数ヘッダも丁寧に書き、
今の方が汚いよ・・・・と言いたくなるような先輩とかいるしな。
つまんない事で突っ込むやつだな 関数毎についてるコメントだろうと脳内補完しろよ(w
>864-865 ○○厨ハケーン
派遣? 派遣いやーーーーーーーー
868 :
仕様書無しさん :02/08/03 01:47
とはいえ、関数ヘッダに「関数名」「処理詳細」「プロジェクト名」 「変更履歴」などなど、コードやファイルヘッダ見れば一目瞭然な 情報をダラダラ書かれてもなあ。
多少だらだら書いてもいいけど、中身と一致させてほしいよ。 中身を修正してコメント修正し忘れってのは良くある話だが 設計レベルで全然違ってるのは……なぜ?
>>863 > 今の方が汚いよ
あーごめん、それ俺だわ…つか関数ヘッダってマジ何?
int n; n = 2 * 3; for( int i; i < n; i++ ) { } 行稼ぎしていてわけわからん。
コメントは書くべきだ。 何をしてるか?なんてコード見れば分かるんだから、 なんでそういう風にしてるの?っていう開発者の"意図"を適切に書くべきだ。 int count=0; while( !isNull() ){ : count++; //処理した回数を数える。 } いや、みりゃわかるっつーの。 と言いたくなることしばしば。 むしろ、isNull()って、何がNULLだったときのことよ?と 聞きたくなる。 #↑のコードは今適当に書いたので、つまらんツッコミはやめてね。
>>872 ウォータフォール型の開発に慣れ親しんでしまっていると、
プログラマの意図は入り込まないという前提ですよね。
じゃあ、詳細設計者がコメントまで考えるのか??
まあ、建前ってことかな。
>>873 欲しい処理をコメントとして書く
↓
実装
って感じかな スレチガイになっていく・・・
>>873 > プログラマの意図は入り込まないという前提ですよね。
> じゃあ、詳細設計者がコメントまで考えるのか??
うん、そういう場合もある。
最初にソースに詳細設計書の文言をコメントとして書いて、あとでコードを書く。
または、ソースからコメントだけ抜き出して、適当に体裁を整えて
詳細設計書として提出する。
その場合には詳細設計≒コメントとなる
「201の法則」本でも コメントからコードを書いていけ、って提言はあるね。
本来、プログラミングは設計であるはずだ。 だから、ソースは、すなわち設計書であるといっていい。 体裁が気になるなら、ソースからリバースして作ればいい。 結局、詳細設計書かソースに落とし込んでいく作業が翻訳だといえるなら、 初めからソースを書いたっていいじゃないかと思う。
辞めるほどじゃないが、良くみる先輩社員のソース。 if ( result == false ) { if ( flag == DOWN ) { return false; } return false; } return result; う〜む。 論理式でまとめて書けないのか? それ以前に、書式ってもんを・・・。
return result; だけでいいじゃないか てことか たぶん バグがでるたびになおしていった結果だろな
if ( result == false ) { ...if ( flag == DOWN ) { ←どっちにしてもfalseを返すんだったら ......return false; ←無意味じゃないのかと・・ ...} ...return false; } return result; 私だったらこう書きます(この書き方も嫌な人は嫌らしいけど) /* xx関数の結果が不良のときは不良として後続処理を行わない */ if ( result == false ) { ...return false; } /* xx処理の結果フラグが不良のときは不良として後続処理を行わない */ if ( flag == DOWN ) { ...return false; } /* 結果良好のときに結果を返す */ return result; ...は字下げのために入れました。いい方法がおもいつなくて。
return result ?true :(flag!=DOWN); だな。おれなら絶対。
ぐあ見間違えたよ…逝ってきます…。
883 :
仕様書無しさん :02/08/05 01:56
お前ら2ちゃんにインデントしたコード書くときは としる! スクリプトにやらしる!
つか、論理値を定数と比較するのってどうよ?
バグが出るたび直していく、で思い出した。 某携帯電話メーカーのソースは void afo( int baka, char *boke ) { #if 0 #if 1 #if 0 #if 0 処理@ #endif 処理A #endif #if 0 処理D #if 1 処理E #endif #endif 処理B #endif 処理C #if 0 処理F #endif #endif // この関数は不要になったため、削除 } なんて関数が山ほどあったなぁ。 携帯メーカーにありがちの 「プログラム仕様書なんて見たこともない」 「入った時に既にソース書いた人はいない」 「引継ぎなんてロクにしないので説明できる人がいない」 「担当になった人で今回初めての人は、ソース解析から」 で、解析して何個も関数渡って情報が処理されていき、最後に呼ばれたこの関数でこの始末、 なんてのが当たり前のようになったなあ。 それでも一応VSSを使っていた、某住道。
886 :
仕様書無しさん :02/08/05 11:02
ガイシュツと思うが、インデントがそろってないとき。
887 :
仕様書無しさん :02/08/05 12:36
MVC理解しとけばすぐ終わるのに、MVC難しいからという理由で、 わざわざMVC使わない面独裁社内標準作ってるやつら。 標準で工数増やすなよ。
俺は879と一緒だけど、880だと動作が違ってくるだろ?
タブでインデントをそろえていて そのまま納品しまうと、インデントが崩れる罠
>>891 Windowsなら、秀○で変換しとけ。
Javaなのにメソッドをインデント無しで書き始める年寄りは、 COBOLやCに帰れと言いたい。
>>891 先方から指定があれば別だが、そうでなければ問題なかろう。必要なら GNU
indent あたりで整形しとけ。
>893 うちはそれはないな。みんな、こぴぺだから
M-C-\
897 :
仕様書無しさん :02/08/06 03:15
>890 「お前が標準作ればいいだろ。」 やめたくなって来た。 作る必要ねーだろーおーい
898 :
仕様書無しさん :02/08/06 07:52
俺が標準だ!
899 :
仕様書無しさん :02/08/06 08:31
あなたが標準です
900ゲトーーーーー! ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
901 :
仕様書無しさん :02/08/06 11:47
902 :
仕様書無しさん :02/08/06 21:26
>>856 しょぉがねぇなー。かきかえてやるよ。ほれ、これならどうだ。
if( !syori1(p)
&& !syori2(p)
&& !syori3(p)
904 :
仕様書無しさん :02/08/07 02:45
void resCheck(int x) { ....if(x != 0) throw x; } ....resCheck(syori1(p)); ....resCheck(syori2(p)); ....resCheck(syori3(p));
int (* syori[])(sometype) = {syori1, syori2, syori3,...., NULL}; int i; for (i = 0; syori[i]; i++) { if (syori[i](p) != 0) { break; } }
(syori1(p)==0)? ((syori2(p)==0)? ((syori3(p9==0)? ((syori34(p9==0)? ...... これが12行ほど続いているソースなら見たことあり。
908 :
仕様書無しさん :02/08/07 17:36
If FN_NumST > 0 Then '既にナンバリングしたファイルがある場合 FN_NumEND = InStrRev(str_List(cnt), ")", -1, vbBinaryCompare) FN_Num = CInt(Mid(str_List(cnt), FN_NumST + 1, (FN_NumEND - 1) - FN_NumST)) + 1 FSO.CopyFile FN_Path & str_List(cnt), FN_Path & Mid(str_List(cnt), 1, FN_NumST) & FN_Num & ").xls" FSO.DeleteFile FN_Path & str_List(cnt) str_List(cnt) = Mid(str_List(cnt), 1, FN_NumST) & FN_Num & ").xls" Else '初めてナンバリングファイルを作る場合 FSO.CopyFile FN_Path & str_List(cnt), FN_Path & Left(str_List(cnt), Len(str_List(cnt)) - 4) & "(2).xls" FSO.DeleteFile FN_Path & str_List(cnt) str_List(cnt) = Left(str_List(cnt), Len(str_List(cnt)) - 4) & "(2).xls" End If
>>907 すいまそん(W
書き換え案だから鬱にならずとも。
Javaに書き直すと読みにくいなーーーーーーー(W
private void modularCheck(int modularResCode) throws ModularException {
if(modularResCode != 0)
throw new ModularException(modularResCode);
}
910 :
仕様書無しさん :02/08/07 21:31
>>908 FN_NumEnd -> NumEndIndex
FN_Num -> Num
ところで、FN_NumSt , Num , cnt の違いって何?
Dimステートに書いてあれば許せる。
ある場合どうなのか例外処理はどうなのか。ちょっと怖いぞ。。
911 :
仕様書無しさん :02/08/07 23:06
1000
CPoint* pPoint; pPoint = new CPoint[100]; memset( pPoint, 0, sizeof( CPoint ) * 100 ); これで初期化できるのか?
>>913 CPoint の定義によるけど。しかし、ふつーはそんなコード書かんわな。
>>914 カプセル化の原則を何だと思ってやがる、
ってかんじだよな(w
916 :
仕様書無しさん :02/08/08 02:56
>>913 メンバ関数無し、及びメンバ変数が基本データ型(って言い方で良いんだっけ?)
なら、多分動くんだろうけど、、、
俺も見たことあるよ、まんま、それ!
同じ会社だったりしてね(笑)
そのコードを真似した奴が「何故か落ちるんですよ〜」って、、、
見てみたら
class CPoo
{
public :
string name;
(以下略)
};
だったーよ。
そりゃ落ちるさ。
>>916 > メンバ関数無し、及びメンバ変数が基本データ型(って言い方で良いんだっけ?)
規格書的には POD (Plain Old Data) ですな。ちなみにメンバ関数はあっても
大丈夫。仮想メンバ関数があると NG。
#define private public もうね…
>>918 うわ。ずっとこのスレ見てきて一番強く「この会社辞めよう」と思ったコードだ。
デスマーチぶりが目に見えるようだ。
>>917 そうなのか、勉強になりますた。
しかし、
> memset( pPoint, 0, sizeof( CPoint ) * 100 );
は、ホントどうかと思うよね。
コンストラクタの意味ねーし、、、みたいな。
921 :
仕様書無しさん :02/08/08 14:24
'下札パターン名作成 If InStr(1, Me("SS" & cnt), "(", vbBinaryCompare) = 0 Then TagPattern_Index = 1 Else TagPattern_Index = 2 End If
922 :
仕様書無しさん :02/08/08 15:29
>921 うん、渡されたソースがVBだったら漏れも鬱になる
けど最近のVBは馬鹿にできねーぞ。 それなりに需要があるから生き残って来たんだろうし ぁゃιぃテクニックもそれなりに発達してきてるみたいだしね
そそ。 数年前ならともかく、今「VBは糞」と言っている人間の大半は VBを使えないまま育ち、昔の知識のまま「糞」と思っているだけのダメ人間
そして一度も触られる事無くVBは廃れ、「糞」のレッテルを貼られた不遇の言語となる。合掌。
>918 ワロタ。 ...実際に見たら即死しそうだけど...
>>918 はアイディア賞ものだね。
そう来るか、と素直に感心した。
929 :
仕様書無しさん :02/08/08 23:38
>>924 >>925 糞にVB触らせると大変なことになる。
うちはCのコーディング規約はあるがVBのコーディング規約はないから、
VBのコードは例外無く、全部クソコード。
930 :
仕様書無しさん :02/08/08 23:40
そろそろ話題作りのためにアゲるのも疲れてきたので寝ます
931 :
仕様書無しさん :02/08/09 00:04
>>929 無いなら作るという発想は無いのか? そんなんだからお前もお前の会社も(略
>932 意義無し
935 :
仕様書無しさん :02/08/09 08:19
Perlのコーディング規約作ってる会社の方、どんな感じか教えてください。
Perlコーディング規約 1.はじめに Perlは(略) 2.規約 各自、保守しやすく読みやすいコードを書くように心がけること。 以上。
000090 IDENTIFICATION DIVISION. 000100 PROGRAM-ID. SORT1. 000110 AUTHOR. PU. 000120 DATE-WRITTEN. 2001.02.10. 000130* 000140 ENVIRONMENT DIVISION. 000150* 000160 INPUT-OUTPUT SECTION. 000170 FILE-CONTROL. 000180 SELECT IN01-F ASSIGN TO IN01 000190 ORGANIZATION IS LINE SEQUENTIAL. 000201 SELECT OUT01-F ASSIGN TO OUT01 000210 ORGANIZATION IS LINE SEQUENTIAL. 000201 SELECT SORT-F ASSIGN TO SORTWORK. 000211* 000220 DATA DIVISION. 000230 FILE SECTION.
939 :
仕様書無しさん :02/08/09 11:24
どうですかこのソース \  ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∩_∩ ∧_∧ (´∀` ) (^∀^ ) ●Yゝ ヽ ●Yゝ ヽ ___ノ‖.| / 丿 _ ノ‖ | / ノ |実況|\ ̄ ̄ ̄ ̄ ̄|解説|\ ̄ ̄ ̄ ̄ ̄ ̄ ̄ _____∧___________ / 結構いけてるね エレガントじゃん (こいつ分かってんのかよ・・・) 。O ∩_∩ ∧_∧ (; ´Д`) ( ^∀^) ●Yゝ ヽ ●Yゝ ヽ ___ノ‖.| / 丿 _ ノ‖ | / ノ |実況|\ ̄ ̄ ̄ ̄ ̄|解説|\ ̄ ̄ ̄ ̄ ̄ ̄ ̄
941 :
仕様書無しさん :02/08/09 11:55
942 :
仕様書無しさん :02/08/09 13:42
>>938 マジ どこがだめなの
おしえて、別におこってませんから
>>933 意義無しだって(プ
コーディング規約が無いからクソコードなんだろ。
クソコードをやめる為のコーディング規約
を作れって言ったら意義無し
だからコーディング規約が無いからクソコード(藁
>>943 > コーディング規約が無いからクソコードなんだろ。
設計の悪さに起因する糞コードはコーディング規約ではどうにもならない。
945 :
仕様書無しさん :02/08/09 13:54
>>944 コーディング云々っつーレベルの話では、設計の悪さ=糞コードとは限らないっしょ
とても美しく中途半端な仕様のソースもあるだろうし(苦笑)
糞コードってわかるって事は、それよりもっとマシなコードがあって 自分はそれを書けるってことだ。 それとも糞コードって言っておきながら自分が書いても糞コードになるのかな?
>>943 コーディング規約ガチガチのプログラムって、君みたいにすっごく醜いんだよ
>>948 それはもちろんプログラム言語全般の話だよね。
950 :
仕様書無しさん :02/08/09 15:47
strcpy(d, s); strcat(d + strlen(d), s); strcat(d + strlen(d), s);
951 :
仕様書無しさん :02/08/09 15:51
変なコーディング規約だったら害にしかならん。 聞いた話なんだがCのプロジェクトで、 ・関数は1ファイルにつきひとつ ・関数名はfnnnnで、nには数字を割り当てること。 なんてのがあったそうな。何が嬉しいんだそんなことして。 前者は、まあわからんでもないんだけど、今更って感じだし。
>>951 それはわかりますよ
汎用機で使うなら、ソートのPGを作らなくても
JCLでSORTのユーティリティがあったな〜
って思ったから・・・・・
>>952 2年前に、Windows用アプリを作るプロジェクト(VB)で
・関数名、変数名は8文字まで
・ローカル変数は使わない
・全ての関数でデバッグメッセージを表示する
というのがあった。もちろん、規約作られて数分で作り直しを命令。
955 :
仕様書無しさん :02/08/09 17:09
>>953 そりゃあ いらんわ
内部SORTで、一度に処理したかったのでは
まあ、昔は、プログラムを一度終了して、また
SORTして STEP多くするのを嫌った
類がありますからね
今でも使用中なら。。。ちょっと
大昔のDASDはOPEN、CLOSEに時間が
かかったものです
956 :
仕様書無しさん :02/08/09 17:17
あ、ちがいますね これ単純にSORTのプログラムですね 呼び出されるプログラムではなさそうですね これは、失礼
957 :
仕様書無しさん :02/08/09 17:20
>>953 >>JCLでSORTのユーティリティがあったな〜
で正解です
SORTプログラムがころがっているなら
過去にプログラム容量増大のために
だれかがつくったのでは?
いつ製作されたもでしょうね(w
958 :
仕様書無しさん :02/08/09 22:02
文字列コピーは必ずforループ。 ヤメテ…
>958 うちは文字列内の文字を探すのもforループしてる。 そして検索かけた文字が見つかったらbreakでループを抜ければいいものを for分の終了条件を自前で満たしてやがる。 オマエだよ!みかかにいるC++6年PGよぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉ! for(i = 0; i < strlen(buf); i++) { if (buf[i] == '\n') { buf[i] = ' '; i = strlen(buf); } }
960 :
仕様書無しさん :02/08/09 22:34
>958 それは関数呼び出しのオーバヘッド削減のためにインライン展開したのだ。 しかも、ループ内はアンロールされてたりしない? んなわけないだろ!
>>960 それはなんとも。たしかに関数呼び出しのオーバーヘッドを考慮してるのかもしらんが。
でもライブラリの関数ってCPUの特性を生かして極限までチューンしてあったりすることが
あるんで、関数呼び出しのオーバーヘッドを勘案しても十分に引き合う場合もあったりする。
Sunのライブラリなんかすごいらしい。ソース読んだことないから噂でしかしらんけど。
VC++だと一部のライブラリ呼び出しはインライン展開されたり。
日本語リソースが一つのクラスにまとめて書いてあるのはいいんだが、 ソースのコメント部分でリソースを定義していた。 どうしてこれで動くか不思議だったので調べたら、 ソースコードを読み込んで別のソースを作成して、 それにコンパイルかけるMakefileが見つかった。 アホですか?
>>959 でもbreakを極端に嫌うヤシって実際いるよな〜。強引な制御構文は使わないとかいって。
gotoなみに (w
>963 そいつは、それが分かりやすいと思ってんだよな。 で、誰が注意しても聞く耳もたんと。 どこにでもいるよな、そういうアフォ。
>>963 初期バージョンのコンパイラが日本語を通さなかったので何とかして
回避していた名残とか…
967 :
仕様書無しさん :02/08/11 08:17
保守
>965,968 でもね、それJavaなのよ。 少なくとも開発始まったのJava2になってからだと思うし。 外注が書いたらしいけど、何をやっているか理解した瞬間に 書いた糞PGもOK出したSEも死んでしまえと思ったよ。
>969 すげーよ。神だね。
971 :
仕様書無しさん :02/08/12 11:09
#include <math.h> typedef enum { false = 0, true = (!false) } boolean; int getMaxPrime(int n) { while(isPrime(n) != true) { n--; } return n; } boolean isPrime(int n) { if (isCanPowerAofB(n)) { return false; } int r = 2; while (r < n) { if (gcd(n,r) != 1) { return false; } if (isPrime(r)) { int q := MaxPrime(r-1); if (q >= round(4*sqrt(r)*ln(n)) && round(pow(n,(r-1)/q)) mod r) { break; } } r++; } for (int a = 1 ; a <= round(2*sqrt(r)*ln(n)) ; a++) { if (round(pow(x-1,n)) mod (pow(x,r)-1 ,n)) { // (*) return false; } } return true; }
↑あなたのコード?すごいね
>971 読む気になりません 解説してください
>>971 型がぐちゃぐちゃだな。だいたい int じゃ大抵の環境で 32bit, 多くて 64bit ぐらい
しか扱えんだろ。
>>973-974 話題の「多項式時間 素数判定プログラム」と思われ。インドの研究者が、素数判定
問題は P に属するって事で、アルゴリズム付きの論文を書いたらしい。
>975 なるほど、解説ども 多項式時間 素数判定プログラムですか…調べてみるかな #ところで次スレ立てないで大丈夫なんだろうか
>978 お疲れ
しょうがないのお
しょうがないのお
しょうがないのお
しょうがないのお
しょうがないのお
しょうがないのお
しょうがないのお
しょうがないのお
しょうがないのお
しょうがないのお
しょうがないのお
しょうがないのお
しょうがないのお
しょうがないのお
しょうがないのお
しょうがないのお
しょうがないのお
しょうがないのお
しょうがないのお
しょうがないのお
(*´д`*)ハァハァ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。