2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

この会社辞めようと思ったソースコード#10

1 :仕様書無しさん:04/10/13 23:01:26
この会社辞めようと思ったソースコード。
プログラマとして幻滅するソースコード。
プログラマを悩ませるソースコード。
をつらつらと綴っていって頂戴。

ちなみにここは質問スレじゃないので
技術的な質問がしたいならム板に逝って。

2 :仕様書無しさん:04/10/13 23:05:00
● 過去スレ
1:http://mentai.2ch.net/prog/kako/997/997104873.html
2:http://pc.2ch.net/prog/kako/1001/10010/1001076034.html
3:http://pc.2ch.net/prog/kako/1015/10158/1015861447.html
4:http://pc.2ch.net/prog/kako/1021/10215/1021560641.html
5:http://pc.2ch.net/prog/kako/1029/10291/1029120005.html
6:http://pc.2ch.net/prog/kako/1029/10291/1029120005.html
7:http://pc.2ch.net/prog/kako/1036/10367/1036779521.html
8:http://pc.2ch.net/test/read.cgi/prog/1040451049/ (dat落ち中)
9:http://pc.2ch.net/test/read.cgi/prog/1045401372/ (dat落ち中)
A:http://pc.2ch.net/test/read.cgi/prog/1049973793/ (dat落ち中)
B:http://pc.2ch.net/test/read.cgi/prog/1054362467/ (dat落ち中)
C:http://pc.2ch.net/test/read.cgi/prog/1067794604/ (dat落ち中)
D: http://pc5.2ch.net/test/read.cgi/prog/1077362207/ (dat落ち中)
E: http://pc5.2ch.net/test/read.cgi/prog/1084532091/ (dat落ち中)
F: http://pc5.2ch.net/test/read.cgi/prog/1092058090/

● 関連
この会社辞めようと思った上司の一言#0x12
http://pc5.2ch.net/test/read.cgi/prog/1095668367/

3 :仕様書無しさん:04/10/13 23:06:05
し、しまった……0xつけんの忘れてた……orz

4 :仕様書無しさん:04/10/14 00:30:05
イ`

5 :仕様書無しさん:04/10/14 00:36:39
大した問題じゃない

6 :仕様書無しさん:04/10/14 01:11:50
うむ。次のスレで修正すればよい。

7 :仕様書無しさん:04/10/14 01:59:28
仕様です。で通せ。

8 :仕様書無しさん:04/10/14 04:42:20
俺はオブジェクト指向を取り組んだプログラミングをしているっ

と公言しているヤツのソースをみた。

define( SRC_PATH, '/home/xxxxx..../');
require( SRC_PATH . '../src/XXXX.inc' );
require( SRC_PATH . '../src/XXXX.inc' );
require( SRC_PATH . '../src/XXXX.inc' );

という(うろ覚えだが)コードが120ファイル前後のソースに入っていた。

何か間違ってると思った。

9 :仕様書無しさん:04/10/14 06:29:03
>>8
1ステップでもオブジェクト指向的に組んであれば、嘘ではないなw
でもその感想もわかる。

10 :仕様書無しさん:04/10/14 13:19:24
???
XXXX.incの中がオブジェクトなんだろ?

11 :仕様書無しさん:04/10/14 16:06:14
>>8
何がいいたいのかわからん。


12 :仕様書無しさん:04/10/14 17:23:45
クラスで

class MyClass
{
 //変数
 ・・・

 //メソッド
 ・・・
}

とするやつと

class MyClass
{
 //メソッド
 ・・・

 //変数
 ・・・
}

とするやつがいるけど、下の変数をクラスの下方に
書く利点ってなんなんでしょう。

13 :仕様書無しさん:04/10/14 17:27:05
変数がpublicじゃないのなら、
「ここは見なくていいんだよ!!ヽ(`Д´)ノ」
という意思表示かな。
保守する人に、でなく使う人に対しての。

14 :仕様書無しさん:04/10/14 17:29:15
publicなメンバは変数関数問わずに上の方にやるね。あとtypedefも。
変数publicってあまりないけど。
あとコンストラクタだけはアクセス指定子に関わらず一番上に置いたりする。

15 :仕様書無しさん:04/10/14 17:30:20
>>1
乙津

16 :仕様書無しさん:04/10/14 22:03:07
>>12
恥ずかしい〜

17 :仕様書無しさん:04/10/15 00:00:17
外国産プログラムでコメントなしのは マジできつい。
(技術盗まれないように複雑化するってのはあるようだが)
外国産の〇〇制御プログラム だったが 市場でデバックしてるような製品。
(しかも金額4桁らすぃ・・・・)
あん頃は、〇〇に関しての書籍も英語版で1−2冊しかなかったから余計しんどかった。


18 :仕様書無しさん:04/10/15 08:49:36
>>17
4桁って*千万?*千億?まさか*千万で驚いてるんじゃないだろうな。
それに、書籍があるだけましだろ。

19 :仕様書無しさん:04/10/15 09:33:15
金額4桁と聞いて・・・入力欄が金額4桁〜!?
と思ってしまった。ちょっぴりちかれてる。

20 :仕様書無しさん:04/10/15 20:55:43
> (技術盗まれないように複雑化するってのはあるようだが)

なんで技術盗まれたくないのにソース公開されてんの?

21 :仕様書無しさん:04/10/15 22:04:56
>>20
コードつきで買ったからでしょ

22 :仕様書無しさん:04/10/16 00:47:03
JAVAだとソースに戻しやすいから、わざとめちゃくちゃに書くという都市伝説が。

23 :仕様書無しさん:04/10/16 00:57:35
>22
オブファスケータを友達の友達氏に教えてさしあげれ。

24 :仕様書無しさん:04/10/16 01:51:16
ぃゃ、わたしゃソレの存在は知ってました
オチは、汚いソースの言い訳でしょう

25 :仕様書無しさん:04/10/17 17:02:21
>>22
わざと滅茶苦茶にするソフトもあるしねえ・・・

26 :仕様書無しさん:04/10/17 17:26:11
ドトネトも無茶苦茶化ツールがあるしな。

27 :仕様書無しさん:04/10/18 00:00:32
>>25-26
それが>>23の言ってるObfuscatorだよな?


28 :仕様書無しさん:04/10/18 07:23:39
「はっはっは。オレ、オブファスケータなんて不要だぜ。なんたって最初から(略)」

29 :仕様書無しさん:04/10/19 01:11:27
ある構造体、structやunionが5層くらいの木構造になっていて葉も50枚はある。
そんなものが20ほど。
更に100以上あるヘッダのあちこちでバラバラに宣言
マジワカラン orz

パッと一覧表示してくれるツールないかの・・・読む気でないよ・・・読むけどさ・・・

30 :仕様書無しさん:04/10/19 01:16:48
>>29
doxygenでググッテごらん。
まぁ、そこまで糞だとどうにもならんかもしらんが。

31 :仕様書無しさん:04/10/19 01:43:46
cscope試して見れ

32 :29:04/10/19 01:45:50
>>30
忘れてた。こういうのにも使えるのかね?みてみるよ。ありがと。
とりあえずこのページ読んで勉強してみるよ・・・眠いから明日に

ソースコードを読むための技術 ttp://i.loveruby.net/ja/misc/readingcode.html


33 :29:04/10/19 01:48:40
>31
それはいけるのかな。うまくいったら読者の喜びの声を掲載します。
表示できたからといってマトモにソース読めるかどうかはわからないけどさ・・・

34 :仕様書無しさん:04/10/19 02:05:06
リファレンスツールを探す。
http://hp.vector.co.jp/authors/VA022047/linux/reference.html

色々ある模様ですな。
明日うまくいったら報告ヨロ。

35 :仕様書無しさん:04/10/19 08:22:05
ソースじゃないんだけどさ
僭越ながらプロジェクトマネージャーやってるんですよ
まぁ大した規模じゃないですがね
そんな俺に、先日上司がやってきて、「CMMやってんのか?お前のプロジェクトは」
ってうるさいんですよ
まぁ俺もCMMくらいは知ってたんですけどね、ただそんときのPJはホントに小規模
だったんで、あまり手順は踏んでなくて「やってないです」って答えたワケよ
そしたらもうブチギレで「なにをやっとんだお前は」って怒鳴りまくり
しまいにゃコーディングが終了しててテスト&デバッグのみの状態のシステムに対して
CMMを行えと言い出す始末
いや、あなた納期あと2日ですよと
んでもうるさかったんで、それっぽい資料だけ後で提出してその場は収めましたよ
ええ、実際に対応なんてしませんでしたとも
そしたらですね、また後日、「UMLつかっとんのか?お前のプロジェクトは」
ってうるさいんですよ
そのときのPJはPHPでコーディングされてて、オブジェクト指向なんてカケラもない
システムだったもんで「使ってないです」って答えたワケよ
そしたらもうブチギレで「なにをやっとんだお前は」って怒鳴りまくり
しまいにゃコーディング終わらすのも厳しい状況で仕様書は納品物に含まれてなかった
のにUMLで仕様書をかけと言い出す始末
いや、あなた納期云々の前にそれって全然意味ないですよと
んでもうるさかったんで、それっぽい資料だけ後で提出してその場は収めましたよ
ええ、実際には対応なんてしませんでしたとも
そしたらですね、また後日、「見積もりと進捗管理はどうなっとんだ?お前のPJは」
ってうるさいんですよ
見積もりもなにも、もうテスト&デバッグやってますよと
まぁ、でも一応答えたワケですよ。こうこうやりましたと見積書とか見せながら
そしたらもうブチギレで「なにをやっとんだお前は」って怒鳴りまくり
そのとき、同僚からIPメッセンジャーが来たんですよ
「多分、Software Peopleって雑誌見て来てるんだと・・」って
なるほど、調べてみたら発刊時期といちゃもん時期が完全に一致してるわな
もうウザいんで、来月号の見出しだけでいいんで先に教えてください

36 :仕様書無しさん:04/10/19 09:01:02
ワロタ

37 :仕様書無しさん:04/10/19 09:22:02
まだ、SoftwarePeopleだったらいいんじゃねーの?
きちんと読んでくれればある程度は上の知識になるから。

もっと概論だけの日経xxx系の本だけ読んだお偉いさんはもっと性質が悪い。


38 :35:04/10/19 09:26:54
いや、その雑誌自体がどうのってワケじゃなくてね
なんつか雑誌の内容を鵜呑みにして、なんでもかんでもその通りにしないとマズいって
考えてるような上司はどうなんだろうと
まぁ、いいんだけどね
来月号の見出しだけでも教えてもらえれば

39 :仕様書無しさん:04/10/19 09:46:51
>>38
貴社の出版しているSoftwarePeopleを上司が読んでいるおかげで
知ったかぶりの知識を披露され、プロジェクトに多大な損益を掛けられています。

などとDQNなクレームを入れてみるとか

40 :仕様書無しさん:04/10/19 10:19:59
>>38
まあ、暇があるときにその上司を巻き込んで実際にやってみるってのが良いかと。
上司教育も部下の大事な仕事です。w

言うだけ番長は巻き込んで教えないと、いつまでも理想論ばかりでウザイから。
って、こっちはソーススレだね、上司スレに移動するか?

41 :仕様書無しさん:04/10/19 17:10:45
ワラタ

42 :仕様書無しさん:04/10/19 21:22:28
>>37
>きちんと読んでくれれば
そんな仮定は無意味じゃん?

43 :仕様書無しさん:04/10/19 23:06:05
CMMと言いたかっただけちゃうんか、と。
自分ところの実情とCMMを本当に理解してたら無茶なことはいわん。


44 :仕様書無しさん:04/10/19 23:09:00
で、29はどこいった?

45 :29:04/10/20 01:05:19
>>44
いるよ
今日は一日テストしかしなかった
今週はテストで終わりそう
補助要員だから土日は休める
そのとき自宅のPCでやってみる


46 :仕様書無しさん:04/10/20 01:19:36
>>45
んじゃー、気をながくして待ってるよw。

てか、>>29のようなものを書く人と給料がさほど変わらないのが不思議すぎ。

47 :仕様書無しさん:04/10/20 07:09:21
>>29が書いたんじゃなくて、他人が書いたブツを押し付けられたんだろ?

