1 :
仕様書無しさん :
04/10/13 23:01:26 この会社辞めようと思ったソースコード。 プログラマとして幻滅するソースコード。 プログラマを悩ませるソースコード。 をつらつらと綴っていって頂戴。 ちなみにここは質問スレじゃないので 技術的な質問がしたいならム板に逝って。
し、しまった……0xつけんの忘れてた……orz
イ㌔
大した問題じゃない
うむ。次のスレで修正すればよい。
仕様です。で通せ。
俺はオブジェクト指向を取り組んだプログラミングをしているっ と公言しているヤツのソースをみた。 define( SRC_PATH, '/home/xxxxx..../'); require( SRC_PATH . '../src/XXXX.inc' ); require( SRC_PATH . '../src/XXXX.inc' ); require( SRC_PATH . '../src/XXXX.inc' ); という(うろ覚えだが)コードが120ファイル前後のソースに入っていた。 何か間違ってると思った。
>>8 1ステップでもオブジェクト指向的に組んであれば、嘘ではないなw
でもその感想もわかる。
??? XXXX.incの中がオブジェクトなんだろ?
12 :
仕様書無しさん :04/10/14 17:23:45
クラスで class MyClass { //変数 ・・・ //メソッド ・・・ } とするやつと class MyClass { //メソッド ・・・ //変数 ・・・ } とするやつがいるけど、下の変数をクラスの下方に 書く利点ってなんなんでしょう。
変数がpublicじゃないのなら、 「ここは見なくていいんだよ!!ヽ(`Д´)ノ」 という意思表示かな。 保守する人に、でなく使う人に対しての。
publicなメンバは変数関数問わずに上の方にやるね。あとtypedefも。 変数publicってあまりないけど。 あとコンストラクタだけはアクセス指定子に関わらず一番上に置いたりする。
17 :
仕様書無しさん :04/10/15 00:00:17
外国産プログラムでコメントなしのは マジできつい。 (技術盗まれないように複雑化するってのはあるようだが) 外国産の〇〇制御プログラム だったが 市場でデバックしてるような製品。 (しかも金額4桁らすぃ・・・・) あん頃は、〇〇に関しての書籍も英語版で1-2冊しかなかったから余計しんどかった。
>>17 4桁って*千万?*千億?まさか*千万で驚いてるんじゃないだろうな。
それに、書籍があるだけましだろ。
金額4桁と聞いて・・・入力欄が金額4桁~!? と思ってしまった。ちょっぴりちかれてる。
> (技術盗まれないように複雑化するってのはあるようだが) なんで技術盗まれたくないのにソース公開されてんの?
JAVAだとソースに戻しやすいから、わざとめちゃくちゃに書くという都市伝説が。
>22 オブファスケータを友達の友達氏に教えてさしあげれ。
ぃゃ、わたしゃソレの存在は知ってました オチは、汚いソースの言い訳でしょう
25 :
仕様書無しさん :04/10/17 17:02:21
>>22 わざと滅茶苦茶にするソフトもあるしねえ・・・
ドトネトも無茶苦茶化ツールがあるしな。
「はっはっは。オレ、オブファスケータなんて不要だぜ。なんたって最初から(略)」
ある構造体、structやunionが5層くらいの木構造になっていて葉も50枚はある。 そんなものが20ほど。 更に100以上あるヘッダのあちこちでバラバラに宣言 マジワカラン orz パッと一覧表示してくれるツールないかの・・・読む気でないよ・・・読むけどさ・・・
30 :
仕様書無しさん :04/10/19 01:16:48
>>29 doxygenでググッテごらん。
まぁ、そこまで糞だとどうにもならんかもしらんが。
cscope試して見れ
>31 それはいけるのかな。うまくいったら読者の喜びの声を掲載します。 表示できたからといってマトモにソース読めるかどうかはわからないけどさ・・・
ソースじゃないんだけどさ 僭越ながらプロジェクトマネージャーやってるんですよ まぁ大した規模じゃないですがね そんな俺に、先日上司がやってきて、「CMMやってんのか?お前のプロジェクトは」 ってうるさいんですよ まぁ俺もCMMくらいは知ってたんですけどね、ただそんときのPJはホントに小規模 だったんで、あまり手順は踏んでなくて「やってないです」って答えたワケよ そしたらもうブチギレで「なにをやっとんだお前は」って怒鳴りまくり しまいにゃコーディングが終了しててテスト&デバッグのみの状態のシステムに対して CMMを行えと言い出す始末 いや、あなた納期あと2日ですよと んでもうるさかったんで、それっぽい資料だけ後で提出してその場は収めましたよ ええ、実際に対応なんてしませんでしたとも そしたらですね、また後日、「UMLつかっとんのか?お前のプロジェクトは」 ってうるさいんですよ そのときのPJはPHPでコーディングされてて、オブジェクト指向なんてカケラもない システムだったもんで「使ってないです」って答えたワケよ そしたらもうブチギレで「なにをやっとんだお前は」って怒鳴りまくり しまいにゃコーディング終わらすのも厳しい状況で仕様書は納品物に含まれてなかった のにUMLで仕様書をかけと言い出す始末 いや、あなた納期云々の前にそれって全然意味ないですよと んでもうるさかったんで、それっぽい資料だけ後で提出してその場は収めましたよ ええ、実際には対応なんてしませんでしたとも そしたらですね、また後日、「見積もりと進捗管理はどうなっとんだ?お前のPJは」 ってうるさいんですよ 見積もりもなにも、もうテスト&デバッグやってますよと まぁ、でも一応答えたワケですよ。こうこうやりましたと見積書とか見せながら そしたらもうブチギレで「なにをやっとんだお前は」って怒鳴りまくり そのとき、同僚からIPメッセンジャーが来たんですよ 「多分、Software Peopleって雑誌見て来てるんだと・・」って なるほど、調べてみたら発刊時期といちゃもん時期が完全に一致してるわな もうウザいんで、来月号の見出しだけでいいんで先に教えてください
ワロタ
まだ、SoftwarePeopleだったらいいんじゃねーの? きちんと読んでくれればある程度は上の知識になるから。 もっと概論だけの日経xxx系の本だけ読んだお偉いさんはもっと性質が悪い。
いや、その雑誌自体がどうのってワケじゃなくてね なんつか雑誌の内容を鵜呑みにして、なんでもかんでもその通りにしないとマズいって 考えてるような上司はどうなんだろうと まぁ、いいんだけどね 来月号の見出しだけでも教えてもらえれば
>>38 貴社の出版しているSoftwarePeopleを上司が読んでいるおかげで
知ったかぶりの知識を披露され、プロジェクトに多大な損益を掛けられています。
などとDQNなクレームを入れてみるとか
>>38 まあ、暇があるときにその上司を巻き込んで実際にやってみるってのが良いかと。
上司教育も部下の大事な仕事です。w
言うだけ番長は巻き込んで教えないと、いつまでも理想論ばかりでウザイから。
って、こっちはソーススレだね、上司スレに移動するか?
ワラタ
>>37 >きちんと読んでくれれば
そんな仮定は無意味じゃん?
43 :
仕様書無しさん :04/10/19 23:06:05
CMMと言いたかっただけちゃうんか、と。 自分ところの実情とCMMを本当に理解してたら無茶なことはいわん。
で、29はどこいった?
>>44 いるよ
今日は一日テストしかしなかった
今週はテストで終わりそう
補助要員だから土日は休める
そのとき自宅のPCでやってみる
>>45 んじゃー、気をながくして待ってるよw。
てか、
>>29 のようなものを書く人と給料がさほど変わらないのが不思議すぎ。
>>29 が書いたんじゃなくて、他人が書いたブツを押し付けられたんだろ?
>>47 だから、「>>29と給料とさほど(ry」とは書いてないだろうよ。
もっと、適切でタイプするのがめんどくさくない言い回しがあったら教えてくれ。
>>49 あー、俺共同で開発したことないペーペーだし、
そんな俺でもそんな糞仕様書かないし、
ライブラリでも、そんな恐ろしいのは・・・、MFCくらいか?
って、そんなわかりづらくもねーか。
つーわけで、見たことないから不思議ってことさ。
>>50 技術力と能力に強い相関があると思っているのが不思議。
能力と技術力が共に高いことは充分あり得るが かと言って一方が高いだけで他方をも期待するのは落胆の元。
>>53 マネージャとかなら分からんでもないけど、コード書きで
「能力のみで技術なし」ってどう判断するの? 技術ないのに
「こいつ能力あるな!!」ってコードが書けるとは思えないんだけど。
「技術はあるけど [ 共同開発での | 下を育てる ] 能力はない」とかはありそうな
気がするけど。
能力の定義によるかなぁ 漏れは「事情経緯はともかく、会社に利益が出る形で仕事を完了する力」を能力と考えた。 そうすると、残業休出の連続でこのスレに晒されるようなコードを量産しても、 サビ残で済ませてるなら能力は高いことになるよなぁ、と、そう思ったのです。 あたま悪いのでこれ以上本格的な議論はご勘弁下され。
てか、プログラム書くときは、保守に気をつけて書くようにするもんじゃねーの? (誰が見ても)スパゲッティコード書くような人で、有能な人っているんですか?
>>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行略
一番最初は必ず大文字なんだね。
なにがなんでも1文字目は大文字というポリシーはあるんだね(笑)
61 :
180 :04/10/21 22:42:39
>>58 いざ、結合したら
各々で勝手に typedef切っててそれが
FLOATだったりFloatだったりしたから、リンク作業者がぶち切れて
作ったのでは?
#define destory destroy #define retrun return
>音声発信操作を行うと同時に着信があった際、端末内のメモリ制御プログラムが動作不良を起こすという事象。 >これにより、アドレス帳、Eメール・Cメール、データフォルダなどのユーザーデータが消失する恐れがある >ほか、携帯電話に書き込まれている電話番号情報が消失する恐れがある。
64 :
仕様書無しさん :04/10/22 06:33:36
>>63 > 消失する恐れがある。
「恐れ」ってことは、
「消失しちゃうよ~~!!! 恐いよぉぉぉ!!」
ってこと?
マジレスが欲しいのか?
どうなんだろうね。 とりあえず、他者と共有できない余裕の無さは感じるけど。
データとはきえるもの、バックアップが転ばぬ杖なのはこの業界では常識だろ。
>>67 『先の』があるかどうかでずいぶん意味が違うな。
後なら松葉杖だな
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 で紹介されたようなプログラムを書く人」って書けばよかっ
たんだよ。給料がさほど変わらないのも頷けるぞ。少なくとも仕様
書を書けないんじゃない? (---気づいてないか。)
>>70 めんどいじゃん・・・。まぁ、あとからもっとめんどくさくなったわけだがw。
73 :
仕様書無しさん :04/10/22 19:22:46
給料はプログラムの質で決まるんじゃない! 動いて、納期守れりゃいいのさ・・・・
>73 そのとおり! プログラムの質がほとんど問われないのは、何でだろ~(古!
>74 見えないし見ても分からないから。 ……同じような原理で、「耐震補強工事」と称して無意味な工事でぼったくる 悪徳工務店のことをこないだニュースでやっとったなー
第3者的な立場から、他社が作成した システムの評価(監査)をする商売って 成り立たないかな? 別に深く調べなくても、 見る目を持った人間が見れば、 駄目なものは直ぐに駄目だって分かるし。
77 :
仕様書無しさん :04/10/22 21:37:26
金猿じゃね?
コンサルというよりは、納品前にそのブツを覗き見して ネチネチ他社の仕事に文句をつける仕事。 そのシステムを作った会社とは完全に無関係の立場で あることが重要。 その会社に余程の信用がなければ意味が無い上に、 業界から嫌われる仕事だね。 でも、業界トップの企業あたりが副業でやってくれれば、 それなりの価値があると思うんだけどな。 その仕事は、顧客・業界双方に対してメリットがあると思う。
>>76 やってる会社知っているけど
売り上げがあったという話を聞かないw
顧客側担当者の顔をもつぶしかねないわけだし、 誰も求めてないサービスじゃね?
>>78 下手な会社がやっても全く意味がないね。
その会社に余程の信用が無ければ。
よくシステムは建築に喩えられるけど、
建築には「建築基準法」という法律があるのに対して、
システムにはそのような法律が無い。まさに野放し状態。
ならば、法律で規制するか、またはそのようなビジネスを
一般に認知させて、「ウチのシステムは~~社の審査に
合格しています」というような話が当たり前のように
なるかの、どちらかしかないだろう。
>>82 システムの信頼性、健全性などを量る明確な指標が作りにくいからだと思う。
あるシステムに問題がないことを示すときには、結局テスト件数とテストで出た
バグ分析による統計的な分析くらいしか数値化できるものがないと思うのだが。
という辺りでCMMが顔を出すんだろうなぁ……
客にとっては、そのシステムを作った会社に対する評価よりも、 個々のシステムに対する評価の方が重要だと思う。 どんな糞会社でも、たまには良いものを作ることもあるし、 またその逆だって十分ありうる。
>よくシステムは建築に喩えられるけど、 >建築には「建築基準法」という法律があるのに対して、 >システムにはそのような法律が無い。まさに野放し状態。 ああ、確かにw 客 :2階建て住宅の設計図あるからコレ使って10階建てのビル建ててくれ。 会社:建築やったことあるんで大丈夫だと思います。任せてください。 な~んて会話に置き換えられる仕事ゴロゴロしてるもんねぇ・・・
87 :
仕様書無しさん :04/10/23 01:43:57
今やってる仕事 平屋建ての一軒家に地下室と 3階を作ってくれ、ただし2回は作るな
作るだけならなんとかなるかもしれんぞ。 耐久年数5分とかになるかもしれんが。
COBOLER ≠ 宮大工 勘違いしないように。
91 :
仕様書無しさん :04/10/23 07:02:44
Ruby!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Rubyだからクラス設計どうなってるんだろ? と思ってソース眺めたら、中身はまるっきりCだったとき。 メモリの動的確保と正規表現対応で、コンパイル不要なCとして考えているようだった。
>92 その人の場合多分JavaでもC#でもCみたいなソースになると思う。
94 :
Ruby!!!!!!!!!!!!!!!!!!! :04/10/23 15:23:24
vb(vb、vba、vbs)ばっか使ってる会社勤務です。 週報にrubyで~するスクリプト作った って書いてみた。 来週が楽しみww 民度が低い連中ばかりだからどうなることやらwwww
ごめん、今「Rubyってちょっと便利そうかも」って思ってしまった・・・
>95 いや使い方次第ではなかなか便利なんだが。 人によっては気持ち悪いかもしらんが、数値オブジェクトが自動的に でっかくなっていってくれるのは助かる場面も多い(漏れの場合)。 Rubyに限らずちまっこい作業の自動化にはスクリプト言語がええね。 PerlもPythonもRubyも、ついでにJScriptもマンセー # でもVBScriptはかんべんなorz
97 :
仕様書無しさん :04/10/23 15:59:57
>>94 民度、民度って馬鹿じゃないの?
所詮お前も同じ職場でうごめいてるカスだよ
Ruby気違いってほんと嫌な奴多いよね
94は基地外のふりしてRubyを誉める、誉め殺しでしょ。 素だったら知能低すぎるよ。
ここでいうところの「民度」って何? いわゆる民度と違うように思うが。
94=97
matzはC++大嫌いらしいからねぇ。 まーしょうがないでしょ。
ネタをネタだと見抜けないやつは(以下略 だが頭のおかしいやつに利用されちゃってるってことは、 口を慎んだ方がよかったかもなあ。 普通のプログラマだったらあれを読んで笑うところなんだけど。 当時主としてC++をつかってたおれでも笑ったもんw
↑池沼perler必死だなwwwwwwwwwwwww perlerは死ね。誰も止めないから
matzはジョークも言えないのか… 有名になんざなるもんじゃないな
ばかばっかwwwwwwwwwwwww
そういう話じゃないと思うんだが。 どうでもいいや。
HSP 「21世紀にこんな言語はないだろう」 by matz Perl 「Perlユーザは臭い」 by るびきち Java 「Javaなんてうんこ」 by kitaj
話題に上ると荒れる辺りは韓国ネタみたいだな。
人種ジョークみたいなもんか 船が沈み、救命ボートは定員オーバー。 誰かが飛び降りなければならないなか、船員はそれぞれの外国人乗客に言った。 アメリカ人に「自己犠牲の精神を期待して」 イギリス人に「あなたを紳士と見込んで」 ドイツ人に「船長の命令です」 日本人に「みんな飛び降りますよ」
>112 にはいろいろバリエーションがあって、 スコットランド人には「財布を海に落とされませんでしたか?」 ロシア人には「さっきウォッカが流れて行きましたよ」 フランス人には「美女が飛び込んでいましたよ」 北朝鮮人には「飛び込めば亡命出来ますよ」 韓国人には「日本人はもう飛び込みましたよ」 大阪人には「阪神が優勝しましたよ」
大阪は独立国なのか? 初めて知ったが、中国語では各種地方行政機関も「政府」って言うんだな。 大阪日本橋で「 浪 速 政 府 」と大きく電光掲示板に表示されているのを見た時は驚いた。 しばらくぽかーんとしたね。 後に流れる文字で日本語じゃないと分かるまで立ち止まってた。 なんだ浪速区役所のことかい。驚かせるなよ。
>115 浪速政府いいなw ついでに日本橋はヲタ特区……と言うと非オタな人にボコられそうなので 電機製品とその他特区にしてもらおう。
日本橋ってアキバ化は起きてないの?
アキバ化というのが具体的にどんなんかいまいちわからんのだが オタ系の店進出はめざましい。 と言ってもとらが無謀にも南北に一店舗ずつ出して結局一つに統合とか 売り場面積を確保できなかったげっちゅ屋がそうそうに店じまいしたり それなりに戦国絵巻?
まあなんだ、フィギュア屋とか同人屋とかその辺のこと。 オタ系がそれにあたるのかな。 ハードなジャンク屋とか駆逐されていっているんでしょうか。
日本橋の場合実はジャンク屋は表通りにはあまりない。 で、最近進出してきた店は、表通りの潰れた店に入ってきたりしてるから(まんだらけや信長書店w) そんなでもないねん。つーか漏れジャンク屋あんま知らんわorz
int i; というグローバル変数見た時は怒り狂った。 どこの誰が作ったソースかは不明だ。
>>121 ループのカウンタ変数にも意味のある名前をつけてループの意味を明確にしよう
と、言いたかったに違いない
まぁぶっちゃけループは下手に名前付けるより i が一番分かりやすいんだけどね。
124 :
仕様書無しさん :04/10/24 21:54:59
ダメなC屋はJavaとかでもグローバル変数クラス作るな。 あげく、アプレットでそれやって、二重起動で処理が混ざって問題になる。
>>119 ジャンク屋は駆逐されてるね。
電気関連のハードを扱ってる店は表通りにもまだあるけど
だんだん減ってるね
パソ系ジャンクを置いてるのは中古ハードを扱ってる
有名どころの店くらいかな。
あとは五階百貨店のあたりとか。
表通りは120の通り電気関連以外の店が
増えてきてたりする。
てかパーツ屋もオタ系の店もザウルス周辺に集中してきてる
気がするのは気のせいだろうか?
愛は共有すべき。
>>125 なるほどね。どこもジャンク屋はやっていけなくなってるみたいね。
なんかDQNが大量に流れ込んで来て、ジャンク屋に動作保証を求めたり、
不良品と言い張って返品をしつこく迫ったりとかそういうのでやっていけなくなってるみたいね。
int i; void func() { for ( i=0; i<5 ; i++ ) { … } } void main( void ) { for ( i=0 ; i<10 ; i++ ) { func(); } }
static変数を知らない奴が埋め込むんかね
このスレにはグローバルループカウンタ肯定派が住み着いているのか?
>132 a. あまりにネタ臭いので相手にする気になれない b. あまりによく見かけるのでネタにする気になれない
>>117 電化製品やパソコンは梅田(大阪駅周辺)にヨドバシカメラが出来てから、
そこでほぼ事足りるからなあ。
オタ化するしか生き延びる手はないだろう。
>112 アメリカ人に自己犠牲の精神なんかあるのか?
136 :
仕様書無しさん :04/10/25 13:31:34
>>135 英雄願望とか強いから。
それに、開拓者精神というか自己を守るためのプライドは兎に角高い。
>>135 漏れの聞いたパターンでは、
アメリカ人には「ヒーローになれますよ。」
と言うんだったとオモタ
バリエーションはいろいろあるけど、 アメリカ人「民主主義のために飛び込むべきです」 フランス人「自由のために以下略」 イギリス人「女王陛下のために以下略」 日本人「みんなが以下略」(ここはほぼ100%共通)
アメリカ人だと、ヒーローになるとか保険がかかってるとかあとで賠償請求できるとかそういうのが多いかな。
類似ネタで ドイツ人は考えてから走る イタリア人は走ってから考える イギリス人は歩きながら考える ってのもあるが、漏れの人生は 走ってから、一旦立ち止まって考えて、また走り出す
>141 日本人は教えられたとおりに走る
>>142 違う違う。
日本人は周囲と同じように走る
そして、自分を追い抜かそうとするものは、引きずり倒すと。
韓国人や中国人が追加されたバージョンもどっかで見たな
韓国人は日本人を妨害しながら走りそうだな
147 :
29 :04/10/27 00:48:32
おひさ。 結論: orz 漏れに英語力がないことが原因か Eclipseのプラグインであるかもと都合の良い妄想をしておく
>>147 日本語解説ページとかもあると思うんだが・・・。
ちなみにdoxygenはプラグインではない。他のはしらん。
簡単なサンプルソース書いて試してみた?
複数項目を選択可能なリストボックスがあって、 これに対する「全項目選択」「全項目選択解除」のスイッチを チェックボックスで実装している。 ボタンにしたほうがよくないか…
中国人にWEBページを作らせてみた。 けっこう日本語がよくできるので、ちょっと期待していた。 半角の「角」の字の真ん中の縦線が下まで延びていた。 確かに中国語フォントにもひらがなカタカナはあるけど、勝手にエンコードを 中国語決め打ちにしちゃだめだよ、と教えてあげた。 明日もきっと晴れだ。
>>149 俺なら右クリックで選択かなぁ・・・。上司ならボタンつけろとかいうだろうけど。
>>150 それくらいで辞めようとおもうんか・・・。
右クリックは操作覚えるのがめんどい ボタンなら目に見えるから覚えなくてもいいから楽ちん
客が自社開発しようとして途中で頓挫したのを引き受けてしまった。 言語はVBだけど変数名がaとかbとか名前で役目の分からないモノばっかしだし、 定義されても使われてない変数や、逆に定義されないで唐突に使われてる変数もあるし、 1関数内で1つの変数を前半ではループカウンタに、後半では金額の入れ物にと 無意味な使い回ししてるし、 インデントがずれてて入れ子構造が激しく分かりにくいし。 全部作り直した方がマシな気がする。
>>153 作りかけのを基にして、要求定義からはじめて作り直した方が圧倒的に楽で早い。
社内でこわれかけのを引き継ぐことが多いんだけど、最近はそうやってる。
プロトタイプにはなるかもしれませんね。
>>153 154に禿しく同意する。
藻前が今持っているそれは、たちの悪い時限爆弾だ。
いつか必ず、それも最悪のタイミングで爆発する。
藻前も、分かってるんだろ?
・・・時間がないなら、しょうがないけど。幸運を祈る。
VBのプログラムで客からクレームが来て、マスタメンテで登録したはずの 情報がないといわれた。 仕様書を見ようと思ったら、納入後、その場しのぎの対応をいろんな奴が 繰り返しているので、ソースを読むしかないといわれた。 ソースを見ても、特に変わった様子はない。 このテーブルから普通に取ってきて・・・アレ?名前が微妙に違う気が・・・。 SQLplusでテーブル一覧をみると マスタテーブルが二つになっていた。
>157のところに怒鳴り込む客に乾杯・・・合掌
160 :
仕様書無しさん :04/10/30 13:11:27
最近、簡単な詳細設計(言語はC)を任せられるようになったんだけど、 関数の引数を他の関数と合わせるために、使ってない引数まで ムリヤリ入れさせられたり、さらに悪いことに、使ってないものまで (IN)にしておかないといけなかったりしてまつ。 わざと保守性が落ちるような規則にしか思えないんだけど、こういう 会社ってよくあるんですかね? 協力会社に出向中なんで、相手会社 の好みみたいなんだけど。 関数名も、はじめにコンポーネントのIDを入れさせられてて、 やたら長くなってしまって、さらに幅80行規制も相まって、 コーディングも汚くなりがちです。 俺はグローバル変数は極力使わないけど、他の人は使いまくりの 人も多い。C言語の良さを殺してしまっているように見えるんだが。
>>160 つまるところ、どのような理不尽な要求にも応えるのがプロというものだ。
自力で変える政治力が無いなら、従うしかないな。
>>160 設計~製造までに決められたあらゆるきれい事を全て織り込んだ結果
塵が積もってゴミの山になったそんなソースですか・・・orz
>>160 >最近、簡単な詳細設計(言語はC)を任せられるようになったんだけど、
>関数の引数を他の関数と合わせるために、使ってない引数まで
>ムリヤリ入れさせられたり、さらに悪いことに、使ってないものまで
>(IN)にしておかないといけなかったりしてまつ。
複数の機能をもつ関数を提供する場合はそれもあり得る。
あと、規模がでかいPJの場合に将来的な仕様変更を考慮しているのかもしれない。
(昔いたPJはそんなことやってた)
>関数名も、はじめにコンポーネントのIDを入れさせられてて、
環境の保守をやっている側としては、これは関数名のバッティングや、
PGの勘違いを回避するために必要だと思うんだけど。
164 :
仕様書無しさん :04/10/30 16:11:33
>>163 外部に出す関数名にIDを入れるのはまだ分かるんだけど、
そこから呼び出すソース内だけの関数まで、そういう規則に
なってんです。staticを使えばいいのにさ。
たしかに参加者が100名超えてるから大きなPJなんだが、
上下(別の会社)の意思疎通が悪すぎて、いらん苦労を
強いられている感じ。
つか、OOPL使えよ
>>166 160みたいな「DQN大集合」のプロジェクトでそんなことしたら・・・
わかるよな?
「これはおかしいんじゃないか」と疑問に感じたら 先輩なり同僚に聞いてみるべきだ。で、その答えをまたじっくり考える。 そういう積み重ねでセンスを磨くんだよ。 辞めちゃったらそこで試合終了だよ
>>168 俺がこれでいいっていたらこれでいいんだよ!!!
ま、ルールなんて中身より、統一されてるかが重要だからな。
>>170 みたいなのがいる限り、糞ソースは量産され続けるんだろうな
>>168 そもそも試合に参加する必要があるのかを考えるべきだ。
>>170 複数の会社の違うチームにコーディング規約はおろか、
命名規約も作らずに
「それぞれでやりやすいようにやってください」
とやらかした発注会社があるよ。
おかげでバージョンの振り方からファイル名、関数名はおろか
仕様書のフォーマットまで全てバラバラという、
保守担当者が発狂しそうな状態になっている。
それを考えると、>170の
>ま、ルールなんて中身より、統一されてるかが重要だからな。
というのも、満更外れてないと思う。
作業者のレベルが合ってないと統一するのは難しいよね。 仕様書やコメントが無くても、ソースを見ればある程度何してるかわかるけど、 それはみんな似たような考え方してるからで、レベルの低いやつとか発想が 変なやつが作ったものは全然わからない。 そういう摩擦からルールを作ろうという流れになるけど、権限のあるやつが アホだったりすると… まあ、ルールがあっても、「明らかに変な作りだけど、何も思わなかったの?」 という質問に「そういうルールだったから(前からそうなってたから)」って 返されるだけなんだけどね。
//この外注に二度と頼むもんかと思ったソースコード 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); } }
//これだけ書いてやってるのは、スペースで区切って文字列配列に詰めるだけ。 //------ これでいいじゃん ------ 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 そうなんだよな。
後半なんかそれこそ
String[] keys = null;
if(al.size() != 0) {
keys = (String[])al.toArray(new String[0]);
}
で終わりなのにさ
al.toArray(key = new String[al.size()]); だろ。
足りなかったら、内部で割り当てるんじゃなかったっけ?
・足りなきゃ別途作ったのが使われる。 ・余った部分はnullになる。 ともにAPIドキュメントに明示されてる。
>180 もちろんわかってるが、長さが足りないといわれて捨てられる配列がかわいそうじゃないか。
最近参加したバグが多いと評判の会計ソフトのプロジェクト。 直近の6ヶ月と12ヶ月の金額の合計を出す処理があるんだけど、 なぜか1か月分だけ個別で継ぎ足してあんのね。 処理を追っていったら、合計を出すループの判定処理で 「≦」にすべきところを「<」にしてたから1か月分金額が 足されてなくて、それでデバッグでループの判定を直さずに、 安直に1か月分足す処理を泥縄でくっつけたらしい。 結果としては正しい数字は出てくるんだけど、 他にもフローチャートに無い処理があったりして、激しく怪しい orz
>>185 そもそもフローチャートを準備してる時点で
ちょっと疑うべきだな。
>186 UML使ってます、と言ってもアクティビティー図だけだったりなorz
>185 「合計値をDBに保存しておくようにしました!」 「SUM()したら2倍になりました!」 を思い出した。
そしてコードのあちこちに「SUM()/2」がばらまかれる
>188 SUMかっこ こっか、か。 ()がOにみえて 「相撲したら2倍になりました!」 に見えた。
べつにunix方面じゃなくても使われてるんだけどな。 ま、方言みたいなもんだからしらなくてもおかしくはないと思う。 でもプログラミングの雑談を扱った本ならまず取り上げる定番ネタなんで、 しらん方がどうかしてると思うけど。
>>195 >プログラミングの雑談を扱った本
ジャンルそのものがマイナーすぎ。
俺はこっかで分かるけどさ、オタの常識は世間の非常識と知れよ。
しらん方がどうかしてるってのはキチガイじみた感想だと思うぞ。
こいつまた何かエロイこと想像してるな・・・!
>>196 プログラマ板でそのジャンル出してマイナーとか言われても困るんですけど
まぁ普通のプログラマなら、まずアンパサンドとアスタリスクに衝撃を受け、 '^'と'|'をどう読むかに興味を持ち、「ポチ」「コッカ」と聞いたならそういう読み方も あるのかと受け止める、そうありたいね。 「こいつダセー」とかいう、好奇心の無い奴はプログラマに向いてないよ。
やけにレベルの低い好奇心だな
なんかどうでもいい話してるな
誰が「「こいつダセー」なんて書いたんだろう……
>>198 プログラミングの本ならまだしも、その雑談の本ってあなた。
256倍本のことかぁぁぁぁ!
たしかに256は雑談だったなー(面白かったが)
256本を懐かしむスレはここですか? おまえら、じじくせぇよ。
しょうがねぇだろ、じじいなんだから
AWKとPerl DBIとRuby邪道、3冊の256を持ってる漏れは爺さまですか?
>>208 様々な方面の 256 倍本を購入して、
最長老を目指してください。
256本なんか買う奴はバカ。
もう終わった話題をわざわざあおるやつはもっとバカ
'^' は「キャップ」'|' は「パイプ」だとずっと思いこんでいたわけだが。
>>212 やま、たてぼう
なんかおれ頭悪そう・・・ orz
>>213 これ(指で山形)、これ(指で縦線)・・・もっと馬鹿っぽいな。
^ びーちく | まんすじ
入社して研修も終わり、それぞれ各事業所に配属され、 部署での新入社員歓迎会なども終わり、ぼちぼち”仕事”と呼べる作業が始まった時・・・ ベテラン組み?がリリースしたというとある会社のシステムのバグ修正という仕事がまわってきた。 特に早期に解決する必要は無く、1,2ヶ月でじっくりとやって構わないというもの。 最初にソースを眺めた感想・・・ソースが汚い・・・インデントなんてめちゃくちゃ・・・ 此処までは、よしとしよう。 えっと、『SELECT * FROM ・・・』でこのテーブルから全部のレコードを取得して・・・ えっ!! レコードセットをEOFまでループでまわして、その中で1ずつカウントアップ? もしかしてレコード数の取得!! もう少しで1年になるので、1年経ったら転職しようと思ってます。
>>216 今すぐがいいと思います。
速攻、素早く、迅速。
>>216 そんなの普通だから、転職先でもきっとそんなコードがあるだろうよ。
たぶん転職では問題の解決にならない。。
>>219 > そんなの普通だから、
> そんなの普通だから、
> そんなの普通だから、
………私の居る会社は凄く恵まれてるんだなあと思った。
きっとCOUNT()が使えないDBMSなんだよ。
>221 そんなのあるんですか?
>>221 だったら
select sum(1) from テーブル
とかすればいいと思う。
>>216 そのプログラムの仕様書にも、
「特に早期に(SUMを)解決する必要は無く、1,2ヶ月でじっくりとやって構わない」
って書いてあるに違いない。
>>224 しかも、性能要件もなく結果が出ればいいとあるに、ちまいない。
>225 そして、末端のユーザーは「遅くて使い物になんねぇよヽ(`Д´)ノウワァァン」 と嘆いている。間違いナイ。
>>216 さんざん言われることだけど、COBOLerにはそういうの多いよ。
そうやったほうが速いRDBMSが昔はあったって噂だから。
あれだろ?行数で見積もったんだろ?
>>213 いかにもこぼらぁな人が書きそうなソース・・・・・・
似たようなのでSELECTしてきて1件ずつ条件に合うか調べて
条件に一致したらDELETE文実行、なんて冗談みたいなものとかorz
> 似たようなのでSELECTしてきて1件ずつ条件に合うか調べて > 条件に一致したらDELETE文実行、なんて冗談みたいなものとかorz テーブルAにあるレコードの中から条件に合うものをDELETE、但し その条件一致判定はテーブルBを見なければ不可能、なんて場合だと 実際にそうする必要があるんじゃない? DELETE文だとJOINって出来ないでしょ。
サブクエリ使えばよいのでわ?
>>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 替わりにテクニカルエンジニア(データベース)取ってみました。 全然役に立ってない上にもう半分以上忘れたけどなorz
ボラクルの資格は金がかかり杉 会社も金出してくれねーし 別に取る気はないんだけどさ
つうかさ、プログラマだけにSQL書かしたらいかんよ。 1人でやってる仕事じゃない限りは、どんな小さくてもレビュー、検証必須。 (まあ、馬鹿2人って言う場合はしょうがないけど) テーブル設計者がまずラフでいいからこういうSQLって伝えて、 それを書かせて、実行計画を出力させてレビュー。 急がば回れで、最終的にそれが一番仕事が早い。
…取り敢えず >231 は超がんばれ。
orz サブクエリか。 MySQLしか触ってないからなあ…
>>231 サブクエリが使えないMySQLでも
テーブルを結合したテンポラリテーブルを作って云々ってのは常識だろ?
>>240 いやあ、まともな連中の間では常識だろうが、
一般的な職業プログラマの常識ではなかろう。
最近のMySQLはサブクエリ使えるよね。 前まではその1点だけでPostgreSQLオンリーだった。
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(); }
プログラムと言うかDB設計の話 80ほどのテーブル、1つのテーブルに300ほどのフィールドと言うDB設計を見たときには・・・ 「私が正規化しましょうか?」の問いかけに「失礼な事言うな、既に正規化してあるよ!」とのDB設計者のご回答 8つのテーブルに氏名とか同じ項目があったりするんですが? というか、使わないフィールドと使わないテーブルを消したら半分ぐらいのボリュームになるのですが? こんなプログラム組んだら、俺が出来ない奴と思われるじゃないか・・・_| ̄|○
>>244 いや、たぶんちゃんと正規化してあったんじゃないか?
重複して持つのにもちゃんと理由はあるんだよ。
300フィールドがあるのもおかしなことじゃないよ。
あなたのDB設計経験年数は?
>>245 理由はあるんだろうけど、解決方法がヘンなんじゃないかな。
想像で語っても仕方あるまい
履歴的なデータだと、転記するスタイルをとる場合もあるから、
>>244 だけじゃなんとも言えないような。
まあ、最近のスタイルじゃ正規化してマスタ側に採用廃止日をもって比較が良いみたいだけど。
>>248 マスタを変更する際に
マスタデータをどんどんつくっていくってこと?
一長一短だなー
>>249 単純な例だと住所データとか。
お届け先は履歴で保持だけど、住所の長さは結構ヘビー。
引越し頻度など考えたら、マスター側が履歴的なほうが・・・。
あとは商品マスタの細かい仕様変更対応とか。
キー的には商品番号+仕様番号なんだけど、表面的には商品番号だけで最新のものを使用とか。
最近のスタイルと書いたのが、その辺りの性能を十分に出せるようになったので、履歴に保持しなくても大丈夫になってきたから。
ずばり書くと 顧客マスタテーブルに、顧客が所持している商品名、営業所名、親会社名 営業所マスタテーブルに 営業所名、親会社名 親会社マスタテーブルに、親会社名 同じ顧客が2つ商品を持っている場合、顧客マスタに2つのレコード発生 同じ顧客が、違う営業所で商品を購入した場合、また顧客マスタ増える。 と言った感じ。 顧客マスタには住所・名前・年齢・生年月日・アンケート内容などなど。 せめて顧客マスタと商品ぐらい別けろよと・・・。 他も使って居ない、気温・天気・和暦/西暦変換テーブルなどなど。 私はDB設計の実務経験は2~3年ですが、さすがにこれよりマシなDB設計する自身がある。
それはすでにマスタじゃないだろ・・・ あと営業所マスタとか親会社マスタっているのか? 自社の営業所か、とも一瞬思ったが、親会社名とかついてるってことは顧客の営業所だよな・・・ ヨーワカラン
つうか、マスタじゃなくて、営業所別最終購買履歴って呼ぶてーぶるじゃないのかと。w
254 :
244 :04/11/18 15:26:38
だから変なDBなんですよ。 というか、本来の意味での顧客マスタが存在してないから。 必要の無い所を別テーブルにわけて、必要な所を別けていない 使わない項目やテーブルギッシリ、名前の付け方超いい加減。 正直俺が作ったと思われたくない。
>>251 それがひどいのは間違いないんだろうけど
だいたいのDBなんて
運用後しばらくして見たら
ひどい状態になってることが多いよ
手をいれた人間も分かっていながら
しょうがなくやってたりもするし
変だとわかっていても、 設計者がそれで良いというのならそのまま作ってやるのも仕事のうちだろ? もちろん、指摘と改善案の提示だけはしとこうな。保身のために。
そうだね。
なにも言わないと
>>244 さんも同じ人と思われる可能性大。
>>256 さんの言う事はしておいたほうがいいと思われ。
>指摘と改善案の提示だけはしとこう ...って、やらない意味がわからんのだが。マゾなのか?
アゾです。
>>258 指摘と改善案なんて保身にならないこともある。
ほんの少しでも指摘されると逆切れする人いるし、
改善案を提示してあったところで、結果プロジェクトがぼろぼろになったら
「連帯責任だ、何とかしろ」ってことも多い。
「分かってたのにどうして止めなかった」などと的外れな非難をされることもある。
無駄な設計した当人は「一生懸命やったんだからしょうがないだろ」で無罪だったり。
そこで「自分の責任じゃありません」と拒否しようとするとたぶん辞める以外に道がない。
はちゃめちゃ設計しかできんような無能やそんなのがのさばってる組織に
理屈は通じないと思う。
そこそこ動く程度に作ってやって、あとくされなくすばやく縁を切るほうが
楽で有効なケースもあるよ。
比較的コミュニケーション能力が低いとされる人間が集まっているのに 下手すると他の職種よりよっぽどコミュニケーション(というか、世渡り)能力を必要とされる……
hoge = function(); while (hoge != 0) { doSomething(); hoge = function(); }
for(;function()!=0;){ doSomething(); } こうか?
振る舞いをかえるな! for(hoge = function(); hoge != 0; hoge = function()){ doSomething(); } こうだろ
hogeへの代入が必須なら for(;(hoge=function())!=0;){ doSomething(); } これで。 ループから抜け出すときhogeの値は必ずゼロになってるから、必要ないとは思うけどな。
>ループから抜け出すとき そこを気にしている訳ぢゃないし
doSomething() の中で hoge を参照している可能性。 クソ野郎 (俺も含むw) が書いたコードなら、あり得る。
更に operator= とか operator!=をオーバロードしてたり
きっと for だってマクロだし。
while((hoge = function()) != 0){ doSomething(); } って書きたくなるなぁ。 forよりwhileが好きな漏れ。
cなら「!=0」なんか使うんじゃない for( ; !(hoge = function()); ) doSomething(); だ
while(hoge = function())とか for( ; hoge = function(); )とか 書かなきゃ、どっちでもいいよ。
そもそも変数hogeは要らんじゃん。 while( function() ) { doSomething(); }
ローカル変数へのポインタをグローバル変数に代入するなんて 日常茶飯事ですが何か?
>277 それがお前なら氏ね、周りならさっさと辞めれ
やった釣れた
>>277 \
\(⌒-⌒)
(・(ェ,,)・ ) < なんて書かれるとわかっている餌で俺様が釣られクマ―― !!
`つ `つ (´⌒(´
ゝ_つ_`つ≡≡≡(´⌒;;;≡≡≡
(´⌒(´⌒;;
ズザザザ
か、かわいいじゃねーか!
折れの見聞が狭いだけかもしれないが、以前居たプロジェクトのCのソースで カウンタ変数で使うintのiがモジュール内グローバルにされていた。 実行速度が速いとかならまだしも、「よく使うやつ関数ごとに定義したら面倒じゃん?」 という理由だった。
>>282 まじっすか。こわいな。
ついでにいっとくけど、普通はローカル変数のほうが速い。
>>282 俺もそういうプロジェクトにいたことあるわ
int loop_count[120];
とか定義してあって、みんな直値で使用していた。
資料もないので、最初の製作者以外、どの値をいつ使っていいのか
よくわかっておらず、デバッグしてバッティングしていることに気づいたら
別の番号、わかんなくなったら配列の上限を増やしてしまうという恐ろしさ。
結局5回目のバージョンアップ時に誰かが一括置換失敗して、かなりの
デスマになったと聞いた。
>>285 何考えてそんなことしてるんだ・・意味がわからんぞ。
COBOLerはどうしても「スタック」「ローカル変数」という概念を理解できないらしい。
同じような処理を行う関数を一つのソースにまとめたんだが、 各関数でやはり同じような変数を何度も宣言するのが無駄!と言って 全部外部変数に持ってった奴もいる(;´Д`) 「このほうが無駄が少ないでしょ!メモリ使用量も少ないんですよ!」 そーゆーもんだいか?
メモリ使用量本当に減るのか?
>>290 必要な場所ではどうせ宣言するんだし。むしろメモリ使用量は増えるよ。
それよりもスコープの問題がある。
ループを含む関数からループを含む関数を呼び出せない。
結果
>>285 のように配列(本来ならスタックにすべき)を導入しなきゃならない。
それに「大域変数だと最適化がかかりにくい」って聞いたことがあるんだけど…どうなんだろうか。
>>285 それがさらに進化すると、ウチみたいに
「変数はint_value[9999]、float_value[9999]、string_value[9999]を使用すること」
になるんだな orz
>>290 たいていの場合、メンテナンス性と引き換えに出来る程には減らない。
イナカで仕事しているのですが、どうすればいいのですか? オーバブーロして都会に出てもいいですか?
まだメモリサイズが問題になるところがあるのか。 ああ。組み込み系なんかはまだそうかも
>294 inaka:goto inaka; 要するに無限ループに入ってろってことでは? オーバブーロ
>290 変数として消費するエリアはかせげるかもしれんが、 無駄な作りこみをする分、プログラムサイズで相殺(w
szStr = Format$(0, "0000") & "," & Format$(0, "0000") ……何がしたい貴様。
あるプロジェクトで。 ファイル名に対して、ファイル名主部と拡張子を分断する関数(1) ファイル名に対して、パス名とファイル名を分ける関数(2) ファイル主部と拡張子を結合する関数(3) パス名とファイル名を結合する関数(4) ファイル名主部だけのバッファ(5) ファイル拡張子だけのバッファ(6) があり、「ファイル名チェック関数」では ローカルにいくつかのバッファを確保 1) 5と6を3で結合 2) パス名固定で4を使って結合 3) ファイル存在チェック 4) ファイルがあれば、結合結果を2を使って分割 5) さらに1を使って分割 6) 分割結果と分割前が一致していれば、「ファイルがある」と見なして正とする というのがあり、途中参加した時に「なんですかこれ?」ときいたら「そのままの関数だけど?」と ぽかーんとされた。そのうえ「え、もしかして意味わかんないの??」とか言われた。 説明したけど、どうしても4~6の工程は必要不可欠と言われた・・・・ 5年前の会社の話。
>>299 よく分からないが、「4) ファイルがあれば、」で無限ループに突入しそう。
5年前のそんなくだらない話をよく覚えてるな
>>299 ディレクトリ名、ファイル名が長い場合に、存在するファイル名を取得すると
途中でカットされてる可能性があるから、実際に取得した名称を分割して
比較する作業は必要だ、という意味なんだろうが、
取得したファイル名を使わずに引数として渡したファイル名を分割したって
同じに決まってるわな・・・。
>「え、もしかして意味わかんないの??」 わからん。教えて。 「ファイルがある」かどうかちぇっくなんだろ?
>>291 んなこたない。通常ローカル変数はスタック上に取るから、
そんなことしたらスタックとして確保してる領域は使われぬまま無駄になる。
# スタックも実メモリは割り当てず参照されたところでページフォルト→割り当て
# ということをやってるけど、それはそれでまた別の話。
関数に入る度にローカル変数の領域を確保してやらねばならないが、
それはいわゆるスタックポインタとフレームポインタの足し算だけで済む。
現代のプロセッサでそんな所の効率を気にしなければならないようなものは、
一部組み込みのものだけだろう。
が、そんなことはどうでもよくてプログラムの見通しが悪くなるのが一番の問題だ。
現状コンピュータで一番高価なものは人件費なのだから、少しの効率をあげても、
開発効率が格段に落ちたら意味がない。が、変な人は開発効率=タイプの量と
考えてしまって、変数の宣言が面倒→グローバルに取る、という馬鹿なやりかたをしているのだ。
>「大域変数だと最適化がかかりにくい」
これは本当。ローカル変数だとコンパイラの判断によって
レジスタ上で完結するコードを吐くことも可能だ。なんせ他に影響しないんだから。
グローバル変数も処理時にレジスタ上に置いておけるかもしれないが、
そうしたとして関数からのreturn時や他の関数を呼ぶときにメモリに書き戻してやらねばならない。
マルチスレッドのプログラムだとそもそもグローバル変数をレジスタに置いておくことなどできない。
よって最適化の効率が上がりづらくなる。
あう、誤解を招く表現をしてしまった。
>>304 指摘サンキューです。
>>290 >必要な場所ではどうせ宣言するんだし。むしろメモリ使用量は増えるよ。
↓
必要な場所ではどうせ「ローカル変数として」宣言するんだし、
「大域変数を宣言なんかしたら」むしろメモリ使用量は増えるよ。
…でした。
>>305 あと、最適化の説明もサンキューです。
# で、そのレジスタ関連の最適化を抑制するのが
# volatile ちゅーやつなのですな。
>>305 了解っす。それならよくわかります。
volatileってのは最近は使う機会がないっす。
registerもコンパイラの最適化を妨げるとか、
そもそも無視する(ただしアドレス演算子&は適用できなくなる)とかで
もう10年近く前から使わなくなっちゃいました。
アドレス演算子は適用できるよ。
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という部分集合を勝手に定義して整列しました」
「えぇ、もちろんバグでは有りません。仕様です。」
>>308 C89では適用できなかったような気がかなりするぞ。
C++だとできたような。
C99は知らん。なんとなくできそうだが。
javaにて if ( creditNum1.length() <= 0 || creditNum1 == null || creditNum2.length() <= 0 || creditNum2 == null || creditNum3.length() <= 0 || creditNum3 == null || creditNum4.length() <= 0 || creditNum4 == null ) { hogehoge } ぬるぽ
それでぬるぽが出て動かねーって悩むのか・・・('A`)
/**
* 半角数字だけかどうかを判定する。
*/
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 です。
保守すればするほどめまいがしてくる……
>313 JDK1.3時代につくった遺産かもしれないじゃないか。 oro.jarとか使ったら、 「そんな得体の知れない出所不明のフリーウエアなんか使うな!」とか いうPLだったのかもしれないじゃないか。
>>314 最初からJDK1.4で最初からoroも乗っかってるプロジェクトですが何か?
しかも
String message = "";
message += "hogehoge"+ abc.getBCD() + "ddd";
message += "foo"+ abc.getCDE() + "boo";
(以下略20行)
ということを随所でやってくれてましたが何か?
StringBuffer使ってくださいと。
>315 遅くても動けばいいじゃん
>>313 正規表現使うとコストたかくね?
それはさておき、こんなコードなら知ってる。
/**
* 半角数字だけかどうかを判定する。
*/
private static boolean isDigit(String text) {
try {
Integer.parseInt(text);
} catch (Exception e) {
return false;
}
return true;
}
先頭に - が入ってても通過するけどな。
>>317 確かにコストは低いはず。
やっていいかどうかはまた別の話だが・・・。
備考(CHAR(40))がキーになってるDB・・・・ 集計の際も、帳票を出力する際も備考をキーに・・・・ このDBを設計したのが経歴n年のベテランSEっつうんだから 世の中面白いよヽ(´▽`)ノ まあ、斬新と言えば斬新だよな。データ入力者が自由に集計単位 を設定出来るし。
>>321 実装全てがわからんからあれだけど。
客側がフリー検索に近いことを要求して、パンクしたんじゃないのか?
または、キー(主キー)と検索キーワードを混同して錯乱したとか。
>322 いや、そんな高度な思想に基づいた設計ではなさそう。 現時点ではその備考にはユーザIDとユーザ名ぐらいしか入ってないんだよね。 だったら最初からフィールド作れよと。 客と 「なんで明細が2行に分かれて出力されちゃうの?」 『あー、備考は一字一句同じ入力をしないと集計されませんよ。仕様ですから』 「ユーザ単位で値がみたいんだけど」 『あーそれは出来ませんね。ユーザコードのフィールドを持ってませんから。仕様です』
この世の中、どれだけのDBがその特性を十分に発揮されないまま泣いてるんだろか
さらにいうと、isDigitは全角数字だのデーヴァナーガリーの数字などにも trueを返す。
もしかして漢数字にも?
壱弐参
壱零弐 == 百二
>323 それで怒り出さない客の方が凄いと思う・・・
>>325 > デーヴァナーガリーの数字などにも
インド人の仕事だな。
>324 こーいう構成を見た事がある。 アプリ1 : オーダー情報を格納したmdbファイルを生成。 アプリ2 : 一定時間毎に、mdbのオーダー情報をエンコードし、Oracleへデータ挿入。 アプリ3 : ほぼリアルタイムで、Oracleへ挿入されたデータをアプリ4へソケット送信。送信成功後、データを削除。 アプリ4 : 受け取ったデータをデコードし、某ランドDBに挿入。 アプリ5 : 1日1回のバッチ処理で、某ランドDBの情報を基にデータを集計し結果をSQL Serverに格納。 アプリ6 : SQL Server のデータを表示するCGI。 最初、Oracleが何処で何の為に使われてるのか分からんかった。
値段吊り上げのため?
C#のisAlpha()でハマったことあったっけ。 考えればすぐ分かることだけど、Unicodeのアクセント付き文字などにもtrueを返す。 しばらくの間、Cのisalpha()とおなじだと思ってたんで、不可解な動作に(゜_ 。)状態だった。
そういやー、VBの標準関数は信用できん!と主張して IsNumeric()(数値に変換可能な文字列か否か判定)とか Split()(CSV文字列を自動的に切り分けてくれる)とか ひたすら自作してる先輩いたっけなー。 そこまで徹してくれるといっそ清々しい。ちうかCでいいやんw
335 :
仕様書無しさん :04/11/27 18:08:15
PHP で正規表現使えばすぐにできることを 1文字ずつ取り出して処理するコードを大量に見た。 やめて。
>>334 それは時と場合によるでしょう。
"1E1" などをNGにしたかったり 5,"ABC,DEF",100,AB を仕様にあわせてSplitしたり
する時は自作もするよ
>336 そりゃそういう場合は逆に自作せにゃあかんでしょ
IsNumericやSplitでいい場合の方が少ない気がするが。
「信用できん」という理由の上では不要だってことだろ
すでにあるルーチンを自作する香具師は趣味グラマの臭いがする。 後でメンテをする人間にとっては、組み込みの関数とどこの馬の骨とも知らんような人間のソースなら 前者を選びたくなる。
「信用できないから」という理由ならまだしも、「知らなかったから」という理由で Instr()と同等の関数を自作し、しかもInstr()の存在を知ったあとでも頑なに自作の ほうを使い続けているというのはどうなんでしょうねぇ。
>>341 いいんじゃない?
341はすべての関数を知ってるのかと
動いた後なら余裕がなければ
変えないよ
memcpy の動きがおかしい!とかいって 自分のコードの memcpy をすべて for ループに置き換えたバカなら 今俺の後ろに座ってますが。
>>343 仕様書がおかしい!
といって仕様書を変更しないか監視が必要と思われ
大丈夫、そういう場合は何故か文句言わずに、勝手仕様でものが作られるから。w
世の中には デバッグしてエラーが出たら コメントアウトした上でその処理が返すべき値のような固定値を返す関数を書く馬鹿がいるらしい int func(int a,int b){ /* return a+b; /* return 2; } ↑例を書くとこんなかんじ しかもそいつらプロジェクトをめちゃくちゃにした挙句の果てに 期限どおりに引き上げていったらしい。
/* /*
>348 それ書き込んだ後に気がついた スマソ。 int func(int a,int b){ /* return a+b; */ return 2; } 正しくはこっちだな
あれなんだろうな、取り敢えず、そのモジュールが値を返さないと他のモジュールのテストとか 作る事が出来ないから、そうやって応急処置的に値を返すようにして、 あとからそのモジュールだけちゃんと組めばいいやと思ってたのを忘れてたんだろうな・・・
追記 やり方としては間違ってないし良くやる方法だけど、 問題はそれを忘れてたという所かな・・・
>>347 それでエラーがなおるんなら、つまり引数を間違ってるんじゃないのか?
応急処置にすらなってない気がする。
>>350 まともに動くソースをわざわざコメントアウトしているようにしか見えないけど。
って加算をする関数じゃないのかな。
ユニットテストの直交性ってやつだっけ。
>>352 あくまでもその加算する関数は例として出しただけだろ。
コメントアウトしている部分はバグがある部分です 決して引数なんかが間違っているわけではありません
int func(int a,int b){ return a+b; } この状態でバグがでるとしたら、引数に int 以外の型か、加算してあふれ出すような値が当てられてるんじゃないか・・・ってことだろ? 352は、ただの例を実際のコードとして見てしまったって事で。
>>357 ちょっと待て、あれが加算するための関数だとは誰も言って無いぞ
なんか説明のためのコード例として、関数名にとりあえずfooってつけたのをみて 「いや、ちゃんと意味のある関数名つけないとだめだろ」 ってアツく語りそうなタイプだな。
test
おお、ちゃんと書けるじゃんか。
//この外注に二度と頼むもんかと思った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>で分岐させてやがる……一箇所直すのにどれだけ探せって言うんだ……
>363 それ以前にHTMLのコメントの書式について小一時間
>>363 Mozillaのどのバージョンで崩れたの?
>>364 Web屋に「小一時間」など時間の無駄。
これまでに出てきた話に比べりゃたいした事が無いが。 今日、他のプロジェクトでどうしてもバグが取れないからと言うので、 ヘルプでデバッグに行ってきた。 関数への引数が11個もあったorz それで呼び出す側で順番を間違えて引数を与えていてバグってた。 その関数作ったやつは「俺のせいじゃなかった」と胸を張ってたが、 構造体使えよと…orz
会社を辞めようと思った上司の一言 「どうせコーディングしてたら仕様変わるんだから仕様書なんか書いても無駄」 あほか('A`)
>>368 ある意味アジャイルを実践している正しい発言だが?
どういう仕様書かによるな。シーケンス図は結構役立つので書いた方が良いように思うが、 メソッド単位の詳細仕様なんて、書いてるうちにどうせ仕様書通りにはできないことが発覚する。 ベース部分の設計を飛ばすやつはアホ。
371 :
仕様書無しさん :04/12/19 11:17:46
>>367 仕様変更や機能追加で取り扱うデータが増えたときに
何も考えずに泥縄で引数を増やし続けて、そうなるケースあるな。
構造体使うか、追加された機能分関数分ければ良いのに。
そうやってスパゲッティを量産するヤツには
「自分は要求にしたがってコードを変えたんです」と
大真面目にやってるヤツが多いからタチ悪いよな。
軍隊じゃ
「無能な怠け者はまだ使い道はあるが、無能な働き者は殺してしまえ」
という格言があるが、時々本当にそう思う。
関数への引数は構造体1個だったが 構造体のメンバが100こ超えてたorz とかいう状況はないのかねぇ。
setterじゃなくてgetterだが、Direct3DのGetDeviceCaps()で使う D3DCAPS9構造体のメンバが確か72個。
>>372 100個とは言わないが、50個位のはあった。orz
よくある話なんだろうけど テーブルのカラム名にやたらと「補助コード」とか「管理識別コード1」とかあって 予想通りに? そいつらが必要になって、イミフメな値がわらわら。 漏れはそのプロジェクトにはテストのヘルプ要員で急遽入ったんだが なんつーか、テーブル定義見ても一体何が何を意味しているのやら。 PGはその辺り頭に入ってしまっているようで、すらすらと 「補助コードがA8で、管理識別コード3がyyのレコードを集計して……」 とか指示を頂いたが、はて、コマンドラインからSQL打って数字だけ画面と照合して 合ってたことは合ってたけど、それでよかったんだろうか? 未だに自分が何をテストしていたのか良く分からん。 テスターなんてそんなもんと言われたらそれまでだけどさ。
そういうクソ設計とクソDBは後々問題になるんだよな。
>>377 真に問題なのは、SEの頭の中にしか仕様がないことを許容する体制だと思う。
データベースの設計以前の話だけど。
379 :
仕様書無しさん :04/12/20 21:48:50
昔いた銀行で動いてたシステムは、顧客テーブルの1つのカラムに 1:男性 2:女性 3:喫煙者 4:重病経験者 みたいに複数の意味を持たせていて、もし男性で喫煙者という情報を持たせるには コード1とコード3をそれぞれ持つ2つのレコードを共通の顧客コードで管理すると言う わけの分からん事をやっていた。 そのDBが20年近く稼動していたんで、それを使ってる香具師らはそれでDBというものを覚えたんで、 おかしいとは思ってなかったらしい。
if ( ****************** ) { ****** ****** } この書き方嫌い
なるほど、会社辞めようと思うほど嫌いなんだな。
>>379 それらの属性を表す別々の列を用意した方がいいと言いたいのか?
後で他の属性(たとえば性癖など)が増えた場合、どうする?
383 :
仕様書無しさん :04/12/20 22:51:04
>>379 1:男性
2:女性
4:喫煙者
8:重病経験者
16:2cねらー
だったら理解できるつーかよくやる手だがな。
>>383 男性と女性のフラグが同時に立つことはないと思うのだが・・・。
1:男性
2:外見が異性である。
じゃね?
1:男性 2:容姿端麗
>385 イケメンは登録できないテーブルなのか。
>>386 レス番が 386 のくせに、二進数が理解できない人ですか?
精神医学的分類: 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 素朴な疑問だけど、コボラーの中の人にもそういう発想ってできるの?
なんで男性と女性を別にするんだよ 一つの性別っつーカテゴリにわけときゃいいだろ!!!11
アフォがどんどんあぶりだされていく恐怖・・・
性別 { 男性, 女性, それ以外 }
>>393 マジであったよ。そんなの。
図書館の本の貸借システムで、利用者の属性として。
何でも「それ以外」は団体とかグループとかの場合らしいのだが。
そこでXMLですよ。
法人格に性別ってあるのか?
ないよ
フランスにはあるんじゃねーか?
399 :
仕様書無しさん :04/12/21 02:16:50
女性法人と男性法人がケコーン(合資会社?)したら生まれるのは・・・
ここは日本だ死。 ソースは英語だし。 フランス語が入る余地はほとんどないだろ。
>>399 そういうのは合資会社ではありません。
ご連絡先
402 :
仕様書無しさん :04/12/21 08:01:54
>>380 ごめん、俺その書き方だ。なんか、{}がそれぞれ同じ横位置じゃないと
落ち着かないんだよね。「ここからネストが始まる」っていうのがハッキリ
分かるし。
>>380 おれも最近それに移行中
ただelseのときイマイチなんだよなー
こう書いてる
if ( *** )
{
***
} else
{
***
}
やだやだ。ifの括弧は if(***){ *** } else{ *** } がいい。
それ以上は不毛な論争になるからやめとこうぜ('A`)
406 :
仕様書無しさん :04/12/21 10:52:28
>393 母子手帳がそのわけ方 未熟児だと性別が決まらないことがあるらしい
if ( *** ) { *** } else { *** } が俺は好き フリーフォーマットの弊害だよな、これって いっそcobolやfortranみたいに(ry
if-elseは if(***) { } else { } だけど、try-catchは try { } catch(***) { } が好き。
だからってVBで If A = B Then FuncA() Else:FuncB() End If インデントそろえつつ行数を節約したいというので上記のような記述を してるのを結構みかける。まあそれはいいのよ。 だが、:を多用してるのにインデントが全然そろってないのははっきりいって ウザいことこの上ない。
VBだし
宗教論争は別のところでやってくれ。 かっこの位置ぐらいで会社辞めたくなるんじゃ、毎日転職だぞ。
PMにでもなってコーディング規約に入れちまえ
二度とこの外注に以下略 ソースコードお持ち帰り。 一部最終変更CVSにアップしないで撤収しやがった
>>409 VBのインデントって4桁じゃなかったっけ。ずれてる気がする。
1メソッド500行程度のソース(1クラス3000行あった)のメンテを やることになったとき 条件分岐と他のクラスが定義した public staticな文字列を大量に参照している 素晴らしきソース
>>415 >1メソッド500行程度のソース(1クラス3000行あった)のメンテを
やることになったとき
こういうカキコがあるので前から疑問に思っていたんだが、
こんなに長いコーディングってどうやってやるの?
(415がやったわけじゃないんで何だが)
確かに以前勤めていた会社で上司が
「何スクロールあるんだ」って関数をいくつも作ってくれたことがあって
眺めただけでブチぎれそうになったことはあるが
(たまにならプログラムの関係上、仕方が無いこともあるんだけどね)
さすがに三桁はなかったと思う。
規模によるのかもしれないが、ちょっと想像できない。
似たような処理を関数にまとめず、 コピペコピペでひとつの関数でやっていくと、 いくんじゃないかなあ。 やったことないからわからんけど。
あとは
>>175 みたいなのをわざわざ自作するとか。
420 :
仕様書無しさん :04/12/21 22:00:00
一つのswitch文か800ステップぐらいあって、 その各case毎にさらにswitchやifやforがネストしてるものだから 全体を印刷して、紙を張り合わせて、一反木綿状のそれを床において はいつくばって処理を追った事がある。 長さよりインデントがあって無い部分が多々あって、 それを把握する方がつらかった。
先にインデント合わせれば印刷する必要なんてないだろ
420は釣りだと思いたいが、マジでアフォなんだろうな。 自分でコーディングするときも、一生懸命手作業でインデントを合わせてるんだろうな。 括弧の数が合わなくてコンパイルエラーになったら、ソースを印刷して、 if文のネストをボールペンで書き込んでチェックしてるんだろうな。 grep使わないで一つ一つファイルを開いて検索してるんだろうな。 正規表現使わないで、山ほどif文書いてるんだろうな。 cvs使わないで、日付別のディレクトリ作って、毎日手作業でコピーしてるんだろうな。 diffを使わないで、どこが修正されたか全部目で追っかけてるんだろうな。 なんか悲しくなってきたよwww
423 :
仕様書無しさん :04/12/21 23:11:52
>422 釣られてそれだけの行数かいてるお前の方がおめでたいわ。
世の中にはindentというコマンドがある。
425 :
仕様書無しさん :04/12/21 23:18:24
>423 わらた
>>424 そしてそれが禁止されている世界もある。
特定ディレクトリ以下全部のソースを読み込んで クラスとメソッドの最大、平均、合計の行数と分布を調べて表示してくれる ツールを書いたんだけど、今の現場のコードを解析させたら 会社辞めたくなったなぁ。 415には悪いけど500行なんてざらだよ。
最長不倒関数のHPのリンクでもはりつけっか? 8000行だっけかな、記録は。 でも、基本的にはIf文のElseができたからコピペして倍、 Switchのケースが増えたからコピペ・・・ で膨らんでるだけなんだよね。 本当にロジックのみで精魂込めて1行ずつ作り上げた1000行とかは、メンテする側は泣きたくなるね。 作った側は多分そのときに何かが憑依してたから出来たんだろうけど。w
数百行の関数とか作る奴もアレだが、そういう許してる環境も問題ありだろ。 そんな大作を短期間で作るわけでもないと思うが、その間にレビューとかしないのか。 周りで作業している奴と雑談がてら、ソースを見せ合って意見を聞いたりしないのか。 それとも周りを含めて皆そういうレベルなんだろうかな?
その場でしか使わないような関数に無理やり分けるくらいなら 長いままにしておくし500行なんて余裕ですが何か?
まぁ処理によっては分けられないケースもあるわけで・・・ 昔の画像処理用ルーチンなんかだと結構強烈なの多いよ。
>>429 コピペで増大する場合・・・。
こういうのって初回開発時じゃなく、テスト中から仕様変更時とかに発生しやすい。
きちんとやる時間がない、と言い訳して既存部分を触らずに、If文増やしてElse側をつくったり、Caseを1つ増やしたり。
気付いたらでかい関数が出来ていた。
初回で巨大関数・・・。
数百行なんて1日で出来る。
ソースレビューをする会社と、そもそもしない会社に分かれる。
(私もコーディング規約は科すけど、ソースチェックはしないんで)
>(私もコーディング規約は科すけど、ソースチェックはしないんで) こういうことを当然のように言ってのける感覚が理解不能だ・・ 巨大関数を作る奴も回りに迷惑をかけてるという感覚自体がないんだろうが。
>>430 どういう意味で「無理やり分ける」と言ってるのかよくわからないが、
「ある処理」の最小の粒度が500行というのならともかく、もっと粒度を細かく出来るのなら
その場でしか使わない関数でももう少し細かく分けるべきじゃないの?
DLLにしちゃえばバレないぜ!
>>436 何が?
ソースを破棄してDLLだけ残して、タダで帰れるとおもってるんかい。
>>430 じゃ、あなたのやった仕事は
あなたに一生面倒見てもらうことにします。
>>438 保守契約に入ってくれるなら10年でも100年でもOKです。
>>439 そんな人生嫌だな。
せっかくの下請け人生、どんどん新しいシステムの開発をしたい。
じゃ1関数5行以下絶対な、破ったら罰金500億まんえん
じゃ1関数50行以下絶対な、破ったら罰金5まんえん
つ[軽快なJava]
…もしかして面白いギャグと思って言ってるのかな?
perl4のソースで一関数5000行ってのを見て以来 まだまだ大丈夫だなと思うようになった
447 :
仕様書無しさん :04/12/22 23:57:16
インタプリタみたいなの実装する時ってどうする? switch( dwCmdCode ){ case CMD_ADD: : : break; case CMD_MOVE : : : ってやってたら軽く2000行超えた
関数ポインタまたはそれに類するものを使う
449 :
アビリット :04/12/23 00:37:55
>447 エロゲのソース?
>>447 448のように関数ポインタの配列でも用意して使用。
>>451 おれもそうだな。プログラムの見通しがよくなるし。
switchで分岐するとO(n)もしくはO(log n)のオーダーだけど、
関数ポインタの配列だとO(1)で済むもんな。
いいことばかりだ。
>switchで分岐するとO(n)もしくはO(log n)のオーダーだけど、 switchもたいていはテーブルジャンプになるのではないのかね。
>>453 ああ、そうかもしらん。だがそうでないかもしらん。
コンパイラの実装によるとは思うな。
ま、まあ利点のひとつは根拠が弱いということで、すみません。
まぁ、コンパイラもswitch文は高速化させるだろうから テーブルジャンプかバイナリィサーチとか使うだろうね。 やっぱり利点は見通しがよくなるとかかな? 好みによるかも。
関数ポインタなんて長いswitchより難解なソースになると思うが
コマンドをクラス化して各コマンド毎に派生クラスを作って、と。 分かってる人にとって保守性高いかわりに、分からん人にはさっぱり分からなくなるけどなー
箱庭って15000行ぐらいだった気が。
ソースコードではないが、ある数値を算出するための数式があって、 その数式の3乗根について数人で悩んでたのを見たとき。 「1/3乗ってあるの?」とか「誤記じゃない」とか・・・ あんたら高校すら出てないんですか?
スマン、高校で習った記憶はあるがもう微積分計算はできないorz
ウチのオヤジはベクトル知らんかったよ 俺はベクトルは知ってるがテンソルはわからん
メイン関数が2000行超のコードと格闘しているけど、 このスレを見たらまだまだ大丈夫だと思った。
高校でもベクトルやらないコースはあるぞ。最近は。 ちなみに友人に中卒が5、6人ほど・・・まあPGではないが
つ[工業高校] 数学II なんて知りません
おまいら当然センター数学IAIIBはBASIC選択しましたよね?
int型の変数にポインタ変数の値を代入したり、 関数の返り値がローカル変数のアドレスだったり。 動けば良いってもんじゃ・・・
>>467 >関数の返り値がローカル変数のアドレスだったり。
動くのか?
昔、変数の参照にポインタ代入しようとしたバカがいた事を思い出したよ。 「コンパイルできないんですけど」「動かないんですけど」って何も疑問を持たず聞いて来るんだ、こういう奴は。
>>467 を見て思い出した。
各支店数名ずつ出して、計40人位で作った半年程かけて作ったUNIX系のシステムで
あるOSから別のOSへ移行する、というプロジェクト(?)を
部長・課長をすっ飛ばし、事業部長の特命で漏れともう1人でやらされた事がある。
各機能毎のサブシステムを各支店が担当していた。
当時で言うSystemV系同士の移行なので、漏れも受けた時は舐めてかかっていた。
各支店毎に特徴が出ていて、面白かったが…
ある程度は予想していたが、コンパイルエラーの出方が支店毎でまちまちだった。
マトモな支店のソースは、単純な直しでコンパイルを一応通す事は出来た。
よくバグを出すサブシステム(≒支店)のソースのコンパイルでは
まあそれは予想以上に出るわ出るわ…。
そのソースを見たら、さもありなん、という感じだった。
(続く)
>>487 の様な事は当たり前、&*hoge = …等と書かれた変数もボロボロあり、
「元のOS側のコンパイルがよく通ったな~」と呆れた。
試しに元のOS側でコンパイルを通してみた。
確かに一応実行モジュールは出来るが、Warningの雨あられ。
ホントは取りあえず、コンパイルを通しておいてから
その先にある「キモ」の部分にかかりたかったのだが…
現状を事業部長他に報告した。
本店では中堅どころPGであっても、発言力は余りなかったが、
元OS側のシステム全体を取り仕切るPMに「本店ではチェックイン/アウトしてないのか?」と食ってかかりもした。
「取りあえず、コンパイルを通せ」との命令が下った。
報告した時点で、そのプロジェクトは「OSの移行を成し遂げる」のを絶対条件とせず、、
取りあえず先遣隊として「移行に当たって、何処をどう直すか洗い出す」任務に変更となった。
それから「コイツは何がしたかったのか」を
仕様からひっくり返して解析するのが取っかかり作業の殆どを占めてしまった。
(当然の事ながら、仕様の管理は杜撰そのもの。)
※そこの支店のプログラマは、一回り位年上の結婚歴無しの毒男で
ちょくちょく本店に来ては、俺一人で大変なんだよーと
おにゃのこ達から同情を買おうとし、チョッカイを出す事を繰り返していたが
その度に、その後ろで肩を叩いて、そいつに質問する振りをしながら
そいつのアホさ加減を披露してやった。
長いコードができる理由・・・ 指摘があったとおり、内部レビューや十分な方式設計を行っていなかったからだそうです。 ちなみに業務要件的に「画面で選択した複数の条件(全部で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のテンプレ作ってプロパティファイル化すれば判定すら要らないもの。
>十分な方式設計 ↑ ↓ >SQLのテンプレ ..."十分"以前の問題な希ガス 延髄反射プログラミングじゃんw
何か良い案ある?教えてよ。 同じ延髄プログラミングするならテンプレの方がましじゃない?
延髄反射なんてあるんだ。知らなかった。 口に食べ物入れる→唾液(゚д゚)ウマー テンプラ→(゚д゚)ウマー ってな感じか。
つ [延髄チョップ]
String eriacode = "0000"; // エリアコード もう少しわかりやすい名前付けてくれませんかねぇ。
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); }
なんでORマッピング前提なんだよ。 もとのコード見りゃ、SQL直接実行してるのわかんだろ。直実行前提ならその解はないだろ。 マッピングツールを使う決定ができる立場ならともかくさ。
えーと、ORマッピングは使ってないよ。 Criteria#format()メソッドで文字列にできるようにしている。 Criteriaは、Compositeパターンになってて、再起的にSQL表現に変換される。
うーん、おれならどうせ自作するなら、SQLに書いといたタグを、プログラム上で 変数値に置き換えて実行するような感じにするかなあ。後が楽そうだし。
最長不到達ではないが、1メソッドが4500行ってなんだよ_| ̄|○ しかもコピペ連発くさい。 時々、スクロールしているかどうかわからなくなる。
>485 とりあえず、使えるのならラインナンバーの表示できるエディタをドゾー
>>485 どうして馬鹿は1メソッドに処理を集中したがるんだろう。
ある意味尊敬するけどね。 よく長い関数作れるよな、自分が大変じゃん。 細かく処理分けて行かないと、自分ではつくれません。 なので、無能な人ほど関数が短く、才能に恵まれた人が長い関数を作成できるんだと思います。
作成期間が短ければ短いほど、長い関数は作りやすいよ
if(/*分岐条件*/){ //中略(数行以上) //ここだけ違う //中略(数行以上) }else{ //中略(上と一緒) //ここだけ違う //中略(上と一緒) } 勘弁してくれ
>>489 それは能無しか手抜きの言い訳だよ。
関数にコメント書きとかを規約でこってり強制されてれば別だが)関数作る手間なんぞ30秒もないぐらい。
それと作成したもののテスト時の面倒さを比較すれば、急がばちょっと廻れとなるんだけど。
短納期だろうがなんだろうが、普通にいつもどおりやるだけだけどな~。
むかーしDOSの頃の話だけど、 「おまえのプログラムは処理が関数に分けられてるので、 ソース読むときはファイルを開きなおしたりジャンプさせたりしなきゃいけなくって 読みにくい。『普通に』上から順に読めるようにしろ」 って言われたことあるよ。
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つ位に分けて作りなおしたら半日でできた
関数わけされてれば、バグ追跡のときとかも、やりやすいけどね。 この関数まではOKとか、それ以前に現象だけでこの関数が怪しいってわかるじゃん。
>>494 >関数わけされてれば、バグ追跡のときとかも、やりやすいけどね。
これ読んでちょっと思ったんだけど無能に限ってバグ取りの時
「最初から追いかけてけ」って言わない?
どうしても見当がつかないから、とかじゃなくて。
自分で設計・製造したところは動作見ると見当つくことが多い。
それでバグ出ると見当つけたところを調べようとするんだけど
横から「最初から~」ってうるさい。
そしてそいつのソースは意味もなく一関数が一画面に収まらない。
少なくとも俺は大体のアタリをつけて追っていくな。
ことある毎に 1画面1関数とかいうやつは 1画面が80桁x24行とかになってる人なの?
1関数が長大になるのは、処理の切り分けが出来てない証拠だよな。
じゃ1関数24行以下絶対な、破ったら罰金24億まんえん
>>493 うはは。よく半日で動作を解析できるなあ。
ひとつのメソッドが if(/*分岐条件*/){ //中略(500行くらい) //ここだけ違う //中略(500行くらい) }else{ //中略(上と一緒) //ここだけ違う //中略(上と一緒) } っていうやつ×8。 修正するのに、置換した箇所数十箇所以上。 コピペ禁止!って叫びたくなった。
1画面1関数って人は、処理の塊ごとに空行入れてる? 漏れは入れないと見づらい でも入れると1画面に収まらない (以下ループ)
>>504 >処理の塊ごとに空行入れてる?
当然いれてる。
入れた上で1画面で収まらないと
どこか無駄なコーディング(=設計が変)してるんじゃないかって
気持ち悪い。
関数ヘッダまで入れて1画面で収まると大変落ち着く。
一画面てのはどのくらいのことをいうんだ? うちは132列×55行なんだが、広いのか狭いのか。
>>504 「処理の塊」ねぇ。
前の塊の出力がカレントの塊の入力になっていたり、
前の塊がカレントの塊とはあまり関係なかったり・・・
塊ごとに別関数にすれば良い っていったら煽りになってしまうのかな
普通はそう思うだろ。 C89なんかでインライン化できない場合、速度との関係でわざわざ1関数内に展開する必要がある時ぐらい。 あ、腐ったコーディング規約の時もやったか。
「処理の塊」ごとに{}を入れる人もたまにいるね。
>>509 俺がそうなんだけど、変かな?
そのブロックでしか使わない変数のスコープも明確になるし、関数に分けたくなったときに切り出しやすいと思ってさ。
他の人にとって読みづらかったりするもん?
オレモナー
>>510 やってないひとが見たら面食らうかもしらん。
むかーし、スコープを限定しようと思ってやってみたとき、
後でコード読み返したら自分のコードに面食らったもの、おれw
>>504-505 俺は空行嫌い。
空行入れるんだったら、コメント行入れてくれ。
メソッドとメソッドの間には1行空行を入れるけど。
/* 処理の区切り */
空行嫌いは治しておけ。
>>495 たぶん君が「最初から追いかけろ」と言われるのは
あたりをつけたところが見当違いだからじゃないかな
実際そういう奴多いんだが、このへんに違い無いという思い込みで
いつまでも正解にたどり着けなくて堂々巡りしてるのがいるんだよな
>>517 自分は見当つけたところであってることが多い。
外してたら最初から調べるし。
「最初から~」言ってる奴は自分が最初からやっているから
自分と同じやり方ではないとイチャモンつけてるだけ。
こいつは仕事と全く関係無いことで
意見を求められて正直に答えたら
「なんでおれと同じ考え方ができないんだ!」とぬかしやがった。
>自分は見当つけたところであってることが多い。 皆そう言うw
本当に見当がつかないときは二分法だなあ。 デバッガでmainの半分まで実行させて様子を見る。 んで変な関数を特定、以下同様。 でもそんなことしたことって今までに一度しかないな。 大体見当つくもんね。
つまりその見当って奴が信用されてないってことでしょ だから全部確認しろって言われる 素直に言う事聞いて信頼を得るように心がけるのが吉だと思うよ♪
「分かりました」と言って相手がよそを向いた隙に自由気ままにバグを特定すればいい
>>521 そんなんで得られる信頼なんか個人的にはイランのだけど。ダメ?
>>523 いいと思うよ。ただそれだと、いちいち干渉されるのは仕方がないね。
上司としても信頼できない部下には任せられないじゃん?
信頼を獲得すると結構好きなようにさせてもらえるから、
個人的にはそっちの方がお勧めだけど。
>>524 524のいうところの上司の信頼を得るというのは理解出来ない。
自分は上司がミスをしていれば指摘するし、代案も出す。
設計レベルのミスは下手すると後でデスマになるからね。
でも上司にしてみれば
俺の仕事にケチつけた=信頼出来ない。
めちゃくちゃな指示に反論すると
俺の指示を聞かない=信頼出来ない。
そして上司のスキルは低い
(5年目にもなって上の人間に
「仕様変更があるとあちこち修正しなくてはいけなくて大変。
何か良い方法ないですか」なんて聞くなよ)。
信頼を得る気にならんのだが。
経験が浅いみたいだから、視野が狭いだけじゃない? これからいろいろな人の下につけば変わっていくよ、きっと。
あ、525自身のことね。
>>527 >経験が浅いみたいだから、視野が狭いだけじゃない?
>これからいろいろな人の下につけば変わっていくよ、きっと。
これが
「まともな人の下で働けば、信頼を得るというのが
どういう意味だか分かるよ」
と言う意味なら、
575 は簡単に「信頼を得られれば~」という人間への当てつけで
あえてこういう表現をした(上司についての記述は事実)。
おまえらはこんな人間の下で働いたことがあるのかと。
上司がまともな人間なら信頼してもらえるように頑張るさ。
「こんなの序の口。世の中もっと変なのイッパイいる。
経験積めばこのくらい大したことないって分かる」なら
そんな変な経験積みたくないから
そんなところで働かなくてもいいように気をつける。
これはダメだな。
会社としてはリストラの第一候補に入れたい人物だね
ああ単なる「バグ追跡方法の選択」が、リストラ候補の話にまで
>>525 信頼を得た状態というのは、
部下:間違ってますよ。
上司:おまえがそういうなら間違いかも。再考するよ。
と言った展開になる状態のこと。
わざわざ指摘をすると言うことは、
上司の主張を変えさせたかったんだと思うけど、
そのためには信頼を得るのが最善手。
だから
>>525 のような人にこそお勧めしたいんだけど、
その気にならないなら仕方ないね。
いつまでも疎まれる方がいいならそうすればいいと思うよ。
もっとも、上司の主張を変えるのは既に諦めていて、
何の戦略もなく単に反発してるだけなんだろうけど。
そんなまねてしてたらますます嫌われるわな。
自業自得だわ。
>>534 そっちは付き合いたくないと言っているわけだがw
>>533 そんな特定の個人の言う事しか聞けん奴の信頼なんて
かえってヤバイと思うけどなあ。
誰からであれ間違いを指摘されれば「そうかすまんな」って応じる普通の人だって
いるわけだし。
>>536 確かにそういうタイプの人間にへんに信頼されると、馬鹿上司が作り出した
デスマーチに引きずり込まれる可能性が高くなるので、適度に遠ざけておくのが良いな。
>>524 524 は常識で考え過ぎ。
上司がまともな人間ならその考えは正しいよ。
ただこの上司の場合は信頼を得られても
> 部下:間違ってますよ。
> 上司:おまえがそういうなら間違いかも。再考するよ。
にはならない。
なぜなら、信頼を得るというのは上司の奴隷になることだから。
言っておくが、少なくとも
「設計とC言語はこちらが上」と認めさせる程度のことはした。
それでも仕事の妨害でもなんでも平気でするような人間だ。
辞める前にこの上司の指示通りの処理をしたことがあるが
(不条理な作業じゃなかったから)それだけで
「俺様の下僕になる気になったか( ̄ー ̄)」という
態度で接してくる。
吐き気がした。
下の人間でこの上司と一度でも仕事をしたことある人間は
この上司には近寄らない。
後輩で処世術として太鼓持ちをしていて
この上司に気に入られている奴はいたが、
そいつですらこの上司と働くより別の人間とのデスマを選んだ。
それでも 524 が「信頼を得る~」と言えるなら
こういう人間に会ったことがないから想像できないか
奴隷根性が染み込んでるかのどちらかだと思う。
>>534 すまん。
リロードする前に書き込んだ。
以後この件ではスルーする。
>>538 「信頼を得る」という意味が理解できないと言うから説明したんだよ。
俺は一貫して
>>533 で説明した意味で使っている。
それを奴隷になるという意味だと勝手に再定義して反論されても困る。
それは俺の主張に対する反論じゃない。別に奴隷になることを勧めてないから。
詭弁はやめてくれ。
言い方を変えてみたらどうかな 信頼を得るという自分が譲歩してるみたいなやり方が気に入らないらしいから 相手に自分を信頼させるという戦略、みたいな攻撃的表現ならどうよ
まぁ、540には、「イエスマン以外は一切認めない」という人間がいることが信じられないんだろう。 それは幸せなことだ。
>538 >辞める前にこの上司の指示通りの処理をしたことがあるが >(不条理な作業じゃなかったから)それだけで >「俺様の下僕になる気になったか( ̄ー ̄)」という >態度で接してくる。 それは「言う事を聞く」と信じさせただけで、信頼を得たとは言わない。 いわば信頼の「信」だけしか得ていない。 上司がプライドを捨てて貴方を「頼る」ようになって、はじめて「信頼」を得たと言うのだ。
>>543 そんな手間のかかることしててコストに見合うのかなあ。
さっさと離れて普通の人を上司にしたほうが楽で手っ取り早い気がするが。
普通の人なら自分が間違ってたら素直に認めるし
間違いを指摘した人間に感謝して信頼するようになるでしょ。
信頼ってのは結果についてくるものだからさ。
それは言っちゃいかんだろう。皆黙っていたのに・・・
>537 前の職場にいたなぁ~ 上司からしてみれば、信頼している部下というより、便利な道具としか見えていない。
部下に逆らわれることに慣れてない上司って結構いるよね
重要そうなキーワード以外はそのまま 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
リファクタリング前のソースだろ?
もう完全に納品後で現在保守段階です
>>549 君はそれをどう変えて欲しい?
「インデントしてあるなんて綺麗でいいじゃないか」と思った漏れは中国様に
毒されていますかねぇ・・・
人はインデントのみに生きるにあらず。
char data[100]; long *p; long q; p=(long *)(&data[1]); q=*p;
{ bool hoge=false; func((unsigned int*)&hoge); } func(unsigned int *hoge) { ...... ...... func(hoge); }
辞めようと思ったほどじゃないんだが、 ファイルのパスを格納する変数が cPass ログを保存するための変数が cRog 関数名が Funk() 疲れる・・・・
ノリノリな会社だな
>>556 ローマ字のほうがまだ良いな・・・それ・・・
そこでUwaRiteですよ
出たUwaRite
排他制御するた関数はRock()に違いない
>ログを保存するための変数が cRog うちは cLog だな
ファイルは Opun()とRied()で読み出すのだろうか
clo-zu()とかも使ってるとみた
DataSyutokuKansu()とかな。 うちの後輩_| ̄|○
>>565 Kansuは要らないと思うけど
まーアリじゃない?
どこまで英語にするか、難しいよな。 確定申告のアプリ作ってて、減価償却費を取得するメソッドを最初 GetDepreciation にしてたら、途中で何のメソッドかわからなくなって、結局 GetGenkaShokyaku にした。
無理矢理英語にして訳解らんくなるよりは、潔くローマ字のほうが 可読性に優れていると思うんだけどね。
そこでJavaを使って日本語メソッド名ですよ。
ソースにASCII以外の文字をいれるな
>>570 海外の外注がその理屈で自国語のメソッド名をつけたら…
>>568 俺的ルールとして、
業務用語(名詞)は日本語(ローマ字)
動詞とシステム系は英語
にしてます。
例
○ getGenkaShokyaku()
× genkaShokyakuShutoku()
>>573 そしてそれを見た誰かが
「なんだよ Sho って!俺のルールでは Syo なんだよ!」
ウチの場合、 GetData()とか DataGet()とか DatGet()とか GetDat()とか 全部、同一人物のソースなんですけどね。統一しろやゴルア
>569 同意 無理に英語にしなくてもよかれ。 つーか、自分でもわからなくなるからねぇ… >574 俺のルールって…
>>575 そもそもGetDataなんて名前はあんまり使いたくないな。
どんなデータが返ってくるのか解り辛いじゃないか。
脳内仕様だから本人だけはわかるんだよ…
書いてから2週間以内ならね。
俺なら5時間だな
いや、究極に細分化されたオブジェクトなら、データが1つなんだよ。w または、あれっていえば取り出すようなつーかーのなか。
辞めようと思ったほどじゃないけど、 <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文にする意味ないじゃんとか思ったんだけど。
HTMLタグって使えないのね...orz 吊ってくる...
>>583 いきなりタグで始まるからJavaScriptかと思ったよ。
そしたら->とか出てくるし…
>>582 if文だけ使って書いたら、レビューでswitch使えって言われて、泣きながら書いてみたんじゃね?
その昔、行数で工賃が決まっていた頃のなごりであろう...
switch にする意味じゃなくて、 if を使う意味がないとは思った。
% find . ( -name *.h -o -name *.cc -o -name *.cpp ) -print 2>/dev/null | xargs -I {} egrep "for.*strlen" /dev/null {} | wc -l 229 もうダメポ、このプロジェクト...
>588 何がヤバイって、最早諦めきって*.hまで検索対象に入れている588の境地がヤバイ
>>589 そりゃ、インラインのメソッドで使ってるかも知れんし。
>588 そのココロは? C++で文字列操作関数なんて使うな!ってこと? それともforの終了条件に使うな、ってこと? #strlenがinline実装されてたらうまく最適化されてくれたり、はしないか…
forの終了条件でstrlen()してるからループ一回ごとにstrlen呼び出しちゃう無駄なコード ってことが言いたいんだろうと思うんだけど コンパイラは文字列をいじってないことをちゃんと検出して最適化してくれるかな?
終了条件の文字列はforの中で絶えず変化するのですよ
文字列が他スレッドからも変更されていないことを検出するには すべての文字を走査しなければならない。 ↓ 普通にバイト数数えた方がまし。 ところで >588 の探し方だと for (size_t i=0, len = strlen(hoge); i<len; i++) みたいなのもカウントされるわけだが。
「この部分はクラス化すること」って仕様書に書いてあった。 今目の前にある代物は、 元あった関数の数だけクラスがあって、各クラスはコンストラクタ+1関数で、メンバ変数を持つものは1つもない。 設計者がメンバ変数として考えていたであろうデータは、 .cppの1つにグローバル変数として定義され、extern修飾で各クラスから参照されていた。。。 なにかの冗談ですよね?
クラス図書かなかった設計者の負け。 まあ、書いたら今度は「わけわからん図を付けるな、ボケ!」なんだろうな。
クラス図書 かなかった
この先生 きのこる
_,,,......,,__ /_~ ,,...:::_::;; ~"'ヽ (,, '"ヾヽ i|i //^''ヽ,,) ^ :'⌒i i⌒" | ( ゚Д゚) < 呼んだ? |(ノ |) | | ヽ _ノ U"U
(・∀・)キノコル!!
俺、いじめられてたのか、夏休みのクラス図書、かなかったよ…
>601 (;´Д`)?
>>601 そりゃお気の毒に。
俺なんか、かなきまくってたよ。
あの時ちゃんとかなけてればなぁ・・・
人間の深みなんて、かなく数できまるとこあるよな。
にんべんに夢とかいて儚い 人の夢ってかないわね
たかつてなら叶うと思う
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); } };
そんなコードがあっても不思議じゃないと思う漏れはおかしいかな。
#define 以外は特に「辞めよう」って程じゃないね。
0x0C1っていい味出してるなー
>>611 なんか懐かしい気がするとおもってたら、印℡系アセンブラだ。
(C1H だとラベルと見なされる為、0C1Hと表記する)
613 :
なぎさっち ◆Nagi/FmYMM :05/02/08 09:49:31
ルイージスレあげ
(0x0)ウェーイ
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 氏ね!
突っ込みどころはどこなんだろう
ネーミングセンスじゃね?
Private宣言(ローカル変数宣言)の中に Public宣言(グローバル変数宣言)が混じっていることではなかろうかと 呟いてみるクラシックVB厨。
class A { public: int hoge; }; class B { private: A fuga; }; こういうのって勝手に解釈してた。 (いや、これが正しいのかは知らんけど)
>>619 どこが問題?
別に、単にSetter/Getterでラップするだけなら、それでもいいと思うけど
>>620 いや、どこも問題ないよ。>615 のVBのソースをこんな風に解釈してたって意味。
622 :
仕様書無しさん :05/02/13 17:45:46
今度入った会社でVBばかりなのだが、以下の条件に当てはまるソースは すべてイヤになる。 ・コメントがない ・インデントがない ・変数にプリフィックスが一切付いていない。 ・関数名、変数名が漢字(生理的に気持ち悪い) ・コントロールのプロパティを省略してある(Text1.Text = "a" を Text1 = "a"みたいな) ・コントロール名がデフォのまま(Command1だとかPicture1だとか) ・型を無視している(Date型なのに dteWk = "2005/02/13" とか) 「読みやすく」「分かりやすく」「コンピュータに優しく」 この3原則を守れば、上記みたいなソースは作らないはず。 プロとしてのプライドを持ってほしいよ。
>622 >・コントロールのプロパティを省略してある(Text1.Text = "a" を Text1 = "a"みたいな) それ、うちの先輩・・・_| ̄|○ どこで聞きかじってきたか知らんが、「このほうが高速だ!」と言い張って譲らない。
えっプロなの?w
> 「このほうが高速だ!」 ( ´,_ゝ`)プッ
>>625 たしか VB Magazine あたりに書いてなかったっけ?
>Text1.Text = "a" を Text1 = "a"みたいな なにが悪いのかよく分からんが?
つまり誰も説明できないということでF/A?
>>627 >・変数にプリフィックスが一切付いていない。
>・関数名、変数名が漢字(生理的に気持ち悪い)
>・型を無視している(Date型なのに dteWk = "2005/02/13" とか)
これらには同意するのか?
プリフィクスはまぁ……コーディング規約とかその辺はいろいろと事情もあろうから なけりゃないで気にならんけど 他は622に同意。 VBっつーか、VBAから入ってきた人がやりがちなんだよなぁ > 識別子に非ASCII文字
規定のプロパティを省略すると高速になる!ってのも、VBAやAccessやってた人間が 抱きがちな迷信という気がする。オブジェクトとオブジェクトを繋ぐ!や.が少ない方が 高速、っていうのはありだけどね。
>>635 >・変数にプリフィックスが一切付いていない。
俺は昔、integer型の範囲に収まらない変数にinteger使ってるソースの修正を担当させられた
ことあるんだが、コーディングルールでプリフィクス付けなきゃいけなかたんで、変数名変更
とそれに伴うテストでウンザリしたことある
>・関数名、変数名が漢字(生理的に気持ち悪い)
生理的に気持ち悪いものはしょうがないでしょ
>・型を無視している(Date型なのに dteWk = "2005/02/13" とか)
これ代入時にDate型に変換されるでいいのかな?いいのならこの記述でいいと思うけど。
>Text1.Text = "a" を Text1 = "a"みたいな
これはあれだね。コントロールのデフォルトでなに代入されるか、ぱっと見でわかんないと
嫌だということだろうね。俺も嫌だな。テキストボックスぐらいならいいけど、他のでやら
れたらデフォが何か調べる手間が発生するかもしれないし。
>>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")
>>639 コメントが要らないほど意図がはっきりとした明確なコードということでしょうね。
それを目指して書いてはいますが、やっぱりところどころコメントが必要です。
道は険しいっす。
date型に定数を入れる場面ってどんなのだろう。サンプル画面とかかな。
つうか、デフォルトプロパティへの代入は高速だったはず。 可読性が低くてやらないけど、VBさん的にはオブジェクトの参照がデフォルトプロパティに対しては早いはず。 (デフォルトは最初から参照を持っているけど、Textと書いた場合は他のプロパティと同様に探査するだったような・・・。) まあ、可読性を犠牲にするほどの差ではないはず。
なんだかんだ言って、VB の話題になるとみんな饒舌になるな。
646 :
仕様書無しさん :05/02/14 14:49:24
VBの話題になるとさっぱりついていけません(´・ω・`)
VBの話題になると、ツッコ見所満載&みんな言いたいことがたくさんあるからだろうな。
648 :
仕様書無しさん :05/02/14 17:49:10
>>639 よくあるのが、
「究極のプログラムとは、コメントの必要がないプログラムである。」
これを、「コメントを書く必要がない」と勘違いしちゃうケース。
どんなに見やすいソースでも、コメントが書いてないよりある方がベター。
>>648 個々の行の説明は、アクロバットじゃない限り要らないけど、
大きい流れに付箋紙貼るようなコメントは欲しいよね。
関数化されていて関数名読めば判るつくりとはいっても、関数名に日本語使うわけじゃないし。
(日本語関数OKでも使いたくは無いしね。)
日本で開発する以上よほどの事情がない限り日本語のコメントは必須でしょ。 目的の処理してる個所探すのに日本語で検索かけらんないのは困る。 なんか目からウロコ落ちるような反論があると嬉しいけど
コメントが正しいことの確認をとる方法があれば良いのだが
日本語コメントなんかをキーで検索すると取りこぼしが多すぎる 危険性を分かっててやってるならいいけど
そこでmigemoですよ
ソースにコメント入れないのは、論文に脚注や文献一覧を入れないようなモンだ。
まぁただの自己満足だろうな。
>>648 どう考えても
int i = 1; // 初期値 1
というコメントは無いほうがベターだと思うが。
>>658 648の言う「コメントが書いてないよりある方がベター」というのは
条件付じゃないと成り立たないですよ、という話。
今の職場のコーディングルールが「コメントは各行に付ける」だから
>>657 の例みたいのが量産されてる。
たとえば変数aとbの値を入れ替える処理があった場合、
/* 変数aとbの値を入れ替える */
tmp = a;
a = b;
b = tmp;
普通こんな感じで処理のブロック毎にコメント入れると思うんだけど、
tmp = a;/* aの値をtmpに退避する */
a = b;/* aにbの値を代入する */
b = tmp;/* bにtmp(元a)の値を代入する */
て感じにされてる。
初心者や元コボラーにも処理が追いやすいようにと始めたルールらしいんだが…
ワロタ
>>660 「コメントは各文に付ける」ではなく「コメントは各行に付ける」ならば
tmp = a; a = b; b = tmp; /* 変数aとbの値を入れ替える */
で良いようなw
>>662 どうせなら
tmp=a, a=b, b=tmp;
で方がよいのでは?
>>660 のコメントの例もかならずしも、イイとは
思えないんだがな。だれが見てもaとbの値を入れ替えるのは
わかるんだから、「○○だから値を入れ替えます」くらいは
書いて欲しい罠。
>>660 もうこんな感じでいいじゃん。
a ^= b; /* a と b の排他的論理和の値を a に代入する */
b ^= a; /* a と b の排他的論理和の値を b に代入する */
a ^= b; /* a と b の排他的論理和の値を a に代入する */
演劇のプログラムと同じで式目だけ書いてあれば十分だよな。 大体こういう流れです~。って。 個々の行にコメントってそれは台本だよ。
俺も「コメントは全行につける」ってプロジェクトに居たことがあるけど、 そこでは41カラム目に/* */ っていうのが主流でした
そして変更した行は72カラム目から /*20050216 SZK*/ みたいな 印なんか付けさせられちゃったりなんかしてえ、もうコノコノ!
そのうち殆ど全ての行に日付が付くんだよ。
作成者の名前と修正者の名前と、修正承認者の名前も付くんだろ?
orz=3;
修正箇所にコメントで修正者と日付をつけるってのは、 今でもまだある習慣なの? ここ5年くらい、 管理ツール任せ(CVS, ClearCase, SourceSafeとか)ってのにしか、 当たったことない俺は運がいいのか・・・。
課長以上が管理ツールに理解を示してくれないので、 いまだにコメントに日付と作業者、 変更内容と変更前のコードを残していまつ。 あとC言語なのに何カラム目から、というコーディングルールが やたらと多いでつ。
>>673 インデントみたいな話はエディタのマクロとか、整形フィルタに
おまかせって話になんないの?
何カラム目から、っていうのはASM時代からの遺物ですね。それで見やすい・・・って人が 絶滅してくれないと変わらないと思われ
印刷して紙の右半分だけ読んで行くんだろうな
if (!"".Equals(str)foo=Namespace.Subnamespase.Subnamespase.Bar.MethodName(arg); こんな書き方ホントやめてくれ…orz using Namespace.Subnamespase.Subnamespase; // ... if (str != "") { foo = Bar.MethodName(arg); } って書き換えたら、「こんなコード書くなよヴォケ!」だしな…orz
誤 if (!"".Equals(str)foo=Namespace.Subnamespace.Subnamespace.Subnamespace.Bar.MethodName(arg); 正 if (!"".Equals(str))foo=Namespace.Subnamespace.Subnamespace.Subnamespace.Bar.MethodName(arg); …orz
>>608 がどういう処理を行うのか全く読めない俺は一体・・・
訂正したのにネームスペース多くなってるしな…orz orz
>>679 他に書き様はいくらでもあるとは思うが、
古参のプログラマたんとかだと
普通に書くコードの様な気がするなあ。
何が目的で書かれたコードかはさておき、
辞めるってほどのコードじゃないわ、俺的には。
作法守って書いたところで、最終的なバイナリなんて
ほとんど変わらないの、目に見えてるだろし。
(少なくとも、自分の担当に回されたくないコードではあるが)
回されたら…まあ普通に書き直すわな。 ていうかマクロ乱用はまだいいんだよ。 元が問答無用に強力な機能である分、副作用無しにビルドが通ってるなら、 簡単に置換できるから。 それよりも、namespace shotgun とかぶっ放されてるヘッダを見ると 本気で途方にくれる。 どこから手を付けていいものやら。
(書き直したら、「こんなコード書くなよヴォケ!」と言われたと書いてあるのは気のせいか・・?
ぃゃ・・そう考えると、この会社辞めようと思ったダメ上司の一言スレが適当だなァ・・・。)
>>683 具体的なソースPlz(ぇ
>>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系アセンブラもかじったことあるのに。
これってまさか常識、とか?
常識的に使うようなコードではないが、 アルゴリズム事典とかを手元に置いてる香具師なら 見覚えくらいはあるはずだ。
まあ自分で発見するのは最高に難しいのは確かだが
実際につかっててあんなコメントだったら 1.笑えるやつ 2.怒るやつ 3.分からないやつ の三つに分かれそうだ
知識として知っているのは常識 そして、決して使わないのも常識 良くないコーディングテクニックとして、 頻出している例だからね
よくない理由を教えてくだされ
適当に思いつくままw 速い、小さい、知らない人間を驚かす、可読性悪し
専務が「本物のオブジェクト指向」って太鼓判を押すプロジェクト@VB.NET どうも、モデルとビューに分けている(専務談)のがその理由らしい。 システムで使う全てのフォームクラスを「View.dll」に集めて、それらから使う全てのモデルクラスを「Model.Common.dll」に集めてある。 フォームとモデルは1対1に対応付けられているから、ある機能を修正するには、常にシステム全体に影響する2つの dll を修正しなければならない。 もちろん、モデルの「Common」なんて名前に意味はない。中身は各フォーム用のモデルクラスだし。共通化されてるものなんて入ってない。 加えて、ビューとモデル間のデータの受け渡し方が異常。 まず、フォーム上の全てのコントロールの値と有効状態(Enabled)を、巨大な Hashtable に詰め込む。 Hashtable のキー名は "Lblなんとか_Value" とか "Btnなんとか_Enabled" とか。 ボタンのキャプションとかラベルの Enabled なんていう、変わらないものもとりあえず詰め込んでおく。 モデルのほうではそれを受け取ったら、データを取り出して、処理して、処理後のデータを新しい Hashtable にコピーして返す。 返されたビューは、キー名を "_" で切って、コントロール名とプロパティ名を取り出し、コントロールにプロパティを設定する。 この時、モデルに渡した Hashtable と、モデルから帰ってきた Hashtable で、要素数と要素の並び順が同じでないといけない。 オブジェクト指向を理解してないやつが語る「オブジェクト指向」ほどたちの悪いものはないな、と思った。
>>692 なんつーか、それ、オブジェクト指向がどこにも出てきてないな。
XORで入れ替える技って年寄りにとっては常識的な技だし ほとんど慣用句だから良くないテクニックとも言えなかった。 でも効率と可読性のバランス点が大きく可読性寄りになってる今日では ふつう使わねーよってことだろう まぁ年寄りがうっかり使っていたとしても暖かい目で見守ってくれや
>> 693 出てこないどころか、正反対の方向に向かってるのは勘弁して欲しいと思う。ほんと。
カプセル化しているつもりが実は、ってやつだな。
>>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入れ替えって、両方が同じ値のときに、入れ替えられないよな?
>>665 のaとbが実は同じ変数なら、入れ替わらない。(両方0になる)
同じ値なだけで別の変数なら、入れ替わる。(685の4つめの例)
>>672 組み込み基盤開発やっている古い友人が、FDにバックアップ取ってるとか、納品に使うとか言ってたな・・・。
何気に2人で電気屋に行ったときUSBメモリを目に留めて、説明してやったら64Mの物を買って、やたら感動してたっけ。
>>698 >構造体がクラスのように使える見本だな。
君、何か大きな勘違いをしてやしないかい?
いや勘違いじゃ無いでしょ。事実に今気づいたってだけで
>698 は、struct と class に機能上の差異がない事を知ってて 「構造体がクラスのように使える」と言ってるんだよ。 つまり、 … すまん、やっぱ意味不明だわ。
すいません適当な事言いました。 実際によく分かってない痴呆なんで許してください。 構造体にコンストラクタをつけているのが まずいとばかり思っていました。 他に変な部分があるか分からない…
C++のばやい構造体もクラスもおなじものなので 見えるも何もないと。 違いはデフォルトのアクセス指定子くらい。
>>695 大体にして、その程度の入れ替えなら、きょうびは普通
レジスタ一本無駄に使った方が、コードも短けりゃ
速度だって圧倒的に速いもの。
古いコンピュータの教科書とかには、たまに見かけるね。
本当にレジスタ数が足りなくて仕方なかった頃の話。
ゼロレジスタが無いから、自分とANDとって、自前で
生成したりするんだよね、ゼロを。
自分とXORじゃなくて? 今でもコード長削減のためそれは使うんじゃないかな。
アセンブラの世界には独特のテクがあるからな。 PUSH BC POP DE を知ったときの衝撃。(Z80の話)
>>708 自分とANDを取っても何も変わらんだろが。
>>709 逆アセンブルかけてみると関数の先頭部分にはたいてい「xor ecx, ecx」みたいなのがありますよね。
ところで。今調べたらx86系では「xchg eax, ecx」で入れ替えられるっぽいですね(これ使えれば楽なのに…)
>711 レジスタ-メモリ間で使うと㌧でもないことになるのでだめぽ>xchg
>>715 ここら辺とか
> Cにおいてはポインターに限らず、 ほとんどあらゆるものが自動的にキャストされます。 キャストした結果が int と一致するとは限りません。 いらんところまで交換されてはたまりません。
>では、レジスターの中身を、どうしても交換するしかない時は、 XOR を用いた手法は有効でしょうか? 答はここでさえ NO です。
>最近の高周波数で動く多段パイプラインを多用した CPU では、 この機構が有効に作用します。
>もし、レジスターネームをユーザー側が自由に差し替えられるならば、
>XOR を使って値を交換するテクニックは、 もはや使えないテクニックになったと言えましょう。
ふーん
>>716 どんな風に説得力がないのか、教えてくれないか?
漏れ、馬鹿の国から馬鹿を宣伝しに来たような見事な馬鹿だから、
ちゃんと解説してくれないとわからん。
取り合えず的を射ていないとは思ったな。 1. int*がintを指しているとは限らないだろう、というのはプログラムが おかしいのであって、XORテクニックとは関係ない。それだったら、 +や-だって使えないだろ。だいたいCの保証範囲でない。 2. パイプラインの話は正しいのかもしれん。ただしパイプラインとレジ スタリネームは関係ない。さらに、パイプラインを用いていないアーキ でもXORの方が遅いことは十分考えられる。要はXORテクニックとパイプ ラインはあまり関係ない。 結論はあっていたとしても、その理由が無関係だから説得力がない。
漏れもなんか説得力ないと思った。 その理由を一部。 > Cにおいてはポインターに限らず、 ほとんどあらゆるものが自動的にキャストされます。 キャストした結果が int と一致するとは限りません。 int*に自動キャストされる型なんてほとんど存在しないし、 int*で引数宣言してる関数に他の型が渡されたらどうなるか考えるのなんて無意味。 「strlenにint*のポインタ渡したら動かねぇ!」ってクレームつけてるようなもんだ。 > r3 = r1;…(1) > r1 = r2;…(2) > r2 = r3;…(3) >という処理は(1)と(2) の r1 を別の実レジスターにマップすることが可能です。 こんな手法レジスタ足りないからやってるに決まってるだろ。 そこで堂々と第3のレジスタ出してくるのってどうよ。 んなもん使えたら使うっつうの。 >もし、レジスターネームをユーザー側が自由に差し替えられるならば、 少なくともPentium1~4ではありえない前提。
(恐らくネタで書いたと思われる) >665 に 興奮しすぎですよオマイラ。 「中間変数なしに入れ替えられる」だけの メリットしかないってのに、話が逸れまくりだ。
GCCでXORを使わない単純入れ換えを試したら、なんのコードも出てこないな。 コンパイラ内部の変数テーブルが入れ替わるだけなのだろう。 int*を引数に持つ交換関数経由でもinlineされて同じコードだった。 単純なコードを書いてコンパイラに任せた方がいいよ。
>>719-720 馬鹿の国から馬鹿を宣伝しに来たような見事な馬鹿な漏れにも
ようやく理解できたよ、ありがとう。
Struts使ってるJSPで、またまた見つけた面白コメント <% /* ここにコメント化したいHTMLやらJSPやら /* %> マジ勘弁してください
>>724 そう?よくやるじゃん。
と、素で言いそうな連中ばっかのプロジェクトにいるんだ、今。 orz
726 :
仕様書無しさん :05/02/22 23:21:04
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) { ... になってた。
>>727 test
hoge
foo
bar
の次にunkoがくるよ
>>728 目的を忘れて手段を追求ってヤツだね。
感動したw
当事者からしたら、たまったもんじゃないんだろうけど・・・
>>728 ,730
この場合、仕様が1.0fに「正確に等しい」のか
「ある程度の精度以上で等しい」のかが問題だろ。
もし正確に1.0fに等しいことを要求するなら下のようにするのが正しい。
ただしいはただしいが、こういうとここそコメントが欲しいところだな。 /* 厳密に一致するか比較するためビットパターンで比較 */ とか。 もちろんそういう仕様だったらの話だ。
733 :
仕様書無しさん :05/02/23 04:17:59
$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; } } # 以下、正常処理が続く こんなのを、数百あるモジュールのほぼ全ての冒頭に 書かなければならないプロジェクトにいた事がある。
>>731-732 ==で比較しておいて、警告についてはpragmaかなんかで消したいとこじゃなかろか。
>>734 Perlかな。関数化と正規表現使えよなあ…
>>731 >もし正確に1.0fに等しいことを要求するなら下のようにするのが正しい。
かどうかは浮動少数演算の実装に因るんじゃ…?
>>737 リテラルの1.0fと同一のピットパターンかどうか?という判定だと思えばよろしいかと。
>>738 「全く同じ値であれば、常に同じビットパターンになる」という保証があれば。
・プログラミングは仕様に対する揚げ足を取ることである
華麗にスルーされているが、
>>671 禿ワロタ。
>>739 同じ値かどうかは関係ない、という仕様なんだよ、きっと。ビットパターンが重要。
>>742 それはくどい。
>>671 のさりげなさがいい。
とはいえ、そのスレを先に見てたら面白くなかったかもな。
C++マですが、いまJavaのプロジェクトを一括で受けてます。 一括を受けなくても暮らしていける国に行きたいです。
うちの会社で作ってるコードに「ユーザのペア」を扱う処理がある。 ペアのうちの最初のユーザは"主導権"をもっているので 最初のユーザと二人目のユーザには別の処理を施すことがよくあるし、 もちろん同じ処理を施すこともある。 で、こんなコードが書かれていた。 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 ); [二人目のユーザのための固有の処理]
最初のユーザと二人目のユーザを、 共通の抽象スーパークラスをこさえてそれぞれ別のサブクラスに…… なんてのはアマアマですかそうですか。
あるユーザが最初のユーザにも二人目のユーザにもなる可能性があるなら (上司と部下のペアみたいなの)別のサブクラスにはしないほうがいいと思う。
ユーザクラスを、ロールクラスをコンポジットさせたクラスにすれば良いと思うよ。 で、ロールクラス1に一人目の、ロールクラス2に二人目固有の処理を定義する。
>>747 >user_age = pair.users[0].age;
>user_age = pair.users[1].age; // 次の回のための準備
この二行もなかなか痛いね。
>>752 実はオーバーライドされている user_age の operator= 呼び出しが必要。
…なこたぁないか。
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 それうちだ・・・
よく使う変数は一々ローカルで宣言しないで、モジュール内グローバルにした方が
動作速度が速くなるから、そうすべしと言う未開地の呪術医療のような社内ルールがあって、
時々わけわかんないバグを生む原因になってるが、
PDPの時代からCをやってた社長と、元コボラーがルールの変更を拒んでいる。
758 :
仕様書無しさん :05/03/09 07:42:20
いちいちローカルで宣言したほうが早くなるような希ガス
レジスタ割り当てを理解できない(いちいちヒープに領域確保すると思っている)。
Cで、forの中のスコープに変数を定義した状態だと 1000回くらいループ回したあたりでメモリが足りなくなるから、 といって、外で定義していた新人が居た。
>>757 プロファイルを取って、その結果を突きつけろよ。
>>757 int i,j,k;
void func()
{
for(i=0;i<10;i++){}
}
int main()
{
for(i=0;i<10;i++)
{
func();
}
return 0;
}
こういう事態にはならないのか?
ファイルアクセス関係の変数は全部外部で定義しておいて、 Mainの先頭で全てのファイルをオープンして、処理が終わったら Exit摺る前に全部のファイルを一斉に閉じる というのは、うちの上司(オフコン畑出身者)の得意技だ_| ̄|○ 「ファイルのオープン/クローズが一箇所にまとまって解りやすいだろう!」 なんて胸張って言われてもさあ_| ̄|○
>>763 途中でうっかり強制終了なんかなったら
大変なことになりそうだな
大変なことって?
地球が滅亡する
「大変です!火山がクローズできません!」・・・とか?
プロセスが閉じていないファイルを、 プロセス終了時に閉じるのは、 OSの責任だがなあ
9x系って一度に開けるファイルの数に制限なかったっけ?
>769 そりゃMS-DOSの話だろ。昔懐かしConfig.sysでFILES=なんちゃらって 設定で最大値を変えられたんだよなー。
>>768 ファイルはOSが閉じたとしても、エラーで終了したら内容に不整合が出てそうだ。
オフコンな世代は何故かOn Error Resume Nextとか大好きだしな。
>>762 だからわけわかんないバグやグローバル変数が山のように。
会社で template<class T>viod milli_sleep( T millisec ) { long micro_ms = millisec * 1000; micro_sec_sleep( ms ); } こんな感じのコードを見かけた。 「テンプレート関数にしてあるのに、T、つこてへんやん!」 って思ったけど、 よく考えたら millisecがfloatとかdoubleのときに割と威力を発揮する コードなのかな、って思った。 会社やめたい、っていうか、死にたくなった。
イ㌔
776 :
仕様書無しさん :05/03/11 12:34:08
>>757 まじで?
律儀にそのルール守ってるの?信じられない・・・
おまいの他にまともな味方はいないのか?
変化を起こせない、受け入れられない会社って死んだも同然だな。
>>774 別におかしな事はしていない。
>millisecがfloatとかdoubleのときに
long でもいいし、なんなら operator*(long) を持つクラスでも。
一つのクラスに何行にもわたる引数が書かれてたとき。 public class hogehoge(String str,String str2,・・・・・・ ・・・・・・・・・・・・ ・・・・・・・・・・・・); { ... } アフォか。そんな汚いソース書かずに一行でかけるようにいくつかにクラス分けろっつーの
ひとつの「関数クラス」にstaticメソッドが100個以上、メソッドの引数もものによっては100個以上、そんなクラスがいっぱい クラスはstaicメソッド書くためとメソッドから複数の値を戻すためだけに使用し、メソッドの引数はintかStringかその配列だけ 会社は辞めた、アレは完成したんだろうか?俺が入った時点で2ヶ月遅れてたが
それは・・・不可能ではないが考えなおした方が良いという典型的な(ry 忘れたほうが幸せだよ
そんな無茶なプログラムが一度でも完成することがあるのか疑問。
>>779 おれの今のプロジェクトは、static関数オンパレードで、インスタンスなんかほんのちょっとしか
でてこないYO!
なんでJavaを採用したんだおまいら....
流行りだから
784 :
仕様書無しさん :05/03/12 01:44:38
public class Hnsu { public static int a; こんなのなら見たことがある。 変数寄せ集め用のクラスを用意してグローバル変数を実装してるらしい。 ほかのクラスの関数もみんなstaticでHnsuクラスの変数を使いまくってる。 つうか "Hnsu" って何だよ "Hnsu" って 反芻かよ?牛かよ? せめて Hensuu って書けねーのかよ?
sage 忘れた すまん
mshkshしてやった。 変数ならなんでも良かった。 今はHnsiしている。
787 :
仕様書無しさん :05/03/12 02:12:23
catch(SocketException sex)
788 :
仕様書無しさん :05/03/12 06:50:06
>>778 WindowsのAPI使うとき、たまにそう思う。
790 :
仕様書無しさん :05/03/12 13:45:01
>784 Javaだが、今までのプロジェクトでそういうの二つあったよ。 どっちもアプレットで、画面の部品の参照を置いてあるんだけど 二つ開いたら処理が混ざって問題になってた。 アフォかい。
Javaでグローバル変数が必要な状況って何よ?
>>791 「プロジェクトのメンバーが、OO をよく知らない」
「リーダーがヴビ厨」
とか
詳細設計がCOBOLerだったら、そうなる
>>791 アプレットで非モーダルダイアログがオープンされているかを
判定するために、ダイアログクラスにstaticなフラグを埋めていた
アプリを知っている。
同じVM上で動く(って表現は正しいのか?)別々のアプレットが
まともに動きゃしねぇ。あたりまえだよな(w
同じVMでもクラスローダーが違えばいいんじゃ。
一つのWebページに貼り付けた複数のアプレットって同じ空間(っていうのか?)で動くんだっけか。 互いに通信できたような気がする…
サーバの方じゃね?
同一窓内はアプレットは同一メモリ空間扱いで通信できる。 ただ、フレームは別窓扱いで・・・。5年以上前、情報が少ない頃にやって痛い目あった。
IEのウィンドウを別プロセスで開くとか何とか言う設定が有効になっていたとか。
数人がさんざんいじり倒したHD16480のASMコード約52K行。*.incがincludeされるのは解る。 *.srcがたくさんあり、それらをまとめて*.asmでincludeしてアセンブル単位にしている。 1つのsrcはアセンブル単位でないので文ラベルの参照が解決してない(別のファイルの文へ飛んだり) しかもcall階層とincludeのnestが何の相関もなくハチャメチャ。そこにバンクの包含関係を勝手に 押しつけた修整が入りまくって、もうワケワカメ。 歴代の保守者も、これじゃ文書すら残せない罠。 俺は既にフリーなので辞めたくなるわけにもゆかん・・・orz
なかなか濃ゆいな・・・
asmで52000行か…。 腫れ物を触るようにやるしかないんでない? 辞められないなら。
>>800 嗚呼・・目の前に広がる複雑怪奇で無秩序なASMの平原が・・・
(どう考えても、最初から書き直す方が効率的に思えて・・)
ィ㌔ョ
804 :
仕様書無しさん :05/03/18 23:35:10
asmでもよく整理されてれば、10万行ぐらいまでは どうってことないんだけどね。
私の貧困な空想力では 整理された10万行のasmは出てきません ちょっと見てみたいな
膿が溜まりきってパンパン・・・腫れ物というより末期癌のようなシロモノ。客の言うには、 「これはわりとましなほう」だそうで。でも売られてる製品なんだよな、これ(^^; 平原というよりアマゾンのジャングルかダンジョンです。 お試し発注の小さな改造をパツイチでやったから信頼されたみたいだけど・・・トラップを 踏んづけないように普通の数倍気を遣います。 「整理された」=イイ実例は思い浮かばないな。cのコールSEQに合わせて作ってある。 機能単位とアセンブル単位が(file名、関数名などで)対応している。 ネーミングがASM的でなくコンパイラ的にしてある。 など開発時にルールを決めれば できたのになあ・・・というブツはよく見るけど。ASMで開発と決めた時点で何でもアリに・・・
cだと機能単位を関数化する段階で分割が終わるけど、全部ASMだと、その下に 「コーディングの都合によるサブルーチン」みたいのがいっぱい出てくる。各人に任せて おくと結果として同じような関数がいくつも出来てそれがメモリを圧迫したりするし、 str???やformat付き変換みたいにLIB管理しようとすると名前とコールSEQの管理が手かかる 今回のブツも、下層のツールは管理などされてないのが歴然。ASMグラマには 「他人のフンドシで」という発想は皆無なんですね。
>ASMグラマには「他人のフンドシで」という発想は皆無なんですね。 これは容易に想像できて納得できる(苦笑)
>>800 全部削除してからバックアップを燃やして0からやりなおす。マジでお勧め。
他人のふんどしなんぞ締めたくないがなぁ・・・
>>800 なるほどねー
記念に一度は経験してみたいな
その世界を想像してみて、はじめてNetHackが流行した理由がわかった
おれはプログラム仕様書に挟まってるコードがアセンブラだってことを発見 したときは「ソースがありません。作り直しですね」と言ってやった。
使えねーな
仕事ははやく終わってなんぼのもん。Cで書き直した方がはやいだろ。
C++で書かれたアプリをアセンブラで書き直そうとして 一年かかって殆ど何の成果もあげられずにトンズラこいた奴いたなぁ 今頃どこで何をしているやらM君
816 :
仕様書無しさん :05/03/20 17:25:08
かつてT&EソフトにはP6のマシン語が書けず 夏休みいっぱい使ってVRAMに線を書くことしかできなかったバイトがいたらしいな
P6って何? Pentiumは関係ないよな、時代を考えると。
PC-6001かと
>816 6001mk2ぢゃないかな。無印60ではなかったような。 チャレアベに書いてあったなぁ。懐かしい…… # いや、漏れがそのバイトだって意味じゃないぞw
しまった 819 =~ s/816/817/ でよろorz
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は有ったはずなので、ハード屋が頭古かったのでしょう。
ハード屋の頭が古かったのかソフト屋にZ80しかできない奴しか余ってなかったか 微妙なところではないかな
824 :
800 :2005/03/21(月) 17:44:09
そこはハード開発するほうが親会社で、ソフト屋がハード構成に口だす雰囲気じゃなかったので、 ハード条件が決まっちゃってから「こんな動作するソフト作れ」の流れだったみたい。
たいしたことない小さなアプリなんだが、引き継いだソースの先頭に書いてあったコード #define TRUE 0 #define FLASE 1 いっぺん死ね(゚⊿゚)
FLASE
なんだ"TURE"のtypoか。
∧||∧ ( ⌒ ヽ ∪゚∀゚ノ よんだ? ∪∪
Java + Oracle の Web アプリ。テーブルの数だけデータ検索・更新用のクラスが あり、クラス名は全部大文字(TABLE_JUGYOIN_KYURYO など)。これらのクラスは Excel VBA で半自動生成したもの。インスタンス名は頭一文字を小文字にして 作成するという決まり。 テーブルから取り出したデータは全部 String。「このカラムのデータ型は何かと 気にする必要がないから」という。Eclipse なり何なりを使う頭はないらしい。 しかもこれらのクラスには基本的なバグがいくつかあり、中途採用で入った俺は そんなことも知らずにひとりで苦労していた。 同一ソース中に同じような作業がいくつか出て来たら、基本はコピペ。「アホでも 作れるプログラム」がモットー。同じ機能をメソッドにまとめた派遣の人がいたが、 「勝手なことをするな」とコピペ方式で作り直させられていた。 俺の担当箇所でちょっと複雑な操作をする場面がいくつかあったので、それらを 自動化する簡単なクラスを作ったら、コードをろくに見もせずに「こんなことを されたら他の人が保守できない」と却下。
830 :
829 :2005/03/23(水) 00:05:25
よく使う機能は自社製の関数群にまとめられているが、機能が中途半端で 使いづらい。こんな気持ち悪い環境で作業させられ、開発効率は低下の一途を たどる日々だ。 上司と話をする機会があったので、今の開発手法がどれだけおかしいかを 主張してみたが、「仕様書さえ正しく作れていればプログラムは誰が作っても 同じものができるはずだ」との一言で一蹴されてしまった。逆に、皆と同じ ペースで製造ができない自分が無能扱いされる始末。確かに遅いのは認めるが、 インデントもぐちゃぐちゃ、横に数百桁もあるコードをコピペで量産する 連中をとても尊敬できない。 データベーステーブルも会員番号や地域コード、フラグの類にいたるまで ほとんどが varchar。きっと COBOLER が作ったに違いない。 大学や専門学校で情報工学を学んだ人がひとりもいない職場は、どこも こんな感じなのだろうか。
832 :
仕様書無しさん :2005/03/23(水) 00:57:09
>>830 同じくOracleですべての項目がvarcharだかvarchar2ってのをみたことあるんだが、
どんな教育受けるとあんな設計思想になるんだ?
COBOLERだったとしても、文字か数字かの区別ぐらいあったと記憶してるし。
いま請けているプロジェクトの仕様書ですが、機能要件がかいてありません。 処理内容のみがずらずらと書かれていますが、とてもプログラムとは言えない内容。 PCLを作らなければならないのですが、テスト項目を挙げる手がかりになるのは 画面イメージぐらいなものです。 フレームワークもすばらしい継承の仕方により、普通に組んだときの5倍の ステップ数が常に確保されます。勝手にクラスを定義してもいけないので 同じメソッドがあちこちにあり、保守性は最悪です。 保守だけで一生食べていけるとてもすばらしいシステムですが、 私はこれ以上関わりたくありません。 画面がまともに遷移することだけ確認したら、納品してトンズラしようと思います。
>>830 情報工学とか、そういうレベルの問題じゃないような気がするんだけどな
>>830 >「仕様書さえ正しく作れていればプログラムは誰が作っても
>同じものができるはずだ」
上司も腐り果ててるな…
「誰が作っても同じ」になるレベルまで記述した仕様書なんて
莫迦なもの作ってるのかねぇ。
>>835 それなら、仕様書からコードを自動生成したほうがいい。
とある組み込み系の通信ドライバのソースにて Receive() { // 受信処理いろいろ (*CallBackFunc)( rxdata ); #ifdefXXX_MODE// XXX向け特別処理 ○月×日 追加 by △△ FuncXXX( rxdata ); #endif // 受信後処理いろいろ } なんのためのコールバック関数なのかと小一時間(ry 実際はもっといろんな用途対応の関数が、いっぱいズラズラと書かれていて笑えた。 誰も、コールバック関数使ってない。 しかも、FuncXXX() のプロトタイプ宣言のために、XXX.H をインクルードしてあって、 ドライバ単体ではコンパイルできなくなってる。 まぁ、修正は簡単だったから良かったけど。
>>830 高校生、場合によっては中学生でももっとまともなもんを書く。
>>830 最近、馬鹿には馬鹿だというほうが人間として正しい行為だとつくづく思う。
遠慮はいらない。やーっておしまい。
>830 いわゆる『バカの壁』ですなぁ。 javaなのにCollectionを全然使ってないとか 文字列操作を力業でやっているとかじゃね? 831氏の言うことももっともだよな。全く吸収できるものなさそう。
>>835 >「誰が作っても同じ」になるレベルまで記述した仕様書なんて
>莫迦なもの作ってるのかねぇ。
画面遷移ごとに、前画面から来たパラメータ○○と××をセッションに入れる、
セッションから□□テーブルのカラム◇◇にセット……という分厚い詳細仕様書を
Excel で書かされたよ。「誰が見てもコードが起こせる仕様書を作れ」ということで。
来る日も来る日も Excel という期間があった。
>>840 そんな感じかな。DB アクセスクラスの update 文を作る部分のコードはこんな感じ。
(ちょっと整形した)
String sql = "UPDATE TABLE_JUGYOIN_KYUYO SET ";
if (this.strKYUYOCLASS != null) {
if (sql.equals("UPDATE TABLE_JUGYOIN_KYUYO SET ")) {
sql = sql + "KYUYOCLASS = " + "'" + MyCompanyTools.convertStr(this.strKYUYOCLASS) + "'";
} else {
sql = sql + ", " + "KYUYOCLASS = " + "'" + MyCompanyTools.convertStr(this.strKYUYOCLASS) + "'";
}
}
if (this.strHOGE != null) {
if (sql.equals("UPDATE TABLE_JUGYOIN_KYUYO SET ")) {
sql = sql + "HOGE = " + "'" + MyCompanyTools.convertStr(this.strHOGE) + "'";
} else {
sql = sql + ", " + "HOGE = " + "'" + MyCompanyTools.convertStr(this.strHOGE) + "'";
}
}
こんな感じのコードが延々と続くクラスがテーブルの数だけある。テーブルから
データを取り出すメソッドもカラムの数だけ存在する。ループで回せないので、
必然的にソースが膨らむ。
ちなみに convertStr() はシングルクォートの面倒を見ている程度で、SQL
インジェクション対策は全くなし。
・・・どの様に突っ込む順番を決めたら良いかわからないので 沈黙しておこう
漏れも沈黙しとこうかなと思ったんだが一言だけ。 こんなDBアクセサとかやっぱ車輪の再開発しまくりなんだろうなぁ。(遠い目) でもって、jakartaのcommonとか使おうとすると目くじら立てて怒るんだ、その手の人種は。 『そんな出所のわからんもんが使えるか!』とか 『だれが動作を保証するんだ!!』とかな。 これで、職務経歴に「WEB開発(言語java)」とか「OO開発経験有り」とか書かれちゃうわけだ。
> 『そんな出所のわからんもんが使えるか!』とか > 『だれが動作を保証するんだ!!』とかな。 これは仕方ないと思う。つか844がガキ。
そうか? コスト削減でjakartaから引っ張ってくることはよくあると思うのだが…
できる人だったら 842のコードをどう書くわけ? 最近javaはじめたばかりなのですげー知りたい
>>845 しかしそういうやからに限って、「出自ですか。Apacheなんですけど...」というだけで
「Apacheならまあいいや」とかなってしまうのは、権威というか、とりあえず名前が知れてれば
品質関係なく安心ということなんだろうね。
>>841 同じプロジェクトだったらどうしよう。
そのプロジェクト、製造してから「こんな処理はムリだぁ」という
苦情があちこちから聞こえてきませんか?
もしくは「なにが共通認識事項だぁ、仕様書通りに作ったら実装不可能じゃねぇかぁ」
とか聞こえてきませんか?
849を読んでいて、ナチュラルに 「そのまま放っておくと、 大 変 な こ と に な り ま す よ ……」 と繋げたくなってしまった ♪来る、きっと来る、きっと来る~(デスマが)
大物だ。 これだけで1時間は酒がのめるな。
852 :
仕様書無しさん :2005/03/25(金) 01:55:16
>>842 新人に試しに作らせてみた物なら、苦笑いしながらその努力をほめてやれるかなw
その後に、一日かけて延々とコードレビューしてやることになるがなw
フレームワークがプロパティファイルをどうやっても読んでくれないので、フレームワークの ソースを読んでいったら、他のクラスで読んでいるファイルと異なるファイル名を 検索していることが判明。しかも、ファイルのパス指定を省略したときには さらに違うファイル名を生成して探していた。 さすがにバグだろうと思ってフレームワーク製造先に問い合わせたら 仕様だと言われた。そのプロパティファイルのサンプルを送ってきた 張本人からの返事だった。 オタクのフレームワークをマトモに動かすのに、開発の倍の時間をかけてるんですけど。
JavaのWebアプリ。
COBOLに近づける為らしく、メソッドは引数なし戻り値なし、
全てフィールドを介して値の受け渡しをしなきゃならない仕様。
仕様について口を出せば3時間の説法タイムが・・・
>>829 みて思ったんだがJavaのWebアプリやってる所はどこも同じようなものなのか?
>>855 マジレスすると、大きい会社ほどそういう傾向があるな
漏れは中小メインでやってるけど好き勝手にやらせてもらってる。
ちょっと笑ったコード。多分、追加修正したせいだと思うが・・ int i; i = GetRecCount(); if(i=1){ 4行ぐらいの処理 } if(i!=1){ 3行ぐらいの処理 } else使うのいやなんですか?
あ、最初のifは(i==1)だ。
859 :
仕様書無しさん :2005/03/27(日) 15:57:32
>857 最初の i==1 のifブロックでiを変えて後の処理をするようになるかもしれないだろ?
たとえばビジネスロジックがすべてCOBOLで組まれてて、JavaはCOBOL呼び出しのゲートウェイにんってるとか? もしそうならば、まあ分からんこともない。 それでもJava層なら引数オブジェクトを介してやり取りしたりするはずだが。 Javaオンリーの実装でそれなら、早く逃げろ
printf ' やらせろ /n ' ;
862 :
仕様書無しさん :2005/03/27(日) 16:52:15
System.out.println("お断りだ");
863 :
仕様書無しさん :2005/03/27(日) 17:07:33
>861 言語が何か激しく気になるな。
COBOLerはバカってことで良いんじゃね?
>>863 shとかじゃないの?
/usr/bin/printfを使ってる。
>>866 そういえば、試した時なんかおかしいと思った。
sh-2.05b$ printf ' やらせろ /n ' ;
やらせろ /n sh-2.05b$
たぶん、これで会社が辞めたくなったんだろうな…
細かいことは気にしなさんな。
869 :
855 :2005/03/27(日) 20:21:01
>>860 Javaオンリーです。
ビジネスロジックといっても、何の変哲もないクラスに
引数と戻り値のないメソッドとフィールドが満載されたもの。
それをServletから呼び出す、と。
処理が終わるとException投げて戻(ry
04年に社会人なったばかりの俺にも再就職先はありますか?∧||∧
871 :
仕様書無しさん :2005/03/28(月) 07:41:43
>>871 DISPLAY 'ち が い ま す。'.
>855 >処理が終わるとException投げて戻(ry えっと、なんつーか、あれだ。 (´;ω;`)
VBでスマソ。 iData(1) = iWork(1) iData(2) = iWork(2) iData(3) = iWork(3) iData(4) = iWork(4) iData(5) = iWork(5) こんなのが随所にある。 ループ使えば、と言ったら、ループのための変数を宣言するより こっちのほうが早いんです!だと。 頃していいですか。
>>874 「速い」のは事実だ。ただ、速いという理由だけでその様に書く奴は
プログラマとして根本的におかしい。
頃して差し上げなさいw
>>874 よろしい。それがみんなのため。
つか、コーディングの価値観ってホントいろいろあるんだなあ。
>>875 「速い」のは事実だ。
かならずしもそうはいえないだろ。
インタプリタだったりコードキャッシュがからむとどちらかつと遅いんじゃないか。
「随所にある」ってのが問題だな。
コンパイラに任せたら同じになってくれたりしないかな
携帯 Java だと、JAR 圧縮が効きやすいように while ループで回さずに敢えて
同じことを並べて書くこともあるが、
>>874 とは事情が違うわな。
VBって内部でコンパイルしないんだっけ?perlみたいに
>882 VB5まで 「中間コード」にコンパイルしていた VB6 普段は「中間コード」止まりだがexeを作るときにx86ネイティブコードにできるようになった .NET以降 MSILオンリー だっけ? perlは実行前にプラットフォームのネイティブコードに落としてから実行するんだっけか。 ってもそれもPerl6で変わるんだっけ? ……だっけ? ばっかしやがな自分_| ̄|○
>884 >882の疑問に答えようと思ってカキコをしたため始めたはいいが 何か書いてる内に自信なくなってきて でも折角書いたんでPOSTした というヘタレな顛末でつ
>>874 ちなみに2つ固定だったらループにする?
3つ固定だったら・・・
いやちょっと気になっただけ
>886 三つを超えたらループだなあ。 二つなら並べて書いちゃうかも。
2つとはじめから決まっているのに配列でデータ作るだろうか? hoge.right = foo.right; hoge.left = foo.left; とか意味付けした構造体にするような気がする。そしてもしたまたまその時は2つだが将来3以上になることが予想されているのなら、2つでもループにするな。きっと。
構成概念上その個数であることが確定しているものが対象なら並べて書く。 現在の仕様上その数が少ないというだけならループで書く。
かぶったorz
電話番号の入力が3つに分かれてたら 3つ並べてかく でも配列にはしないかな
printf("やらせてあげる");
System.out.println("俺には俺さえいれば、な!");
while(1) printf("aho\n");
for(i=0;i<64;i++){ for(i=0;i<64;i++){ func(i,j); } } あ の な 。
一瞬何が悪いのかと思った。 ふたつめのループカウンタの、 インクリメント部分だけひとつめの変数にしちゃって はまったことがあったなぁ…
for行をコピペしてiをjに変え忘れるのは昔よくやったミスだ 昔ですよ?
つい最近それに似たコードを見て「バグってね?」と突っ返したよ ただ、全体が80行ぐらいあったと思う
きっとどこかでiとjの値書き換えてるんだよ
>>897 JavaやC++だとその場で宣言するからコンパイラにiが重複してると怒られるかjがないと怒られるかどっちかだからな
>901 ダウト。 例えばC/C++では以下のソースは正しくコンパイルが通るし、きちんと9回ループする。 VC等の一部のコンパイラを除けば、変数の宣言を for の初期化式に書いても同様。 Javaも同じのはず。 …何故そうなるのかは言わなくてもわかるよね? int i; for( i=0; i<3; ++i ){ int i; for( i=0; i<3; ++i ){ printf("Hoge\n"); } }
C++では通るけど、Javaではそれはエラーだよ。
ふたつめのint i;けせばいいことだ
for文内で宣言されると、埋もれてスコープが分かりづらくなる。 for( int i=0; i<3; ++i ) { for( int i=0; i<3; ++i ) { printf( "hoge\n"); } }
gcc -Wshadow しとけ。 同じ変数名を使うのは嫌がらせ。
誰も func(i,j); を考慮してないことに突っこんでもいいですか?
エッ
Public Const mcintCount1 As Integer = 1 Public Const mcintCount2 As Integer = 2 Public Const mcintCount3 As Integer = 3 Public Const mcintCount4 As Integer = 4 Public Const mcintCount5 As Integer = 5 Public Const mcintCount6 As Integer = 6 Public Const mcintCount7 As Integer = 7 Public Const mcintCount8 As Integer = 8 Public Const mcintCount9 As Integer = 9 Public Const mcintCount10 As Integer = 10 いや元から辞めようとはしてるんだけどね。
マジックナンバー禁止!と言われてそーゆー風に変数を定数のように用意したというのはよく聞く嫌な話ではある
#include "騎乗”
#define "落馬"
913 :
仕様書無しさん :皇紀2665/04/01(金) 07:28:04
皇紀あげ
>909 enum使えばいのにねぇ・・・
>>914 いや、それもちょっと違うと思うが。
数字そのものに意味がある場合は別名なんて付けないほうが良いわけだよ。
ネタに・・
917 :
仕様書無しさん :皇紀2665/04/01(金) 15:22:51
>>915 エライ人にはそれが分からんのです。
基準書がどんなにお馬鹿でも金もらってる以上従う以外にないのです。
>>915 細かいことだけど、それはケースバイケースって奴じゃないかな。
最大数の定義を自動化できたり、他の型と区別できたり、
ゼロ始まりと1始まりの混在みたいな恐ろしい状況に対する緩衝剤になったり、
可読性上げられたり、enumの利点は山ほどあるわけで、
生数字がいい場合と、種類の定義がなされている方がいい場合は
ちゃんと使い分けて…
なんてことを
>>915 がわかってないはずもないし、
その一方でそのことがわかってる香具師らばっかりだったら、
このスレ成立しないのか。
南無阿弥陀仏。
#include "やらせろ.h"
「コメントは全行につける」というコーディング規則があったなあ。コーディングシートに手書きの 時代だったので、41と71カラムに/*と*/を全行書いてコピーしたシートを使った。 それをパンチ屋さんに出すもんだから、隙間のところも前部/*と*/がパンチされて来てエラいことに
>>921 「空行にもコメントを付けるんですか?」などと(ry
コメントだけの行にもコメント付けないと。
4つ以上の連続する空白をコメントに置換するフィルタを書けば良い。
>925 そのフィルタのソースにもコm(ry
なんかこーランチタイムは全品半ライス付きの店にいってラーメンと半ライス頼んだら ラーメンに半ライス付いて来て半ライスにも半ライス付いて来たかのような流れを感じる
焼き飯に炒飯はごく普通に見た事がある。
再帰メニュー・・・
>>922 PL/Iと見た。いくらなんでも「コーディング用紙に書いてパンチ屋さんに出して」の世界で
Cはないだろう。と思いたい。
931 :
921 :ぬるぽ暦4年,2005/04/05(火) 05:59:57
>>930 鋭い!!当たり。そのPL/Iで何書いたかというと「アセンブラ」ダターヨ
932 :
363 :2005/04/07(木) 12:49:04
この害虫に以下略。まだまだでてきやがる… <% // 情報1 %> <c:if test="${!(empty(xxbean.subBean.param1))}"> <% final xxbean b = (XXBean) pageContext.getAttribute("xxbean"); String url = String.valueOf(xxbean.subBean().param1()); int idx = 0; String dir = ""; String file = ""; if (url.length() >= 0) { idx = url.lastIndexOf('/'); dir = url.substring(1,idx); dir = dir.replaceAll("/","!"); file = url.substring(idx+1); idx = file.lastIndexOf('.'); file = file.substring(0,idx); } %> 続く
933 :
363 :2005/04/07(木) 12:54:57
続き <div> <h2> <% // <a href="<c:out value="${xxbean.subBean.param1}"/>"> %> <a href="/static.do?dir=<%= dir %>&file=<%= file %>&title=<c:out value="${xxbean.subBean.param1Title}"/>"> <c:out value="${xxbean.subBean.param1Title}"/> </a> </h2> <p> <a href="/static.do?dir=<%= dir %>&file=<%= file %>&title=<c:out value="${xxbean.subBean.param1Title}"/>"> <img src="<c:out value="${xxbean.subBean.param1Img}"/>" alt="<c:out value="${xxbean.subBean.param1Title}"/>" "> </a> <c:out value="${xxbean.subBean.param1Lead1}"/> </p> </div> </c:if> これを情報3まで三回べた書き。 Strutsなのに。オマケにparam1Titleは2バイト文字なのにURLエンコードしてない。 もちろん後からサーブレット側で書き直して、パラメーターはMapに詰めてnested使ってループ処理にしましたとも。 っていうか <% // 情報1 %> 何ですかこのコメントの書きかたは。 他にも <% /* %> ここをコメント化 <% */ %> ってのもあった。 これをやってるのが害虫側のリーダーだったて言うんだからもうシャレにもなんねぇ…… // 変数名は適当に書き換えたのでコンパイルエラーがあったらスマソ
>>932-933 PHP厨な漏れには喪前が何を書いていて、何に対して起こっているのか
理解できないんだが、もう少しわかりやすく簡潔に書いてくれ。
935 :
363 :2005/04/07(木) 13:54:07
>>934 すまんね。
Struts使ってる場合はJSP側は極力表示のみに特化するべきで、
文字列操作だとかはサーブレット側で行うべき。
それを、jspでJavaコードとして書いている。
しかも、パラメーターがparam1 param2 param3だからってこれを三回ベタ書きしてる。
DBの項目が増えたらまたコピペで増やすつもりだったんだろうけど。
サーブレット側でやって結果だけを表示させるようにすればわざわざこんな真似しなくても
Strutsのループできれいに書ける。
そもそもJSPには<%-- コメント --%>という立派なコメントタグがある。
それなのに
<% // 情報1 %>とか
<% /* %>
ここをコメント化
<% */ %>とかいうわけのわからないコメントの書きかたをしてる。
酷い時には<!-- JSPに対するコメント -->とかすらある。
ちなみに上記のを3回貼り付けるやり方を、サーブレット側でやらせるように俺が直したらこうなった
↓
<%-- 関連1-3 --%> <logic:present name="paramList" scope="request"> <logic:iterate id="mapBean" name="paramList" scope="request" type="mapBean"> <nested:root name="mapBean"> <nested:notEqual property="file" value="none"> <nested:define id="src" property="img" type="java.lang.String"/> <nested:define id="alt" property="title" type="java.lang.String"/> <div> <h2> <nested:link page="/static.do" property="map"> <nested:write property="title"/> </nested:link> </h2> <p> <nested:link page="/static.do" property="map"> <html:img src="<%=src%>" alt="<%=alt%>"/> </nested:link> <nested:write property="lead"/> </p> </div> </nested:notEqual> </nested:root> </logic:iterate> </div> </logic:present> これだけでparamが5になろうと、10になろうと、対応出来る。 もちろんJava側もPHPで言う「関数名の変数」を使ってループにした
JavaもHTMLの書き方も知らない厨だが、 >しかも、パラメーターがparam1 param2 param3だからってこれを三回ベタ書きしてる。 >DBの項目が増えたらまたコピペで増やすつもりだったんだろうけど。 これだけでも充分DQNぶりが伝わりますた。
>>935 DBの項目が増えるのを予想して、
仕様が変わるのを予想して、
363がDQNなのを予想して、
コーディングしてください。
と最初に伝えればよかったと思う。
940 :
363 :2005/04/07(木) 16:25:37
>>939 ごめんね、363=おれDQNだから、ごめんね
俺が悪かったのか……orz
泣くな
>>932 それくらい許してやれよって思うんだけど。
<% /* %> こんなコメント使えるんだ。知らなかった
<% と %> にはさまれた部分を抜き出してJavaコードを作ってるだけですから。
>>942 これだけだったらな。
そもそも漏れはかかわることのないプロジェクトだったのに、
「Torque書き方わからないので書いてください」ってDAO部分全部漏れにやらした状態で
リーダーは胃に穴あけた。漏れもひと段落した後倒れた。
その他余罪
>>175 >>363 >>413 (これでも氷山の一角)
ちなみにjspレベルのコメントで書かないといけないコメントも
多数がHTMLコメントで書かれてたりもした
CVSの新コードをそのまま手元にある旧コードでコミットして台無しにしてくれたこともあったなぁ。
問い詰めたら泣かれた。
結局「Strutsをまともに使えるのは一人だけですが全員Javaをきっちり書けます、
わからないところはわかってる奴に質問させます」
というのは真っ赤な嘘っぱちで全員Javaは素人クラス。
Strutsができると言った人間もあまりにもひどいコード書くので追求したら
「ごめんなさい、少ししか書けないんです」とゲロしましたとさ。
DQN会社にはDQNな害虫しかよりつかないってこった
>945 >結局「Strutsをまともに使えるのは一人だけですが全員Javaをきっちり書けます、 >わからないところはわかってる奴に質問させます」 >というのは真っ赤な嘘っぱちで こういう奴らも結局営業の被害者なんだろうか、 それとも営業もだまされたクチなのかな…。
なんかもーねぇ。 多少選考に時間かかるリスクはあるけど 面接の一環として実技入れた方がいいと思うんだけど・・・・
>948 うちはやりましたよ。 ファイルの書き込みすら行なわない、20行くらいのプログラムだけど… orz