48 :46:04/10/20 07:31:55
>>47
だから、「>>29と給料とさほど(ry」とは書いてないだろうよ。
もっと、適切でタイプするのがめんどくさくない言い回しがあったら教えてくれ。

49 :仕様書無しさん:04/10/20 07:44:13
>>46
なんで不思議に思うのかが不思議

50 :仕様書無しさん:04/10/20 22:02:22
>>49
あー、俺共同で開発したことないペーペーだし、
そんな俺でもそんな糞仕様書かないし、
ライブラリでも、そんな恐ろしいのは・・・、MFCくらいか?
って、そんなわかりづらくもねーか。

つーわけで、見たことないから不思議ってことさ。

51 :仕様書無しさん:04/10/20 22:22:51
>>50
技術力と能力に強い相関があると思っているのが不思議。

52 :仕様書無しさん:04/10/20 22:31:59
>>51
あるんじゃない?>相関関係

53 :仕様書無しさん:04/10/20 22:35:07
能力と技術力が共に高いことは充分あり得るが
かと言って一方が高いだけで他方をも期待するのは落胆の元。

54 :仕様書無しさん:04/10/20 22:43:40
>>53
マネージャとかなら分からんでもないけど、コード書きで
「能力のみで技術なし」ってどう判断するの? 技術ないのに
「こいつ能力あるな!!」ってコードが書けるとは思えないんだけど。
「技術はあるけど [ 共同開発での | 下を育てる ] 能力はない」とかはありそうな
気がするけど。

55 :53:04/10/20 22:49:20
能力の定義によるかなぁ
漏れは「事情経緯はともかく、会社に利益が出る形で仕事を完了する力」を能力と考えた。
そうすると、残業休出の連続でこのスレに晒されるようなコードを量産しても、
サビ残で済ませてるなら能力は高いことになるよなぁ、と、そう思ったのです。

あたま悪いのでこれ以上本格的な議論はご勘弁下され。

56 :仕様書無しさん:04/10/20 22:52:30
てか、プログラム書くときは、保守に気をつけて書くようにするもんじゃねーの?
(誰が見ても)スパゲッティコード書くような人で、有能な人っているんですか?

57 :56:04/10/20 22:54:03
>>55
うお、文章書くの悩んでたら、能力の定義かかれてしまった。

なるほど、そういう意味なら有能ともいえる人はいるね。
ただ、後々のこと考えないとマズーだと思うのだけど・・・。

58 :ワーイ:04/10/21 22:34:31
typedef float FLOAT;
typedef float FLOAt;
typedef float FLOaT;
typedef float FLOat;
typedef float FLoAT;
typedef float FLoAt;
typedef float FLoaT;
typedef float FLoat;
typedef float FlOAT;
typedef float FlOAt;
typedef float FlOaT;
typedef float FlOat;
typedef float FloAT;
typedef float FloAt;
typedef float FloaT;
typedef float Float;

typedef double DOUBLE;
//以下31行略
typedef char CHAR;
//以下7行略
typedef int INT;
//以下3行略

59 :仕様書無しさん:04/10/21 22:40:21
一番最初は必ず大文字なんだね。

60 :仕様書無しさん:04/10/21 22:40:49
なにがなんでも1文字目は大文字というポリシーはあるんだね(笑)

61 :180:04/10/21 22:42:39
>>58
いざ、結合したら
各々で勝手に typedef切っててそれが
FLOATだったりFloatだったりしたから、リンク作業者がぶち切れて
作ったのでは?


62 :仕様書無しさん:04/10/22 03:45:47
#define destory destroy
#define retrun return

63 :仕様書無しさん:04/10/22 03:47:50
>音声発信操作を行うと同時に着信があった際、端末内のメモリ制御プログラムが動作不良を起こすという事象。
>これにより、アドレス帳、Eメール・Cメール、データフォルダなどのユーザーデータが消失する恐れがある
>ほか、携帯電話に書き込まれている電話番号情報が消失する恐れがある。



64 :仕様書無しさん:04/10/22 06:33:36
>>63
> 消失する恐れがある。

「恐れ」ってことは、
「消失しちゃうよ〜〜!!! 恐いよぉぉぉ!!」
ってこと?


65 :仕様書無しさん:04/10/22 07:38:47
マジレスが欲しいのか?

66 :仕様書無しさん:04/10/22 07:58:07
どうなんだろうね。
とりあえず、他者と共有できない余裕の無さは感じるけど。

67 :仕様書無しさん:04/10/22 08:37:04
データとはきえるもの、バックアップが転ばぬ杖なのはこの業界では常識だろ。


68 :仕様書無しさん:04/10/22 08:59:32
>>67
『先の』があるかどうかでずいぶん意味が違うな。

69 :仕様書無しさん:04/10/22 10:35:41
後なら松葉杖だな

70 :仕様書無しさん:04/10/22 12:19:38
>46
>てか、>>29のようなものを書く人と給料がさほど変わらないのが不思議すぎ。


>47
>29が書いたんじゃなくて、他人が書いたブツを押し付けられたんだろ?

>48 :46 :04/10/20 07:31:55
>>47
>だから、「>>29と給料とさほど(ry」とは書いてないだろうよ。
>もっと、適切でタイプするのがめんどくさくない言い回しがあったら教えてくれ。

だめだよ、>>46の書き方はどちらでも取れるでしょ? だから>>47
につっっこまれた。でも>>46は自分の意図が>>47に伝わっていない
のは自分の書き方が悪い、ってことに気づかないんだ。

教えてあげよう、

>>29で紹介されたようなプログラムを書く人」って書けばよかっ
たんだよ。給料がさほど変わらないのも頷けるぞ。少なくとも仕様
書を書けないんじゃない? (−−−気づいてないか。)


71 :仕様書無しさん:04/10/22 12:25:51
>>70
> >>29のようなものを書く人
>>29(に書いてある)ようなものを書く人

72 :仕様書無しさん:04/10/22 12:28:55
>>70
めんどいじゃん・・・。まぁ、あとからもっとめんどくさくなったわけだがw。

73 :仕様書無しさん:04/10/22 19:22:46
給料はプログラムの質で決まるんじゃない!
動いて、納期守れりゃいいのさ・・・・

74 :仕様書無しさん:04/10/22 20:48:27
>73
そのとおり!
プログラムの質がほとんど問われないのは、何でだろ〜(古!

75 :仕様書無しさん:04/10/22 21:10:29
>74
見えないし見ても分からないから。

……同じような原理で、「耐震補強工事」と称して無意味な工事でぼったくる
悪徳工務店のことをこないだニュースでやっとったなー

76 :仕様書無しさん:04/10/22 21:35:07
第3者的な立場から、他社が作成した
システムの評価(監査)をする商売って
成り立たないかな?

別に深く調べなくても、
見る目を持った人間が見れば、
駄目なものは直ぐに駄目だって分かるし。


77 :仕様書無しさん:04/10/22 21:37:26
金猿じゃね?

78 :仕様書無しさん:04/10/22 21:50:04
コンサルというよりは、納品前にそのブツを覗き見して
ネチネチ他社の仕事に文句をつける仕事。
そのシステムを作った会社とは完全に無関係の立場で
あることが重要。

その会社に余程の信用がなければ意味が無い上に、
業界から嫌われる仕事だね。

でも、業界トップの企業あたりが副業でやってくれれば、
それなりの価値があると思うんだけどな。

その仕事は、顧客・業界双方に対してメリットがあると思う。


79 :仕様書無しさん:04/10/22 21:51:16
>>76
やってる会社知っているけど
売り上げがあったという話を聞かないw


80 :仕様書無しさん:04/10/22 21:56:19
顧客側担当者の顔をもつぶしかねないわけだし、
誰も求めてないサービスじゃね?

81 :仕様書無しさん:04/10/22 21:59:13
>>63
ソースさらしてもいいんじゃないの?
http://www.au.kddi.com/news/au_top/information/au_info_20041021140755.html

82 :仕様書無しさん:04/10/22 21:59:24
>>78
下手な会社がやっても全く意味がないね。
その会社に余程の信用が無ければ。

よくシステムは建築に喩えられるけど、
建築には「建築基準法」という法律があるのに対して、
システムにはそのような法律が無い。まさに野放し状態。

ならば、法律で規制するか、またはそのようなビジネスを
一般に認知させて、「ウチのシステムは〜〜社の審査に
合格しています」というような話が当たり前のように
なるかの、どちらかしかないだろう。


83 :仕様書無しさん:04/10/22 22:16:39
>>82
システムの信頼性、健全性などを量る明確な指標が作りにくいからだと思う。
あるシステムに問題がないことを示すときには、結局テスト件数とテストで出た
バグ分析による統計的な分析くらいしか数値化できるものがないと思うのだが。

84 :仕様書無しさん:04/10/22 22:25:19
という辺りでCMMが顔を出すんだろうなぁ……

85 :仕様書無しさん:04/10/22 22:39:18
客にとっては、そのシステムを作った会社に対する評価よりも、
個々のシステムに対する評価の方が重要だと思う。

どんな糞会社でも、たまには良いものを作ることもあるし、
またその逆だって十分ありうる。


86 :仕様書無しさん:04/10/23 00:44:54
>よくシステムは建築に喩えられるけど、
>建築には「建築基準法」という法律があるのに対して、
>システムにはそのような法律が無い。まさに野放し状態。

ああ、確かにw

客 :2階建て住宅の設計図あるからコレ使って10階建てのビル建ててくれ。
会社:建築やったことあるんで大丈夫だと思います。任せてください。

な〜んて会話に置き換えられる仕事ゴロゴロしてるもんねぇ・・・

87 :仕様書無しさん:04/10/23 01:43:57
今やってる仕事
平屋建ての一軒家に地下室と
3階を作ってくれ、ただし2回は作るな

88 :仕様書無しさん:04/10/23 04:03:10
>>87
1回で成功させろってのか。難儀だな。

89 :仕様書無しさん:04/10/23 05:01:15
作るだけならなんとかなるかもしれんぞ。
耐久年数5分とかになるかもしれんが。

90 :仕様書無しさん:04/10/23 05:24:18
COBOLER ≠ 宮大工

勘違いしないように。


91 :仕様書無しさん:04/10/23 07:02:44
Ruby!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

92 :仕様書無しさん:04/10/23 09:58:12
Rubyだからクラス設計どうなってるんだろ?
と思ってソース眺めたら、中身はまるっきりCだったとき。

メモリの動的確保と正規表現対応で、コンパイル不要なCとして考えているようだった。


93 :仕様書無しさん:04/10/23 13:36:11
>92
その人の場合多分JavaでもC#でもCみたいなソースになると思う。

94 :Ruby!!!!!!!!!!!!!!!!!!!:04/10/23 15:23:24
vb(vb、vba、vbs)ばっか使ってる会社勤務です。
週報にrubyで〜するスクリプト作った
って書いてみた。
来週が楽しみww
民度が低い連中ばかりだからどうなることやらwwww


95 :仕様書無しさん:04/10/23 15:24:06
ごめん、今「Rubyってちょっと便利そうかも」って思ってしまった・・・

96 :仕様書無しさん:04/10/23 15:29:38
>95
いや使い方次第ではなかなか便利なんだが。
人によっては気持ち悪いかもしらんが、数値オブジェクトが自動的に
でっかくなっていってくれるのは助かる場面も多い(漏れの場合)。
Rubyに限らずちまっこい作業の自動化にはスクリプト言語がええね。
PerlもPythonもRubyも、ついでにJScriptもマンセー
# でもVBScriptはかんべんなorz

97 :仕様書無しさん:04/10/23 15:59:57
>>94
民度、民度って馬鹿じゃないの?
所詮お前も同じ職場でうごめいてるカスだよ
Ruby気違いってほんと嫌な奴多いよね

98 :仕様書無しさん:04/10/23 16:04:08
94は基地外のふりしてRubyを誉める、誉め殺しでしょ。
素だったら知能低すぎるよ。

99 :仕様書無しさん:04/10/23 16:05:37
ここでいうところの「民度」って何?
いわゆる民度と違うように思うが。

100 :仕様書無しさん:04/10/23 16:37:10
94=97

101 :仕様書無しさん:04/10/23 16:56:49
>>99 錬度のことだろう

102 :Ruby >>>>>>>>>>>> C++:04/10/23 17:26:24
http://web.archive.org/web/20000302001334/http://www.ruby-lang.org/ja/compar.html
>C++
>いろいろと有名なオブジェクト指向言語であるC++とRubyを比較すると:
>
>
>C++なぞ問題外.^^;;;


103 :仕様書無しさん:04/10/23 19:17:32
matzはC++大嫌いらしいからねぇ。
まーしょうがないでしょ。

104 :仕様書無しさん:04/10/23 19:38:13
ネタをネタだと見抜けないやつは(以下略

だが頭のおかしいやつに利用されちゃってるってことは、
口を慎んだ方がよかったかもなあ。

普通のプログラマだったらあれを読んで笑うところなんだけど。
当時主としてC++をつかってたおれでも笑ったもんw

105 :仕様書無しさん:04/10/23 19:44:13
> 「他言語との比較」ページをあまりにも真面目にとらえる人が多いので(かつ、
> そういう人からの文句に疲れたので)、このページへのリンクを削除します。
> 面白いと思ったのになあ。(2001-07-10)
http://web.archive.org/web/20020206034747/http://www.ruby-lang.org/ja/

取りあえず言いたいこと言って、文句が付けば「ジョークだよ。面白かったろ?」ですか。
こりゃご立派な態度ですね。

106 :仕様書無しさん:04/10/23 20:08:48
↑池沼perler必死だなwwwwwwwwwwwww
perlerは死ね。誰も止めないから

107 :仕様書無しさん:04/10/23 20:09:28
matzはジョークも言えないのか…
有名になんざなるもんじゃないな

108 :仕様書無しさん:04/10/23 20:27:19
ばかばっかwwwwwwwwwwwww

109 :仕様書無しさん:04/10/23 20:29:11
そういう話じゃないと思うんだが。
どうでもいいや。

110 :仕様書無しさん:04/10/23 20:51:12
HSP 「21世紀にこんな言語はないだろう」 by matz

Perl 「Perlユーザは臭い」 by るびきち

Java 「Javaなんてうんこ」 by kitaj

111 :仕様書無しさん:04/10/23 20:56:52
話題に上ると荒れる辺りは韓国ネタみたいだな。

112 :仕様書無しさん:04/10/23 21:41:35
人種ジョークみたいなもんか

船が沈み、救命ボートは定員オーバー。
誰かが飛び降りなければならないなか、船員はそれぞれの外国人乗客に言った。
アメリカ人に「自己犠牲の精神を期待して」
イギリス人に「あなたを紳士と見込んで」
ドイツ人に「船長の命令です」
日本人に「みんな飛び降りますよ」

113 :仕様書無しさん:04/10/23 21:49:09
>112 にはいろいろバリエーションがあって、

スコットランド人には「財布を海に落とされませんでしたか?」
ロシア人には「さっきウォッカが流れて行きましたよ」
フランス人には「美女が飛び込んでいましたよ」
北朝鮮人には「飛び込めば亡命出来ますよ」
韓国人には「日本人はもう飛び込みましたよ」
大阪人には「阪神が優勝しましたよ」

114 :仕様書無しさん:04/10/23 21:55:20
>>113
あはは、いいなコレ。

115 :仕様書無しさん:04/10/23 22:07:57
大阪は独立国なのか?

初めて知ったが、中国語では各種地方行政機関も「政府」って言うんだな。
大阪日本橋で「 浪 速 政 府 」と大きく電光掲示板に表示されているのを見た時は驚いた。
しばらくぽかーんとしたね。
後に流れる文字で日本語じゃないと分かるまで立ち止まってた。
なんだ浪速区役所のことかい。驚かせるなよ。

116 :仕様書無しさん:04/10/23 22:24:54
>115
浪速政府いいなw
ついでに日本橋はヲタ特区……と言うと非オタな人にボコられそうなので
電機製品とその他特区にしてもらおう。

117 :仕様書無しさん:04/10/23 23:16:01
日本橋ってアキバ化は起きてないの?

118 :仕様書無しさん:04/10/24 00:39:28
アキバ化というのが具体的にどんなんかいまいちわからんのだが
オタ系の店進出はめざましい。
と言ってもとらが無謀にも南北に一店舗ずつ出して結局一つに統合とか
売り場面積を確保できなかったげっちゅ屋がそうそうに店じまいしたり
それなりに戦国絵巻?

119 :仕様書無しさん:04/10/24 00:44:08
まあなんだ、フィギュア屋とか同人屋とかその辺のこと。
オタ系がそれにあたるのかな。

ハードなジャンク屋とか駆逐されていっているんでしょうか。

120 :仕様書無しさん:04/10/24 00:57:01
日本橋の場合実はジャンク屋は表通りにはあまりない。
で、最近進出してきた店は、表通りの潰れた店に入ってきたりしてるから(まんだらけや信長書店w)
そんなでもないねん。つーか漏れジャンク屋あんま知らんわorz

121 :仕様書無しさん:04/10/24 20:05:15
int i;
というグローバル変数見た時は怒り狂った。
どこの誰が作ったソースかは不明だ。


122 :仕様書無しさん:04/10/24 20:28:33
>>121
ループのカウンタ変数にも意味のある名前をつけてループの意味を明確にしよう
と、言いたかったに違いない

123 :仕様書無しさん:04/10/24 21:35:47
まぁぶっちゃけループは下手に名前付けるより
i が一番分かりやすいんだけどね。

124 :仕様書無しさん:04/10/24 21:54:59
ダメなC屋はJavaとかでもグローバル変数クラス作るな。
あげく、アプレットでそれやって、二重起動で処理が混ざって問題になる。


125 :仕様書無しさん:04/10/24 21:55:43
>>119
ジャンク屋は駆逐されてるね。

電気関連のハードを扱ってる店は表通りにもまだあるけど
だんだん減ってるね
パソ系ジャンクを置いてるのは中古ハードを扱ってる
有名どころの店くらいかな。
あとは五階百貨店のあたりとか。

表通りは120の通り電気関連以外の店が
増えてきてたりする。

てかパーツ屋もオタ系の店もザウルス周辺に集中してきてる
気がするのは気のせいだろうか?


126 :仕様書無しさん:04/10/24 22:11:50
愛は共有すべき。

127 :仕様書無しさん:04/10/24 22:18:17
>>123

>>121が言いたいのはソコじゃなくって「ループカウンタをグローバルに定義すな」かと。


128 :仕様書無しさん:04/10/24 22:25:25
>>125
なるほどね。どこもジャンク屋はやっていけなくなってるみたいね。

なんかDQNが大量に流れ込んで来て、ジャンク屋に動作保証を求めたり、
不良品と言い張って返品をしつこく迫ったりとかそういうのでやっていけなくなってるみたいね。

129 :仕様書無しさん:04/10/25 07:16:57
>>127
何でダメなんだ?

130 :仕様書無しさん:04/10/25 07:23:16
int i;

void func() {
  for ( i=0; i<5 ; i++ ) {
    …
  }
}

void main( void )
{
  for ( i=0 ; i<10 ; i++ ) {
    func();
  }
}

131 :仕様書無しさん:04/10/25 09:29:49
static変数を知らない奴が埋め込むんかね

132 :仕様書無しさん:04/10/25 09:39:41
このスレにはグローバルループカウンタ肯定派が住み着いているのか?

133 :仕様書無しさん:04/10/25 09:45:44
>132
a. あまりにネタ臭いので相手にする気になれない
b. あまりによく見かけるのでネタにする気になれない

134 :仕様書無しさん:04/10/25 10:26:16
>>117
電化製品やパソコンは梅田(大阪駅周辺)にヨドバシカメラが出来てから、
そこでほぼ事足りるからなあ。
オタ化するしか生き延びる手はないだろう。

135 :仕様書無しさん:04/10/25 13:08:38
>112
アメリカ人に自己犠牲の精神なんかあるのか?

136 :仕様書無しさん:04/10/25 13:31:34
>>135
英雄願望とか強いから。
それに、開拓者精神というか自己を守るためのプライドは兎に角高い。

137 :仕様書無しさん:04/10/25 13:57:07
>>135
漏れの聞いたパターンでは、
アメリカ人には「ヒーローになれますよ。」
と言うんだったとオモタ

138 :仕様書無しさん:04/10/25 14:47:50
バリエーションはいろいろあるけど、
アメリカ人「民主主義のために飛び込むべきです」
フランス人「自由のために以下略」
イギリス人「女王陛下のために以下略」
日本人「みんなが以下略」(ここはほぼ100%共通)


139 :仕様書無しさん:04/10/25 19:24:32
アメリカ人だと、ヒーローになるとか保険がかかってるとかあとで賠償請求できるとかそういうのが多いかな。

140 :仕様書無しさん:04/10/26 03:34:30
>>127
>>129
>>130

・・・・ゴメ・・・ワロタ・・・・・・

141 :仕様書無しさん:04/10/26 09:02:39
類似ネタで

ドイツ人は考えてから走る
イタリア人は走ってから考える
イギリス人は歩きながら考える

ってのもあるが、漏れの人生は

走ってから、一旦立ち止まって考えて、また走り出す

142 :仕様書無しさん:04/10/26 09:10:57
>141
日本人は教えられたとおりに走る

143 :仕様書無しさん:04/10/26 09:42:41
>>142
違う違う。

日本人は周囲と同じように走る

144 :仕様書無しさん:04/10/26 17:39:59
そして、自分を追い抜かそうとするものは、引きずり倒すと。

145 :仕様書無しさん:04/10/26 18:06:46
韓国人や中国人が追加されたバージョンもどっかで見たな

146 :仕様書無しさん:04/10/26 18:09:55
韓国人は日本人を妨害しながら走りそうだな

147 :29:04/10/27 00:48:32
おひさ。

結論: orz

漏れに英語力がないことが原因か
Eclipseのプラグインであるかもと都合の良い妄想をしておく

148 :仕様書無しさん:04/10/27 01:15:25
>>147
日本語解説ページとかもあると思うんだが・・・。
ちなみにdoxygenはプラグインではない。他のはしらん。

簡単なサンプルソース書いて試してみた?

149 :仕様書無しさん:04/10/27 19:17:56
複数項目を選択可能なリストボックスがあって、
これに対する「全項目選択」「全項目選択解除」のスイッチを
チェックボックスで実装している。

ボタンにしたほうがよくないか…

150 :仕様書無しさん:04/10/27 22:44:52
中国人にWEBページを作らせてみた。
けっこう日本語がよくできるので、ちょっと期待していた。

半角の「角」の字の真ん中の縦線が下まで延びていた。







確かに中国語フォントにもひらがなカタカナはあるけど、勝手にエンコードを
中国語決め打ちにしちゃだめだよ、と教えてあげた。

明日もきっと晴れだ。

151 :仕様書無しさん:04/10/28 02:10:02
>>149
俺なら右クリックで選択かなぁ・・・。上司ならボタンつけろとかいうだろうけど。

>>150
それくらいで辞めようとおもうんか・・・。

152 :仕様書無しさん:04/10/28 23:06:06
右クリックは操作覚えるのがめんどい
ボタンなら目に見えるから覚えなくてもいいから楽ちん

153 :仕様書無しさん:04/10/29 00:58:52
客が自社開発しようとして途中で頓挫したのを引き受けてしまった。
言語はVBだけど変数名がaとかbとか名前で役目の分からないモノばっかしだし、
定義されても使われてない変数や、逆に定義されないで唐突に使われてる変数もあるし、
1関数内で1つの変数を前半ではループカウンタに、後半では金額の入れ物にと
無意味な使い回ししてるし、
インデントがずれてて入れ子構造が激しく分かりにくいし。

全部作り直した方がマシな気がする。

154 :仕様書無しさん:04/10/29 11:35:20
>>153
作りかけのを基にして、要求定義からはじめて作り直した方が圧倒的に楽で早い。
社内でこわれかけのを引き継ぐことが多いんだけど、最近はそうやってる。

155 :仕様書無しさん:04/10/29 18:15:31
プロトタイプにはなるかもしれませんね。

156 :仕様書無しさん:04/10/29 18:25:36
>>153
154に禿しく同意する。
藻前が今持っているそれは、たちの悪い時限爆弾だ。
いつか必ず、それも最悪のタイミングで爆発する。
藻前も、分かってるんだろ?

・・・時間がないなら、しょうがないけど。幸運を祈る。

157 :仕様書無しさん:04/10/29 22:20:47
VBのプログラムで客からクレームが来て、マスタメンテで登録したはずの
情報がないといわれた。
仕様書を見ようと思ったら、納入後、その場しのぎの対応をいろんな奴が
繰り返しているので、ソースを読むしかないといわれた。

ソースを見ても、特に変わった様子はない。
このテーブルから普通に取ってきて・・・アレ?名前が微妙に違う気が・・・。
SQLplusでテーブル一覧をみると

 マスタテーブルが二つになっていた。




158 :仕様書無しさん:04/10/29 23:41:32
>>157
( ゚д゚) マジっすか

159 :仕様書無しさん:04/10/30 02:00:27
>157のところに怒鳴り込む客に乾杯・・・合掌

160 :仕様書無しさん:04/10/30 13:11:27

最近、簡単な詳細設計(言語はC)を任せられるようになったんだけど、
関数の引数を他の関数と合わせるために、使ってない引数まで
ムリヤリ入れさせられたり、さらに悪いことに、使ってないものまで
(IN)にしておかないといけなかったりしてまつ。

わざと保守性が落ちるような規則にしか思えないんだけど、こういう
会社ってよくあるんですかね? 協力会社に出向中なんで、相手会社
の好みみたいなんだけど。

関数名も、はじめにコンポーネントのIDを入れさせられてて、
やたら長くなってしまって、さらに幅80行規制も相まって、
コーディングも汚くなりがちです。

俺はグローバル変数は極力使わないけど、他の人は使いまくりの
人も多い。C言語の良さを殺してしまっているように見えるんだが。



161 :仕様書無しさん:04/10/30 13:51:07
>>160
つまるところ、どのような理不尽な要求にも応えるのがプロというものだ。
自力で変える政治力が無いなら、従うしかないな。

162 :仕様書無しさん:04/10/30 15:32:49
>>160
設計〜製造までに決められたあらゆるきれい事を全て織り込んだ結果
塵が積もってゴミの山になったそんなソースですか・・・orz

163 :仕様書無しさん:04/10/30 15:51:07
>>160
>最近、簡単な詳細設計(言語はC)を任せられるようになったんだけど、
>関数の引数を他の関数と合わせるために、使ってない引数まで
>ムリヤリ入れさせられたり、さらに悪いことに、使ってないものまで
>(IN)にしておかないといけなかったりしてまつ。

複数の機能をもつ関数を提供する場合はそれもあり得る。
あと、規模がでかいPJの場合に将来的な仕様変更を考慮しているのかもしれない。
(昔いたPJはそんなことやってた)

>関数名も、はじめにコンポーネントのIDを入れさせられてて、

環境の保守をやっている側としては、これは関数名のバッティングや、
PGの勘違いを回避するために必要だと思うんだけど。

164 :仕様書無しさん:04/10/30 16:11:33
>>163
外部に出す関数名にIDを入れるのはまだ分かるんだけど、
そこから呼び出すソース内だけの関数まで、そういう規則に
なってんです。staticを使えばいいのにさ。

たしかに参加者が100名超えてるから大きなPJなんだが、
上下(別の会社)の意思疎通が悪すぎて、いらん苦労を
強いられている感じ。



165 :仕様書無しさん:04/10/30 17:07:26
>>164
恥ずかしいから、もうやめれ

166 :仕様書無しさん:04/10/30 17:09:56
つか、OOPL使えよ

167 :仕様書無しさん:04/10/30 19:24:57
>>166
160みたいな「DQN大集合」のプロジェクトでそんなことしたら・・・
わかるよな?

168 :仕様書無しさん:04/10/30 19:26:58
「これはおかしいんじゃないか」と疑問に感じたら
先輩なり同僚に聞いてみるべきだ。で、その答えをまたじっくり考える。
そういう積み重ねでセンスを磨くんだよ。
辞めちゃったらそこで試合終了だよ

169 :仕様書無しさん:04/10/30 19:46:42
>>168
俺がこれでいいっていたらこれでいいんだよ!!!

170 :仕様書無しさん:04/10/30 19:56:24
ま、ルールなんて中身より、統一されてるかが重要だからな。

171 :仕様書無しさん:04/10/30 20:45:40
>>170みたいなのがいる限り、糞ソースは量産され続けるんだろうな


172 :仕様書無しさん:04/10/30 21:57:17
>>168
そもそも試合に参加する必要があるのかを考えるべきだ。

173 :仕様書無しさん:04/10/30 23:52:08
>>170
複数の会社の違うチームにコーディング規約はおろか、
命名規約も作らずに
「それぞれでやりやすいようにやってください」
とやらかした発注会社があるよ。

おかげでバージョンの振り方からファイル名、関数名はおろか
仕様書のフォーマットまで全てバラバラという、
保守担当者が発狂しそうな状態になっている。

それを考えると、>170の
>ま、ルールなんて中身より、統一されてるかが重要だからな。
というのも、満更外れてないと思う。

174 :仕様書無しさん:04/10/31 00:19:55
作業者のレベルが合ってないと統一するのは難しいよね。
仕様書やコメントが無くても、ソースを見ればある程度何してるかわかるけど、
それはみんな似たような考え方してるからで、レベルの低いやつとか発想が
変なやつが作ったものは全然わからない。

そういう摩擦からルールを作ろうという流れになるけど、権限のあるやつが
アホだったりすると…

まあ、ルールがあっても、「明らかに変な作りだけど、何も思わなかったの?」
という質問に「そういうルールだったから(前からそうなってたから)」って
返されるだけなんだけどね。

175 :仕様書無しさん:04/11/05 21:13:56
//この外注に二度と頼むもんかと思ったソースコード
String keyWord = "フリーキーワード"
int first = 0;
int last = 0;
keyWord = keyWord.trim();
List al = new ArrayList();

for (int i=1; i<=keyWord.length(); i++) {
char temp = keyWord.charAt(i-1);
if ( isSpace(temp) || i==keyWord.length()) {
last = i;
String cutKey = keyWord.substring(first,last);
cutKey = cutKey.trim();
first = last;
if ( !cutKey.equals("") ) {
al.add(cutKey);
}
}
}

String[] keys = null;
int index = al.size();
boolean isAry;
if (index == 0) {
isAry = false;
} else {
isAry = true;
keys = new String[al.size()];
for (int i=0; i<index; i++) {
keys[i] = (String)al.get(i);
}
}

176 :仕様書無しさん:04/11/05 21:15:31
//これだけ書いてやってるのは、スペースで区切って文字列配列に詰めるだけ。
//------ これでいいじゃん ------
String keyWord = "フリーキーワード"
String [] keys = keyWord.replace(' ', ' ').trim().split("\\s+");

if(keys.length == 1 && keys[0].length == 0){
keys = null;
//isAryはKeyがnullならfalseと見なさせる。
}

//何のためのJava1.4なのかと小一時間以下略

177 :仕様書無しさん:04/11/05 21:44:17
>>175 むしろ後半がすげえな。

178 :仕様書無しさん:04/11/05 21:52:06
>>177
そうなんだよな。
後半なんかそれこそ

String[] keys = null;
if(al.size() != 0) {
keys = (String[])al.toArray(new String[0]);
}
で終わりなのにさ

179 :仕様書無しさん:04/11/06 00:52:34
al.toArray(key = new String[al.size()]); だろ。

180 :仕様書無しさん:04/11/06 01:22:34
>>179
いや、0でも認識する

181 :仕様書無しさん:04/11/06 02:02:06
足りなかったら、内部で割り当てるんじゃなかったっけ?

182 :仕様書無しさん:04/11/06 02:50:32
・足りなきゃ別途作ったのが使われる。
・余った部分はnullになる。
ともにAPIドキュメントに明示されてる。


183 :仕様書無しさん:04/11/06 04:03:45
>180
もちろんわかってるが、長さが足りないといわれて捨てられる配列がかわいそうじゃないか。

184 :仕様書無しさん:04/11/06 07:01:37
>>183
優しい奴だな・・・

185 :仕様書無しさん:04/11/06 12:35:40
最近参加したバグが多いと評判の会計ソフトのプロジェクト。
直近の6ヶ月と12ヶ月の金額の合計を出す処理があるんだけど、
なぜか1か月分だけ個別で継ぎ足してあんのね。
処理を追っていったら、合計を出すループの判定処理で
「≦」にすべきところを「<」にしてたから1か月分金額が
足されてなくて、それでデバッグでループの判定を直さずに、
安直に1か月分足す処理を泥縄でくっつけたらしい。

結果としては正しい数字は出てくるんだけど、
他にもフローチャートに無い処理があったりして、激しく怪しい orz

186 :r:04/11/06 13:05:22
>>185
そもそもフローチャートを準備してる時点で
ちょっと疑うべきだな。

187 :仕様書無しさん:04/11/06 17:06:38
>186
UML使ってます、と言ってもアクティビティー図だけだったりなorz

188 :仕様書無しさん:04/11/06 19:59:43
>185
「合計値をDBに保存しておくようにしました!」
「SUM()したら2倍になりました!」

を思い出した。

189 :仕様書無しさん:04/11/06 20:38:46
そしてコードのあちこちに「SUM()/2」がばらまかれる

190 :仕様書無しさん:04/11/06 22:10:28
>>188>>189
禿藁

191 :仕様書無しさん:04/11/06 22:29:35
>188
SUMかっこ こっか、か。
()がOにみえて
「相撲したら2倍になりました!」
に見えた。

192 :仕様書無しさん:04/11/07 00:52:15
>>191
こっかワロタ

193 :仕様書無しさん:04/11/07 03:17:41
>>192
これでも読んどけ、ガキ
http://www.cjn.or.jp/docs/dic/unix-term-dic.html

194 :仕様書無しさん:04/11/07 03:22:33
>>193
やだよ、ウニヲタ

195 :仕様書無しさん:04/11/07 03:32:09
べつにunix方面じゃなくても使われてるんだけどな。
ま、方言みたいなもんだからしらなくてもおかしくはないと思う。
でもプログラミングの雑談を扱った本ならまず取り上げる定番ネタなんで、
しらん方がどうかしてると思うけど。

196 :仕様書無しさん:04/11/07 05:09:15
>>195
>プログラミングの雑談を扱った本

ジャンルそのものがマイナーすぎ。
俺はこっかで分かるけどさ、オタの常識は世間の非常識と知れよ。
しらん方がどうかしてるってのはキチガイじみた感想だと思うぞ。

197 :仕様書無しさん:04/11/07 05:48:16

こいつまた何かエロイこと想像してるな・・・!

198 :仕様書無しさん:04/11/07 06:38:37
>>196
プログラマ板でそのジャンル出してマイナーとか言われても困るんですけど

199 :仕様書無しさん:04/11/07 08:52:17
まぁ普通のプログラマなら、まずアンパサンドとアスタリスクに衝撃を受け、
'^'と'|'をどう読むかに興味を持ち、「ポチ」「コッカ」と聞いたならそういう読み方も
あるのかと受け止める、そうありたいね。
「こいつダセー」とかいう、好奇心の無い奴はプログラマに向いてないよ。

200 :仕様書無しさん:04/11/07 09:04:20
やけにレベルの低い好奇心だな

201 :仕様書無しさん:04/11/07 10:40:28
なんかどうでもいい話してるな

202 :仕様書無しさん:04/11/07 11:05:18
誰が「「こいつダセー」なんて書いたんだろう……

203 :仕様書無しさん:04/11/07 11:12:07
>>198
プログラミングの本ならまだしも、その雑談の本ってあなた。

204 :仕様書無しさん:04/11/07 18:18:58
256倍本のことかぁぁぁぁ!

205 :仕様書無しさん:04/11/07 21:41:03
たしかに256は雑談だったなー(面白かったが)

206 :仕様書無しさん:04/11/09 11:24:46
256本を懐かしむスレはここですか?
おまえら、じじくせぇよ。

207 :仕様書無しさん:04/11/09 22:11:23
しょうがねぇだろ、じじいなんだから

208 :仕様書無しさん:04/11/09 23:22:41
AWKとPerl DBIとRuby邪道、3冊の256を持ってる漏れは爺さまですか?

209 :仕様書無しさん:04/11/09 23:42:18
>>208
様々な方面の 256 倍本を購入して、
最長老を目指してください。

210 :仕様書無しさん:04/11/10 10:37:43
256本なんか買う奴はバカ。

211 :仕様書無しさん:04/11/10 17:05:17
もう終わった話題をわざわざあおるやつはもっとバカ

212 :仕様書無しさん:04/11/11 01:25:38
'^' は「キャップ」'|' は「パイプ」だとずっと思いこんでいたわけだが。

213 :仕様書無しさん:04/11/11 09:14:56
>>212
やま、たてぼう

なんかおれ頭悪そう・・・ orz

214 :仕様書無しさん:04/11/11 09:26:33
>>213
これ(指で山形)、これ(指で縦線)・・・もっと馬鹿っぽいな。


215 :仕様書無しさん:04/11/12 01:49:16
^ びーちく
| まんすじ

216 :仕様書無しさん:04/11/12 08:50:47
入社して研修も終わり、それぞれ各事業所に配属され、
部署での新入社員歓迎会なども終わり、ぼちぼち”仕事”と呼べる作業が始まった時・・・

ベテラン組み?がリリースしたというとある会社のシステムのバグ修正という仕事がまわってきた。
特に早期に解決する必要は無く、1,2ヶ月でじっくりとやって構わないというもの。

最初にソースを眺めた感想・・・ソースが汚い・・・インデントなんてめちゃくちゃ・・・
此処までは、よしとしよう。

えっと、『SELECT * FROM ・・・』でこのテーブルから全部のレコードを取得して・・・
えっ!! レコードセットをEOFまでループでまわして、その中で1ずつカウントアップ?
もしかしてレコード数の取得!!

もう少しで1年になるので、1年経ったら転職しようと思ってます。


217 :仕様書無しさん:04/11/12 11:15:50
>>216
ごめん

218 :半透明アヒル ◆FDe1.0QRac :04/11/12 11:27:33
>>216
今すぐがいいと思います。

速攻、素早く、迅速。

219 :仕様書無しさん:04/11/12 20:40:18
>>216
そんなの普通だから、転職先でもきっとそんなコードがあるだろうよ。
たぶん転職では問題の解決にならない。。

220 :仕様書無しさん:04/11/12 21:20:15
>>219
> そんなの普通だから、
> そんなの普通だから、
> そんなの普通だから、

………私の居る会社は凄く恵まれてるんだなあと思った。

221 :仕様書無しさん:04/11/12 21:21:13
きっとCOUNT()が使えないDBMSなんだよ。

222 :仕様書無しさん:04/11/12 21:25:17
>221
そんなのあるんですか?

223 :仕様書無しさん:04/11/12 21:34:22
>>221
だったら
select sum(1) from テーブル
とかすればいいと思う。

224 :仕様書無しさん:04/11/12 21:55:36
>>216
そのプログラムの仕様書にも、
「特に早期に(SUMを)解決する必要は無く、1,2ヶ月でじっくりとやって構わない」
って書いてあるに違いない。

225 :仕様書無しさん:04/11/12 22:38:17
>>224
しかも、性能要件もなく結果が出ればいいとあるに、ちまいない。

226 :仕様書無しさん:04/11/12 23:07:34
>225
そして、末端のユーザーは「遅くて使い物になんねぇよヽ(`Д´)ノウワァァン」
と嘆いている。間違いナイ。

227 :仕様書無しさん:04/11/13 00:35:05
>>216
さんざん言われることだけど、COBOLerにはそういうの多いよ。
そうやったほうが速いRDBMSが昔はあったって噂だから。

228 :仕様書無しさん:04/11/13 02:19:43
あれだろ?行数で見積もったんだろ?

229 :仕様書無しさん:04/11/13 04:27:59
>>213

いかにもこぼらぁな人が書きそうなソース・・・・・・

似たようなのでSELECTしてきて1件ずつ条件に合うか調べて
条件に一致したらDELETE文実行、なんて冗談みたいなものとかorz

230 :229:04/11/13 04:29:38
間違ったスマソ

レス先>>216ですた。

231 :仕様書無しさん:04/11/14 20:38:13
> 似たようなのでSELECTしてきて1件ずつ条件に合うか調べて
> 条件に一致したらDELETE文実行、なんて冗談みたいなものとかorz

テーブルAにあるレコードの中から条件に合うものをDELETE、但し
その条件一致判定はテーブルBを見なければ不可能、なんて場合だと
実際にそうする必要があるんじゃない?
DELETE文だとJOINって出来ないでしょ。

232 :仕様書無しさん:04/11/14 20:46:14
サブクエリ使えばよいのでわ?

233 :仕様書無しさん:04/11/14 21:20:35
>>231-232
自分もSQLはよく分からんが、こんな感じのSQLをコードで書いてるってことか?

delete from A where A.flg = '0' and A.userid in
(select B.userid from B where B.userid = A.userid and B.flg = '1');


234 :仕様書無しさん:04/11/14 21:29:20
おまいらオラクルのシルバーくらい取っといてください

235 :仕様書無しさん:04/11/14 22:05:39
>234
替わりにテクニカルエンジニア(データベース)取ってみました。
全然役に立ってない上にもう半分以上忘れたけどなorz

236 :仕様書無しさん:04/11/14 22:45:32
ボラクルの資格は金がかかり杉
会社も金出してくれねーし

別に取る気はないんだけどさ

237 :仕様書無しさん:04/11/15 09:50:47
つうかさ、プログラマだけにSQL書かしたらいかんよ。
1人でやってる仕事じゃない限りは、どんな小さくてもレビュー、検証必須。
(まあ、馬鹿2人って言う場合はしょうがないけど)

テーブル設計者がまずラフでいいからこういうSQLって伝えて、
それを書かせて、実行計画を出力させてレビュー。
急がば回れで、最終的にそれが一番仕事が早い。


238 :仕様書無しさん:04/11/15 11:33:15
…取り敢えず >231 は超がんばれ。

239 :231:04/11/15 22:36:52
orz サブクエリか。

MySQLしか触ってないからなあ…

240 :仕様書無しさん:04/11/16 00:15:17
>>231
サブクエリが使えないMySQLでも
テーブルを結合したテンポラリテーブルを作って云々ってのは常識だろ?

241 :仕様書無しさん:04/11/16 00:19:23
>>240
いやあ、まともな連中の間では常識だろうが、
一般的な職業プログラマの常識ではなかろう。

242 :仕様書無しさん:04/11/16 09:33:36
最近のMySQLはサブクエリ使えるよね。
前まではその1点だけでPostgreSQLオンリーだった。


243 :r:04/11/16 21:08:49
splitマニア
/** ファイルから全文を読み込み、データを取り出してxxxに渡す。*/
void foo() {
    StringBuffer sb = /* ファイルから読み込む */
    StringBuffer sb2 = new StringBuffer();
    String data = var( sb, sb2 );
    if( sb2.indexOf(":") == -1 ) {
        xxx( data, sb2 );
    } else {
        xxx( data, sb2.split(":")[0], sb2.split(":")[1] );
    }
}
String var( StringBuffer sb, StringBuffer sb2 ) {
    String s = sb.toString();
    if( s.split("n")[0].split(" ").length == 2
        || s.split("n")[0].split(" ").length == 3 ) {
    if( ! s.split("n").split(" ")[0].eqauls("Data") ) {
        return null;
        }
        sb2.append( s.split("n")[0].split(" ")[1] );
        if( s.split("n")[0].split(" ").length == 3 ) {
            sb2.append( ":" + s.split("n")[0].split(" ")[2] );
        }
    }
    sb.delete( 0, s.indexOf("n") + 1 );
    return sb.toSting();
}

244 :仕様書無しさん:04/11/18 12:05:46
プログラムと言うかDB設計の話

80ほどのテーブル、1つのテーブルに300ほどのフィールドと言うDB設計を見たときには・・・
「私が正規化しましょうか?」の問いかけに「失礼な事言うな、既に正規化してあるよ!」とのDB設計者のご回答
8つのテーブルに氏名とか同じ項目があったりするんですが?
というか、使わないフィールドと使わないテーブルを消したら半分ぐらいのボリュームになるのですが?

こんなプログラム組んだら、俺が出来ない奴と思われるじゃないか・・・_| ̄|○

245 :仕様書無しさん:04/11/18 13:09:52
>>244
いや、たぶんちゃんと正規化してあったんじゃないか?
重複して持つのにもちゃんと理由はあるんだよ。
300フィールドがあるのもおかしなことじゃないよ。

あなたのDB設計経験年数は?

246 :仕様書無しさん:04/11/18 13:15:38
>>245
理由はあるんだろうけど、解決方法がヘンなんじゃないかな。

247 :仕様書無しさん:04/11/18 13:16:56
想像で語っても仕方あるまい

248 :仕様書無しさん:04/11/18 13:19:31
履歴的なデータだと、転記するスタイルをとる場合もあるから、>>244だけじゃなんとも言えないような。
まあ、最近のスタイルじゃ正規化してマスタ側に採用廃止日をもって比較が良いみたいだけど。


249 :仕様書無しさん:04/11/18 14:44:25
>>248
マスタを変更する際に
マスタデータをどんどんつくっていくってこと?

一長一短だなー

250 :仕様書無しさん:04/11/18 14:53:14
>>249
単純な例だと住所データとか。
お届け先は履歴で保持だけど、住所の長さは結構ヘビー。
引越し頻度など考えたら、マスター側が履歴的なほうが・・・。

あとは商品マスタの細かい仕様変更対応とか。
キー的には商品番号+仕様番号なんだけど、表面的には商品番号だけで最新のものを使用とか。

最近のスタイルと書いたのが、その辺りの性能を十分に出せるようになったので、履歴に保持しなくても大丈夫になってきたから。


251 :244:04/11/18 15:03:05
ずばり書くと

顧客マスタテーブルに、顧客が所持している商品名、営業所名、親会社名
営業所マスタテーブルに 営業所名、親会社名
親会社マスタテーブルに、親会社名

同じ顧客が2つ商品を持っている場合、顧客マスタに2つのレコード発生
同じ顧客が、違う営業所で商品を購入した場合、また顧客マスタ増える。

と言った感じ。
顧客マスタには住所・名前・年齢・生年月日・アンケート内容などなど。
せめて顧客マスタと商品ぐらい別けろよと・・・。

他も使って居ない、気温・天気・和暦/西暦変換テーブルなどなど。



私はDB設計の実務経験は2〜3年ですが、さすがにこれよりマシなDB設計する自身がある。


252 :仕様書無しさん:04/11/18 15:13:32
それはすでにマスタじゃないだろ・・・
あと営業所マスタとか親会社マスタっているのか?
自社の営業所か、とも一瞬思ったが、親会社名とかついてるってことは顧客の営業所だよな・・・
ヨーワカラン


253 :仕様書無しさん:04/11/18 15:21:37
つうか、マスタじゃなくて、営業所別最終購買履歴って呼ぶてーぶるじゃないのかと。w


254 :244:04/11/18 15:26:38
だから変なDBなんですよ。
というか、本来の意味での顧客マスタが存在してないから。

必要の無い所を別テーブルにわけて、必要な所を別けていない
使わない項目やテーブルギッシリ、名前の付け方超いい加減。

正直俺が作ったと思われたくない。

255 :仕様書無しさん:04/11/18 15:28:07
>>251
それがひどいのは間違いないんだろうけど
だいたいのDBなんて
運用後しばらくして見たら
ひどい状態になってることが多いよ

手をいれた人間も分かっていながら
しょうがなくやってたりもするし

256 :仕様書無しさん:04/11/18 15:43:47
変だとわかっていても、
設計者がそれで良いというのならそのまま作ってやるのも仕事のうちだろ?
もちろん、指摘と改善案の提示だけはしとこうな。保身のために。

257 :半透明アヒル ◆FDe1.0QRac :04/11/19 14:57:26
そうだね。
なにも言わないと>>244さんも同じ人と思われる可能性大。
>>256さんの言う事はしておいたほうがいいと思われ。

258 :仕様書無しさん:04/11/19 21:59:45
>指摘と改善案の提示だけはしとこう

...って、やらない意味がわからんのだが。マゾなのか?

259 :仕様書無しさん:04/11/19 22:41:11
アゾです。

260 :仕様書無しさん:04/11/20 00:04:58
>>258
指摘と改善案なんて保身にならないこともある。

ほんの少しでも指摘されると逆切れする人いるし、
改善案を提示してあったところで、結果プロジェクトがぼろぼろになったら
「連帯責任だ、何とかしろ」ってことも多い。
「分かってたのにどうして止めなかった」などと的外れな非難をされることもある。
無駄な設計した当人は「一生懸命やったんだからしょうがないだろ」で無罪だったり。
そこで「自分の責任じゃありません」と拒否しようとするとたぶん辞める以外に道がない。

はちゃめちゃ設計しかできんような無能やそんなのがのさばってる組織に
理屈は通じないと思う。
そこそこ動く程度に作ってやって、あとくされなくすばやく縁を切るほうが
楽で有効なケースもあるよ。

261 :仕様書無しさん:04/11/20 00:31:45
比較的コミュニケーション能力が低いとされる人間が集まっているのに
下手すると他の職種よりよっぽどコミュニケーション(というか、世渡り)能力を必要とされる……

262 :仕様書無しさん:04/11/20 01:26:57
会社で重要なのは「声のでかさ」であって能力の有無ではないからねえ。
声高に叫んだ方の勝ち。声のでかい奴が上層部にいたりしたら目も当て
られない。

というわけでこれ以降は以下でどうぞ。
この会社辞めようと思った腐れ上司の一言#0x13
http://pc5.2ch.net/test/read.cgi/prog/1098508201/

263 :仕様書無しさん:04/11/20 02:31:17
hoge = function();
while (hoge != 0) {
 doSomething();
 hoge = function();
}


264 :仕様書無しさん:04/11/20 02:40:24
for(;function()!=0;){
doSomething();
}

こうか?

265 :仕様書無しさん:04/11/20 02:42:41
振る舞いをかえるな!
for(hoge = function(); hoge != 0; hoge = function()){
 doSomething();
}
こうだろ

266 :仕様書無しさん:04/11/20 03:03:17
hogeへの代入が必須なら
for(;(hoge=function())!=0;){
  doSomething();
}
これで。

ループから抜け出すときhogeの値は必ずゼロになってるから、必要ないとは思うけどな。

267 :仕様書無しさん:04/11/20 03:14:00
>ループから抜け出すとき

そこを気にしている訳ぢゃないし

268 :仕様書無しさん:04/11/20 13:25:41
doSomething() の中で hoge を参照している可能性。
クソ野郎 (俺も含むw) が書いたコードなら、あり得る。

269 :仕様書無しさん:04/11/20 13:35:42
更に operator= とか operator!=をオーバロードしてたり

270 :仕様書無しさん:04/11/20 14:09:03
きっと for だってマクロだし。

271 :仕様書無しさん:04/11/20 14:09:45
>>270
間違い
→while

272 :仕様書無しさん:04/11/20 17:59:49
while((hoge = function()) != 0){
doSomething();
}
って書きたくなるなぁ。

forよりwhileが好きな漏れ。

273 :仕様書無しさん:04/11/21 19:37:31
cなら「!=0」なんか使うんじゃない
for( ; !(hoge = function()); ) doSomething();



274 :仕様書無しさん:04/11/22 01:43:50
while(hoge = function())とか
for( ; hoge = function(); )とか
書かなきゃ、どっちでもいいよ。

275 :仕様書無しさん:04/11/22 05:09:23
そもそも変数hogeは要らんじゃん。
while( function() ) {
doSomething();
}

276 :仕様書無しさん:04/11/22 09:18:19
>>275
>>268

277 :仕様書無しさん:04/11/22 11:48:10
ローカル変数へのポインタをグローバル変数に代入するなんて
日常茶飯事ですが何か?

278 :仕様書無しさん:04/11/22 13:08:52
>>277
もうちょっとネタを練り直せ

279 :仕様書無しさん:04/11/22 13:42:05
>277
それがお前なら氏ね、周りならさっさと辞めれ

280 :仕様書無しさん:04/11/22 17:36:58
やった釣れた

>>277
 \
   \(⌒-⌒)
    (・(ェ,,)・ ) < なんて書かれるとわかっている餌で俺様が釣られクマ―― !!
     `つ   `つ      (´⌒(´
      ゝ_つ_`つ≡≡≡(´⌒;;;≡≡≡
               (´⌒(´⌒;;
       ズザザザ


281 :仕様書無しさん:04/11/22 17:53:49
か、かわいいじゃねーか!

282 :仕様書無しさん:04/11/22 22:20:26
折れの見聞が狭いだけかもしれないが、以前居たプロジェクトのCのソースで
カウンタ変数で使うintのiがモジュール内グローバルにされていた。
実行速度が速いとかならまだしも、「よく使うやつ関数ごとに定義したら面倒じゃん?」
という理由だった。

283 :仕様書無しさん:04/11/22 22:24:48
>>282
まじっすか。こわいな。
ついでにいっとくけど、普通はローカル変数のほうが速い。

284 :仕様書無しさん:04/11/22 23:51:21
>>283
どうしてですか?

285 :仕様書無しさん:04/11/23 00:12:14
>>282
俺もそういうプロジェクトにいたことあるわ
int loop_count[120];

とか定義してあって、みんな直値で使用していた。
資料もないので、最初の製作者以外、どの値をいつ使っていいのか
よくわかっておらず、デバッグしてバッティングしていることに気づいたら
別の番号、わかんなくなったら配列の上限を増やしてしまうという恐ろしさ。

結局5回目のバージョンアップ時に誰かが一括置換失敗して、かなりの
デスマになったと聞いた。

286 :仕様書無しさん:04/11/23 00:57:45
>>285
何考えてそんなことしてるんだ・・意味がわからんぞ。

287 :仕様書無しさん:04/11/23 01:40:56
COBOLerはどうしても「スタック」「ローカル変数」という概念を理解できないらしい。

288 :仕様書無しさん:04/11/23 10:19:31
同じような処理を行う関数を一つのソースにまとめたんだが、
各関数でやはり同じような変数を何度も宣言するのが無駄!と言って
全部外部変数に持ってった奴もいる(;´Д`)
「このほうが無駄が少ないでしょ!メモリ使用量も少ないんですよ!」
そーゆーもんだいか?



289 :仕様書無しさん:04/11/23 10:30:19
>>288
それは一理ある

290 :仕様書無しさん:04/11/23 10:33:43
メモリ使用量本当に減るのか?

291 :仕様書無しさん:04/11/23 10:58:04
>>290
必要な場所ではどうせ宣言するんだし。むしろメモリ使用量は増えるよ。

それよりもスコープの問題がある。
ループを含む関数からループを含む関数を呼び出せない。
結果 >>285 のように配列(本来ならスタックにすべき)を導入しなきゃならない。

それに「大域変数だと最適化がかかりにくい」って聞いたことがあるんだけど…どうなんだろうか。

292 :仕様書無しさん:04/11/23 10:58:35
>>285
それがさらに進化すると、ウチみたいに
「変数はint_value[9999]、float_value[9999]、string_value[9999]を使用すること」
になるんだな orz

>>290
たいていの場合、メンテナンス性と引き換えに出来る程には減らない。


293 :仕様書無しさん:04/11/23 10:58:50
>>289
荷物まとめてイナカ帰れ。

294 :289:04/11/23 11:19:38
イナカで仕事しているのですが、どうすればいいのですか?
オーバブーロして都会に出てもいいですか?

295 :仕様書無しさん:04/11/23 13:08:09
まだメモリサイズが問題になるところがあるのか。
ああ。組み込み系なんかはまだそうかも

296 :仕様書無しさん:04/11/23 13:22:13
>294
inaka:goto inaka;
要するに無限ループに入ってろってことでは?
オーバブーロ

297 :仕様書無しさん:04/11/23 14:05:28
>290
変数として消費するエリアはかせげるかもしれんが、
無駄な作りこみをする分、プログラムサイズで相殺(w

298 :仕様書無しさん:04/11/23 14:23:09

szStr = Format$(0, "0000") & "," & Format$(0, "0000")


……何がしたい貴様。


299 :仕様書無しさん:04/11/23 15:37:32
あるプロジェクトで。

ファイル名に対して、ファイル名主部と拡張子を分断する関数(1)
ファイル名に対して、パス名とファイル名を分ける関数(2)
ファイル主部と拡張子を結合する関数(3)
パス名とファイル名を結合する関数(4)
ファイル名主部だけのバッファ(5)
ファイル拡張子だけのバッファ(6)

があり、「ファイル名チェック関数」では

ローカルにいくつかのバッファを確保

1) 5と6を3で結合
2) パス名固定で4を使って結合
3) ファイル存在チェック
4) ファイルがあれば、結合結果を2を使って分割
5) さらに1を使って分割
6) 分割結果と分割前が一致していれば、「ファイルがある」と見なして正とする

というのがあり、途中参加した時に「なんですかこれ?」ときいたら「そのままの関数だけど?」と
ぽかーんとされた。そのうえ「え、もしかして意味わかんないの??」とか言われた。
説明したけど、どうしても4〜6の工程は必要不可欠と言われた・・・・


5年前の会社の話。

300 :仕様書無しさん:04/11/23 15:57:28
>>299
よく分からないが、「4) ファイルがあれば、」で無限ループに突入しそう。

301 :仕様書無しさん:04/11/23 16:03:59
5年前のそんなくだらない話をよく覚えてるな

302 :仕様書無しさん:04/11/23 16:43:18
>>299
ディレクトリ名、ファイル名が長い場合に、存在するファイル名を取得すると
途中でカットされてる可能性があるから、実際に取得した名称を分割して
比較する作業は必要だ、という意味なんだろうが、

取得したファイル名を使わずに引数として渡したファイル名を分割したって
同じに決まってるわな・・・。


303 :仕様書無しさん:04/11/23 18:21:09
>「え、もしかして意味わかんないの??」

わからん。教えて。
「ファイルがある」かどうかちぇっくなんだろ?

304 :仕様書無しさん:04/11/23 18:40:26
>>291
んなこたない。通常ローカル変数はスタック上に取るから、
そんなことしたらスタックとして確保してる領域は使われぬまま無駄になる。

# スタックも実メモリは割り当てず参照されたところでページフォルト→割り当て
# ということをやってるけど、それはそれでまた別の話。

関数に入る度にローカル変数の領域を確保してやらねばならないが、
それはいわゆるスタックポインタとフレームポインタの足し算だけで済む。
現代のプロセッサでそんな所の効率を気にしなければならないようなものは、
一部組み込みのものだけだろう。

が、そんなことはどうでもよくてプログラムの見通しが悪くなるのが一番の問題だ。
現状コンピュータで一番高価なものは人件費なのだから、少しの効率をあげても、
開発効率が格段に落ちたら意味がない。が、変な人は開発効率=タイプの量と
考えてしまって、変数の宣言が面倒→グローバルに取る、という馬鹿なやりかたをしているのだ。

>「大域変数だと最適化がかかりにくい」

これは本当。ローカル変数だとコンパイラの判断によって
レジスタ上で完結するコードを吐くことも可能だ。なんせ他に影響しないんだから。

グローバル変数も処理時にレジスタ上に置いておけるかもしれないが、
そうしたとして関数からのreturn時や他の関数を呼ぶときにメモリに書き戻してやらねばならない。
マルチスレッドのプログラムだとそもそもグローバル変数をレジスタに置いておくことなどできない。
よって最適化の効率が上がりづらくなる。

305 :291:04/11/23 19:22:56
あう、誤解を招く表現をしてしまった。
>>304 指摘サンキューです。

>>290
>必要な場所ではどうせ宣言するんだし。むしろメモリ使用量は増えるよ。
  ↓
必要な場所ではどうせ「ローカル変数として」宣言するんだし、
「大域変数を宣言なんかしたら」むしろメモリ使用量は増えるよ。

…でした。

306 :仕様書無しさん:04/11/23 19:30:32
>>305
あと、最適化の説明もサンキューです。
# で、そのレジスタ関連の最適化を抑制するのが
# volatile ちゅーやつなのですな。

307 :仕様書無しさん:04/11/23 21:51:29
>>305
了解っす。それならよくわかります。

volatileってのは最近は使う機会がないっす。
registerもコンパイラの最適化を妨げるとか、
そもそも無視する(ただしアドレス演算子&は適用できなくなる)とかで
もう10年近く前から使わなくなっちゃいました。

308 :仕様書無しさん:04/11/23 21:59:26
アドレス演算子は適用できるよ。


309 :仕様書無しさん:04/11/24 23:02:44
149 :デフォルトの名無しさん :04/11/23 19:17:30
「シーケンスAの要素を整列せよ」という要求に対して、
「シーケンスBという部分集合を勝手に定義して整列しました」と納品に行ったら
がくがくぶるぶる


153 :デフォルトの名無しさん :04/11/23 19:20:31
>>149
うーん、フェイルセーフは考えないのが普通なんでしょうか?
仕様書が与えられているならまだしも、「こんな感じで作って〜」と
言われたら細かい仕様は作る側に任されると思うんですが。

この課題の場合、"勝手な上限を設けるもの"というのは、
#define MAX_NUM 100000
struct s_table str_table[MAX_NUM];
といった上限決め打ちを規制するものだと思いましたが。


154 :デフォルトの名無しさん :04/11/23 19:21:09
>「シーケンスBという部分集合を勝手に定義して整列しました」
「えぇ、もちろんバグでは有りません。仕様です。」


310 :仕様書無しさん:04/11/25 03:59:03
>>308
C89では適用できなかったような気がかなりするぞ。
C++だとできたような。
C99は知らん。なんとなくできそうだが。

311 :仕様書無しさん:04/11/25 17:33:59
javaにて
   if ( creditNum1.length() <= 0 || creditNum1 == null ||
     creditNum2.length() <= 0 || creditNum2 == null ||
     creditNum3.length() <= 0 || creditNum3 == null ||
     creditNum4.length() <= 0 || creditNum4 == null ) {
    
    hogehoge
   }

ぬるぽ

312 :仕様書無しさん:04/11/25 17:42:29
それでぬるぽが出て動かねーって悩むのか・・・('A`)

313 :仕様書無しさん:04/11/25 17:52:46
  /**
   * 半角数字だけかどうかを判定する。
   */
  private static final boolean isDigit(final String text) {

    for (int i = 0; i < text.length(); i++) {
      char c = text.charAt(i);
      if (!isDigit(c)) {
        return false;
      }
    }
    return true;
  }

  private static final boolean isDigit(final char c) {
    return c >= '0' && c <= '9';
  }

時々でいいので正規表現のことも思い出してあげてください。
ええそうです。>>175=>>311です。
保守すればするほどめまいがしてくる……

314 :仕様書無しさん:04/11/25 19:24:13
>313
JDK1.3時代につくった遺産かもしれないじゃないか。
oro.jarとか使ったら、
「そんな得体の知れない出所不明のフリーウエアなんか使うな!」とか
いうPLだったのかもしれないじゃないか。



315 :313:04/11/25 19:30:22
>>314
最初からJDK1.4で最初からoroも乗っかってるプロジェクトですが何か?

しかも
String message = "";
message += "hogehoge"+ abc.getBCD() + "ddd";
message += "foo"+ abc.getCDE() + "boo";
(以下略20行)
ということを随所でやってくれてましたが何か?
StringBuffer使ってくださいと。

316 :仕様書無しさん:04/11/25 23:08:28
>315
遅くても動けばいいじゃん

317 :仕様書無しさん:04/11/26 01:23:18
>>313
正規表現使うとコストたかくね?
それはさておき、こんなコードなら知ってる。

/**
* 半角数字だけかどうかを判定する。
*/
private static boolean isDigit(String text) {
    try {
        Integer.parseInt(text);
    } catch (Exception e) {
        return false;
    }
    return true;
}

318 :仕様書無しさん:04/11/26 07:50:55
>>317
なんてスマートなんだ

319 :仕様書無しさん:04/11/26 08:00:07
先頭に - が入ってても通過するけどな。

320 :仕様書無しさん:04/11/26 10:52:09
>>317
確かにコストは低いはず。
やっていいかどうかはまた別の話だが・・・。

321 :名無しさん:04/11/26 12:32:03
備考(CHAR(40))がキーになってるDB・・・・
集計の際も、帳票を出力する際も備考をキーに・・・・

このDBを設計したのが経歴n年のベテランSEっつうんだから
世の中面白いよヽ(´▽`)ノ

まあ、斬新と言えば斬新だよな。データ入力者が自由に集計単位
を設定出来るし。

322 :仕様書無しさん:04/11/26 12:52:07
>>321
実装全てがわからんからあれだけど。
客側がフリー検索に近いことを要求して、パンクしたんじゃないのか?

または、キー(主キー)と検索キーワードを混同して錯乱したとか。

323 :仕様書無しさん:04/11/26 14:10:03
>322
いや、そんな高度な思想に基づいた設計ではなさそう。
現時点ではその備考にはユーザIDとユーザ名ぐらいしか入ってないんだよね。
だったら最初からフィールド作れよと。

客と
「なんで明細が2行に分かれて出力されちゃうの?」
『あー、備考は一字一句同じ入力をしないと集計されませんよ。仕様ですから』
「ユーザ単位で値がみたいんだけど」
『あーそれは出来ませんね。ユーザコードのフィールドを持ってませんから。仕様です』


324 :仕様書無しさん:04/11/26 15:22:08
この世の中、どれだけのDBがその特性を十分に発揮されないまま泣いてるんだろか

325 :仕様書無しさん:04/11/26 20:18:52
さらにいうと、isDigitは全角数字だのデーヴァナーガリーの数字などにも
trueを返す。


326 :仕様書無しさん:04/11/26 20:26:51
もしかして漢数字にも?

327 :仕様書無しさん:04/11/26 20:36:57
壱弐参

328 :仕様書無しさん:04/11/26 22:20:42
壱零弐 == 百二

329 :仕様書無しさん:04/11/26 22:58:46
>323
それで怒り出さない客の方が凄いと思う・・・

330 :仕様書無しさん:04/11/27 00:38:57
>>325
> デーヴァナーガリーの数字などにも

インド人の仕事だな。

331 :仕様書無しさん:04/11/27 02:58:03
>324
こーいう構成を見た事がある。
アプリ1 : オーダー情報を格納したmdbファイルを生成。
アプリ2 : 一定時間毎に、mdbのオーダー情報をエンコードし、Oracleへデータ挿入。
アプリ3 : ほぼリアルタイムで、Oracleへ挿入されたデータをアプリ4へソケット送信。送信成功後、データを削除。
アプリ4 : 受け取ったデータをデコードし、某ランドDBに挿入。
アプリ5 : 1日1回のバッチ処理で、某ランドDBの情報を基にデータを集計し結果をSQL Serverに格納。
アプリ6 : SQL Server のデータを表示するCGI。

最初、Oracleが何処で何の為に使われてるのか分からんかった。


332 :仕様書無しさん:04/11/27 04:04:32
値段吊り上げのため?

333 :仕様書無しさん:04/11/27 04:05:43
C#のisAlpha()でハマったことあったっけ。
考えればすぐ分かることだけど、Unicodeのアクセント付き文字などにもtrueを返す。
しばらくの間、Cのisalpha()とおなじだと思ってたんで、不可解な動作に(゜_ 。)状態だった。

334 :仕様書無しさん:04/11/27 14:57:58
そういやー、VBの標準関数は信用できん!と主張して
IsNumeric()(数値に変換可能な文字列か否か判定)とか
Split()(CSV文字列を自動的に切り分けてくれる)とか
ひたすら自作してる先輩いたっけなー。
そこまで徹してくれるといっそ清々しい。ちうかCでいいやんw

335 :仕様書無しさん:04/11/27 18:08:15
PHP で正規表現使えばすぐにできることを
1文字ずつ取り出して処理するコードを大量に見た。
やめて。

336 :仕様書無しさん:04/11/27 18:11:23
>>334
それは時と場合によるでしょう。
"1E1" などをNGにしたかったり 5,"ABC,DEF",100,AB を仕様にあわせてSplitしたり
する時は自作もするよ

337 :仕様書無しさん:04/11/27 18:16:09
>336
そりゃそういう場合は逆に自作せにゃあかんでしょ

338 :仕様書無しさん:04/11/27 18:26:45
IsNumericやSplitでいい場合の方が少ない気がするが。

339 :仕様書無しさん:04/11/27 20:16:00
「信用できん」という理由の上では不要だってことだろ

340 :仕様書無しさん:04/12/01 00:33:01
すでにあるルーチンを自作する香具師は趣味グラマの臭いがする。
後でメンテをする人間にとっては、組み込みの関数とどこの馬の骨とも知らんような人間のソースなら
前者を選びたくなる。

341 :仕様書無しさん:04/12/01 00:43:00
「信用できないから」という理由ならまだしも、「知らなかったから」という理由で
Instr()と同等の関数を自作し、しかもInstr()の存在を知ったあとでも頑なに自作の
ほうを使い続けているというのはどうなんでしょうねぇ。

342 :仕様書無しさん:04/12/01 11:00:33
>>341
いいんじゃない?

341はすべての関数を知ってるのかと

動いた後なら余裕がなければ
変えないよ

343 :仕様書無しさん:04/12/01 11:10:23
memcpy の動きがおかしい!とかいって
自分のコードの memcpy をすべて for ループに置き換えたバカなら
今俺の後ろに座ってますが。


344 :313:04/12/01 12:18:03
>>341
toArrayとsplit知らなかった
>>175の害虫よりマシだ

345 :仕様書無しさん:04/12/01 15:20:30
>>343
仕様書がおかしい!

といって仕様書を変更しないか監視が必要と思われ

346 :仕様書無しさん:04/12/01 15:31:00
大丈夫、そういう場合は何故か文句言わずに、勝手仕様でものが作られるから。w


347 :仕様書無しさん:04/12/01 21:22:24
世の中には
デバッグしてエラーが出たら
コメントアウトした上でその処理が返すべき値のような固定値を返す関数を書く馬鹿がいるらしい
int func(int a,int b){
/*
return a+b;
/*
return 2;
}
↑例を書くとこんなかんじ
しかもそいつらプロジェクトをめちゃくちゃにした挙句の果てに
期限どおりに引き上げていったらしい。


348 :仕様書無しさん:04/12/01 21:53:24
/*

/*

349 :仕様書無しさん:04/12/01 22:11:05
>348
それ書き込んだ後に気がついた
スマソ。
int func(int a,int b){
/*
return a+b;
*/
return 2;
}
正しくはこっちだな


350 :仕様書無しさん:04/12/01 22:19:58
あれなんだろうな、取り敢えず、そのモジュールが値を返さないと他のモジュールのテストとか
作る事が出来ないから、そうやって応急処置的に値を返すようにして、
あとからそのモジュールだけちゃんと組めばいいやと思ってたのを忘れてたんだろうな・・・

351 :350:04/12/01 22:21:17
追記

やり方としては間違ってないし良くやる方法だけど、
問題はそれを忘れてたという所かな・・・

352 :仕様書無しさん:04/12/01 23:02:08
>>347
それでエラーがなおるんなら、つまり引数を間違ってるんじゃないのか?
応急処置にすらなってない気がする。

>>350
まともに動くソースをわざわざコメントアウトしているようにしか見えないけど。
って加算をする関数じゃないのかな。

353 :仕様書無しさん:04/12/02 00:16:38
ユニットテストの直交性ってやつだっけ。

354 :仕様書無しさん:04/12/02 15:12:38
>>352
あくまでもその加算する関数は例として出しただけだろ。


355 :347:04/12/02 18:57:47
コメントアウトしている部分はバグがある部分です
決して引数なんかが間違っているわけではありません

356 :仕様書無しさん:04/12/02 19:09:16
int func(int a,int b){
return a+b;
}
この状態でバグがでるとしたら、引数に int 以外の型か、加算してあふれ出すような値が当てられてるんじゃないか・・・ってことだろ?
352は、ただの例を実際のコードとして見てしまったって事で。

357 :仕様書無しさん:04/12/02 19:26:34
>>354
それならコメント部分がちゃんとバグった例を出すべきだ。

>>355
了解。

358 :仕様書無しさん:04/12/02 21:07:15
>>357
ちょっと待て、あれが加算するための関数だとは誰も言って無いぞ

359 :仕様書無しさん:04/12/02 21:29:26
なんか説明のためのコード例として、関数名にとりあえずfooってつけたのをみて
「いや、ちゃんと意味のある関数名つけないとだめだろ」
ってアツく語りそうなタイプだな。

360 :仕様書無しさん:04/12/02 21:56:24
>>358
その可能性については>>352で提示されている。

361 :仕様書無しさん:04/12/12 04:06:28
test

362 :仕様書無しさん:04/12/12 04:08:35
おお、ちゃんと書けるじゃんか。

363 :仕様書無しさん:04/12/13 16:16:50
//この外注に二度と頼むもんかと思ったHTMLタグ

<!------------ 納品先には見せても意味のないコメント ---------->
IEは自己補正してくれるけど、Mozillaはもちろん理解しなくて画面が壊れる。
何故jspコメント使わないのかと小一時間略

ついでに、strutsなのに不要なまでにスクリプトレットでごまかしてるが何ともないぜ!!
 <%
  final HogeBean b = HogeBean pageContext.getAttribute("dkt");
  String foo = "";
    (中略)
  if ( select.equals("on") ) {
    (中略)
  } else {
    foo = b.getHoge();
    (中略)
  }
 %>
  <input type="text" name="foo" value="<%=foo%>">
さらに、わずかな違いだけなのに全ソースを4回コピペして
<logic:present>で分岐させてやがる……一箇所直すのにどれだけ探せって言うんだ……

364 :仕様書無しさん:04/12/14 00:46:05
>363 それ以前にHTMLのコメントの書式について小一時間

365 :仕様書無しさん:04/12/14 10:10:12
>>363
Mozillaのどのバージョンで崩れたの?

366 :仕様書無しさん:04/12/14 11:05:17
>>364
Web屋に「小一時間」など時間の無駄。

367 :仕様書無しさん:04/12/18 21:13:43
これまでに出てきた話に比べりゃたいした事が無いが。

今日、他のプロジェクトでどうしてもバグが取れないからと言うので、
ヘルプでデバッグに行ってきた。

関数への引数が11個もあったorz
それで呼び出す側で順番を間違えて引数を与えていてバグってた。
その関数作ったやつは「俺のせいじゃなかった」と胸を張ってたが、
構造体使えよと…orz

368 :仕様書無しさん:04/12/18 23:53:23
会社を辞めようと思った上司の一言

「どうせコーディングしてたら仕様変わるんだから仕様書なんか書いても無駄」

あほか('A`)

369 :仕様書無しさん:04/12/19 10:07:31
>>368
ある意味アジャイルを実践している正しい発言だが?

370 :仕様書無しさん:04/12/19 11:14:19
どういう仕様書かによるな。シーケンス図は結構役立つので書いた方が良いように思うが、
メソッド単位の詳細仕様なんて、書いてるうちにどうせ仕様書通りにはできないことが発覚する。
ベース部分の設計を飛ばすやつはアホ。

371 :仕様書無しさん:04/12/19 11:17:46
>>367
仕様変更や機能追加で取り扱うデータが増えたときに
何も考えずに泥縄で引数を増やし続けて、そうなるケースあるな。
構造体使うか、追加された機能分関数分ければ良いのに。

そうやってスパゲッティを量産するヤツには
「自分は要求にしたがってコードを変えたんです」と
大真面目にやってるヤツが多いからタチ悪いよな。

軍隊じゃ
「無能な怠け者はまだ使い道はあるが、無能な働き者は殺してしまえ」
という格言があるが、時々本当にそう思う。

372 :仕様書無しさん:04/12/19 22:57:18
関数への引数は構造体1個だったが
構造体のメンバが100こ超えてたorz 

とかいう状況はないのかねぇ。

373 :仕様書無しさん:04/12/19 23:29:17
setterじゃなくてgetterだが、Direct3DのGetDeviceCaps()で使う
D3DCAPS9構造体のメンバが確か72個。

374 :仕様書無しさん:04/12/19 23:42:28
>>373
70個だった。しかしすごいね。
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/d3d/structures/d3dcaps9.asp

375 :仕様書無しさん:04/12/19 23:46:11
>>372
100個とは言わないが、50個位のはあった。orz



376 :仕様書無しさん:04/12/20 00:20:09
よくある話なんだろうけど
テーブルのカラム名にやたらと「補助コード」とか「管理識別コード1」とかあって
予想通りに? そいつらが必要になって、イミフメな値がわらわら。
漏れはそのプロジェクトにはテストのヘルプ要員で急遽入ったんだが
なんつーか、テーブル定義見ても一体何が何を意味しているのやら。
PGはその辺り頭に入ってしまっているようで、すらすらと
「補助コードがA8で、管理識別コード3がyyのレコードを集計して……」
とか指示を頂いたが、はて、コマンドラインからSQL打って数字だけ画面と照合して
合ってたことは合ってたけど、それでよかったんだろうか?
未だに自分が何をテストしていたのか良く分からん。
テスターなんてそんなもんと言われたらそれまでだけどさ。

377 :仕様書無しさん:04/12/20 10:31:15
そういうクソ設計とクソDBは後々問題になるんだよな。

378 :仕様書無しさん:04/12/20 19:35:50
>>377
真に問題なのは、SEの頭の中にしか仕様がないことを許容する体制だと思う。
データベースの設計以前の話だけど。

379 :仕様書無しさん:04/12/20 21:48:50
昔いた銀行で動いてたシステムは、顧客テーブルの1つのカラムに
 1:男性
 2:女性
 3:喫煙者
 4:重病経験者
みたいに複数の意味を持たせていて、もし男性で喫煙者という情報を持たせるには
コード1とコード3をそれぞれ持つ2つのレコードを共通の顧客コードで管理すると言う
わけの分からん事をやっていた。

そのDBが20年近く稼動していたんで、それを使ってる香具師らはそれでDBというものを覚えたんで、
おかしいとは思ってなかったらしい。

380 :仕様書無しさん:04/12/20 22:24:03
if ( ****************** )
{
******
******
}

この書き方嫌い

381 :仕様書無しさん:04/12/20 22:32:02
なるほど、会社辞めようと思うほど嫌いなんだな。

382 :仕様書無しさん:04/12/20 22:42:40
>>379
それらの属性を表す別々の列を用意した方がいいと言いたいのか?

後で他の属性(たとえば性癖など)が増えた場合、どうする?

383 :仕様書無しさん:04/12/20 22:51:04
>>379
 1:男性
 2:女性
 4:喫煙者
 8:重病経験者
 16:2cねらー

だったら理解できるつーかよくやる手だがな。

384 :仕様書無しさん:04/12/20 22:54:25
>>383
男性と女性のフラグが同時に立つことはないと思うのだが・・・。
1:男性
2:外見が異性である。

じゃね?

385 :仕様書無しさん:04/12/20 22:59:31
1:男性
2:容姿端麗

386 :仕様書無しさん:04/12/20 23:02:37
>385
イケメンは登録できないテーブルなのか。

387 :仕様書無しさん:04/12/20 23:06:26
>>386
レス番が 386 のくせに、二進数が理解できない人ですか?

388 :仕様書無しさん:04/12/20 23:08:13
>>387
とりあえずお前も(

389 :仕様書無しさん:04/12/20 23:12:18
精神医学的分類:
1:男性
2:女性
3:性同一性障害
4:幼児期における性同一性障害

遺伝子的分類:
1:XY男性
2:XX女性
3:XX男性
4:XXY(X複数+Y、クラインフェルター症候群)
5:X(ターナー症)
6:XYY男性

390 :仕様書無しさん:04/12/20 23:16:53
>>383
素朴な疑問だけど、コボラーの中の人にもそういう発想ってできるの?

391 :仕様書無しさん:04/12/20 23:32:16
なんで男性と女性を別にするんだよ
一つの性別っつーカテゴリにわけときゃいいだろ!!!11

392 :仕様書無しさん:04/12/20 23:40:19
アフォがどんどんあぶりだされていく恐怖・・・

393 :仕様書無しさん:04/12/21 00:06:36
性別 { 男性, 女性, それ以外 }

394 :仕様書無しさん:04/12/21 00:17:47
>>393
マジであったよ。そんなの。

図書館の本の貸借システムで、利用者の属性として。
何でも「それ以外」は団体とかグループとかの場合らしいのだが。

395 :仕様書無しさん:04/12/21 00:33:51
そこでXMLですよ。

396 :仕様書無しさん:04/12/21 00:38:37
法人格に性別ってあるのか?

397 :仕様書無しさん:04/12/21 00:52:06
ないよ

398 :仕様書無しさん:04/12/21 02:09:17
フランスにはあるんじゃねーか?

399 :仕様書無しさん:04/12/21 02:16:50
女性法人と男性法人がケコーン(合資会社?)したら生まれるのは・・・

400 :仕様書無しさん:04/12/21 02:17:22
ここは日本だ死。
ソースは英語だし。

フランス語が入る余地はほとんどないだろ。

401 :仕様書無しさん:04/12/21 04:41:30
>>399
そういうのは合資会社ではありません。

ご連絡先

402 :仕様書無しさん:04/12/21 08:01:54
>>380
ごめん、俺その書き方だ。なんか、{}がそれぞれ同じ横位置じゃないと
落ち着かないんだよね。「ここからネストが始まる」っていうのがハッキリ
分かるし。

403 :仕様書無しさん:04/12/21 09:33:39
>>380
おれも最近それに移行中

ただelseのときイマイチなんだよなー
こう書いてる

if ( *** )
{
  ***
} else
{
  ***
}

404 :仕様書無しさん:04/12/21 10:26:47
やだやだ。ifの括弧は
if(***){
  ***
}
else{
  ***
}
がいい。

405 :仕様書無しさん:04/12/21 10:28:40
それ以上は不毛な論争になるからやめとこうぜ('A`)

406 :仕様書無しさん:04/12/21 10:52:28
>393
母子手帳がそのわけ方
未熟児だと性別が決まらないことがあるらしい


407 :仕様書無しさん:04/12/21 15:52:35
if ( *** ) {
***
} else {
***
}
が俺は好き


フリーフォーマットの弊害だよな、これって
いっそcobolやfortranみたいに(ry

408 :仕様書無しさん:04/12/21 16:06:18
if-elseは
if(***) {
}
else {
}
だけど、try-catchは
try {
} catch(***) {
}
が好き。

409 :仕様書無しさん:04/12/21 16:07:31
だからってVBで

If A = B Then
   FuncA()
Else:FuncB()
End If

インデントそろえつつ行数を節約したいというので上記のような記述を
してるのを結構みかける。まあそれはいいのよ。
だが、:を多用してるのにインデントが全然そろってないのははっきりいって
ウザいことこの上ない。



410 :仕様書無しさん:04/12/21 16:12:29
VBだし

411 :仕様書無しさん:04/12/21 16:16:11
宗教論争は別のところでやってくれ。
かっこの位置ぐらいで会社辞めたくなるんじゃ、毎日転職だぞ。


412 :仕様書無しさん:04/12/21 16:18:53
PMにでもなってコーディング規約に入れちまえ

413 :仕様書無しさん:04/12/21 17:34:20
二度とこの外注に以下略
ソースコードお持ち帰り。

一部最終変更CVSにアップしないで撤収しやがった

414 :仕様書無しさん:04/12/21 19:08:14
>>409
VBのインデントって4桁じゃなかったっけ。ずれてる気がする。

415 :仕様書無しさん:04/12/21 19:44:51
1メソッド500行程度のソース(1クラス3000行あった)のメンテを
やることになったとき
条件分岐と他のクラスが定義した
public staticな文字列を大量に参照している
素晴らしきソース

416 :仕様書無しさん:04/12/21 20:29:57
>>415
>1メソッド500行程度のソース(1クラス3000行あった)のメンテを
やることになったとき

こういうカキコがあるので前から疑問に思っていたんだが、
こんなに長いコーディングってどうやってやるの?
(415がやったわけじゃないんで何だが)
確かに以前勤めていた会社で上司が
「何スクロールあるんだ」って関数をいくつも作ってくれたことがあって
眺めただけでブチぎれそうになったことはあるが
(たまにならプログラムの関係上、仕方が無いこともあるんだけどね)
さすがに三桁はなかったと思う。
規模によるのかもしれないが、ちょっと想像できない。

417 :仕様書無しさん:04/12/21 20:46:12
似たような処理を関数にまとめず、
コピペコピペでひとつの関数でやっていくと、
いくんじゃないかなあ。
やったことないからわからんけど。

418 :仕様書無しさん:04/12/21 20:51:57
あとは>>175みたいなのをわざわざ自作するとか。

419 :仕様書無しさん:04/12/21 21:08:44
>>416
構文解析器みたいなでかい状態遷移表

420 :仕様書無しさん:04/12/21 22:00:00
一つのswitch文か800ステップぐらいあって、
その各case毎にさらにswitchやifやforがネストしてるものだから
全体を印刷して、紙を張り合わせて、一反木綿状のそれを床において
はいつくばって処理を追った事がある。
長さよりインデントがあって無い部分が多々あって、
それを把握する方がつらかった。

421 :仕様書無しさん:04/12/21 22:14:14
先にインデント合わせれば印刷する必要なんてないだろ


422 :仕様書無しさん:04/12/21 22:44:30
420は釣りだと思いたいが、マジでアフォなんだろうな。
自分でコーディングするときも、一生懸命手作業でインデントを合わせてるんだろうな。
括弧の数が合わなくてコンパイルエラーになったら、ソースを印刷して、
if文のネストをボールペンで書き込んでチェックしてるんだろうな。
grep使わないで一つ一つファイルを開いて検索してるんだろうな。
正規表現使わないで、山ほどif文書いてるんだろうな。
cvs使わないで、日付別のディレクトリ作って、毎日手作業でコピーしてるんだろうな。
diffを使わないで、どこが修正されたか全部目で追っかけてるんだろうな。


なんか悲しくなってきたよwww


423 :仕様書無しさん:04/12/21 23:11:52
>422
釣られてそれだけの行数かいてるお前の方がおめでたいわ。

424 :仕様書無しさん:04/12/21 23:16:40
世の中にはindentというコマンドがある。

425 :仕様書無しさん:04/12/21 23:18:24
>423
わらた

426 :仕様書無しさん:04/12/21 23:34:06
>>424
そしてそれが禁止されている世界もある。

427 :仕様書無しさん:04/12/22 01:56:02
特定ディレクトリ以下全部のソースを読み込んで
クラスとメソッドの最大、平均、合計の行数と分布を調べて表示してくれる
ツールを書いたんだけど、今の現場のコードを解析させたら
会社辞めたくなったなぁ。
415には悪いけど500行なんてざらだよ。


428 :仕様書無しさん:04/12/22 09:31:47
最長不倒関数のHPのリンクでもはりつけっか?
8000行だっけかな、記録は。

でも、基本的にはIf文のElseができたからコピペして倍、
Switchのケースが増えたからコピペ・・・
で膨らんでるだけなんだよね。

本当にロジックのみで精魂込めて1行ずつ作り上げた1000行とかは、メンテする側は泣きたくなるね。
作った側は多分そのときに何かが憑依してたから出来たんだろうけど。w


429 :仕様書無しさん:04/12/22 09:46:35
数百行の関数とか作る奴もアレだが、そういう許してる環境も問題ありだろ。
そんな大作を短期間で作るわけでもないと思うが、その間にレビューとかしないのか。
周りで作業している奴と雑談がてら、ソースを見せ合って意見を聞いたりしないのか。

それとも周りを含めて皆そういうレベルなんだろうかな?

430 :仕様書無しさん:04/12/22 10:20:23
その場でしか使わないような関数に無理やり分けるくらいなら
長いままにしておくし500行なんて余裕ですが何か?

431 :仕様書無しさん:04/12/22 10:27:55
まぁ処理によっては分けられないケースもあるわけで・・・
昔の画像処理用ルーチンなんかだと結構強烈なの多いよ。


432 :仕様書無しさん:04/12/22 10:32:07
>>429
コピペで増大する場合・・・。
こういうのって初回開発時じゃなく、テスト中から仕様変更時とかに発生しやすい。
きちんとやる時間がない、と言い訳して既存部分を触らずに、If文増やしてElse側をつくったり、Caseを1つ増やしたり。
気付いたらでかい関数が出来ていた。

初回で巨大関数・・・。
数百行なんて1日で出来る。
ソースレビューをする会社と、そもそもしない会社に分かれる。
(私もコーディング規約は科すけど、ソースチェックはしないんで)

433 :仕様書無しさん:04/12/22 10:44:32
>(私もコーディング規約は科すけど、ソースチェックはしないんで)

こういうことを当然のように言ってのける感覚が理解不能だ・・
巨大関数を作る奴も回りに迷惑をかけてるという感覚自体がないんだろうが。

434 :仕様書無しさん:04/12/22 11:00:08
>>430
どういう意味で「無理やり分ける」と言ってるのかよくわからないが、
「ある処理」の最小の粒度が500行というのならともかく、もっと粒度を細かく出来るのなら
その場でしか使わない関数でももう少し細かく分けるべきじゃないの?



435 :仕様書無しさん:04/12/22 11:29:31
>>433
そんなもん性善説か性悪説かの違いだ。



436 :仕様書無しさん:04/12/22 11:42:16
DLLにしちゃえばバレないぜ!

437 :仕様書無しさん:04/12/22 11:53:27
>>436
何が?
ソースを破棄してDLLだけ残して、タダで帰れるとおもってるんかい。


438 :仕様書無しさん:04/12/22 14:24:39
>>430
じゃ、あなたのやった仕事は
あなたに一生面倒見てもらうことにします。

439 :仕様書無しさん:04/12/22 14:34:25
>>438
保守契約に入ってくれるなら10年でも100年でもOKです。

440 :仕様書無しさん:04/12/22 14:52:22
>>439
そんな人生嫌だな。
せっかくの下請け人生、どんどん新しいシステムの開発をしたい。


441 :仕様書無しさん:04/12/22 16:55:57
じゃ1関数5行以下絶対な、破ったら罰金500億まんえん

442 :仕様書無しさん:04/12/22 17:15:12
>>441
厨房は先に宿題しなさい!

443 :仕様書無しさん:04/12/22 18:12:00
じゃ1関数50行以下絶対な、破ったら罰金5まんえん

444 :仕様書無しさん:04/12/22 18:31:59
つ[軽快なJava]

445 :仕様書無しさん:04/12/22 18:32:36
…もしかして面白いギャグと思って言ってるのかな?

446 :仕様書無しさん:04/12/22 23:50:40
perl4のソースで一関数5000行ってのを見て以来
まだまだ大丈夫だなと思うようになった

447 :仕様書無しさん:04/12/22 23:57:16
インタプリタみたいなの実装する時ってどうする?

switch( dwCmdCode ){
case CMD_ADD:
   :
   :
  break;
case CMD_MOVE
   :
   :
   :
ってやってたら軽く2000行超えた

448 :仕様書無しさん:04/12/23 00:01:06
関数ポインタまたはそれに類するものを使う

449 :アビリット :04/12/23 00:37:55
アビリット
009
http://www.p-world.co.jp/_machine/kisyu.cgi?kisyu=p3524


450 :仕様書無しさん:04/12/23 02:00:27
>447
エロゲのソース?

451 :仕様書無しさん:04/12/23 04:25:46
>>447
448のように関数ポインタの配列でも用意して使用。

452 :仕様書無しさん:04/12/23 04:40:20
>>451
おれもそうだな。プログラムの見通しがよくなるし。

switchで分岐するとO(n)もしくはO(log n)のオーダーだけど、
関数ポインタの配列だとO(1)で済むもんな。

いいことばかりだ。

453 :仕様書無しさん:04/12/23 05:52:00
>switchで分岐するとO(n)もしくはO(log n)のオーダーだけど、

switchもたいていはテーブルジャンプになるのではないのかね。

454 :仕様書無しさん:04/12/23 06:18:46
>>453
ああ、そうかもしらん。だがそうでないかもしらん。
コンパイラの実装によるとは思うな。

ま、まあ利点のひとつは根拠が弱いということで、すみません。

455 :仕様書無しさん:04/12/23 06:43:57
まぁ、コンパイラもswitch文は高速化させるだろうから
テーブルジャンプかバイナリィサーチとか使うだろうね。

やっぱり利点は見通しがよくなるとかかな?
好みによるかも。

456 :仕様書無しさん:04/12/23 10:10:20
関数ポインタなんて長いswitchより難解なソースになると思うが

457 :仕様書無しさん:04/12/23 10:17:01
コマンドをクラス化して各コマンド毎に派生クラスを作って、と。
分かってる人にとって保守性高いかわりに、分からん人にはさっぱり分からなくなるけどなー

458 :仕様書無しさん:04/12/23 14:47:33
箱庭って15000行ぐらいだった気が。

459 :仕様書無しさん:04/12/23 15:00:11
>>457
書いた奴にとってはだろ

460 :仕様書無しさん:04/12/24 00:30:26
ソースコードではないが、ある数値を算出するための数式があって、
その数式の3乗根について数人で悩んでたのを見たとき。
「1/3乗ってあるの?」とか「誤記じゃない」とか・・・
あんたら高校すら出てないんですか?

461 :仕様書無しさん:04/12/24 00:34:24
スマン、高校で習った記憶はあるがもう微積分計算はできないorz

462 :仕様書無しさん:04/12/24 01:24:28
ウチのオヤジはベクトル知らんかったよ
俺はベクトルは知ってるがテンソルはわからん

463 :仕様書無しさん:04/12/24 06:49:07
メイン関数が2000行超のコードと格闘しているけど、
このスレを見たらまだまだ大丈夫だと思った。

464 :仕様書無しさん:04/12/24 07:22:50
高校でもベクトルやらないコースはあるぞ。最近は。

ちなみに友人に中卒が5、6人ほど・・・まあPGではないが

465 :仕様書無しさん:04/12/24 08:27:01
つ[工業高校]
数学II なんて知りません

466 :仕様書無しさん:04/12/24 19:48:13
おまいら当然センター数学IAIIBはBASIC選択しましたよね?

467 :仕様書無しさん:04/12/24 21:17:04
int型の変数にポインタ変数の値を代入したり、
関数の返り値がローカル変数のアドレスだったり。

動けば良いってもんじゃ・・・

468 :仕様書無しさん:04/12/25 00:13:19
>>467
>関数の返り値がローカル変数のアドレスだったり。

動くのか?

469 :仕様書無しさん:04/12/25 00:14:46
>>468
ユーザの運次第じゃないかな?

470 :仕様書無しさん:04/12/25 00:41:23
昔、変数の参照にポインタ代入しようとしたバカがいた事を思い出したよ。
「コンパイルできないんですけど」「動かないんですけど」って何も疑問を持たず聞いて来るんだ、こういう奴は。

471 :仕様書無しさん:04/12/25 01:39:11
>>467を見て思い出した。
各支店数名ずつ出して、計40人位で作った半年程かけて作ったUNIX系のシステムで
あるOSから別のOSへ移行する、というプロジェクト(?)を
部長・課長をすっ飛ばし、事業部長の特命で漏れともう1人でやらされた事がある。

各機能毎のサブシステムを各支店が担当していた。

当時で言うSystemV系同士の移行なので、漏れも受けた時は舐めてかかっていた。
各支店毎に特徴が出ていて、面白かったが…

ある程度は予想していたが、コンパイルエラーの出方が支店毎でまちまちだった。
マトモな支店のソースは、単純な直しでコンパイルを一応通す事は出来た。

よくバグを出すサブシステム(≒支店)のソースのコンパイルでは
まあそれは予想以上に出るわ出るわ…。
そのソースを見たら、さもありなん、という感じだった。

(続く)

472 :471:04/12/25 01:39:45
>>487の様な事は当たり前、&*hoge = …等と書かれた変数もボロボロあり、
「元のOS側のコンパイルがよく通ったな〜」と呆れた。
試しに元のOS側でコンパイルを通してみた。
確かに一応実行モジュールは出来るが、Warningの雨あられ。

ホントは取りあえず、コンパイルを通しておいてから
その先にある「キモ」の部分にかかりたかったのだが…

現状を事業部長他に報告した。
本店では中堅どころPGであっても、発言力は余りなかったが、
元OS側のシステム全体を取り仕切るPMに「本店ではチェックイン/アウトしてないのか?」と食ってかかりもした。

「取りあえず、コンパイルを通せ」との命令が下った。
報告した時点で、そのプロジェクトは「OSの移行を成し遂げる」のを絶対条件とせず、、
取りあえず先遣隊として「移行に当たって、何処をどう直すか洗い出す」任務に変更となった。

それから「コイツは何がしたかったのか」を
仕様からひっくり返して解析するのが取っかかり作業の殆どを占めてしまった。
(当然の事ながら、仕様の管理は杜撰そのもの。)

※そこの支店のプログラマは、一回り位年上の結婚歴無しの毒男で
 ちょくちょく本店に来ては、俺一人で大変なんだよーと
 おにゃのこ達から同情を買おうとし、チョッカイを出す事を繰り返していたが
 その度に、その後ろで肩を叩いて、そいつに質問する振りをしながら
 そいつのアホさ加減を披露してやった。

473 :仕様書無しさん:04/12/25 02:07:30
>>487 の人ソースよろしく。


474 :仕様書無しさん:04/12/25 02:13:13
そうだな、>>487に任せるしかないな。

475 :415:04/12/25 14:07:35
長いコードができる理由・・・
指摘があったとおり、内部レビューや十分な方式設計を行っていなかったからだそうです。

ちなみに業務要件的に「画面で選択した複数の条件(全部で100以上)をもとにSQLを生成する」というのでした。

そのコードは COL_A AND (COL_B=? OR COL_C=?)というのをStringBufferを用いてロジック内(!)で
append("COL_A");←本当はpublic static な定数
append(" AND ");←本当はpublic static な定数
append("(");←なぜがただのリテラル
append("COL_B");
・・・
こんな感じ。
しかも条件Aの場合、条件Bの場合・・・ってのは素直にIF文で書かれている。

一部のSQLは日付計算とかをロジックで行わなければならないのですが、
99.9%はSQLのテンプレ作ってプロパティファイル化すれば判定すら要らないもの。

476 :仕様書無しさん:04/12/25 14:41:09
>十分な方式設計
 ↑
 ↓
>SQLのテンプレ

..."十分"以前の問題な希ガス
延髄反射プログラミングじゃんw

477 :415:04/12/25 16:10:09
何か良い案ある?教えてよ。
同じ延髄プログラミングするならテンプレの方がましじゃない?

478 :仕様書無しさん:04/12/25 16:24:38
延髄反射なんてあるんだ。知らなかった。

口に食べ物入れる→唾液(゚д゚)ウマー
テンプラ→(゚д゚)ウマー

ってな感じか。

479 :仕様書無しさん:04/12/25 17:04:03
つ [延髄チョップ]

480 :仕様書無しさん:04/12/25 18:58:03
String eriacode = "0000"; // エリアコード

もう少しわかりやすい名前付けてくれませんかねぇ。

481 :仕様書無しさん:04/12/25 20:07:28
SQLテンプレなんて、ばかみたいなことは *絶対に* やらない。
検索条件が多岐にわたり、戻すデータの形式が固定であれば、
WHERE部分をCriteriaオブジェクトとして設計するな。

class Criteria;

class Expression exttends Criteria;

Criteria buildDateCriteria(Date begin, Date end) {
Criteria startExpr = new Expression(tabelModel.getColumn("FOO"), begin, Operator.GREATER_THAN);
Criteria endExpr = new Expression(tableModel.getColumn("FOO"), end, Operator.LESS_THAN);
return new AndCriteria(startExpr, endExpr);
}

482 :仕様書無しさん:04/12/25 20:19:38
なんでORマッピング前提なんだよ。
もとのコード見りゃ、SQL直接実行してるのわかんだろ。直実行前提ならその解はないだろ。
マッピングツールを使う決定ができる立場ならともかくさ。

483 :仕様書無しさん:04/12/25 20:53:43
えーと、ORマッピングは使ってないよ。
Criteria#format()メソッドで文字列にできるようにしている。
Criteriaは、Compositeパターンになってて、再起的にSQL表現に変換される。

484 :仕様書無しさん:04/12/25 21:55:57
うーん、おれならどうせ自作するなら、SQLに書いといたタグを、プログラム上で
変数値に置き換えて実行するような感じにするかなあ。後が楽そうだし。

485 :仕様書無しさん:04/12/27 18:13:40
最長不到達ではないが、1メソッドが4500行ってなんだよ_| ̄|○

しかもコピペ連発くさい。
時々、スクロールしているかどうかわからなくなる。

486 :仕様書無しさん:04/12/27 23:04:49
>485
とりあえず、使えるのならラインナンバーの表示できるエディタをドゾー

487 :仕様書無しさん:04/12/28 10:36:09
>>485
どうして馬鹿は1メソッドに処理を集中したがるんだろう。

488 :仕様書無しさん:04/12/28 11:14:41
ある意味尊敬するけどね。
よく長い関数作れるよな、自分が大変じゃん。
細かく処理分けて行かないと、自分ではつくれません。

なので、無能な人ほど関数が短く、才能に恵まれた人が長い関数を作成できるんだと思います。


489 :仕様書無しさん:04/12/28 11:31:47
作成期間が短ければ短いほど、長い関数は作りやすいよ

490 :仕様書無しさん:04/12/28 11:35:14
if(/*分岐条件*/){

  //中略(数行以上)

  //ここだけ違う

  //中略(数行以上)

}else{

  //中略(上と一緒)

  //ここだけ違う

  //中略(上と一緒)

}

勘弁してくれ

491 :仕様書無しさん:04/12/28 11:51:39
>>489
それは能無しか手抜きの言い訳だよ。

関数にコメント書きとかを規約でこってり強制されてれば別だが)関数作る手間なんぞ30秒もないぐらい。
それと作成したもののテスト時の面倒さを比較すれば、急がばちょっと廻れとなるんだけど。
短納期だろうがなんだろうが、普通にいつもどおりやるだけだけどな〜。

492 :仕様書無しさん:04/12/28 11:54:36
むかーしDOSの頃の話だけど、
「おまえのプログラムは処理が関数に分けられてるので、
ソース読むときはファイルを開きなおしたりジャンプさせたりしなきゃいけなくって
読みにくい。『普通に』上から順に読めるようにしろ」
って言われたことあるよ。

493 :仕様書無しさん:04/12/28 12:01:38
switch hoge{

  //case文10個くらい

  case 1:
aho:
    swich hige{

      //case文20個くらい

      default:
        goto aho;
        break;
    }
  default:
    goto doaho;
}

if(/*条件*/){
boke:
  //中略(50行くらい)
}else{
doaho:
  //中略(50行くらい)
  goto boke;
}

こんな関数を1週間かけて書いていたアホ先輩がいたなぁ。
保守の必要が無いコードだったので、まともに動けばそれでいいんだけど全然動かないし('A`)

結局自分で関数5つ位に分けて作りなおしたら半日でできた

494 :仕様書無しさん:04/12/28 12:04:57
関数わけされてれば、バグ追跡のときとかも、やりやすいけどね。
この関数まではOKとか、それ以前に現象だけでこの関数が怪しいってわかるじゃん。


495 :仕様書無しさん:04/12/28 14:59:10
>>494
>関数わけされてれば、バグ追跡のときとかも、やりやすいけどね。
これ読んでちょっと思ったんだけど無能に限ってバグ取りの時
「最初から追いかけてけ」って言わない?
どうしても見当がつかないから、とかじゃなくて。
自分で設計・製造したところは動作見ると見当つくことが多い。
それでバグ出ると見当つけたところを調べようとするんだけど
横から「最初から〜」ってうるさい。
そしてそいつのソースは意味もなく一関数が一画面に収まらない。

496 :仕様書無しさん:04/12/28 18:08:48
少なくとも俺は大体のアタリをつけて追っていくな。

497 :仕様書無しさん:04/12/28 18:38:12
ことある毎に
1画面1関数とかいうやつは
1画面が80桁x24行とかになってる人なの?

498 :仕様書無しさん:04/12/28 19:11:38
1関数が長大になるのは、処理の切り分けが出来てない証拠だよな。

499 :仕様書無しさん:04/12/28 19:38:01
じゃ1関数24行以下絶対な、破ったら罰金24億まんえん


500 :仕様書無しさん:04/12/28 19:45:38
>>493
うはは。よく半日で動作を解析できるなあ。

501 :仕様書無しさん:04/12/28 20:11:23
ひとつのメソッドが

if(/*分岐条件*/){

  //中略(500行くらい)

  //ここだけ違う

  //中略(500行くらい)

}else{

  //中略(上と一緒)

  //ここだけ違う

  //中略(上と一緒)

}

っていうやつ×8。
修正するのに、置換した箇所数十箇所以上。

コピペ禁止!って叫びたくなった。

502 :仕様書無しさん:04/12/28 20:15:52
しかし>>490のコピペ

503 :仕様書無しさん:04/12/28 20:36:14
>>497
お前の1画面は80x24なのか?

504 :仕様書無しさん:04/12/28 20:48:35
1画面1関数って人は、処理の塊ごとに空行入れてる?
漏れは入れないと見づらい
でも入れると1画面に収まらない
(以下ループ)

505 :仕様書無しさん:04/12/28 21:18:23
>>504
>処理の塊ごとに空行入れてる?
当然いれてる。
入れた上で1画面で収まらないと
どこか無駄なコーディング(=設計が変)してるんじゃないかって
気持ち悪い。
関数ヘッダまで入れて1画面で収まると大変落ち着く。

506 :仕様書無しさん:04/12/28 21:31:19
一画面てのはどのくらいのことをいうんだ?
うちは132列×55行なんだが、広いのか狭いのか。

507 :仕様書無しさん:04/12/28 22:30:26
>>504
「処理の塊」ねぇ。
前の塊の出力がカレントの塊の入力になっていたり、
前の塊がカレントの塊とはあまり関係なかったり・・・
塊ごとに別関数にすれば良い っていったら煽りになってしまうのかな


508 :仕様書無しさん:04/12/28 22:35:09
普通はそう思うだろ。
C89なんかでインライン化できない場合、速度との関係でわざわざ1関数内に展開する必要がある時ぐらい。
あ、腐ったコーディング規約の時もやったか。


509 :仕様書無しさん:04/12/28 22:37:28
「処理の塊」ごとに{}を入れる人もたまにいるね。

510 :仕様書無しさん:04/12/28 23:40:11
>>509
俺がそうなんだけど、変かな?
そのブロックでしか使わない変数のスコープも明確になるし、関数に分けたくなったときに切り出しやすいと思ってさ。

他の人にとって読みづらかったりするもん?

511 :仕様書無しさん:04/12/28 23:42:14
オレモナー

512 :仕様書無しさん:04/12/28 23:45:02
>>510
やってないひとが見たら面食らうかもしらん。
むかーし、スコープを限定しようと思ってやってみたとき、
後でコード読み返したら自分のコードに面食らったもの、おれw

513 :仕様書無しさん:04/12/28 23:45:42
>>504-505
俺は空行嫌い。
空行入れるんだったら、コメント行入れてくれ。

メソッドとメソッドの間には1行空行を入れるけど。

514 :仕様書無しさん:04/12/29 00:24:54
/* 処理の区切り */


515 :仕様書無しさん:04/12/29 00:24:56
空行嫌いは治しておけ。


516 :仕様書無しさん:04/12/29 01:33:45
>>503
うん。MSXなので。

517 :仕様書無しさん:04/12/29 05:44:14
>>495
たぶん君が「最初から追いかけろ」と言われるのは
あたりをつけたところが見当違いだからじゃないかな
実際そういう奴多いんだが、このへんに違い無いという思い込みで
いつまでも正解にたどり着けなくて堂々巡りしてるのがいるんだよな

518 :仕様書無しさん:04/12/29 06:57:37
>>517
自分は見当つけたところであってることが多い。
外してたら最初から調べるし。
「最初から〜」言ってる奴は自分が最初からやっているから
自分と同じやり方ではないとイチャモンつけてるだけ。
こいつは仕事と全く関係無いことで
意見を求められて正直に答えたら
「なんでおれと同じ考え方ができないんだ!」とぬかしやがった。

519 :仕様書無しさん:04/12/29 07:35:51
>自分は見当つけたところであってることが多い。

皆そう言うw

520 :仕様書無しさん:04/12/29 08:13:26
本当に見当がつかないときは二分法だなあ。
デバッガでmainの半分まで実行させて様子を見る。
んで変な関数を特定、以下同様。

でもそんなことしたことって今までに一度しかないな。
大体見当つくもんね。

521 :仕様書無しさん:04/12/29 08:36:57
つまりその見当って奴が信用されてないってことでしょ
だから全部確認しろって言われる
素直に言う事聞いて信頼を得るように心がけるのが吉だと思うよ♪

522 :仕様書無しさん:04/12/29 13:41:20
「分かりました」と言って相手がよそを向いた隙に自由気ままにバグを特定すればいい

523 :仕様書無しさん:05/01/04 04:38:49
>>521
そんなんで得られる信頼なんか個人的にはイランのだけど。ダメ?

524 :仕様書無しさん:05/01/04 04:42:19
>>523
いいと思うよ。ただそれだと、いちいち干渉されるのは仕方がないね。
上司としても信頼できない部下には任せられないじゃん?
信頼を獲得すると結構好きなようにさせてもらえるから、
個人的にはそっちの方がお勧めだけど。

525 :仕様書無しさん:05/01/04 07:33:57
>>524
524のいうところの上司の信頼を得るというのは理解出来ない。

自分は上司がミスをしていれば指摘するし、代案も出す。
設計レベルのミスは下手すると後でデスマになるからね。
でも上司にしてみれば
俺の仕事にケチつけた=信頼出来ない。
めちゃくちゃな指示に反論すると
俺の指示を聞かない=信頼出来ない。
そして上司のスキルは低い
(5年目にもなって上の人間に
「仕様変更があるとあちこち修正しなくてはいけなくて大変。
 何か良い方法ないですか」なんて聞くなよ)。

信頼を得る気にならんのだが。

526 :仕様書無しさん:05/01/04 09:29:37
>>525
そうとう頭悪いな

527 :仕様書無しさん:05/01/05 04:05:40
経験が浅いみたいだから、視野が狭いだけじゃない?
これからいろいろな人の下につけば変わっていくよ、きっと。

528 :仕様書無しさん:05/01/05 04:06:12
あ、525自身のことね。

529 :仕様書無しさん:05/01/05 07:10:26
>>527
>経験が浅いみたいだから、視野が狭いだけじゃない?
>これからいろいろな人の下につけば変わっていくよ、きっと。
これが
「まともな人の下で働けば、信頼を得るというのが
 どういう意味だか分かるよ」
と言う意味なら、
575 は簡単に「信頼を得られれば〜」という人間への当てつけで
あえてこういう表現をした(上司についての記述は事実)。
おまえらはこんな人間の下で働いたことがあるのかと。
上司がまともな人間なら信頼してもらえるように頑張るさ。
「こんなの序の口。世の中もっと変なのイッパイいる。
 経験積めばこのくらい大したことないって分かる」なら
そんな変な経験積みたくないから
そんなところで働かなくてもいいように気をつける。

530 :仕様書無しさん:05/01/05 14:08:13
これはダメだな。

531 :仕様書無しさん:05/01/05 15:07:44
会社としてはリストラの第一候補に入れたい人物だね

532 :仕様書無しさん:05/01/05 18:39:12
ああ単なる「バグ追跡方法の選択」が、リストラ候補の話にまで

533 :524:05/01/05 20:44:12
>>525
信頼を得た状態というのは、
  部下:間違ってますよ。
  上司:おまえがそういうなら間違いかも。再考するよ。
と言った展開になる状態のこと。

わざわざ指摘をすると言うことは、
上司の主張を変えさせたかったんだと思うけど、
そのためには信頼を得るのが最善手。
だから>>525のような人にこそお勧めしたいんだけど、
その気にならないなら仕方ないね。
いつまでも疎まれる方がいいならそうすればいいと思うよ。

もっとも、上司の主張を変えるのは既に諦めていて、
何の戦略もなく単に反発してるだけなんだろうけど。
そんなまねてしてたらますます嫌われるわな。
自業自得だわ。

534 :仕様書無しさん:05/01/05 21:12:33
ダメ上司との付き合い方はこっちでやってくれな。
http://pc5.2ch.net/test/read.cgi/prog/1102652286/

535 :仕様書無しさん:05/01/05 21:17:31
>>534
そっちは付き合いたくないと言っているわけだがw

536 :仕様書無しさん:05/01/05 21:22:46
>>533
そんな特定の個人の言う事しか聞けん奴の信頼なんて
かえってヤバイと思うけどなあ。
誰からであれ間違いを指摘されれば「そうかすまんな」って応じる普通の人だって
いるわけだし。

537 :仕様書無しさん:05/01/05 21:25:58
>>536
確かにそういうタイプの人間にへんに信頼されると、馬鹿上司が作り出した
デスマーチに引きずり込まれる可能性が高くなるので、適度に遠ざけておくのが良いな。

538 :仕様書無しさん:05/01/05 21:57:22
>>524
524 は常識で考え過ぎ。
上司がまともな人間ならその考えは正しいよ。
ただこの上司の場合は信頼を得られても
>  部下:間違ってますよ。
>  上司:おまえがそういうなら間違いかも。再考するよ。
にはならない。
なぜなら、信頼を得るというのは上司の奴隷になることだから。
言っておくが、少なくとも
「設計とC言語はこちらが上」と認めさせる程度のことはした。
それでも仕事の妨害でもなんでも平気でするような人間だ。
辞める前にこの上司の指示通りの処理をしたことがあるが
(不条理な作業じゃなかったから)それだけで
「俺様の下僕になる気になったか( ̄ー ̄)」という
態度で接してくる。
吐き気がした。

下の人間でこの上司と一度でも仕事をしたことある人間は
この上司には近寄らない。
後輩で処世術として太鼓持ちをしていて
この上司に気に入られている奴はいたが、
そいつですらこの上司と働くより別の人間とのデスマを選んだ。
それでも 524 が「信頼を得る〜」と言えるなら
こういう人間に会ったことがないから想像できないか
奴隷根性が染み込んでるかのどちらかだと思う。

539 :538:05/01/05 22:00:48
>>534
すまん。
リロードする前に書き込んだ。
以後この件ではスルーする。

540 :524:05/01/05 22:24:31
>>538
「信頼を得る」という意味が理解できないと言うから説明したんだよ。
俺は一貫して>>533で説明した意味で使っている。
それを奴隷になるという意味だと勝手に再定義して反論されても困る。
それは俺の主張に対する反論じゃない。別に奴隷になることを勧めてないから。
詭弁はやめてくれ。

541 :仕様書無しさん:05/01/05 23:03:28
言い方を変えてみたらどうかな
信頼を得るという自分が譲歩してるみたいなやり方が気に入らないらしいから
相手に自分を信頼させるという戦略、みたいな攻撃的表現ならどうよ

542 :仕様書無しさん:05/01/05 23:45:22
まぁ、540には、「イエスマン以外は一切認めない」という人間がいることが信じられないんだろう。
それは幸せなことだ。

543 :仕様書無しさん:05/01/05 23:52:56
>538
>辞める前にこの上司の指示通りの処理をしたことがあるが
>(不条理な作業じゃなかったから)それだけで
>「俺様の下僕になる気になったか( ̄ー ̄)」という
>態度で接してくる。
それは「言う事を聞く」と信じさせただけで、信頼を得たとは言わない。
いわば信頼の「信」だけしか得ていない。
上司がプライドを捨てて貴方を「頼る」ようになって、はじめて「信頼」を得たと言うのだ。

544 :仕様書無しさん:05/01/06 00:23:11
>>543
そんな手間のかかることしててコストに見合うのかなあ。
さっさと離れて普通の人を上司にしたほうが楽で手っ取り早い気がするが。

普通の人なら自分が間違ってたら素直に認めるし
間違いを指摘した人間に感謝して信頼するようになるでしょ。
信頼ってのは結果についてくるものだからさ。

545 :仕様書無しさん:05/01/06 00:25:08
まぁ上司が>>544の言うところの「普通の」人なら部下は>>544程度の奴でも勤まるよね♪

546 :仕様書無しさん:05/01/06 07:22:41
それは言っちゃいかんだろう。皆黙っていたのに・・・

547 :仕様書無しさん:05/01/07 14:18:02
>537
前の職場にいたなぁ〜
上司からしてみれば、信頼している部下というより、便利な道具としか見えていない。


548 :仕様書無しさん:05/01/08 00:47:14
部下に逆らわれることに慣れてない上司って結構いるよね

549 :仕様書無しさん:05/01/10 23:30:15
重要そうなキーワード以外はそのまま

int btMenuNum1 = 1;
int btMenuNum2 = 2;
if (…) {
 if (…) {
  switch(m_lMenuNum) {
  case 3:
   for(btMenuNum1; btMenuNum1 < m_lMenuNum; btMenuNum1++){
    PutItemEnabled(btMenuNum1,FALSE);
   }
   break;
  case 6://need modify
  case 7:
   for(btMenuNum2; btMenuNum2 < m_lMenuNum; btMenuNum2++){
    PutItemEnabled(btMenuNum2,FALSE);
   }
   break;
  default:
   break;
  }
 }else{
  …
 }
 …
}
中国の方(名前読めないけど)、勘弁してください orz

550 :仕様書無しさん:05/01/10 23:45:54
リファクタリング前のソースだろ?

551 :仕様書無しさん:05/01/11 01:02:16
もう完全に納品後で現在保守段階です

552 :仕様書無しさん:05/01/11 10:29:49
>>549
君はそれをどう変えて欲しい?
「インデントしてあるなんて綺麗でいいじゃないか」と思った漏れは中国様に
毒されていますかねぇ・・・

553 :仕様書無しさん:05/01/11 11:06:38
人はインデントのみに生きるにあらず。

554 :仕様書無しさん:05/01/12 10:18:05
char data[100];
long *p;
long q;

p=(long *)(&data[1]);
q=*p;


555 :仕様書無しさん:05/01/12 11:54:29
{
  bool hoge=false;

  func((unsigned int*)&hoge);
}

func(unsigned int *hoge)
{
  ......
  ......
  func(hoge);
}

556 :仕様書無しさん:05/01/17 14:26:48
辞めようと思ったほどじゃないんだが、

ファイルのパスを格納する変数が cPass
ログを保存するための変数が cRog 
関数名が Funk()

疲れる・・・・


557 :仕様書無しさん:05/01/17 14:52:48
ノリノリな会社だな

558 :仕様書無しさん:05/01/17 15:37:08
>>556
ローマ字のほうがまだ良いな・・・それ・・・


559 :仕様書無しさん:05/01/17 22:32:19
そこでUwaRiteですよ

560 :仕様書無しさん:05/01/17 23:11:22
出たUwaRite

561 :仕様書無しさん:05/01/18 23:31:48
排他制御するた関数はRock()に違いない

562 :仕様書無しさん:05/01/19 03:51:43
>ログを保存するための変数が cRog 

うちは cLog だな

563 :仕様書無しさん:05/01/19 07:27:48
ファイルは Opun()とRied()で読み出すのだろうか


564 :仕様書無しさん:05/01/19 10:00:40
clo-zu()とかも使ってるとみた

565 :仕様書無しさん:05/01/19 10:32:49
DataSyutokuKansu()とかな。



うちの後輩_| ̄|○

566 :仕様書無しさん:05/01/19 10:33:59
>>565
Kansuは要らないと思うけど
まーアリじゃない?

567 :仕様書無しさん:05/01/19 11:03:11
>>565
せめて「Shutoku」にして。

568 :仕様書無しさん:05/01/19 11:07:02
どこまで英語にするか、難しいよな。

確定申告のアプリ作ってて、減価償却費を取得するメソッドを最初
GetDepreciation にしてたら、途中で何のメソッドかわからなくなって、結局
GetGenkaShokyaku にした。

569 :仕様書無しさん:05/01/19 11:12:35
無理矢理英語にして訳解らんくなるよりは、潔くローマ字のほうが
可読性に優れていると思うんだけどね。


570 :仕様書無しさん:05/01/19 11:17:18
そこでJavaを使って日本語メソッド名ですよ。

571 :仕様書無しさん:05/01/19 11:50:14
ソースにASCII以外の文字をいれるな

572 :仕様書無しさん:05/01/19 11:51:35
>>570
海外の外注がその理屈で自国語のメソッド名をつけたら…

573 :仕様書無しさん:05/01/19 11:54:02
>>568
俺的ルールとして、

業務用語(名詞)は日本語(ローマ字)
動詞とシステム系は英語

にしてます。


○ getGenkaShokyaku()
× genkaShokyakuShutoku()

574 :仕様書無しさん:05/01/19 12:23:08
>>573
そしてそれを見た誰かが
「なんだよ Sho って!俺のルールでは Syo なんだよ!」

575 :仕様書無しさん:05/01/19 12:28:43
ウチの場合、

GetData()とか
DataGet()とか
DatGet()とか
GetDat()とか

全部、同一人物のソースなんですけどね。統一しろやゴルア


576 :仕様書無しさん:05/01/19 12:54:04
>569
同意
無理に英語にしなくてもよかれ。
つーか、自分でもわからなくなるからねぇ…

>574
俺のルールって…

577 :仕様書無しさん:05/01/19 17:38:50
>>575
そもそもGetDataなんて名前はあんまり使いたくないな。
どんなデータが返ってくるのか解り辛いじゃないか。

578 :仕様書無しさん:05/01/19 18:17:58
脳内仕様だから本人だけはわかるんだよ…

579 :仕様書無しさん:05/01/19 19:47:25
書いてから2週間以内ならね。

580 :仕様書無しさん:05/01/20 00:00:42
俺なら5時間だな

581 :仕様書無しさん:05/01/20 09:32:44
いや、究極に細分化されたオブジェクトなら、データが1つなんだよ。w
または、あれっていえば取り出すようなつーかーのなか。

582 :仕様書無しさん:05/01/20 23:08:59
辞めようと思ったほどじゃないけど、

<pre>
switch ( hoge->fuga ) {
case HOGEHOGE:
case FUGAFUGA:
case HAGEHAGE:
if ( hoge->fuga == HOGEHOGE ) {
tmp = hoge->hogehoge
...;
} else if ( hoge->fuga == FUGAFUGA || hoge->fuga == HAGEHAGE ) {
tmp = hoge->fugafuga;
...;
} else {
...;
}
function( tmp );
break;
default:
break;
}
</pre>

これって普通に使う方法なの?
switch文にする意味ないじゃんとか思ったんだけど。


583 :582:05/01/20 23:09:45
HTMLタグって使えないのね...orz
吊ってくる...


584 :仕様書無しさん:05/01/20 23:28:23
>>583
いきなりタグで始まるからJavaScriptかと思ったよ。
そしたら->とか出てくるし…

585 :仕様書無しさん:05/01/20 23:37:11
>>582
if文だけ使って書いたら、レビューでswitch使えって言われて、泣きながら書いてみたんじゃね?

586 :仕様書無しさん:05/01/21 03:40:18
その昔、行数で工賃が決まっていた頃のなごりであろう...

587 :仕様書無しさん:05/01/21 03:47:06
switch にする意味じゃなくて、
if を使う意味がないとは思った。

588 :仕様書無しさん:05/01/24 23:54:35
% find . ( -name *.h -o -name *.cc -o -name *.cpp ) -print 2>/dev/null | xargs -I {} egrep "for.*strlen" /dev/null {} | wc -l
229

もうダメポ、このプロジェクト...

589 :仕様書無しさん:05/01/25 00:11:15
>588
何がヤバイって、最早諦めきって*.hまで検索対象に入れている588の境地がヤバイ

590 :仕様書無しさん:05/01/25 10:31:54
>>589
そりゃ、インラインのメソッドで使ってるかも知れんし。

591 :仕様書無しさん:05/01/25 11:18:37
>588
そのココロは?
C++で文字列操作関数なんて使うな!ってこと?
それともforの終了条件に使うな、ってこと?
#strlenがinline実装されてたらうまく最適化されてくれたり、はしないか…

592 :仕様書無しさん:05/01/25 14:42:18
forの終了条件でstrlen()してるからループ一回ごとにstrlen呼び出しちゃう無駄なコード
ってことが言いたいんだろうと思うんだけど
コンパイラは文字列をいじってないことをちゃんと検出して最適化してくれるかな?


593 :仕様書無しさん:05/01/25 15:16:30
終了条件の文字列はforの中で絶えず変化するのですよ

594 :仕様書無しさん:05/01/25 15:30:37
文字列が他スレッドからも変更されていないことを検出するには
すべての文字を走査しなければならない。

普通にバイト数数えた方がまし。

ところで >588 の探し方だと

  for (size_t i=0, len = strlen(hoge); i<len; i++)

みたいなのもカウントされるわけだが。

595 :仕様書無しさん:05/01/25 22:54:36
「この部分はクラス化すること」って仕様書に書いてあった。
今目の前にある代物は、

元あった関数の数だけクラスがあって、各クラスはコンストラクタ+1関数で、メンバ変数を持つものは1つもない。
設計者がメンバ変数として考えていたであろうデータは、
.cppの1つにグローバル変数として定義され、extern修飾で各クラスから参照されていた。。。

なにかの冗談ですよね?

596 :仕様書無しさん:05/01/26 01:23:22
クラス図書かなかった設計者の負け。
まあ、書いたら今度は「わけわからん図を付けるな、ボケ!」なんだろうな。

597 :仕様書無しさん:05/01/26 04:44:13
クラス図書 かなかった

598 :仕様書無しさん:05/01/26 10:27:49
この先生 きのこる

599 :仕様書無しさん:05/01/26 12:27:36
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
      | ( ゚Д゚)  < 呼んだ?
      |(ノ  |)  
      |    |   
      ヽ _ノ
       U"U

600 :仕様書無しさん:05/01/27 03:05:45
(・∀・)キノコル!!

601 :仕様書無しさん:05/01/27 03:32:21
俺、いじめられてたのか、夏休みのクラス図書、かなかったよ…


602 :仕様書無しさん:05/01/27 03:44:10
>601
(;´Д`)?

603 :仕様書無しさん:05/01/29 15:41:46
>>601
そりゃお気の毒に。
俺なんか、かなきまくってたよ。

604 :仕様書無しさん:05/01/29 15:59:08
あの時ちゃんとかなけてればなぁ・・・

605 :仕様書無しさん:05/01/29 16:29:01
人間の深みなんて、かなく数できまるとこあるよな。

606 :仕様書無しさん:05/01/29 16:34:46
にんべんに夢とかいて儚い 人の夢ってかないわね

607 :仕様書無しさん:05/01/29 16:36:29
たかつてなら叶うと思う

608 :仕様書無しさん:05/02/04 08:25:55
struct MUMessage {
#define C1_MSG_MAX_LEN (0x100-4)
BYTE header;
BYTE len;
BYTE cmdcode;
BYTE index;
BYTE msg[C1_MSG_MAX_LEN];
MUMessage(){
header = 0x0C1;
len=0x00;
cmdcode=0x00;
index = 0x00;
memset(msg,0,C1_MSG_MAX_LEN);
}

};

609 :仕様書無しさん:05/02/04 20:48:17
そんなコードがあっても不思議じゃないと思う漏れはおかしいかな。



610 :仕様書無しさん:05/02/04 20:55:54
#define 以外は特に「辞めよう」って程じゃないね。

611 :仕様書無しさん:05/02/05 01:17:50
0x0C1っていい味出してるなー

612 :仕様書無しさん:05/02/05 05:44:18
>>611
なんか懐かしい気がするとおもってたら、印ъnアセンブラだ。
(C1H だとラベルと見なされる為、0C1Hと表記する)

613 :なぎさっち ◆Nagi/FmYMM :05/02/08 09:49:31
ルイージスレあげ

614 :仕様書無しさん:05/02/09 00:30:58
(0x0)ウェーイ

615 :仕様書無しさん:05/02/10 10:13:54
VB.NET

Private Structure _HDD_Data
Public FreeSpace As UInt64 '空きサイズ
Public Size As UInt64 '全体サイズ
Public Percentage As Double 'パーセント
Public Data_Flag As Boolean 'データフラグ(有り:true,なし:false)
Public Data_Show As String '表示内容
End Structure

氏ね!

616 :仕様書無しさん:05/02/11 10:20:07
突っ込みどころはどこなんだろう

617 :仕様書無しさん:05/02/11 10:24:43
ネーミングセンスじゃね?

618 :仕様書無しさん:05/02/11 10:35:54
Private宣言(ローカル変数宣言)の中に
Public宣言(グローバル変数宣言)が混じっていることではなかろうかと
呟いてみるクラシックVB厨。

619 :仕様書無しさん:05/02/11 12:28:35
class A {
 public:
  int hoge;
};

class B {
 private:
  A fuga;
};

こういうのって勝手に解釈してた。
(いや、これが正しいのかは知らんけど)


620 :仕様書無しさん:05/02/12 11:14:05
>>619
どこが問題?
別に、単にSetter/Getterでラップするだけなら、それでもいいと思うけど

621 :619:05/02/12 11:52:36
>>620
いや、どこも問題ないよ。>615 のVBのソースをこんな風に解釈してたって意味。


622 :仕様書無しさん:05/02/13 17:45:46
今度入った会社でVBばかりなのだが、以下の条件に当てはまるソースは
すべてイヤになる。

・コメントがない
・インデントがない
・変数にプリフィックスが一切付いていない。
・関数名、変数名が漢字(生理的に気持ち悪い)
・コントロールのプロパティを省略してある(Text1.Text = "a" を Text1 = "a"みたいな)
・コントロール名がデフォのまま(Command1だとかPicture1だとか)
・型を無視している(Date型なのに dteWk = "2005/02/13" とか)

「読みやすく」「分かりやすく」「コンピュータに優しく」
この3原則を守れば、上記みたいなソースは作らないはず。
プロとしてのプライドを持ってほしいよ。

623 :仕様書無しさん:05/02/13 17:53:11
>622
>・コントロールのプロパティを省略してある(Text1.Text = "a" を Text1 = "a"みたいな)

それ、うちの先輩・・・_| ̄|○
どこで聞きかじってきたか知らんが、「このほうが高速だ!」と言い張って譲らない。

624 :仕様書無しさん:05/02/13 17:54:57
えっプロなの?w

625 :仕様書無しさん:05/02/13 18:30:27
> 「このほうが高速だ!」

( ´,_ゝ`)プッ

626 :仕様書無しさん:05/02/13 18:48:31
>>625
たしか VB Magazine あたりに書いてなかったっけ?

627 :仕様書無しさん:05/02/13 18:57:33
>Text1.Text = "a" を Text1 = "a"みたいな

なにが悪いのかよく分からんが?

628 :仕様書無しさん:05/02/13 20:06:17
>>627

629 :仕様書無しさん:05/02/13 20:56:03
>>627


630 :仕様書無しさん:05/02/13 21:00:48
>>627

631 :仕様書無しさん:05/02/13 21:17:27
そう
>>627

632 :仕様書無しさん:05/02/13 21:31:52
つまり誰も説明できないということでF/A?

633 :仕様書無しさん:05/02/13 21:34:08
>>627==>>632

634 :仕様書無しさん:05/02/13 22:00:38
>>632
そういうことですw

635 :仕様書無しさん:05/02/13 22:57:09
>>627
>・変数にプリフィックスが一切付いていない。
>・関数名、変数名が漢字(生理的に気持ち悪い)
>・型を無視している(Date型なのに dteWk = "2005/02/13" とか)
これらには同意するのか?

636 :仕様書無しさん:05/02/13 23:31:15
プリフィクスはまぁ……コーディング規約とかその辺はいろいろと事情もあろうから
なけりゃないで気にならんけど
他は622に同意。
VBっつーか、VBAから入ってきた人がやりがちなんだよなぁ > 識別子に非ASCII文字

637 :仕様書無しさん:05/02/13 23:39:12
規定のプロパティを省略すると高速になる!ってのも、VBAやAccessやってた人間が
抱きがちな迷信という気がする。オブジェクトとオブジェクトを繋ぐ!や.が少ない方が
高速、っていうのはありだけどね。

638 :仕様書無しさん:05/02/13 23:46:39
>>635
>・変数にプリフィックスが一切付いていない。
俺は昔、integer型の範囲に収まらない変数にinteger使ってるソースの修正を担当させられた
ことあるんだが、コーディングルールでプリフィクス付けなきゃいけなかたんで、変数名変更
とそれに伴うテストでウンザリしたことある
>・関数名、変数名が漢字(生理的に気持ち悪い)
生理的に気持ち悪いものはしょうがないでしょ
>・型を無視している(Date型なのに dteWk = "2005/02/13" とか)
これ代入時にDate型に変換されるでいいのかな?いいのならこの記述でいいと思うけど。

>Text1.Text = "a" を Text1 = "a"みたいな
これはあれだね。コントロールのデフォルトでなに代入されるか、ぱっと見でわかんないと
嫌だということだろうね。俺も嫌だな。テキストボックスぐらいならいいけど、他のでやら
れたらデフォが何か調べる手間が発生するかもしれないし。

639 :仕様書無しさん:05/02/14 07:42:02
>>622
コメントが全く無いのは流石に困るが、多ければよいというわけでもなかろう。
「究極のプログラムとは、コメントの必要がないプログラムである。」ってかどっかのハッカーが言って気がする。

640 :仕様書無しさん:05/02/14 08:27:19
>>638
>>・型を無視している(Date型なのに dteWk = "2005/02/13" とか)
>これ代入時にDate型に変換されるでいいのかな?いいのならこの記述でいいと思うけど。

だとしても、明示的にDate型にキャストするのが正当かと・・・。
If IsDate("2005/02/13") Then dteWk = CDate("2005/02/13")

641 :仕様書無しさん:05/02/14 08:36:52
>>639
コメントが要らないほど意図がはっきりとした明確なコードということでしょうね。
それを目指して書いてはいますが、やっぱりところどころコメントが必要です。
道は険しいっす。

642 :仕様書無しさん:05/02/14 08:45:11
date型に定数を入れる場面ってどんなのだろう。サンプル画面とかかな。

643 :仕様書無しさん:05/02/14 11:38:23
つうか、デフォルトプロパティへの代入は高速だったはず。
可読性が低くてやらないけど、VBさん的にはオブジェクトの参照がデフォルトプロパティに対しては早いはず。

(デフォルトは最初から参照を持っているけど、Textと書いた場合は他のプロパティと同様に探査するだったような・・・。)

まあ、可読性を犠牲にするほどの差ではないはず。

644 :仕様書無しさん:05/02/14 12:18:00
>>643
VBってプロパティを探索するの?

645 :仕様書無しさん:05/02/14 14:35:13
なんだかんだ言って、VB の話題になるとみんな饒舌になるな。

646 :仕様書無しさん:05/02/14 14:49:24
VBの話題になるとさっぱりついていけません(´・ω・`)

647 :仕様書無しさん:05/02/14 14:51:17
VBの話題になると、ツッコ見所満載&みんな言いたいことがたくさんあるからだろうな。

648 :仕様書無しさん:05/02/14 17:49:10
>>639
よくあるのが、
「究極のプログラムとは、コメントの必要がないプログラムである。」
これを、「コメントを書く必要がない」と勘違いしちゃうケース。
どんなに見やすいソースでも、コメントが書いてないよりある方がベター。


649 :仕様書無しさん:05/02/14 18:09:47
>>648
個々の行の説明は、アクロバットじゃない限り要らないけど、
大きい流れに付箋紙貼るようなコメントは欲しいよね。

関数化されていて関数名読めば判るつくりとはいっても、関数名に日本語使うわけじゃないし。
(日本語関数OKでも使いたくは無いしね。)

650 :仕様書無しさん:05/02/14 21:09:27
日本で開発する以上よほどの事情がない限り日本語のコメントは必須でしょ。
目的の処理してる個所探すのに日本語で検索かけらんないのは困る。

なんか目からウロコ落ちるような反論があると嬉しいけど

651 :仕様書無しさん:05/02/14 21:25:41
コメントが正しいことの確認をとる方法があれば良いのだが

652 :仕様書無しさん:05/02/14 21:40:24
日本語コメントなんかをキーで検索すると取りこぼしが多すぎる
危険性を分かっててやってるならいいけど

653 :仕様書無しさん:05/02/15 00:11:03
そこでmigemoですよ

654 :仕様書無しさん:05/02/15 00:40:15
ソースにコメント入れないのは、論文に脚注や文献一覧を入れないようなモンだ。


655 :仕様書無しさん:05/02/15 00:51:09
まぁただの自己満足だろうな。

656 :仕様書無しさん:05/02/15 01:48:07
俺は素直に /* 以下のやり方は http://xxxxx/ で見たのをパクった */ と書いておくぜ

657 :仕様書無しさん:05/02/15 06:44:48
>>648
どう考えても
 int i = 1; // 初期値 1
というコメントは無いほうがベターだと思うが。

658 :仕様書無しさん:05/02/15 06:51:38
>>657
お前は何の話がしたいんだ

659 :仕様書無しさん:05/02/15 07:35:27
>>658
648の言う「コメントが書いてないよりある方がベター」というのは
条件付じゃないと成り立たないですよ、という話。

660 :仕様書無しさん:05/02/15 09:09:50
今の職場のコーディングルールが「コメントは各行に付ける」だから
>>657の例みたいのが量産されてる。
たとえば変数aとbの値を入れ替える処理があった場合、

/* 変数aとbの値を入れ替える */
tmp = a;
a = b;
b = tmp;

普通こんな感じで処理のブロック毎にコメント入れると思うんだけど、


tmp = a;/* aの値をtmpに退避する */
a = b;/* aにbの値を代入する */
b = tmp;/* bにtmp(元a)の値を代入する */

て感じにされてる。
初心者や元コボラーにも処理が追いやすいようにと始めたルールらしいんだが…

661 :仕様書無しさん:05/02/15 09:23:03
ワロタ

662 :仕様書無しさん:05/02/15 10:34:25
>>660
「コメントは各文に付ける」ではなく「コメントは各行に付ける」ならば
tmp = a; a = b; b = tmp; /* 変数aとbの値を入れ替える */
で良いようなw


663 :仕様書無しさん:05/02/15 10:57:12
>>662
どうせなら

 tmp=a, a=b, b=tmp;

で方がよいのでは?



664 :仕様書無しさん:05/02/15 11:59:32
>>660 のコメントの例もかならずしも、イイとは
思えないんだがな。だれが見てもaとbの値を入れ替えるのは
わかるんだから、「○○だから値を入れ替えます」くらいは
書いて欲しい罠。



665 :仕様書無しさん:05/02/15 13:45:01
>>660
もうこんな感じでいいじゃん。

a ^= b; /* a と b の排他的論理和の値を a に代入する */
b ^= a; /* a と b の排他的論理和の値を b に代入する */
a ^= b; /* a と b の排他的論理和の値を a に代入する */


666 :仕様書無しさん:05/02/15 15:34:51
演劇のプログラムと同じで式目だけ書いてあれば十分だよな。
大体こういう流れです〜。って。

個々の行にコメントってそれは台本だよ。

667 :仕様書無しさん:05/02/15 20:50:50
俺も「コメントは全行につける」ってプロジェクトに居たことがあるけど、
そこでは41カラム目に/* */ っていうのが主流でした

668 :仕様書無しさん:05/02/16 00:47:03
そして変更した行は72カラム目から /*20050216 SZK*/ みたいな
印なんか付けさせられちゃったりなんかしてえ、もうコノコノ!

669 :仕様書無しさん:05/02/16 05:51:39
そのうち殆ど全ての行に日付が付くんだよ。

670 :仕様書無しさん:05/02/16 05:58:58
作成者の名前と修正者の名前と、修正承認者の名前も付くんだろ?

671 :仕様書無しさん:05/02/16 07:35:41
orz=3;

672 :仕様書無しさん:05/02/16 07:45:50
修正箇所にコメントで修正者と日付をつけるってのは、
今でもまだある習慣なの?
ここ5年くらい、
管理ツール任せ(CVS, ClearCase, SourceSafeとか)ってのにしか、
当たったことない俺は運がいいのか・・・。

673 :仕様書無しさん:05/02/16 09:06:23
課長以上が管理ツールに理解を示してくれないので、
いまだにコメントに日付と作業者、
変更内容と変更前のコードを残していまつ。

あとC言語なのに何カラム目から、というコーディングルールが
やたらと多いでつ。

674 :仕様書無しさん:05/02/16 11:10:36
>>673
インデントみたいな話はエディタのマクロとか、整形フィルタに
おまかせって話になんないの?


675 :仕様書無しさん:05/02/16 18:28:27
何カラム目から、っていうのはASM時代からの遺物ですね。それで見やすい・・・って人が
絶滅してくれないと変わらないと思われ

676 :仕様書無しさん:05/02/16 20:41:46
印刷して紙の右半分だけ読んで行くんだろうな

677 :仕様書無しさん:05/02/17 01:35:10
if (!"".Equals(str)foo=Namespace.Subnamespase.Subnamespase.Bar.MethodName(arg);

こんな書き方ホントやめてくれ…orz

using Namespace.Subnamespase.Subnamespase;

// ...

if (str != "") {
  foo = Bar.MethodName(arg);
}

って書き換えたら、「こんなコード書くなよヴォケ!」だしな…orz

678 :677:05/02/17 01:37:59

if (!"".Equals(str)foo=Namespace.Subnamespace.Subnamespace.Subnamespace.Bar.MethodName(arg);


if (!"".Equals(str))foo=Namespace.Subnamespace.Subnamespace.Subnamespace.Bar.MethodName(arg);

…orz

679 :仕様書無しさん:05/02/17 01:40:51
>>608がどういう処理を行うのか全く読めない俺は一体・・・

680 :677:05/02/17 02:51:05
訂正したのにネームスペース多くなってるしな…orz orz

681 :仕様書無しさん:05/02/17 04:14:50
>>679
他に書き様はいくらでもあるとは思うが、
古参のプログラマたんとかだと
普通に書くコードの様な気がするなあ。

何が目的で書かれたコードかはさておき、
辞めるってほどのコードじゃないわ、俺的には。
作法守って書いたところで、最終的なバイナリなんて
ほとんど変わらないの、目に見えてるだろし。

682 :仕様書無しさん:05/02/17 04:25:21
(少なくとも、自分の担当に回されたくないコードではあるが)

683 :仕様書無しさん:05/02/17 04:36:19
回されたら…まあ普通に書き直すわな。
ていうかマクロ乱用はまだいいんだよ。
元が問答無用に強力な機能である分、副作用無しにビルドが通ってるなら、
簡単に置換できるから。

それよりも、namespace shotgun とかぶっ放されてるヘッダを見ると
本気で途方にくれる。
どこから手を付けていいものやら。

684 :仕様書無しさん:05/02/17 06:05:18
(書き直したら、「こんなコード書くなよヴォケ!」と言われたと書いてあるのは気のせいか・・?
 ぃゃ・・そう考えると、この会社辞めようと思ったダメ上司の一言スレが適当だなァ・・・。)

>>683 具体的なソースPlz(ぇ

685 :仕様書無しさん:05/02/17 11:55:21
>>665
亀レスすまそ。ええとそのアルゴリズム…
a:0, b:0 → a:0, b:0
a:0, b:1 → a:1, b:0
a:1, b:0 → a:0, b:1
a:1, b:1 → a:1, b:1
あ。ホントに入れ替わってるじゃん!
知らなかった…厨房の頃からCはじめてx86系アセンブラもかじったことあるのに。

これってまさか常識、とか?

686 :仕様書無しさん:05/02/17 12:00:40
常識的に使うようなコードではないが、
アルゴリズム事典とかを手元に置いてる香具師なら
見覚えくらいはあるはずだ。


687 :仕様書無しさん:05/02/17 12:14:07
まあ自分で発見するのは最高に難しいのは確かだが

688 :仕様書無しさん:05/02/17 12:48:11
実際につかっててあんなコメントだったら
1.笑えるやつ
2.怒るやつ
3.分からないやつ
の三つに分かれそうだ

689 :仕様書無しさん:05/02/17 12:52:06
知識として知っているのは常識
そして、決して使わないのも常識
良くないコーディングテクニックとして、
頻出している例だからね

690 :仕様書無しさん:05/02/17 13:01:39
よくない理由を教えてくだされ

691 :仕様書無しさん:05/02/17 13:13:36
適当に思いつくままw
速い、小さい、知らない人間を驚かす、可読性悪し

692 :仕様書無しさん:05/02/17 17:16:02
専務が「本物のオブジェクト指向」って太鼓判を押すプロジェクト@VB.NET
どうも、モデルとビューに分けている(専務談)のがその理由らしい。

システムで使う全てのフォームクラスを「View.dll」に集めて、それらから使う全てのモデルクラスを「Model.Common.dll」に集めてある。
フォームとモデルは1対1に対応付けられているから、ある機能を修正するには、常にシステム全体に影響する2つの dll を修正しなければならない。
もちろん、モデルの「Common」なんて名前に意味はない。中身は各フォーム用のモデルクラスだし。共通化されてるものなんて入ってない。
加えて、ビューとモデル間のデータの受け渡し方が異常。

まず、フォーム上の全てのコントロールの値と有効状態(Enabled)を、巨大な Hashtable に詰め込む。
Hashtable のキー名は "Lblなんとか_Value" とか "Btnなんとか_Enabled" とか。
ボタンのキャプションとかラベルの Enabled なんていう、変わらないものもとりあえず詰め込んでおく。
モデルのほうではそれを受け取ったら、データを取り出して、処理して、処理後のデータを新しい Hashtable にコピーして返す。
返されたビューは、キー名を "_" で切って、コントロール名とプロパティ名を取り出し、コントロールにプロパティを設定する。
この時、モデルに渡した Hashtable と、モデルから帰ってきた Hashtable で、要素数と要素の並び順が同じでないといけない。

オブジェクト指向を理解してないやつが語る「オブジェクト指向」ほどたちの悪いものはないな、と思った。

693 :仕様書無しさん:05/02/17 20:06:58
>>692
なんつーか、それ、オブジェクト指向がどこにも出てきてないな。

694 :仕様書無しさん:05/02/17 20:34:33
>>679
大丈夫俺も読めない

695 :仕様書無しさん:05/02/17 21:13:38
XORで入れ替える技って年寄りにとっては常識的な技だし
ほとんど慣用句だから良くないテクニックとも言えなかった。
でも効率と可読性のバランス点が大きく可読性寄りになってる今日では
ふつう使わねーよってことだろう
まぁ年寄りがうっかり使っていたとしても暖かい目で見守ってくれや

696 :692:05/02/17 21:17:33
>> 693
出てこないどころか、正反対の方向に向かってるのは勘弁して欲しいと思う。ほんと。

697 :仕様書無しさん:05/02/17 21:20:29
カプセル化しているつもりが実は、ってやつだな。

698 :仕様書無しさん:05/02/17 21:26:06
>>679>>694

struct MUMessage {
#define C1_MSG_MAX_LEN (0x100-4)
BYTE header;     // publicフィールド
BYTE len;       // publicフィールド
BYTE cmdcode;   // publicフィールド
BYTE index;      // publicフィールド
BYTE msg[C1_MSG_MAX_LEN];  //やっぱりpublicフィールド
MUMessage(){    // コンストラクタ
header = 0x0C1;
len=0x00;
cmdcode=0x00;
index = 0x00;
memset(msg,0,C1_MSG_MAX_LEN);
}

};
// ただこれだけのこと。
// 構造体がクラスのように使える見本だな。

699 :仕様書無しさん:05/02/17 22:16:26
XOR入れ替えって、両方が同じ値のときに、入れ替えられないよな?

700 :仕様書無しさん:05/02/17 22:37:40
>>665のaとbが実は同じ変数なら、入れ替わらない。(両方0になる)
同じ値なだけで別の変数なら、入れ替わる。(685の4つめの例)

701 :仕様書無しさん:05/02/18 00:25:40
>>672
組み込み基盤開発やっている古い友人が、FDにバックアップ取ってるとか、納品に使うとか言ってたな・・・。
何気に2人で電気屋に行ったときUSBメモリを目に留めて、説明してやったら64Mの物を買って、やたら感動してたっけ。

702 :仕様書無しさん:05/02/18 12:25:23
>>656

404 Page Not Found

703 :仕様書無しさん:05/02/18 14:52:38
>>698
>構造体がクラスのように使える見本だな。

君、何か大きな勘違いをしてやしないかい?


704 :仕様書無しさん:05/02/18 15:52:29
いや勘違いじゃ無いでしょ。事実に今気づいたってだけで

705 :仕様書無しさん:05/02/18 16:24:10
>698 は、struct と class に機能上の差異がない事を知ってて
「構造体がクラスのように使える」と言ってるんだよ。
つまり、

すまん、やっぱ意味不明だわ。

706 :698:05/02/18 17:52:16
すいません適当な事言いました。
実際によく分かってない痴呆なんで許してください。

構造体にコンストラクタをつけているのが
まずいとばかり思っていました。

他に変な部分があるか分からない…

707 :仕様書無しさん:05/02/18 22:33:48
C++のばやい構造体もクラスもおなじものなので
見えるも何もないと。
違いはデフォルトのアクセス指定子くらい。

708 :仕様書無しさん:05/02/19 13:14:31
>>695
大体にして、その程度の入れ替えなら、きょうびは普通
レジスタ一本無駄に使った方が、コードも短けりゃ
速度だって圧倒的に速いもの。

古いコンピュータの教科書とかには、たまに見かけるね。
本当にレジスタ数が足りなくて仕方なかった頃の話。
ゼロレジスタが無いから、自分とANDとって、自前で
生成したりするんだよね、ゼロを。

709 :仕様書無しさん:05/02/19 13:23:57
自分とXORじゃなくて? 今でもコード長削減のためそれは使うんじゃないかな。

710 :仕様書無しさん:05/02/19 13:37:38
アセンブラの世界には独特のテクがあるからな。
PUSH BC
POP DE
を知ったときの衝撃。(Z80の話)

711 :685:05/02/19 16:10:40
>>708
自分とANDを取っても何も変わらんだろが。

>>709
逆アセンブルかけてみると関数の先頭部分にはたいてい「xor ecx, ecx」みたいなのがありますよね。

ところで。今調べたらx86系では「xchg eax, ecx」で入れ替えられるっぽいですね(これ使えれば楽なのに…)


712 :仕様書無しさん:05/02/19 19:12:37
>711
レジスタ-メモリ間で使うとdでもないことになるのでだめぽ>xchg

713 :仕様書無しさん:05/02/20 01:05:50
ム板から転載。
ttp://www.dd.iij4u.or.jp/~okuyamak/Information/xor_fixed_swapping.html

714 :仕様書無しさん:05/02/20 16:10:10
>>713
どうでもいいが説得力皆無の文章だな

715 :仕様書無しさん:05/02/20 17:22:50
>>714
どの辺が?

716 :仕様書無しさん:05/02/20 18:25:02
>>715
ここら辺とか

> Cにおいてはポインターに限らず、 ほとんどあらゆるものが自動的にキャストされます。 キャストした結果が int と一致するとは限りません。 いらんところまで交換されてはたまりません。

>では、レジスターの中身を、どうしても交換するしかない時は、 XOR を用いた手法は有効でしょうか? 答はここでさえ NO です。
>最近の高周波数で動く多段パイプラインを多用した CPU では、 この機構が有効に作用します。
>もし、レジスターネームをユーザー側が自由に差し替えられるならば、
>XOR を使って値を交換するテクニックは、 もはや使えないテクニックになったと言えましょう。

717 :仕様書無しさん:05/02/20 19:13:57
ふーん

718 :仕様書無しさん:05/02/20 19:18:07
>>716
どんな風に説得力がないのか、教えてくれないか?
漏れ、馬鹿の国から馬鹿を宣伝しに来たような見事な馬鹿だから、
ちゃんと解説してくれないとわからん。

719 :仕様書無しさん:05/02/20 19:33:06
取り合えず的を射ていないとは思ったな。

1. int*がintを指しているとは限らないだろう、というのはプログラムが
おかしいのであって、XORテクニックとは関係ない。それだったら、
+や-だって使えないだろ。だいたいCの保証範囲でない。

2. パイプラインの話は正しいのかもしれん。ただしパイプラインとレジ
スタリネームは関係ない。さらに、パイプラインを用いていないアーキ
でもXORの方が遅いことは十分考えられる。要はXORテクニックとパイプ
ラインはあまり関係ない。

結論はあっていたとしても、その理由が無関係だから説得力がない。

720 :仕様書無しさん:05/02/20 19:35:21
漏れもなんか説得力ないと思った。 その理由を一部。

> Cにおいてはポインターに限らず、 ほとんどあらゆるものが自動的にキャストされます。 キャストした結果が int と一致するとは限りません。
int*に自動キャストされる型なんてほとんど存在しないし、
int*で引数宣言してる関数に他の型が渡されたらどうなるか考えるのなんて無意味。
「strlenにint*のポインタ渡したら動かねぇ!」ってクレームつけてるようなもんだ。

> r3 = r1;…(1)
> r1 = r2;…(2)
> r2 = r3;…(3)
>という処理は(1)と(2) の r1 を別の実レジスターにマップすることが可能です。
こんな手法レジスタ足りないからやってるに決まってるだろ。
そこで堂々と第3のレジスタ出してくるのってどうよ。 んなもん使えたら使うっつうの。

>もし、レジスターネームをユーザー側が自由に差し替えられるならば、
少なくともPentium1〜4ではありえない前提。


721 :仕様書無しさん:05/02/20 19:40:35
(恐らくネタで書いたと思われる) >665 に
興奮しすぎですよオマイラ。
「中間変数なしに入れ替えられる」だけの
メリットしかないってのに、話が逸れまくりだ。

722 :仕様書無しさん:05/02/20 19:50:36
GCCでXORを使わない単純入れ換えを試したら、なんのコードも出てこないな。
コンパイラ内部の変数テーブルが入れ替わるだけなのだろう。
int*を引数に持つ交換関数経由でもinlineされて同じコードだった。

単純なコードを書いてコンパイラに任せた方がいいよ。

723 :718:05/02/20 19:57:48
>>719-720
馬鹿の国から馬鹿を宣伝しに来たような見事な馬鹿な漏れにも
ようやく理解できたよ、ありがとう。

724 :363:05/02/22 14:26:03
Struts使ってるJSPで、またまた見つけた面白コメント
<% /*

  ここにコメント化したいHTMLやらJSPやら

/* %>

マジ勘弁してください

725 :仕様書無しさん:05/02/22 23:18:01
>>724
そう?よくやるじゃん。








と、素で言いそうな連中ばっかのプロジェクトにいるんだ、今。 orz


726 :仕様書無しさん:05/02/22 23:21:04
>>724-725
ご愁傷様

727 :仕様書無しさん:05/02/23 00:47:55
int unko;

728 :仕様書無しさん:05/02/23 01:50:48
float f = ...;
if(f == 1.0f) { ...

↑に対して浮動小数点数の等値比較は危険だと警告が出たので、書いた奴に修正頼んだら、
次の日には警告消えてたんだけど、しばらくして偶然同じ箇所を見たら・・・

float f = ...;
float f1 = 1.0f
if(memcmp(&f,&f1,sizeof(float)) == 0) { ...

になってた。

729 :仕様書無しさん:05/02/23 01:51:59
>>727
test
hoge
foo
bar
の次にunkoがくるよ

730 :仕様書無しさん:05/02/23 03:04:56
>>728
目的を忘れて手段を追求ってヤツだね。
感動したw

当事者からしたら、たまったもんじゃないんだろうけど・・・

731 :仕様書無しさん:05/02/23 03:28:27
>>728,730
この場合、仕様が1.0fに「正確に等しい」のか
「ある程度の精度以上で等しい」のかが問題だろ。

もし正確に1.0fに等しいことを要求するなら下のようにするのが正しい。

732 :仕様書無しさん:05/02/23 04:10:25
ただしいはただしいが、こういうとここそコメントが欲しいところだな。
/* 厳密に一致するか比較するためビットパターンで比較 */
とか。

もちろんそういう仕様だったらの話だ。


733 :仕様書無しさん:05/02/23 04:17:59
MMOを作ろう!企画を立ち上げました。協力できる人はこちら
http://www112.sakura.ne.jp/~kaientai-project/creategame.htm


734 :仕様書無しさん:05/02/23 04:41:43
$length = length($user_id);
if ($length != 8) {
  &error("ユーザIDが不正です。");
  return;
}
for ($i=0; $i<$length; $i++) {
  $ch = substr($user_id, $i, 1);
  if (!($ch eq "0" or $ch eq "1" or $ch eq "2" or $ch eq "3" or $ch eq "4" or
  $ch eq "5" or $ch eq "6" or $ch eq "7" or $ch eq "8" or $ch eq "9")) {
    &error("ユーザIDが不正です。");
    return;
  }
}
# 以下、正常処理が続く

こんなのを、数百あるモジュールのほぼ全ての冒頭に
書かなければならないプロジェクトにいた事がある。

735 :仕様書無しさん:05/02/23 05:15:41
>>731-732
==で比較しておいて、警告についてはpragmaかなんかで消したいとこじゃなかろか。

736 :仕様書無しさん:05/02/23 07:30:42
>>734
Perlかな。関数化と正規表現使えよなあ…

737 :仕様書無しさん:05/02/23 11:09:35
>>731
>もし正確に1.0fに等しいことを要求するなら下のようにするのが正しい。
かどうかは浮動少数演算の実装に因るんじゃ…?

738 :仕様書無しさん:05/02/23 11:16:33
>>737
リテラルの1.0fと同一のピットパターンかどうか?という判定だと思えばよろしいかと。

739 :仕様書無しさん:05/02/23 13:30:08
>>738
「全く同じ値であれば、常に同じビットパターンになる」という保証があれば。

740 :仕様書無しさん:05/02/23 13:43:05
・プログラミングは仕様に対する揚げ足を取ることである

741 :仕様書無しさん:05/02/23 19:24:57
華麗にスルーされているが、
>>671
禿ワロタ。

742 :仕様書無しさん:05/02/23 23:40:49
>>741
http://pc5.2ch.net/test/read.cgi/prog/1101533335/479-

743 :仕様書無しさん:05/02/24 10:08:53
>>739
同じ値かどうかは関係ない、という仕様なんだよ、きっと。ビットパターンが重要。

744 :仕様書無しさん:05/02/24 16:31:47
>>742
それはくどい。
>>671のさりげなさがいい。
とはいえ、そのスレを先に見てたら面白くなかったかもな。

745 :仕様書無しさん:05/02/27 03:16:21
C++マですが、いまJavaのプロジェクトを一括で受けてます。

一括を受けなくても暮らしていける国に行きたいです。


746 :仕様書無しさん:05/02/27 10:04:51
>>745
スレ違い

747 :仕様書無しさん:05/03/02 19:54:17
うちの会社で作ってるコードに「ユーザのペア」を扱う処理がある。
ペアのうちの最初のユーザは"主導権"をもっているので
最初のユーザと二人目のユーザには別の処理を施すことがよくあるし、
もちろん同じ処理を施すこともある。

で、こんなコードが書かれていた。

user_age = pair.users[0].age;
for( i = 0; i < 2; i++ ) {
        switch( user_age ) {
                [割と長いswitch-caseブロック (50行程度)]
        }
        if( i == 0 ) {
                [最初のユーザのための固有の処理(6行)]
        } else {
                [二人目のユーザのための固有の処理(6行]
        }
        user_age = pair.users[1].age; // 次の回のための準備
}

おそらく、この、割と長いswitchを2回書くのを嫌ってforループにしたのだろう。
でも、こう書いていてもらいたかった

func_of_switch( pair.user[0].age ); // 割と長いswitchを関数化して、ここではそれを呼ぶ。
[最初のユーザのための固有の処理]
func_of_switch( pair.user[1].age );
[二人目のユーザのための固有の処理]


748 :仕様書無しさん:05/03/02 22:13:36
>>747
ソーダネ

749 :仕様書無しさん:05/03/02 23:04:56
最初のユーザと二人目のユーザを、
共通の抽象スーパークラスをこさえてそれぞれ別のサブクラスに……
なんてのはアマアマですかそうですか。

750 :仕様書無しさん:05/03/02 23:29:31
あるユーザが最初のユーザにも二人目のユーザにもなる可能性があるなら
(上司と部下のペアみたいなの)別のサブクラスにはしないほうがいいと思う。

751 :仕様書無しさん:05/03/02 23:45:27
ユーザクラスを、ロールクラスをコンポジットさせたクラスにすれば良いと思うよ。
で、ロールクラス1に一人目の、ロールクラス2に二人目固有の処理を定義する。

752 :仕様書無しさん:05/03/03 12:56:12
>>747
>user_age = pair.users[0].age;
>user_age = pair.users[1].age; // 次の回のための準備

この二行もなかなか痛いね。

753 :仕様書無しさん:05/03/03 14:31:23
>>752
実はオーバーライドされている user_age の operator= 呼び出しが必要。

…なこたぁないか。

754 :仕様書無しさん:05/03/03 23:10:41
>>753
それって>>747の100万倍ぐらい嫌だw

755 :仕様書無しさん:05/03/09 02:09:41
#include <stdio.h>

int i,j,k;

int main()
{
 i=0;
 j=0;
 k=0;

 while(1){

..........
........... 

756 :仕様書無しさん:05/03/09 04:48:53
>>755 ワロスwwwww

757 :仕様書無しさん:05/03/09 07:37:13
>>755
それうちだ・・・
よく使う変数は一々ローカルで宣言しないで、モジュール内グローバルにした方が
動作速度が速くなるから、そうすべしと言う未開地の呪術医療のような社内ルールがあって、
時々わけわかんないバグを生む原因になってるが、
PDPの時代からCをやってた社長と、元コボラーがルールの変更を拒んでいる。

758 :仕様書無しさん:05/03/09 07:42:20
いちいちローカルで宣言したほうが早くなるような希ガス

759 :仕様書無しさん:05/03/09 08:39:14
レジスタ割り当てを理解できない(いちいちヒープに領域確保すると思っている)。

760 :仕様書無しさん:05/03/09 09:03:08
Cで、forの中のスコープに変数を定義した状態だと
1000回くらいループ回したあたりでメモリが足りなくなるから、
といって、外で定義していた新人が居た。

761 :仕様書無しさん:05/03/09 09:31:30
>>757
プロファイルを取って、その結果を突きつけろよ。

762 :仕様書無しさん:05/03/09 19:52:07
>>757
int i,j,k;

void func()
{
  for(i=0;i<10;i++){}
}

int main()
{
  for(i=0;i<10;i++)
  {
    func();
  }
  return 0;
}

こういう事態にはならないのか?

763 :仕様書無しさん:05/03/09 20:08:33
ファイルアクセス関係の変数は全部外部で定義しておいて、
Mainの先頭で全てのファイルをオープンして、処理が終わったら
Exit摺る前に全部のファイルを一斉に閉じる


というのは、うちの上司(オフコン畑出身者)の得意技だ_| ̄|○
「ファイルのオープン/クローズが一箇所にまとまって解りやすいだろう!」
なんて胸張って言われてもさあ_| ̄|○

764 :仕様書無しさん:05/03/09 20:19:22
>>763
途中でうっかり強制終了なんかなったら
大変なことになりそうだな

765 :仕様書無しさん:05/03/09 21:08:22
大変なことって?

766 :仕様書無しさん:05/03/10 00:03:47
地球が滅亡する

767 :仕様書無しさん:05/03/10 01:45:53
「大変です!火山がクローズできません!」・・・とか?

768 :仕様書無しさん:05/03/10 05:30:50
プロセスが閉じていないファイルを、
プロセス終了時に閉じるのは、
OSの責任だがなあ

769 :仕様書無しさん:05/03/10 09:41:02
9x系って一度に開けるファイルの数に制限なかったっけ?

770 :仕様書無しさん:05/03/10 09:50:36
>769
そりゃMS-DOSの話だろ。昔懐かしConfig.sysでFILES=なんちゃらって
設定で最大値を変えられたんだよなー。

771 :仕様書無しさん:05/03/10 11:19:15
>>768
ファイルはOSが閉じたとしても、エラーで終了したら内容に不整合が出てそうだ。
オフコンな世代は何故かOn Error Resume Nextとか大好きだしな。


772 :仕様書無しさん:05/03/10 13:41:37
>>769,770
いや、MS-DOS系に限らない。そりゃそうだ、リソースは無限じゃないからな。
たとえば、Linuxの場合:
ttp://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=GGLD,GGLD:2004-31,GGLD:ja&q=linux+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB+%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3+%E6%9C%80%E5%A4%A7%E6%95%B0

773 :仕様書無しさん:05/03/10 21:22:29
>>762
だからわけわかんないバグやグローバル変数が山のように。

774 :仕様書無しさん:05/03/10 23:07:19
会社で
template<class T>viod milli_sleep( T millisec ) {
        long micro_ms = millisec * 1000;
        micro_sec_sleep( ms );
}
こんな感じのコードを見かけた。
「テンプレート関数にしてあるのに、T、つこてへんやん!」
って思ったけど、
よく考えたら millisecがfloatとかdoubleのときに割と威力を発揮する
コードなのかな、って思った。

会社やめたい、っていうか、死にたくなった。


775 :仕様書無しさん:05/03/11 01:30:43
イ`

776 :仕様書無しさん:05/03/11 12:34:08
>>757
まじで?
律儀にそのルール守ってるの?信じられない・・・
おまいの他にまともな味方はいないのか?
変化を起こせない、受け入れられない会社って死んだも同然だな。


777 :仕様書無しさん:05/03/11 12:34:59
>>774
別におかしな事はしていない。
>millisecがfloatとかdoubleのときに
long でもいいし、なんなら operator*(long) を持つクラスでも。

778 :仕様書無しさん:05/03/11 19:17:06
一つのクラスに何行にもわたる引数が書かれてたとき。
public class hogehoge(String str,String str2,・・・・・・
・・・・・・・・・・・・
・・・・・・・・・・・・);
{ ... }

アフォか。そんな汚いソース書かずに一行でかけるようにいくつかにクラス分けろっつーの

779 :仕様書無しさん:05/03/11 20:42:32
ひとつの「関数クラス」にstaticメソッドが100個以上、メソッドの引数もものによっては100個以上、そんなクラスがいっぱい
クラスはstaicメソッド書くためとメソッドから複数の値を戻すためだけに使用し、メソッドの引数はintかStringかその配列だけ

会社は辞めた、アレは完成したんだろうか?俺が入った時点で2ヶ月遅れてたが

780 :仕様書無しさん:05/03/11 20:50:39
それは・・・不可能ではないが考えなおした方が良いという典型的な(ry
忘れたほうが幸せだよ

781 :仕様書無しさん:05/03/11 23:30:36
そんな無茶なプログラムが一度でも完成することがあるのか疑問。

782 :仕様書無しさん:05/03/12 01:17:22
>>779
おれの今のプロジェクトは、static関数オンパレードで、インスタンスなんかほんのちょっとしか
でてこないYO!

なんでJavaを採用したんだおまいら....

783 :仕様書無しさん:05/03/12 01:36:27
流行りだから

784 :仕様書無しさん:05/03/12 01:44:38
public class Hnsu
{
  public static int a;

こんなのなら見たことがある。
変数寄せ集め用のクラスを用意してグローバル変数を実装してるらしい。
ほかのクラスの関数もみんなstaticでHnsuクラスの変数を使いまくってる。

つうか "Hnsu" って何だよ "Hnsu" って
反芻かよ?牛かよ? せめて Hensuu って書けねーのかよ?

785 :仕様書無しさん:05/03/12 01:45:02
sage 忘れた
すまん

786 :仕様書無しさん:05/03/12 02:11:10
mshkshしてやった。
変数ならなんでも良かった。
今はHnsiしている。

787 :仕様書無しさん:05/03/12 02:12:23
catch(SocketException sex)

788 :仕様書無しさん:05/03/12 06:50:06
>>787
それはOKだろ

789 :仕様書無しさん:05/03/12 09:03:11
>>778
WindowsのAPI使うとき、たまにそう思う。

790 :仕様書無しさん:05/03/12 13:45:01
>784
Javaだが、今までのプロジェクトでそういうの二つあったよ。
どっちもアプレットで、画面の部品の参照を置いてあるんだけど
二つ開いたら処理が混ざって問題になってた。
アフォかい。


791 :仕様書無しさん:05/03/12 20:53:17
Javaでグローバル変数が必要な状況って何よ?

792 :仕様書無しさん:05/03/12 21:06:09
>>791
「プロジェクトのメンバーが、OO をよく知らない」
「リーダーがヴビ厨」
とか

793 :仕様書無しさん:05/03/13 00:51:30
詳細設計がCOBOLerだったら、そうなる

794 :仕様書無しさん:05/03/13 01:15:47
>>791
アプレットで非モーダルダイアログがオープンされているかを
判定するために、ダイアログクラスにstaticなフラグを埋めていた
アプリを知っている。
同じVM上で動く(って表現は正しいのか?)別々のアプレットが
まともに動きゃしねぇ。あたりまえだよな(w

795 :仕様書無しさん:05/03/13 08:33:56
同じVMでもクラスローダーが違えばいいんじゃ。

796 :仕様書無しさん:05/03/13 09:57:31
一つのWebページに貼り付けた複数のアプレットって同じ空間(っていうのか?)で動くんだっけか。
互いに通信できたような気がする…

797 :仕様書無しさん:05/03/13 23:41:40
サーバの方じゃね?

798 :仕様書無しさん:05/03/14 10:07:09
同一窓内はアプレットは同一メモリ空間扱いで通信できる。
ただ、フレームは別窓扱いで・・・。5年以上前、情報が少ない頃にやって痛い目あった。


799 :仕様書無しさん:05/03/15 20:43:20
IEのウィンドウを別プロセスで開くとか何とか言う設定が有効になっていたとか。

800 :仕様書無しさん:05/03/16 05:43:34
数人がさんざんいじり倒したHD16480のASMコード約52K行。*.incがincludeされるのは解る。
*.srcがたくさんあり、それらをまとめて*.asmでincludeしてアセンブル単位にしている。
1つのsrcはアセンブル単位でないので文ラベルの参照が解決してない(別のファイルの文へ飛んだり)
しかもcall階層とincludeのnestが何の相関もなくハチャメチャ。そこにバンクの包含関係を勝手に
押しつけた修整が入りまくって、もうワケワカメ。 歴代の保守者も、これじゃ文書すら残せない罠。
俺は既にフリーなので辞めたくなるわけにもゆかん・・・orz

801 :仕様書無しさん:05/03/18 01:04:32
なかなか濃ゆいな・・・

802 :仕様書無しさん:05/03/18 11:39:56
asmで52000行か…。
腫れ物を触るようにやるしかないんでない?
辞められないなら。


803 :仕様書無しさん:05/03/18 12:52:48
>>800
嗚呼・・目の前に広がる複雑怪奇で無秩序なASMの平原が・・・
(どう考えても、最初から書き直す方が効率的に思えて・・)

ィ`ョ

804 :仕様書無しさん:05/03/18 23:35:10
asmでもよく整理されてれば、10万行ぐらいまでは
どうってことないんだけどね。

805 :仕様書無しさん:05/03/19 01:03:01
私の貧困な空想力では
整理された10万行のasmは出てきません
ちょっと見てみたいな

806 :800:05/03/19 09:14:20
膿が溜まりきってパンパン・・・腫れ物というより末期癌のようなシロモノ。客の言うには、
「これはわりとましなほう」だそうで。でも売られてる製品なんだよな、これ(^^;
平原というよりアマゾンのジャングルかダンジョンです。
お試し発注の小さな改造をパツイチでやったから信頼されたみたいだけど・・・トラップを
踏んづけないように普通の数倍気を遣います。

「整理された」=イイ実例は思い浮かばないな。cのコールSEQに合わせて作ってある。
機能単位とアセンブル単位が(file名、関数名などで)対応している。
ネーミングがASM的でなくコンパイラ的にしてある。 など開発時にルールを決めれば
できたのになあ・・・というブツはよく見るけど。ASMで開発と決めた時点で何でもアリに・・・

807 :800:05/03/19 09:25:47
cだと機能単位を関数化する段階で分割が終わるけど、全部ASMだと、その下に
「コーディングの都合によるサブルーチン」みたいのがいっぱい出てくる。各人に任せて
おくと結果として同じような関数がいくつも出来てそれがメモリを圧迫したりするし、
str???やformat付き変換みたいにLIB管理しようとすると名前とコールSEQの管理が手かかる
今回のブツも、下層のツールは管理などされてないのが歴然。ASMグラマには
「他人のフンドシで」という発想は皆無なんですね。

808 :仕様書無しさん:05/03/19 09:40:22
>ASMグラマには「他人のフンドシで」という発想は皆無なんですね。
これは容易に想像できて納得できる(苦笑)

809 :仕様書無しさん:05/03/19 10:04:47
>>800
全部削除してからバックアップを燃やして0からやりなおす。マジでお勧め。

810 :仕様書無しさん:05/03/19 10:49:44
他人のふんどしなんぞ締めたくないがなぁ・・・

811 :仕様書無しさん:05/03/19 14:44:11
>>800
なるほどねー
記念に一度は経験してみたいな
その世界を想像してみて、はじめてNetHackが流行した理由がわかった

812 :仕様書無しさん:05/03/19 22:25:31
おれはプログラム仕様書に挟まってるコードがアセンブラだってことを発見
したときは「ソースがありません。作り直しですね」と言ってやった。

813 :仕様書無しさん:05/03/19 22:26:52
使えねーな

814 :仕様書無しさん:05/03/19 22:27:41
仕事ははやく終わってなんぼのもん。Cで書き直した方がはやいだろ。

815 :仕様書無しさん:05/03/20 12:42:02
C++で書かれたアプリをアセンブラで書き直そうとして
一年かかって殆ど何の成果もあげられずにトンズラこいた奴いたなぁ
今頃どこで何をしているやらM君

816 :仕様書無しさん:05/03/20 17:25:08
かつてT&EソフトにはP6のマシン語が書けず
夏休みいっぱい使ってVRAMに線を書くことしかできなかったバイトがいたらしいな

817 :仕様書無しさん:05/03/20 19:10:30
P6って何?
Pentiumは関係ないよな、時代を考えると。

818 :仕様書無しさん:05/03/20 19:57:35
PC-6001かと

819 :仕様書無しさん:05/03/20 23:00:30
>816
6001mk2ぢゃないかな。無印60ではなかったような。
チャレアベに書いてあったなぁ。懐かしい……
# いや、漏れがそのバイトだって意味じゃないぞw

820 :仕様書無しさん:05/03/20 23:02:25
しまった
819 =~ s/816/817/ でよろorz

821 :816:05/03/20 23:43:40
>>819
覚えてた人がいたのか
なんか嬉しい

822 :800:2005/03/21(月) 06:38:24
>>814 LSIC80の64180オプションを使えばcで書けますが、リニアに64Kオーバーを使えるH8
ならともかく、論理空間が全部で64Kしかない64180では入らないのでこういう奇怪な策をとった
みたい。RAM32Kで、ROMは残りの論理32Kを、コモン24K、バンク8Kに分けて使っていて、
8Kのバンク9面=24K+8K*9=96K使っています。バンクに置くサブルーチンは8Kという制約が
必須なわけ。通信文や表示など編集は多々あれど、printfなど使ったら到底8Kでは書けない。

読んでたらこんなコードが: JP Z,K2P1M+3 このK2P1Mってのは文ラベルなの。
お前なあ・・・そこが3バイト命令じゃなくなったらどうすんのかと小一時間ですよもう・・・
ハードが作られた時代にはH8は有ったはずなので、ハード屋が頭古かったのでしょう。

823 :仕様書無しさん:2005/03/21(月) 11:21:42
ハード屋の頭が古かったのかソフト屋にZ80しかできない奴しか余ってなかったか
微妙なところではないかな

824 :800:2005/03/21(月) 17:44:09
そこはハード開発するほうが親会社で、ソフト屋がハード構成に口だす雰囲気じゃなかったので、
ハード条件が決まっちゃってから「こんな動作するソフト作れ」の流れだったみたい。

189 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)