1 :
Ponkotsu Generator :
04/02/21 20:16 この会社辞めようと思ったソースコード。 プログラマとして幻滅するソースコード。 プログラマを悩ませるソースコード。 Modula-2 ライクなソースコード。(゚д゚)ウマー をつらつらと綴っていって頂戴。 ちなみにここは質問スレじゃないよ。 技術的な質問がしたいならム板に逝って。
>1 乙。
5?
6 goto 1
漏れ埋め立て乙。
乙〜
10 :
仕様書無しさん :04/02/23 03:18
全スレ986のことだけど、デバックモードでしかしないんだったら ゆるせるかなと一瞬思ったけど、デバックモードどそうでない状態で プロトコル変わっちゃうの?そりゃまずいんでないですか。
>>10 typoばっかりある中で、そこに注視せよ、っつても無理のある事ではあるのだが、
いちおう、
#ifndef _DEBUG
なんだ…………。
なかじま かおる 1960ねん あいちけん とよかわしうまれ。26さい。 おまんこなめてーよぅ えっちする女の子がほしい チツちゃん クリちゃん すき!すき!
1960ねんうまれ。 ↑ 間違ってないか? ↓ 26さい。
>13 12は昔のファミコン用ゲームにあったコメント
16 :
仕様書無しさん :04/02/25 13:08
20年も前にいったい何が?!
>>12 それってでもソースじゃないよな。バイナリに直接・・・ってもはやどうでもいいが。
「GridBagLayout使うと可読性落ちるからやめましょう」 と言われたんだが、レイアウト合わせるためにラベルやテキストフィールド幅に 定数値多用しているのよりはよっぽど可読性高いと思った今日この頃。
可読性をうるさく言う奴に限って自分では読まない
コーディング規約をうるさく言う奴に限って自分では読まない
ツールの実行一発で判定/修正できるコーディング規約のみ指定する。 規約自体は必要だが、検査に人手を介するのはダメプラクティス
コーディング規約はいいんだが、 規約のためにいらん書類が増えるのは勘弁。 public class ClsYamashitaA0001 extends ClsUITantou001Gaichu0001 クラス1個作るのに「クラス概要仕様書」「クラス詳細仕様書」 「クラス仕様書一覧表」「クラス作成者一覧表」を書けと。 外注に丸投げしてヒマなのか?
>>25 あるにこした事はないが、まあ普通JavaDocだろうな。
27 :
仕様書無しさん :04/03/03 15:00
>>25 結局ソース読むことになるから、いらないよな
同じようなクラスを重複して作らな無いような仕組みはほしい
28 :
仕様書無しさん :04/03/03 16:05
社長自らが新人教育と称して 自分のキャパを超えた知識を教えている会社 知ったかぶりのTOPを持つと部下は最悪・・・ 赤字プロジェクトはすべて責任を社員に押し付ける社長 小さな会社は社長が法律です
新人教育でコーディングシートにコーディングをさせる会社 よりはまだマシです。 まだあるのよ。こういう会社。
よく今どきコーディングシートなんか調達できるな。 まだ作ってるところあるのか?
>>30 コボラーが絶滅しない限りコクヨあたりが作ってくれるでせう。
クラスに「概要書」なんて求めるのは, クラスを「サブルーチンの集合体」だと思ってるからに相違無い
エリカ・ユングって可愛くな〜い?
コーディングシートと鉛筆っていうのがまるっきり悪いとは言えないよ。 うちの会社の連中は新機能追加の修正とかの場合 いきなりソースファイル開いてあてずっぽでコピペし始めるからなぁ。 結果はもちろん突然脈絡も無く使ってもいないフラグを立てたりとかばっかり。 ソースコードじゃないけど別なチーム担当システムとの連携で発生した障害対応中 「とりあえずそっち側で日付がX日になってるデータを全部出してみて」と そっちのチームの中堅クラスに言ったら select * from XXXX ってクエリを実行して結果をExcelにコピペしてフィルタとか使われた時には 本気でそいつらのシステム全て葬りたくなったなぁ。
コーディングシートって言うのは、その昔 端末の台数が限られている環境なんかで プログラマがパンチャーさんにソースのパンチ(入力) をお願いするために使われていたものだよ。 依頼からコンパイルが完了までどれだけの時間を要した ことか(⊃д`)
>>35 そういう人たちはコーディングシートにもあてずっぽうで書き込むんだよ、きっと。
>36 タコなパンチャに当たるとパンチミスだらけでヒサンだたw まあ、ふつうは別人がベリするので問題なかったんだが、 ベリを省略されることもあった。そういうときの話。 (ベリ=ベリファイ=別人が同じカードにまったく同じ内容を打ち、 食い違いがあったらハジく作業)
昔はコンパイルにもカネがかかったから、それの節約も兼ねてたとしても 今はそんな時代じゃないし。
40 :
仕様書無しさん :04/03/04 00:47
>>36 ふるーいアセンブラとかFORTRANとか
カラムによって意味が決まってる言語の場合で
パンチカードとかで入力するの場合は、
あった方が便利だったそうだ。
>「とりあえずそっち側で日付がX日になってるデータを全部出してみて」と この要求に対して、 >select * from XXXX >ってクエリを実行して結果をExcelにコピペしてフィルタとか使われた時には このアプローチって有りに見えるが。 要求は満たしているんじゃないのか?
まあ間違ってはいないわな
いや、おかしい。感覚的に。理由を書いてみようか。 コピペ (再現性のない)オペレーションは極力するな。操作というものは間違えるものだ execl db上で行うべきフィルタリングを何故に、よりによって表計算ソフトなぞつかう なんのためにsqlがあると思っているのか データ量 この場合は問題にならないだろうが、この方法はデータ量に上限がある 要求を満たせばいいという感じ方にも問題があるなあ。 ちゃんとsqlを切ることが出来る人ならどっちの方法を選ぶべきかは、自明だ。 まあ「この方法しか知らないとか思いつかない香具師のヘタレぶり」が話題なんだけど
要求さえ満たせばいい=動けばいい=それらしく見えればいい なんつうか、糞コード量産する奴らの基本姿勢だな まあ、それさえも出来ない奴もいっぱい居るけどなー
>>41 >このアプローチって有りに見えるが。
いや、中堅クラスでそーゆー「オラクルマスターうんこ色」レベルってのはちょっと…
>>43 べつに
>>35 で槍玉に上がってる奴らを擁護する気は無いが、
障害対策のためのデータ抽出なら別にいいと思うが。
むしろ
>>43 みたいにガチガチにかたまって、柔軟性のなさの
方が障害対策時には厄介だとおもうけどな。
>>43 まあ、excel とするべき所を、execl としているところが、
プログラマらしくていいな、と思ったり。
>>46 了解。それもまた一つの見解だ。
#ガチガチっていうが、俺は「ちゃんとselectすべきだ」って言っただけだけど。二次障害に直面したことが無いんだろうね
>>47 _| ̄|○
>46 どうまかり間違っても無駄だが。 仮に日付を where に書いたとしてもインデックスが使われてない、という場合でも、 データ抽出にかかる時間は select * と変わらないよね。でも RDBMS がデータを送り出 す手間は明らかに減る。 加えて、得られたデータを再加工する手間考えたら、ふつーに where 書いて当然だろ。 だいたい、障害対応ってことはその RDBMS、本番稼働しているマシンじゃん。そんなの に迂闊に select * かけたりしたら、それこそ二次災害起こしかねないんだがねえ。 そもそもの条件が曖昧で、where で一発で取れない、ってんなら、ある程度余裕もたせ て取ってきてから吟味するのはよくあることだが、日付限定できるのにしないってのは 馬鹿と言わずしてなんなのだろう。
本番稼動してるからといって全面的に信用してしまう姿勢が「ガチガチ」って言われるのだよ 問題が潜んでるから障害対策してるんだろ?
>>51 よくわからんが
RDBMS が信用できない状態で
テーブルの全件取ってこれるのか?
それだけでも
RDBMS が信用できないから
って理由は消えると思うのだが
多分、稼動2日目くらいで * で取ってきてもたいした数じゃなかったんだよ。
54 :
仕様書無しさん :04/03/05 00:39
俺 の ち ん こ だ け は ガ チ ガ チ
>>56 何で知ってるんだ。ちなもに仮性でもあるのだが。
なんか論じられてる(w >>この方法しか知らないとか思いつかない香具師のヘタレぶり まぁ俺としても感じたのはそこ。 っつーかそんな奴が作ったシステムをどう信じろというのか… ちなみに障害の原因ももちろん向こうのシステムだった。 詳細を述べるのは差し控えるが、要するにはデータ操作があったら必ず行う処理を 追加の時はやってて修正の時はやっていなかったという凡ミス。勘弁してくれ。
コボラーにSQLを書かせるとWHERE句無しのSQLを書いてくるよ。 全件取得したデータを1件ずつIF文で処理対象か否かを判定するのさ。 ..._| ̄|○ <何のためのSQLなんだ
>>61 っつーかそれが奴らのオンリーワンなやり方だし。
コボラーの手にかかればRDBだろうがXMLだろうが全てCOBOL色。
一体なんなんだよ固定長XML(うちの会社のコボラー命名)って。
63 :
仕様書無しさん :04/03/05 09:38
delete する時は、 必ずselectして 行があるのを確認してからdeleteします。
64 :
仕様書無しさん :04/03/05 09:46
彼等にはコダシルが必要なんだ。
65 :
仕様書無しさん :04/03/05 10:17
deleteは必ずキー値で抽出して一件ずつ削除します。
66 :
仕様書無しさん :04/03/05 11:01
今一緒に仕事をしてる先輩は最初、Accessのプロという触れ込みだった。 「教科書的な作り方をしてもパフォーマンスはでない。 テクニックをいろいろ知ってるから教えてやる」 みたいな感じの強気の発言してた。 でも、実際仕事をしてみると、そもそもセオリーをまったく知らないし 一般的なセオリーどおりに作ったよりぜんぜんパフォーマンスのでない 作り方しかできない人だった。 テーブルの設計でパフォーマンス出すために非正規化してるわけじゃ なくて、そもそも「正規化」という言葉を知らなかったし。 SQLも自分では書けなくて、AccessのGUIツールで作って、それを コピペしてるし。 あとあとマルチユーザーにも対応でるように、データベースは SQL Serverかほかのものに変更できるように設計しようという 話が出たときに、なぜか動揺してて、SQL ServerもAccessから 接続できて今まで通りGUIでリレーション作れると教えたら 嬉しそうにしてやんの。
COBOLにて。 西暦2000年対応やっていたら、うるう年ベタ打ち発見。 YYが84の時か88の時か92の時か96の時…(略) ってなんだよぉ(涙 って、でもこのパターンはありがちなのかしら。
68 :
仕様書無しさん :04/03/05 11:34
>Accessのプロ この表現自体がかなり痛いわけだが。
このスレに出てくるような人間を生で見たい。 次プロジェクトが何千人月規模でCOBOL満載(MQで完全隔離)だから、嫌というほど見られるかな。
DELETE文でWHERE句を設けずにループして一行一行消してるのはみたことあるな。 「日次処理のときパフォーマンスが出ないんです。この糞Windows!何とかしてください」 と言われてみたらそんなコードだった。
失礼、WHERE句はあった。ただ、一行を指定するようなWHERE句だったな。
>>67 ヲレは取り敢えず、4年・100年・400年毎の補正は組み込んでるなぁ。
西暦3200年・・・・ヲレの作ったプログラムが1200年も使われるとは思えんw
400年ルールのおかげでとりあえず2000年は救われた香具師
>>73-74
閏年かどうかなんて、
>>72 の考え方なら一行で書けるだろうがよー
まったくよー
>>67 うちにもそういうのあった。
年ごとに各月の日数が定義してあるようなヤツ。
まぁ、何も見なかったことにした。
漏れの場合は、Windowsのプログラム専門だからなあ。 2100年まで、Windows使ってるとも思えんしなあ。 と、20世紀のプログラマ達も、そう思っていたんだろうなあ
小惑星が衝突して自転周期が変わってしまう罠
最近、暦のほうを修正したほうがひょっとして楽なんじゃないかと思い始めたわけだが
>>80 11月23日生まれの人の年齢計算が大変だぞ
>>61-62 その方法はCOBOLとしては「正しい」コードだったらしいよ。
SQLで条件絞るよりもよっぽど速いそうなので。
プラットフォームが変わってもそれしか知らないのなら
ちゃんと教えてやらないといけない。
あー、当然Java屋がCOBOL書けって言われたときにSQLで
がりがりがんばってもきっと馬鹿にされるだけだぞ。
>>83 それってJavaとかCOBOLとかの問題じゃなくて、データベースの問題だと思うが。
>>83 ちょっと信じがたいのですが、そのCOBOL屋は信用できますか。
RDBMSの黎明期ならまだしも、今でもそんなにSQLが遅いとは考えにくい。
>あー、当然Java屋がCOBOL書けって言われたときにSQLで >がりがりがんばってもきっと馬鹿にされるだけだぞ。 慣れてない環境でセオリックに組んでいてパフォーマンスでないのは 単に慣れの問題で、ベテランが教えてやればそれで済む問題だと思う。 DELETEで1レコードずつ消すのが早いとか裏技的なテクニックを 当然と思い込んでるのは明らかに勉強不足だから、周囲がその間違いを 教えてやっても、他の箇所でもいろいろ変な書き方をしてそう。
87 :
仕様書無しさん :04/03/06 14:52
一行ずつ処理? どうもCSVかなんかのテキストベースのテーブルを処理してるような感じがするな。 コボルはあまり知らないんだが、要するにDBエンジンに仕事をさせるための言語がSQLで、 DBエンジンにさせたほうが速い仕事もコボラーは自分でやりたがるんだろう。 必然的に総てのデータを処理したがるわけだ。 まあ、それが第三者が見て一番解りやすいやり方なのかも知れないけど。 確かにサブクエリが何層にもなったSQLや、5つも6つもつなげたユニオンクエリを書いて 一発で通る時の充実感は確かにあるけど、第三者のことは考えてないもんな。処理速度はこの方が速いんだろうけど。 だからコボラーにはデータベースは無理なんだって。
>>87 程度にもよるけど、サブクエリーがネストした程度のSQLなら普通に読んでもらいたい。
89 :
仕様書無しさん :04/03/06 16:17
>サブクエリが何層にもなった 俺は一つのSQLにSELECTが13個ある命令を見たことがある。
COBOLの時代はISAMだったんじゃないの? よく知らないんだけど。
91 :
仕様書無しさん :04/03/06 17:44
select * from (select * from (select * fromselect * from(select * from (select * fromselect * from(select * from (select * from(elect * from(select * from (select * from ta_data))))))))
92 :
仕様書無しさん :04/03/06 17:46
( がおかしい。シモタ
カッコ悪い
>>91 from の後に select 書けるの?
95 :
仕様書無しさん :04/03/06 18:24
>>87 プラットフォーム(広義の意)にあわせた開発をしてくれればいいんだがな。
つこて
>だからコボラーにはデータベースは無理なんだって。
こーゆー言い方しかできないやつは、全く別の環境にいくと使い物にならないやつになりそうだな。
客先のオサーン達は、CSVファイルという概念がいまだに理解できてません。 こんなオサーンを引っ張って開発せにゃならんと思うと鬱。
>>96 俺も「CSVファイルの区切り文字は、タブ文字とする。」なんていう
客先SEのメールで目が点になった。
#いや、俺もタブ区切り嫌いじゃないが…それCSVじゃないよ…
98 :
仕様書無しさん :04/03/06 22:40
from (select〜)は常識だぞ!
>>94 が俺様の究極の13重サブクエネストのSQLを見たら100年かかっても理解できねぇだろうな。
>>98 そうなん?
select は where 節にしか書けないと思っていたのだが?
>>98 そんなネストが必要なのは
スキーマの設計の段階で終わっているからだと思うが?
流れを切って一つ愚痴を。 今回入ったプロジェクトの変数の命名規則が 「ソースファイル名+YYYYMMDD」 なんだが、非常に見にくい罠。 ちなみに言語はc。 発案者は誰なんだーっつーか死んでください
>>101 1つのソースファイルで、1日1つの変数しか宣言できないの?
しかもローカル禁止とかw
104 :
仕様書無しさん :04/03/06 23:30
>>99 俺も最近知ったけど、FROM句にも書けるんだよねぇ。
>>104 それどころかselect句にも書ける罠
失礼 DDMMの後に分と秒があった
>>101 int hentai20040307000312=0;
int yamete20040307000313=0;
int sukebe20040307000314=0;
char ahan20040307000315[100];
?
109 :
仕様書無しさん :04/03/07 00:36
select * from (select * from (select * fromSelect * from(select * from (select * fromSelect * from(select * from (select * from(Elect * from(select * from (select * from ta_data)))))))) 大文字にした所をよくみるがよし。 通らないよコレ
IF〜 IF〜 IF〜 IF〜 ・・・ 条件多すぎ、おえねぇよ モウヤメテェヨナ
SQLくらい勉強してくださいよ… 副問合わせぐらい覚えようよ、MySQLでも使ってない限り
112 :
仕様書無しさん :04/03/07 01:41
>>111 ごめん。俺オラクルプラチナもっているけど既に忘れた。
なんかあったね。そういうの。
>>112 Oracle7のプラチナは9iのシルバーに劣るよな。
まじで。
ひとつのselect文はその結果自体が一つの表(つーかビュー)になってるわけだから それをfrom句に書けるのは当然。という考え。
>>108 hoge.c
int hoge20040307023229=0;
int hoge20040307023243=0;
int hoge20040307023246=0;
char hoge20040307023250[100];
for(int hoge20040307023301=0;hoge20040307023301<100;hoge20040307023301++) {
…
という感じになるのでは…
>>101 前の会社にも変な規則あったけど、そんなのは初めて。
世の中には変なことを考える人がいるもんだね。
意図がわからねぇ
118 :
仕様書無しさん :04/03/07 10:37
selectをselectに書く場合 select (select hoge from tbl),hoge2 from hogehoge
119 :
仕様書無しさん :04/03/07 10:53
俺が見た究極のSQL 25連結ユニオンクエリ、、、鬼。
120 :
仕様書無しさん :04/03/07 11:03
別名つけなされ
121 :
仕様書無しさん :04/03/07 11:07
25回もUNIONしなきゃいけない理由ってなんだろう…?
122 :
仕様書無しさん :04/03/07 11:17
や、俺が書いたんじゃねーから、読むのもウザかった。 どうもね、売上データに20種類ぐらいの場合分けがしてあって、 しかも、同じテーブルに一定の比率を掛け合わせたものを別々のデータとして扱う必要があったみたい。 それを計上日順にソートしなくちゃならないから、そうなった。 同じ内容の奴もいくつかあったみたいだけど。
>>118 ほほー、こんなのもアリなのか。
勉強になった。サンクス!
124 :
仕様書無しさん :04/03/07 11:26
悲しいとき〜、 超苦労して書いた長いユニオンクエリやサブクエ多重ネストが通らなかったとき〜。 どのSelectが問題おこしてるか解らない〜!
>>123 いっとくが、select部分に副問い合わせを書くのはSQLに慣れた人から見ると
ここでよく紹介されるコボラー並みにみっともない行為だぞ。
FROM句に書いて結合させればいい話なんだから。
126 :
仕様書無しさん :04/03/07 12:19
>>113 9iのプラチナ(当時)だけどね。今はゴールド扱いだっけ?
127 :
仕様書無しさん :04/03/07 12:20
コボラーはみっともなくないぞ!
>>126 こんなヤシがいるから、オラクルマスタが改定されたんだな…
>>125 心配してくれてありがとん。
知識が増えて喜んでただけだよー。
どう使うか(使えないもの)は、ちゃんと考えるよ。
うっす。 要らぬ心配だったようだな。失礼した。
for (i=0; i<3; i++) { switch (i) { case 1: … break; case 2: … break; case 3: … break; default: break; } } ふ ざ け る な
forとswitch使いたかっただけと違うんか
>>131 おれ、一連のシーケンスを実行するときは、そういうループ書くけどな。
大抵、switchの前と後ろに、なんかやりたいことがあるんだけど。
ふざけてるんじゃないよ。
プログレスバー進めたいとか 処理をいくつかのステップに明確にわけたい事情があったのかも。 あるいは、その名残のようなものなのかも。 まあ、違うんだろうけど
各ステップの処理を関数にでもして、 各関数を順に呼ぶだけの方が解り易いのに…。
時と状況によっては、
>>131 のコードは問題ないと思うんだが。
要は、中にどんな処理を書くかでしょ
>>131 が怒ってるのは、default: についてだと思うよ
まあ最初の1ループはまるっと無駄だよね
中でiの値書き換えてるんだよ ...それはそれでブチ切れる鴨
>138 「case 3:」も無駄だよね
iの値を書き換えていくわけか i++があるから1少なく書くわけだな なんかオラワクワクしてきた
俺よりベテランで、今までVBやってきたという人とC#の仕事をしてる。 「Cになれて無いから」と頻繁に言い訳するけど、仕事が遅いのはそれ以前の 問題というか。 (C#とCは違うと、それとなくツッコミを入れてもCと言い続けてるし) F1でヘルプが出る事を知らなかったし、デバッグのやり方も、ソースを変更 して実行を繰り返すやりかたで、ブレークポイントを仕掛けてステップ実行 とか全然やらないの。 横からチラチラと覗いていても原因が分かるレベルのバグだったので、 それとなく「ここにブレイクポイントを入れて、ステップ実行したら。。。」 という感じでアドバイスしたけど、その後もステップイン、ステップオーバー、 とかを使い分けたりしないで、ひたすらステップインをクリックするだけ。 余計なメソッドやループに入ってしまったら、ステップインのアイコンを 連打して脱出で効率悪すぎ。 このあたりの統合環境の使い方はVBでも同じはずなんだけど、この人はVBで いままで何をやってきたのか謎。 ヘルプの使い方とかデバッグのやり方とか、それとなく本人の前でやって みせるのだけど、ぜんぜん盗んでくれないし。
>>143 俺より10年ベテランの人はJP1スクリプトのことをJAVAスクリプトと呼ぶ
・・・JP1スクリプトって何者?
146 :
仕様書無しさん :04/03/08 23:18
>143 当方リアルVB厨(2年目)ですが、 それはソイツが糞なだけですよ。 デバッグくらい自分レベルでも当然やってますし。 因みに副問い合わせのSQL書けない方、自分以下ですのでそこんとこよろしこ
147 :
仕様書無しさん :04/03/08 23:32
>>146 副問い合わせ?
SQLでのすべての問い合わせは「こうやって取り出したい」と思ったの
かければいいんだよ。楽しみながら実験していけば、
本読んで勉強するより短時間に覚えられるよ
>>143 あんたいい人だ。・゚・(ノд`)・゚・。
がんがれ。
>>143 多分VSの一枚目しか持ってなかったんだよ。
>146 んじゃあ、「副問い合わせを使わずに、副問い合わせ使って欲しいデータを、SQL 一発で取る」 のはレベル上なのか下なのか?(w MySQL は副問い合わせ使えないから、join で書き直す癖が付いたなあ……癖抜くのに少し 手間取った(w
遅レスだが。。。
>>131 俺も似たようなコード見たことある。
もっとヒドイ
for(i=0; i<2; i++){
if( i==0)
f000();
if( i==1 )
f001()
if( i==2 )
f002()
f(); // なにやら共通っぽい処理
if( i==0)
f010();
if( i==1 )
f011()
if( i==2 )
f0012()
:
:
}
みたいな。
頭の硬い年よりはイラネ
ま、辞めたけど
131も152もどちらにもありえない判定文があるのは こういう書き方をするプログラマにとっては必然なのだろうか。
>>153 直接関係あるかどうか知らんが、
そういう香具師の多くがデバッグ用printfに副作用のある式を入れたりする。
で、「普通に動くんですけど、デバッグオプション付けると動かないんですぅ」
とか言い出す。
>>154 「デバッグオプション付けると普通に動くんですけど、取ると動かないんですぅ」
っていうパタンもあるし
>>155 デバッグビルドのまま納入しますけど、何か?
グ・グム〜
159 :
仕様書無しさん :04/03/10 01:40
sedで s/ "/"/ s/ "/"/ s/ "/"/ s/ "/"/ s/ "/"/ (中略) s/ "/"/ CSV末尾の余分なスペースを取りたかったらしい。 性器、もとい
正規表現使えよ、とオモタ。 #途中で送信してしまった。。
>>76 #defineMAXDAY(y,m)(((m)==4||(m)==6||(m)==9||(m)==11)?30:((m)==2?(((!((y)%4)&&((y)%100))||(!((y)%4)&&!((y)%400)))?29:28):31))
どうだ?
>>161 正しいか否かを確認する気にもなれないぞ
「一行で書ける」は「一行で書くべきだ」とは違う
たとえ十行を超えたとしても、もっと読みやすい書き方で書いてある方を評価する
>>162 まあ、「1行で書ける」と言われたから1行で書いたのだろう。
これを読みやすいからという理由で、複数行で書いたのでは、
>>76 への答えにはならんだろう。
しかしな、
>>161 よ、お前は
>>76 をもう一度読み直せ。
これがテストなら、お前の答案は0点
164 :
仕様書無しさん :04/03/10 19:55
>>161 #defineMAXDAY(y,m)(((m)==4||(m)==6||(m)==9||(m)==11)?30:((m)==2?( ((y)%4)||(((y)%100)==0)&&((y)%400)?28:29):31)
どうだ?
>>76 は「閏年かどうか」と言っているので
これでいい
((year % 4) == 0) && ((year % 100) != 0 || (year % 400) == 0)
>>164 #define MAXDAYS(y,m) (((m)==4||(m)==6||(m)==9||(m)==11)?30:((m)==2?(((y)%4)||!((y)%100)&&((y)%400)?28:29):31))
ちょっと修正させてもらった
167 :
仕様書無しさん :04/03/10 21:05
日数算出で、 現在日付から年と月1つずつずらしながら 延々ループ回して求める関数。 10年やってんならユリウス日ぐらい知ってろ!
・・・ライブラリ使わないのか?
きっとライブラリ作る人なんだよ
(mktime(&to_tm) - mktime(&from_tm)) / 86400; じゃダメか?
ユリウスとグレゴリオの違いがわからない
文字数が違う
グレゴリアはショタ。ユリウスは年増キラー。
>>170 from_tm をどうやって求めるかも書かないと片手落ちだぞ
最近は片手落ちも差別語らしいね まあ2ちゃんねらーには関係ないか
片輪より片手落ちのほうがかなり直接的な表現だけど、 なぜかカタワのほうが差別度は高いな。 どうでもいいけど。
そのうち「手抜き」も差別用語になるかな。
めくらタイピング
>>167 ユリウス暦は常識 (とは言え使われていない) が、
ユリウス日を知っている人はそう居ないのでは?
そのうち「口抜き」も差別(ry
そのうちけんけんも差別遊戯と(ry ……そろそろ流れ戻そうよ。
>>178 いいなそれ。あえて広めようぜ。俺は面倒だからやんないけど。
おさわりタイピング
接触打鍵
我流一本指打法
186 :
仕様書無しさん :04/03/13 11:35
コロンブスメソッドって知ってる?
187 :
仕様書無しさん :04/03/13 16:43
十字キーで全て解決!
188 :
仕様書無しさん :04/03/13 16:58
interruput_fuck( ) { }
189 :
仕様書無しさん :04/03/14 01:08
>>164 >>166 最短
inline MaxDays(int y,int m){return m==4||m==6||m==9||m==11?30:m==2?y%4||!(y%100)&&y%400?28:29:31;}
inline MaxDays(int y,int m) { int max_days[] = {略}; return max_days[y*12+m-1]; }
193 :
仕様書無しさん :04/03/15 01:06
>>192 y は西暦で与えるんでしょうか?
そんな膨大な配列をインライン展開されたら目が眩みそうでし。
static constな配列にしとけば全然大丈夫。きっと。 つか、引数が定数なら計算結果の値だけになるかも。こっちの可能性は低いけどな。わら。
195 :
仕様書無しさん :04/03/15 02:23
>>194 まさか
>>193 の
int max_days[] = {略};
にstatic constを付けるとか言うつもりじゃあるまいな?
>>190 inline MaxDays(int y,int m){return m-4&&m-6&&m-9&&m-11?m-2?31:y%4||!(y%100)&&y%400?28:29:30;}
おまいらのコードじゃあ全部会社辞めたくなるな。 エラーチェックくらいしる!
>>195 ダメなの?
# ダメだと主張するコンパイラがあることは知ってるけど。
>>197 細かいinline関数にはエラーチェックを入れるなよ?
あいだをとって、assert()にしとけ。
>200 すべての人間にとっての常識なんてあるか? 範囲は必要だろう。
200にとって、「日本人なら常識」な事は常識とは言わないらしいね
>>196 int MaxDays(int y,int m){return m-2?31-(1&2644>>m):29-(y%4||y>1582&&!(y%100)&&y%400);} // 1<=y<=INT_MAX, 1<=m<=12
グレゴリオ対応。
そのうち
>>196 や
>>204 が各社のソースにコピペで氾濫する事でしょう。
その時は、是非以下のコメントを入れておいてください。
// この会社辞めようと思ったソースコード#D
m-2?31-(m+(m<8))%2:(以下略)
というのを考えたが、
>>204 と字数変わらんかった。
>>205 実際にコピペする機会がありそうだから怖いな
>204 はコピペ禁止な。 代わりにだいたい等価な関数を貼っておく。 #define SMALL_MONTH_BITS 1322 // 010100101010b #define SMALL_MONTH_BITS_1 (SMALL_MONTH_BITS << 1) #define GREGORIAN_YEAR 1582 //#define GREGORIAN_YEAR 1699 // return value={28-31}, 1<=year<=INT_MAX, 1<=month<=12 int MaxDays(int year, int month) { int days; assert(1 <= year && 1 <= month && month <= 12); if (month != 2) { if (SMALL_MONTH_BITS_1 >> month != 0) { days = 30; } else { days = 31; } } else { if ((year % 4 != 0) || (year > GREGORIAN_YEAR) && (year % 100 == 0) && (year % 400 != 0)) { days = 28; } else { days = 29; } } return days; } // MaxDays() End あと、グレゴリオ対応は意味が変なので、紀元後〜1582あたりに対応と訂正で。
>>209 グレゴリオ対応とか要らん。
それと、等価な関数……を自分で書けないような奴が、このスレに
来るとも思えん。
上司が
>>210 の会社は今月で辞めようと思った。
#define MaxDays(y,m) 31
やだ
if(上司 == 210){ switch(month){ case 今月: 会社を辞めようとおもった。 break; default: 温もりに包まれる。 break; } }
うるう年に対応は当然だが、うるう秒に対応してるのは見たことが無い
必然性がない。
そもそもうるう秒は予測可能なのか? それとも過去のうるう秒の話?
222 :
仕様書無しさん :04/03/19 11:31
ここが噂のdate timeについて語るスレですか?
閏秒があると、秒が 58 → 59 → 60 → 00 → 01 と一回だけ 60 になる。 OSによって対応度合いが違うだろうけど、アプリ側で対応してないと 拙い事もあるだろう。 まあ、12/31 から 1/1 の間にリアルタイムでデータ収集してるとか そーゆーシステムでもない限り関係ないわけだが。
>>226 秒数のカウントとか、影響は色々あるでしょ。
228 :
仕様書無しさん :04/03/19 12:38
>226 そんなもん、解析時に考慮すればいいだけだろ。
229 :
仕様書無しさん :04/03/19 12:41
char* mage() { char ret[MAX_RET]; 処理 return ret; }
おめーら皆素人だろ。 閏秒ごときを考慮しなきゃなんないシステムなんかない。 年間どころか週間一秒の誤差を考慮する必要あるシステム上げてみぃ!
>>230 リアルタイムに絡むシステムなら、結構関係するのがあると思うが。
イベント間の時間間隔がクリティカルになる計測系とか。
232 :
仕様書無しさん :04/03/19 13:15
>>231 そうだとしてもどのように対応するの?
閏秒ってある程度溜まった時点でやるよーっていってやるじゃない。
それを管理してる側かそこからリアルタイムに時刻をもらってない限りは、通常の時刻調整と同じだろ。
>>232 >イベント間の時間間隔がクリティカルになる計測系とか。
イベント間の時間間隔は相対的なものだ。
うるう秒は絶対的なもの。
ここでは絶対的な時間が(時計やカレンダーみたいに)
クリティカルな意味を持たなければいけない。
>>233 各イベントがタイムスタンプ持ってたら?
235 :
仕様書無しさん :04/03/19 13:59
>>234 その出力時刻がシステム内で定義された時刻か、外界の時刻かによるでしょ?
時間間隔でクリティカルなシステムなら、外界の時間を当てにしない。
外界の時間が大事なら、それに従う。
外界の絶対時間が重要なシステムって、基準時を管理してる組織だけじゃないのか?w
>>235 > 外界の時間が大事なら、それに従う。
で、外界の時間が閏秒を入れていたらどうする?
秒単位の絶対時刻で記録するような計測システムはまずいことになりそうだが。
238 :
仕様書無しさん :04/03/19 14:12
>>236 外界の時間を何で取得するかによるでしょ?
普通にシステムコールしてるならば、それがフォローしてるし、OSがカバーしてる。
それ以外でどっかと通信して時刻を取ってる場合、予めその仕様に明記されているはず。
秒は0から60ですよって。
239 :
仕様書無しさん :04/03/19 14:13
>>238 > 秒は0から60ですよって。
で、いつ60があるのかわからなければ秒数が計算できないでしょ?
>238 本気でそれで問題ないと思っている同僚がいたら会社辞めたくなりそうだ
242 :
仕様書無しさん :04/03/19 14:22
>>240 仕様でそのように書かれていれば、外部から時間を取り込む際に変換するだけ。
>>241 逆に通常業務で閏秒とか考えてる奴がいたら嫌だけどね。
大体さ、閏秒を考慮しなくちゃいけない場面って今までに存在したか?
普通にOS上で動くアプリであれば、そもそもそんな時刻存在しないし。
>>242 > 仕様でそのように書かれていれば、外部から時間を取り込む際に変換するだけ。
じゃ、その変換プログラム、擬似コードでもいいから書いてみてよ。
1つ目のイベントがYYYY年MM月DD日23時59秒で、
2つ目のイベントがYYYY年MM月dd日0時0秒だったとして、
1つ目のイベントから2つ目のイベントまでの秒数がいくつか、
閏秒がいつ入るかわからなくてもちゃんと計算できるやつ。
もちろん閏秒が入っている時には2秒と答えるように。
>242 マジ、こいつが同僚だったら転職考えるな。 自分の狭い世界だけで「ありえない」とか判断する奴、最低。
何必死になってんの?
246 :
仕様書無しさん :04/03/19 15:01
>>243 つうかさ、相対時間が必要ならば、外部から時間は取らないよな。
仕様レベルであなたの前提がおかしい。
もし、過去に遡ってそういうのが必要ならば、閏秒があった年月日を予め与えて
そのイベント間にその時刻があったかを考慮すればいいだけ。
与えるのは人がやるしかない、それは当たり前。
>>244 ありえないとはいってないだろ、存在したかと聞いただけ。
絶対的な時刻差が必要ならば、外部から時刻を取らずに自分で時刻基準を持つだろ普通。
>>234 イベント間の時間の距離が問題となる状況で
その記録方法にタイムスタンプを採用しているのは
根本的な設計ミスだと思う。
ま、確かにそんな糞設計をしていれば 2038年問題なんて
心配する必要は無かったろうな。それぐらいしか利点は無いが。
>246 > つうかさ、相対時間が必要ならば、外部から時間は取らないよな。 > 仕様レベルであなたの前提がおかしい。 アッパレな先入観だな。 発行元がタイムスタンプを作成するシステムなんていくらでもある。 タイムスタンプ間の秒数が必要になるシステムだっていくらでもある。 たまたまあんたがそういうのに関わらなかっただけ。 よかったね、その「たまたま」が起きて。
>>247 > イベント間の時間の距離が問題となる状況で
> その記録方法にタイムスタンプを採用しているのは
> 根本的な設計ミスだと思う。
世の中、システム全体を設計できる案件ばかりではあるまいに・・・
250 :
仕様書無しさん :04/03/19 15:13
>>248 逆にさ、発行元が閏秒のままそんなデータを垂れ流すほうが糞仕様だと思うけど。
屁理屈だよ。あんたの意見。
251 :
仕様書無しさん :04/03/19 15:14
>>249 日本標準時を管理してる組織以外で、閏秒のままを外に出す必要のある設計ってあるのか?
252 :
ぷろじぇくとりぃだぁ :04/03/19 15:18
おえらこんなとこでウダウダやってないでとっとと仕事シルヽ(`Д´)ノゴルァ
時間に秒単位の精度が重要なシステムで閏秒が問題になるのは、設計が悪い。時間と時刻は違う。 秒単位の時刻が重要なシステムなら、閏秒以前にどうやって時刻を構成するのか教えてくれ。 本音は、スレ違いだからいい加減にして欲しい。
>>250 > 逆にさ、発行元が閏秒のままそんなデータを垂れ流すほうが糞仕様だと思うけど。
そういう糞システムは全部あんたが無償で再設計してくれるみたいな言い方だな(藁
強弁するのはいいが、自分の視野の狭さを恥じる心も持ったほうがいい。
世の中、JSTと同期している機器だって一杯あるし、
そこからの絶対時間を信用する必要があるシステムだってある。
ま、どうでもいいスレ違いになっちまったから、俺はこの話題から降りるけど。
255 :
仕様書無しさん :04/03/19 15:21
>>253 ハードとして、電子だっけか?の振動を数える機械を内蔵して・・・。w
>>253 スレ違いなのは禿道。だから
> 時間に秒単位の精度が重要なシステムで閏秒が問題になるのは、設計が悪い。時間と時刻は違う。
> 秒単位の時刻が重要なシステムなら、閏秒以前にどうやって時刻を構成するのか教えてくれ。
こういうマヌケな燃料は遠慮してくれないか?
>>253 >本音は、スレ違いだからいい加減にして欲しい。
いや、"糞仕様" という点でこのスレの意図にしっかり沿った
内容だと思う。
258 :
仕様書無しさん :04/03/19 15:34
だから、そこまで時間の差が重要なシステムならば、設計段階で考慮するって。 そうではない日常使うアプリに出力する時間差にまでそんなことを気にする奴がいたら、そいつが馬鹿なだけ。
>>254 >世の中、JSTと同期している機器だって一杯あるし、
>そこからの絶対時間を信用する必要があるシステムだってある。
一点、突っ込みを入れさせてもらう。
それは「秒単位」で、か?
>>259 > それは「秒単位」で、か?
漏れはmsec単位のタイムスタンプ付きの情報が0.01-10/secぐらいで送られてくる
システムに関わったことがあるよ。実際に使うのはsecまでだったけど、なんか規則
でmsecまで記録するんだと。
261 :
仕様書無しさん :04/03/19 15:44
>>260 だから、それはその相手装置内のタイムスタンプでしょ?
そんなの幾らでもあるよ。
そうじゃなくてJTSから取る時刻を秒単位で行ってるかじゃないのか?
通信による遅延があるから意味ないじゃないっていいたいんでしょ?
>>259 は。
>254 貴方がそういうシステムを知ってる物知りさんだってのはわかったけど・・・ それで、それらのシステムは閏秒に対応してたの?
わざわざ恥を晒しにきた260がいるスレはここですか?
>>261 > そうじゃなくてJTSから取る時刻を秒単位で行ってるかじゃないのか?
JTSってJSTのことか?
だとしたらたしかmsec単位で同期取ってたと思うが、ちょっと曖昧。
少なくとも秒単位では取れてた。
> 通信による遅延があるから意味ないじゃないっていいたいんでしょ?
>>259 は。
遅延があるから相手装置のタイムスタンプを信用せざるを得ないわけだけどね。
って、まさかJSTからの遅延を言いたいんじゃないだろうな?
JST、というか日本標準時と厳密に同期をとっているシステムだったら、閏秒は重要だな。 時刻→時間差の変換には気を使う必要がある。 そんなの滅多にないと思うし、想像もつかないけど、きっと世の中にはあるんだろう。 それ以外の場合は不要。
> そうじゃなくてJTSから取る時刻を秒単位で行ってるかじゃないのか?
> 通信による遅延があるから意味ないじゃないっていいたいんでしょ?
>>259 は。
いいかげん自分の見苦しさに気付け
>>265 秒単位が「厳密に同期」かよ…マジで自分の常識の狭さに気付いてないのかね…
>>254 こういうやつがいたら、会社辞めたく(辞めさせたく)なるな。
270 :
仕様書無しさん :04/03/19 16:59
>267 気付いてないみたいよ、>268たんは(苦笑
271 :
仕様書無しさん :04/03/19 17:01
>268 そう思うのなら、君は他の業種に転職したほうがいいと思うよ
272 :
仕様書無しさん :04/03/19 17:03
>>266 -
>>277 揚げ足ばかりじゃなくて、きちんとした反論しろよ。
自分は高見から見てるつもりかもしれないけど、全然話になってないよ。
>>266 たかが2chで時間潰してる新米SE君相手にムキになっても無駄だといいかげん気付け
>>272 これも揚げ足なんだろうな(藁
次のレスも、そのまた次のレスも揚げ足なんだろうな
>>275 いいかげんにしとけ。電波取りが電波だぞ。
277 :
仕様書無しさん :04/03/19 17:22
で、具体的な反論はできないと。 それに閏秒を実際にリアルタイムで処理してるとかの具体例も挙がらないと。 後から時間差を出すのに閏秒の考慮が必要ならば、その発生日時を渡すのはシステム的にありえる。 そんなのは当然だ。
>>277 > 後から時間差を出すのに閏秒の考慮が必要ならば、その発生日時を渡すのはシステム的にありえる。
それじゃ因果関係が狂いまくりだろ。そうじゃなくて正しくは
「発生日時から後から時間差を出すのなら閏秒の考慮をすることは
システム的にありえる。」だろ。
渡されるのが発生日時ではなくエポックタイムからの相対時間ならば
時間差を計算するのに閏秒など関係ない。
勉強になりそうなので閏秒を処理する必要のあるシステムの事例が知りたい。 俺の頭では考え付かないんだ。 このスレには期待してるんだけど。
>>277 > で、具体的な反論はできないと。
> それに閏秒を実際にリアルタイムで処理してるとかの具体例も挙がらないと。
いつのまに
>>260 は無かったことになったんだろうか...
自分に都合が悪い事を無視するってのは技術屋として最低だね。
まあ
>>277 が何を理解して何を理解してなくても俺には実害ないから
どうでもいいが。アフォらし。
>281 "必要なシステム"の事例ではないような。 で、260は閏秒に対応してるシステムだったの? つか、タイムスタンプを記録するだけの場合、閏秒ってどうやって保持するんかな。
>>282 > "必要なシステム"の事例ではないような。
必要だから対応してるんじゃねーの?
それとも、どれも酔狂か何かで対応してるとでも?
結論: 不毛な議論をしてるなぁ いい加減飽きないか?
『糞システム』が『翼システム』に見えた。(鬱
>>280-281 アホかと。
閏秒という概念があるかどうかだけなら、Cのtmにだってある。61秒まで(だったかな)。
システムとして対応する必要があるかどうか、重要かどうかとは別。
287 :
仕様書無しさん :04/03/19 18:41
>>286 なんだコイツ。。。
ただ受け付けるかどうかと閏秒処理するのと同じだとでも思ってるのかよ
マジで馬鹿だな。。。
閏秒という概念があるかどうかだけなら、Cのtmにだってある。61秒まで(だったかな)。 閏秒という概念があるかどうかだけなら、Cのtmにだってある。61秒まで(だったかな)。 閏秒という概念があるかどうかだけなら、Cのtmにだってある。61秒まで(だったかな)。 閏秒という概念があるかどうかだけなら、Cのtmにだってある。61秒まで(だったかな)。 閏秒という概念があるかどうかだけなら、Cのtmにだってある。61秒まで(だったかな)。 閏秒という概念があるかどうかだけなら、Cのtmにだってある。61秒まで(だったかな)。 閏秒という概念があるかどうかだけなら、Cのtmにだってある。61秒まで(だったかな)。 閏秒という概念があるかどうかだけなら、Cのtmにだってある。61秒まで(だったかな)。 閏秒という概念があるかどうかだけなら、Cのtmにだってある。61秒まで(だったかな)。 閏秒という概念があるかどうかだけなら、Cのtmにだってある。61秒まで(だったかな)。
話がそれてきました。
スレ違いの話題 --------------------------↑ ここまで --------------------------↓ ここから 「この会社辞めようと思ったソースコード#D」
#define SORT_DIRECTION_A 0 #define SORT_DIRECTION_D 1 ↑のように書いていたら、いつの間にやら、 //#define SORT_DIRECTION_A 0 // アップをローマ字で書くな #define SORT_DIRECTION_U 0 と修正されていた……。
スペルを省略しないように再修正をかけておけ。
//#define SORT_DIRECTION_A 0 // アップをローマ字で書くな //#define SORT_DIRECTION_U 0 // アップじゃねえよ禿 #define SORT_DIRECTION_AFTER 0
//#define SORT_DIRECTION_A 0 // アップをローマ字で書くな //#define SORT_DIRECTION_U 0 // アップじゃねえよ禿 //#define SORT_DIRECTION_AFTER 0 //なげーよ、ばか。 #define SDA 0
//#define SORT_DIRECTION_A 0 // アップをローマ字で書くな //#define SORT_DIRECTION_U 0 // アップじゃねえよ禿 //#define SORT_DIRECTION_AFTER 0 //なげーよ、ばか。 //#define SDA 0 // 何故か AFTER がスルーされている・・・ #define SORT_DIRECTION_A 0
//#define SORT_DIRECTION_A 0 // アップをローマ字で書くな //#define SORT_DIRECTION_U 0 // アップじゃねえよ禿 //#define SORT_DIRECTION_AFTER 0 //なげーよ、ばか。 //#define SDA 0 // 何故か AFTER がスルーされている・・・ //#define SORT_DIRECTION_A 0 // だから省略するなよ #define SORT_DIRECTION_AGE 0
298 :
仕様書無しさん :04/03/19 21:14
Dは何の略?
デスマ
INITIAL-D(デスマ)
ダメポ
突然蒸し返す事の ドケチな秒単位課金プロバイダとか閏病考慮要るかもとか
Sort順って、ふつうAscending/Descendingを使うような…
ああ、だから
>>291 はホントは正しいって話ね。ハイハイ。
こんだけの説明でわかるのか。 すげーなおい。
306 :
仕様書無しさん :04/03/19 23:00
>>291 でもさ、SORT_DERECTIONまで略してないなら、最後まで略すなよと言いたくなる。
307 :
仕様書無しさん :04/03/19 23:02
みんな! そんなことをいちいち気にしていたらコードなんて1行も書けないぜ!
308 :
仕様書無しさん :04/03/19 23:05
>>308 俺は悩まない。
自分のルールを持ってるから。
もちろん、規約があれば準拠するが。
むしろ略すならDIRECTIONの部分の方を略した方がいいかと思う。 DIRECTIONがなくてもASCENDINGとかDESCENDINGとか付いていれば十分だし。
ASCENDING_SORT/DESCENDING_SORTでいいと思われ
つーか、命名規則とかある場合がほとんどだと思うんだけど そんなことないんすか? 仕事するときは、大体ルールがあるけどなー まぁ、それでも、英語で悩むわけでorz
>>312 うちみたいな零細企業にはコーディング規約も命名規則もありません
前いた会社にはあったけど
ASC/DESCでいい
よーし、パパも亀レスしちゃうぞー
>>33 クラスだから、詳細設計より概要設計の方が重要なのであ?
給湯室で電気ポットでお湯沸かそうと思ったらよ、 コンセントに挿すほうんところにとんかつソースがべっちょりついてたんだよ。
>>308 ハンガリアン【我流】命名するようになってからはけっこう楽になった。
あんたもどう?
結局プログラマという人種はスレ違いだろうが討論がお好きなようで・・・
>>308 時々それに悩みすぎてコーディングがえらく遅い子いるよね・・・
>319 できれば「べっちょり」という言い方をやめて欲しいものだ。 我が故郷の言葉では「べっちょ」=「お○んこ」なのだよ。 そんなの(゚听)シラネといわれそうだが。
給湯室で電気ポットでお湯沸かそうと思ったらよ、 コンセントに挿すほうんところにとんかつソースがおまんこりついてたんだよ。
>>320 じゃあ漏れも今後はニッポリアン【我流】命名しようかな
327 :
仕様書無しさん :04/03/20 07:13
>>311 SORTが前にきたほうが、入力補助とかで並ぶからいいような。
ハンガリアンとかニッポリアンとか言われても、でんでん分かんねーYOヽ(`Д´)ノ 具体的に、どうやるのか教えてくらさい。
じゃあ、おれは英語リアンで
この前見たテーブルの列名 table1.RirekiNum table2.RirekiSeq table3.RirekiNo table4.RirekiBango 頼むから名称くらい統一してくれ…
>>330 多分全部違うんだよ。
数値、連番、No、番号・・・それでもNoと番号は一緒だな。w
>>331 Noは0から始まってて、番号は1から始まってたりするともう。
RirekiYes があったりするとか。
BangoがBingoのタイプミスとか。
#define MAX_MIN_VALUE 300 ・・・どっちなのかはっきりしろ。
最大値の中にも種類がいくつかあって その中の最小値なんじゃね?
>>336 いや、最小値として設定することが許される最大の値だろう。
338 :
仕様書無しさん :04/03/20 10:50
MAXのファンなんだよ。
連邦の白い奴か
MAXってまだ解散してないの?
マックス桐島
俺は会社でマックスって呼ばれてるよ
( ´∀`)<オイデ マックス! エサノ ジカンヨ♥
347 :
仕様書無しさん :04/03/20 17:05
概要設計なんてのは設計ごっこだよ。 詳細設計と呼ばれているフェーズを徹底的に行うべし。 デマルコ『デッドライン』より
348 :
仕様書無しさん :04/03/20 17:07
>>347 そんなものはどうでもいいんだよ!
動けばいいんだよ!動けば!
「動いている状態」を定義しないと、動けばいい、というのも満たせないぞ。
350 :
仕様書無しさん :04/03/20 19:07
俺が動いていると思ったら、それが動いている状態だよ。 文句ばっかり言ってないでさっさと作れよ
目立系の仕事って設計ごっこのフェイズ長いよな。 プロパーが実装知らないからだけど。 スレ違いでした。
>>347 「詳細設計と呼ばれているフェーズ」ってそんな重要か?
何か俺の考えてるのと違うものを言っているだと思うが…
>>352 俺もデッドラインを読んでそこに引っかかった。
デマルコ曰く
デバッグの時間が開発の大部分を占めるのなら、デバッグ自体を無くせばよい。
バグのほとんどはインタフェース部分に潜んでいる。
すべてのインタフェースをプログラムコードと一対一で対応できるほど丁寧に設計しろ。
そうすればバグを激減でき、デバッグしなくてもよくなる。
インタフェースの設計は基本設計フェーズでやるものだと思うので、引っかかった。
しかし、どのフェーズで実施するかはどうでもよくて、
インタフェースを丁寧に設計することが主張の本質なので、
trivial だとみなせばいいよ。
>>353 インターフェースについてはその通りだが、
「trivial」という言葉の使い方がわからん。
普通、「trivial」は「些細な」とか「取るに足りない」とかいう意味なんだが、
何が些細で取るに足りないんだ?インターフェースじゃないよな?
デマルコの主張も些細だとは思わんし。謎だ。
「どのフェーズで」という部分を trivial だと書いたつもり。 誤解を招く語順だね、すまん
>>353 > インタフェースの設計は基本設計フェーズでやるものだと思うので、引っかかった。
デマルコの言っているインターフェースはもっと具体的な、型なんかの情報も
含んだもの。だから詳細設計で正しい。
基本設計時のインターフェースと 詳細設計時のインターフェースは 別ものですか?
デマンコって誰?
>>356 そうかな。
たとえばコンポーネントの開発を外部(他チーム、外注チームなど)が行うと仮定する。
設計書とともに、class や interface の仕様を共有するはず。
具体的に言えば、コンポーネントのコンテキストを説明する仕様書のみならず、
class や interface のソースファイル(ないし .jar ファイル)も渡す。
デマルコが言うのは、
すべてのコンポーネントを設計で抽出し、レビューを重ね、
そのインタフェースの設計を厳密に行えというものだと理解している。
開発を外部が行うか自分のチームが行うかは関係しない。
コンポーネントを同定するのは基本設計。
コンポーネント間の関係を示すインタフェースを設計するのは基本設計。
インタフェースに従って設計するのは詳細設計。
上記の定義をもっているので、基本設計フェーズと認識している。
デマルコの問題提起は、基本設計までに抽出されるものでは粒度が粗すぎるということ。
正しさを誰も検証できないということ。
それをとらえて「設計ごっこ」と呼んでいるのです。
#件の書では「管理ごっこ」の方がインパクトある言葉ですが。
>305 某ネットオークションのCGIに渡すパラメータには表示順制御パラメータとして o1=d (逆はo1=a) てのがある。てゆーかリンクのURLにaとあったから試しにdにしてみたら通った。 漏れ的にはトリビア(ORDER BY ASC/DESC)が役に立ってしまった瞬間だった。 オークション止めたくはならなかったがw
>>359 > デマルコの問題提起は、基本設計までに抽出されるものでは粒度が粗すぎるということ。
だからもっと具体的に定義したインターフェースを練れってことだろ。
だから詳細設計で徹底的にやれってことだろ。
詳細設計時に問題が発生し、基本設計にまで影響があることが判明した場合にどうするか、 を決めておけばいいんじゃなかろうか 基本設計はここまでやるべし、詳細設計はこうすべし、 なんてガチガチに決めてしまうのはオーターフローと変わらんと思う
でも書く紙が決まってるからな。 基本設計書と詳細設計書のリリース期限があるからどっかで線は引かないと なんないのね。 >コンポーネント間の関係を示すインタフェースを設計するのは基本設計。 になってない所多いよ。 データ構造すら基本では決めないとかね。
方法論を教科書として鵜呑みにしている初心者のスレはここですか?
>>364 確かに方法論は多種多様で、「小中学生の教科書の鵜呑み」の様なスタンスは誤りだけど
方法として定義するための方法が欲しいねえ
詳細設計の段階で、ソースと一対一で対応できるほど丁寧に設計することは、 ・プログラムのほとんどの部分ではやらないが、 ・インターフェイスについては行え ということではないのか? 詳細設計前にインターフェイスをどこまで設計しておくか、については、 詳細設計段階でインターフェイス以外の部分に戻りが発生しない程度に詳しく でいいんじゃないの。
壮観な滝ですなあ
369 :
仕様書無しさん :04/03/21 16:42
プログラマは猪突猛進な人が多いのかな?
引数に float をとるとして、 Float.NaN をちゃんと検査してるか?という話。
>>370 不勉強で申し訳無いけど
「NaNの検査」ってどうやるの?
372 :
仕様書無しさん :04/03/22 01:05
「ナンノの検査」やりたい…
374 :
仕様書無しさん :04/03/22 01:38
おっさんage
>>371 int isNan(double a)
{
return ! (a < 0 || a>=0);
}
Cなら:一応isnan()はansiでmath.hに入ってることになってる 他の言語は知らん
bool check_flg; if(check_flg); { //check_flgがfalseであってもこの場所が実行されてしまう } int value; if(value = 1) { //なぜか常にこの場所のコードが実行される } しかも書いたの俺。あまりにも古典的な間違いに 辞めたいってより感動した。
>>377 そういうことをしないように、
if(1 == value)
と書けばいいのさ。
VC warning C4390: ';' : 制御が空の文が見つかりました。意図した記述でしょうか? warning C4706: 条件式の比較値は、代入の結果になっています。
380 :
仕様書無しさん :04/03/25 21:35
>>378 そんな小細工をする前にコンパイラの警告オプションをONにしなさい
その書き方では
if (foo=bar)
のような間違いは発見できません
オペレーターのオーバーロードをしているクラスのテストにはいいかもしれないけどね
>>379 親切なコンパイラだあなあ。でもその種のwarningを発見するのって
別ツールにするのが正しい方法だと思うよ(lintみたいにね)
文法的に正しいソースを書いたのにwarningを出すのは、「うるせえ」って感じだよ。
warning出力をoffにすれば良いだけなのかもしれないけど、
#「warning出力をonにしてwarningメッセージを全て除去すること」なんてえ規約が出来るのがイヤ
>>381 >親切なコンパイラだあなあ。
M$にいくばくかのお布施をして徳をつむ必要があります。
>>381 lintこそコンパイラに付属するべき機能だと思う
>>381 最近のコンパイラだと当たり前だろ。
潜在的な誤りの可能性は警告する方向に進んでるのに、
その機能を分離しろとは、あんた、時代に逆行してないか。
>>382 gccだってそうゆう警告はするだろ。ちゃんとオプションをつければ。
>>385 gcc version 2.95.4だけど、-Wallつけても警告でないよ。
man みてもそれっぽいオプションなさげ。
>388 その時代に生きているならそう。
>388 時代に沿うか逆行するかと正解かどうかは、全然違うものだから 相手の言ったことを自分で勝手に拡大解釈したって反論とはなりえないよ? まずは384から「時代に沿うことが正しいこと」という発言を引き出さないと。 この手順を間違うと390みたいな論点をぼやかす抽象論が出てきちゃうんだよね。
いや、全然、怒ってやしないよ
>>391 >時代に沿うか逆行するかと正解かどうかは、全然違うものだから
そのとおり。>388は>384が「そのことを発見してくれれば良いな」と思って発言しただけだヨ
その種の共通認識が>384には全然無いから、「>384は反論にもなっていない」と思うのだ。
ご指摘の「時代に沿うことが正しいことという発言を引き出さないと」については、
「俺には議論する気は無い」という返事をしておこう
要するに何か茶々入れたかっただけって事ね
時代に沿うかどうか、なんていう方向に逸らしても意味ナイっすよ。
夕べ一晩中かけてちまちまとコーディングして 朝方一眠りしてからいざ走らせたらTypoの嵐。 会社というよりマを辞めたくなる瞬間。 # つーか最近妙にタイピングが……速度は遅いわTypoは多いわ……
397 :
仕様書無しさん :04/03/27 00:21
うちのプロジェクト、ソースコードというより開発ディレクトリが滅茶苦茶で泣きたい。 ルート直下に *.c や *.c.bk, *.c.bk2, *.c.bk2.org などが大量にあったり。 開発ディレクトリの各ディレクトリはどのように配置するのがお勧めでしょうか?
398 :
仕様書無しさん :04/03/27 00:23
397です。 CVSを導入する前に ディレクトリの意義を知らない奴が多すぎなんで。
デスクトップに全てのファイルを配置するのが一番漢らしい
400 :
仕様書無しさん :04/03/27 00:32
>>397 ルート直下ってことはUNIXでしょ?
rootアカウントで開発しているってこと?
401 :
仕様書無しさん :04/03/27 00:34
>>400 >>397 です。
みんなrootアカウントで開発です。
PMに開発指針を尋ねても「まかせた!」としかいわず
みんな好き放題にやりだしてしまいました。
>>401 を見て、ありえねーよ、とか思ったけど
今のプロジェクトのフルビルド環境は、
rootじゃないと確かどっかでエラー出たな。
まぁ、フルビルドなんて、一部のSI屋さんしかやらないし
他はまともだからいいんだけどね。
403 :
仕様書無しさん :04/03/27 00:48
MULTICSで開発しているよりまし、と思えば、 少しは慰めになりますか? > 397
ところでMULTICSの仕様って公開されてたっけ?
>>397 叩いて殴って、身体にディレクトリの意義を教える。
何にしろ、バージョン管理システムくらい普通に使うような開発体制をとろうよ。
ていうか、そういうものがあるって、いい加減理解しようよ。
あんたのことだよ、社長!
406 :
仕様書無しさん :04/03/27 19:26
// 特別な処理(管理番号:XXX001) 至るところにちりばめられているんですが意味がわからない。 管理台帳は課長のみ参照可能で一般には見せてくれない。
PM_CLICKとかPM_CREATECOMPLETEとか 変なイベント用のメッセージ定数作らないでくれよ。 標準のメッセージで事足りるんじゃー。
ついでに、スレ違いな質問なんですけど。 方書 ← これなんて読むの? アパート・マンション名なんだけど、 「かたがき」って言ってるのも聞いたことあるし、 DBのカラム名は「HOUSYO」になってるし。 知ってる人教えてよ。
「かたがき」だと思う。 「方書」と「かたがき」で検索するとお役所関係の ページやらPDFやらがいくつか引っかかるし。
MS Bookshelfによると、 かた‐がき【方書】 同居人や下宿人が住所に書きそえる「―方」という語。 らしい。 でも、KATAGAKIにすると肩書と間違われる罠。
レス早っ! サンクス。
おおおっ。 411さんありがとう。
ほうしょ、かよ。。。
スズキの奉書焼き食いてぇ
4月から派遣される先の仕様書の一部 void SZIEGYt00001() 入力 DATA_SIZAI.BUFFER00004 出力 DATA_EIGYO.BUFFER00010 DATA_EIGYO.BUFFER00001 解説 資材課データ00004に対して資材課日次処理S00001Aを実行し、 その結果データを営業課データ00010に書き込む 営業課データ00001が1の場合は、未処理のデータが残っているので 再度この関数を実行する必要がある。 ちなみにデータの型は全部char[1000]でもちろんグローバル。 日次処理S00001Aとかデータ00004とかの意味は それぞれの課の課長印をもらって「データ参照表」とやらを借りなきゃ わからないそうでつ。 関数名の「t」ってのは、作成中は「t」で、テストが完了したら 「T」にする…って、全部後からリネームしろと?
コボラーだ。 コボラーの臭いがする。
コボラーって、あの手の機械的なID臭い変数名とかどうやって理解してるんだろう。 ひょっとして、自動的に各変数を色分けして表示してくれたり、 (似たようなスコープや参照の変数は似た色に、そうでなければ全く異る色に) 変数の役割をアイコンでアノテートして直感的にわかるようにしたり、 あるいはハイパーテキスト的に参照をサマリ表示したりナビゲートしたり、 そういう素晴しい開発環境が標準だったりするのだろうか?(愕
漏れも初めて見たときはびっくりしたよ。全部同じに見えた。 てゆーかねぇ、他言語でやるの勘弁して。ほんとに。
>>418 帳簿に決まってんじゃん。
全部帳簿に表書いて、ファイルに綴じてあんの。
書き足すときは上司の判子が要るの。
あと念のため言っておくとスコープなんてないから。全部グローバル変数だから。
参照なんて無いから。全部要するにchar型みたいなもんだから。
可変長だとか動的確保だとかそんなもん一切無いから。
昔最前線でバリバリやってた、って自称する管理職の脳内はそんな状況。
ここ40(50?)年ほどに得られた経験を無かったことにすると
>>416 のようになる。
>>420 > 帳簿に決まってんじゃん。
その帳簿って、電子化されてて、ハイパーメディアシステムに食わせてやると
ソースからハイパーリンクとして、その変数に関するドキュメントや関係した人
へのコンタクト情報とか、同じ人が同じ時期に作成した変数の一覧とか、
その変数に関連した変更履歴に、・・・って、ないよね、すまそ。
(そっち方向への管理なら、ここまでやらないと無意味だろと思うよ)
> あと念のため言っておくとスコープなんてないから。全部グローバル変数だから。
そういや、そうだった。指摘さんくすこ。
423 :
仕様書無しさん :04/03/28 17:28
すげえぜ。ある意味漢! char[1000]のとこまでCOBOLの仕様書だと思って読んでました。
voidで気づけよ
425 :
仕様書無しさん :04/03/28 17:36
もう、萌え萌えですぅ♪♪
ここまで読んでようやくCOBOLじゃないことに気づきました。
四則演算とかどうするんだろう?(ガクブル
前々から疑問に思ってたんだが、COBOLってあの良く分からん暗号みたいな変数名にした方が、 member_code とかいう名前の変数にするよりもいいシステムが出来るもんなの?
(・・;;; 全部char[1000]でもちろんグローバル?!
VBやっていても そんな設計は時折見かける…
そっか、可変長に順応できないコボラーの仕業だった ノカ!
>>423 ハイフンじゃなくてアンダーバー ダッタ時点で気づいたYO!
COBOLの変数名は A-B-C のようにやたらハイフンで区切る傾向にある。
>>429 数値計算は+-*/で普通に出来る。intやLongのような型はないケド。
01 SUUJI-WK 9(5)
のように、桁数指定で宣言。これだと0-99999まで。
やり方次第で小数点やマイナスも扱える。
…懐かしい。
> COBOLの変数名は A-B-C のようにやたらハイフンで区切る傾向にある。 a-b と a - b で結果変わるのか?阿呆臭いな(´Д`)
>>430 COMPUTE って命令文の後でないと四則演算は無効になる
…だったと思う。
だからそういう間違いは起こりにくい か も
> COMPUTE って命令文の後でないと四則演算は無効になる (゚Д゚)ハァ?……とか思ったけど、よく話題になる if (a = 1) { // .... } みたいなミスがなくて、それはそれでイイかも。マンドクセーけど。
>>432 代入はMOVEという命令でないと使えないから、その間違いも起こらんね。
つーか、派遣会社を知らんのでなんともいえないんだけど そういうところに派遣されるのは、イヤです、とか言えないのでつか? 俺ならはっきり言ってそうだが。 っていうか、そういうとことは、おつきあいをしなければいいのであ? とか思わないでもない。
ちなみに関数とか入れ子とかって概念なんて無いから (最近は関数とかオブジェクト指向とかどうせ誰も使わないのに無理やり押し込もうとしてるけど) if ( a + b > c) {...} とか if (isCorrect(a,b,c)) {...} みたいなのは出来ないよ。 典型的な書き方だと COMPUTE D = A + B. IF D > C THEN ... END-IF. とか MOVE A TO IS-CORRECT-IN-A. MOVE B TO IS-CORRECT-IN-B. MOVE C TO IS-CORRECT-IN-C. PERFORM IS-CORRECT. IF IS-CORRECT-OUT-D = TRUE THEN ... END-IF. 無論変数は全てグローバルね。 あーくそ。こんなもんを自然に書けるようになった自分が嫌だ。記憶を消してくれ。
おっとと、補足。 しかもTRUEは 77 TRUE PIC X(1) VALUE '*'. とかなってたり。 77 って言うのが const のような読み取り専用ですよっていう定義の仕方。 ま、どうでもいいよ。知らないに越したことは無い…。
俺、コボラーってすげえ頭いいと思うよ。 クラスどころかスコープ無しで変数の管理できるなんて、 俺の脳みそじゃ無理だし。 願わくはその脳みそを楽するためにつかってくれれば、と思うけどね。
>432 > if (a = 1) { > // .... > } これ今でもやっちゃうことあるわ。 てか皆もあるよな?な!?
>>439 ない。そのバグは出しても良いけど、一度だけだ。
>>436 こういうの見ると、その昔アセンブラしかやってなかった人間にとっては
COBOLってのもすごく使いやすい言語なんだろうなあって思う。
>>441 COBOLって、高機能マクロが十分そろってる汎用アセンブラといっていいもんな。
>>439 だから警告レベルをあげろと何度言えばいいのか。
444 :
仕様書無しさん :04/03/29 08:44
アセンブラをつかってたものにとって 使いやすいのは、C言語 COBOLは全然違う
PDPってUnix発祥のプラットフォームだからね cが「PDP11のアセンブラ」を真似たんだ
以前古いPDP11のシステムを移行する仕事をやったことがあったけど、 あんなマシンでよくUNIXをこさえたもんだと感心した。 「表示」装置がラインプリンタだもんなあ。
448 :
仕様書無しさん :04/03/29 15:44
小洞ーがコボルのコーディングをしていることは少ないんだけどね。 普通はマクロっぽい拡張言語でコボルコードを自動書き出しさせている。
#define DATA /* おまじない */ #define DIVISION /* おまじない */
450 :
仕様書無しさん :04/03/29 18:38
日本語マクロとかね。
>>448 自分の周囲の状況だけを見て「普通」とはいかがなものか。
しかし、特定マクロ言語の世界から抜け出そうとせずに
進化することを拒んでいるオッサン連中が居るのは確か。
>>449 まさか
>/* おまじない */
に置換される・・・のか?
ごめん。なんか間違った。
おまじないっつーか マジックナンバーっぽい処理満載のソースは引き継ぎたくないなぁ と言いつつ、自分が書くときはそういう処理満載になっちゃう罠
うちの会社のコードでは #define VALUE1 1 #define VALUE2 2 … とかがある。 さすがに、意味ないと思うんだけどなぁ、と。
ぐれっぱ。
くわッぱ
462 :
仕様書無しさん :04/03/31 18:16
>>451 >自分の周囲の状況だけを見て「普通」とはいかがなものか。
周囲って言っても日経コンピューターとか業界誌とか
メーカーとかが発行のソフトウエア集とか見ればそんなものが
満載だし、業界向け講習会とかでもコボル言語生講習会とかは
入門講座以外ないことを見て言っているんだが。
「普通」をどう定義するかは勝手だが、そんなこと言っていると
普通はどうこうって発言は一切できなくなるぞ。
俺はコボル9割の情報処理会社の中にある技術計算課なる
部署でC/C++を使っているわけだが。
#別に技術計算をやっているわけではない
>>462 >普通はどうこうって発言は一切できなくなるぞ。
それでいいんだ。リサーチ業じゃないんだから
「俺の周りはこうだ」
で充分さ。
>「俺の周りはこうだ」 そういうのを井の中の蛙と言います。
>>「俺の周りはこうだ」 >そういうのを井の中の蛙と言います。 そう言ってるのはお前の周りだけです。
>>464 >そういうのを井の中の蛙と言います。
「俺の周りはこうだ、だから世の中全てはこうなのだ」が井の中の蛙だな。
「俺の周りはこうなんだけど困ったもんだ」とか
「少なくとも俺の周りはこうなんだけどね」ならば普通の書き込みだ。
464はかなりヤバイかもね。
「食べられてしまった、だから消化されるだけだ」が胃の中の蛙だな。 「食べられてしまって困ったもんだ」とか 「あとはウンコになるのを待つだけだ」ならば普通の書き込みだ。
468はかなり間抜けかもね。
470 :
仕様書無しさん :04/04/01 14:11
DB設計なんですが 「LINK_TABLE」と「LINK_COLUMN」という項目がある。 もちろん値はテーブル名やカラム名。
469のほうが間抜けだと思うぞ…
>「食べられてしった、だから消化されるだけだ」が胃の中の蛙だな。 >「食べられてしって困ったもんだ」とか >「あとはウンコになるのをつだけだ」ならば普通の書き込みだ。 なら468はかなり間抜けかもね。
俺の胴回りはこうだ 104cm。
筑波山麓合唱団とキモデブのスレはここですか?
>>472 適当に改変しただけのネタ書き込みにマジレスされても、対応に困るんですが…w
476 :
仕様書無しさん :04/04/02 13:31
>>466 >「少なくとも俺の周りはこうなんだけどね」ならば普通の書き込みだ。
自分の周りだけを見て普通だと言うやつがいまだにいる
>476 それは466と同じ見解だね。
>>475 俺の目には
>>472 がマジレスにはとても見えないが…
しかも「かなり」だから「困った」の部分にマが残っているのかw
>>475 適当に改変しただけのネタ書き込みにマジレスしてるのは君だろう。
害虫に頼んだソースに、本当は information であるべき エラー出力が inpomation と書かれていた。俺は気づかず納品。 しばらくして、こんなエラーが出ていますと客からメール...。_| ̄|◯
*inpomation* 貴方はインポです
>>480 わざとじゃない?
オチャメな外注さんだね(w
"inphormation"と綴りたかったんじゃないかな?
>>483 英和辞典 [ inphormation ]の前方一致での検索結果 0件
>>483 fをphと書いてちょっとしたクール感を味わいたかったのかな
#include <stdio.h> int main(void){ PHILE* php = phopen("hoge.txt", "r"); phprintph(php, "Hello, world!"); plclose(php); return 0; } もう何が何やらw
inhormationでなかっただけまし。
joformation
inhuxome_syonn
直してくれ!と渡されたコードの先頭。 #define TRUE 1 #define FALSE 2 (;´Д`)逃げたい
>>490 さらにコードの途中では
FALSEが2であることに依存した場所が・・・
さらにその後も突っ込みたいのは山々ながら どこから突っ込んでいいかわからんコードの連続をガッと省略しつつ、 別のヘッダで極めつけを発見。 #define NORMAL 1 #define ABNORMAL -1 もうね、死ねよと
>>492 まさにアブノーマルだなw
それどんな文脈で使ってんの?
>493 関数の戻り値で使っているらしい。 ・・・じゃあさっきのTRUEとFALSEは? とGREPしたところ、 該 当 0 件 どうよ?
どうよ?っつわれても。 「どうしようもねえよ」 としか言い様がないw
496 :
仕様書無しさん :04/04/10 02:03
使ってないなら却ってよかったじゃん まあ、それを除いてもどんなソースかは察するが
#define TRUE 0 #define FALSE 1 ってのなら見たことある
>>101 の事半ネタだと思ってたんだが、
今期から配属された銀行関連のプロジェクトの
コーディングルールがまさにそれで、目が点になった。
一応Cなんだけど、変数名は全てファイル名+4桁の連番。
しかもファイル名自体もシステム名+4桁の連番。
仕様書は古参SEの脳内にしかねーし、
ソース見ても定義だけされて使われてない変数ゴロゴロあるし_| ̄|○
事実はネタよりも奇なり
>>498 <<<<<<<<<<<<<<<<<<<<<<<<<;゚Д゚>>>>>>ガクガクブルブル
501 :
仕様書無しさん :04/04/10 12:30
>>498 大昔のコボラーってそんなじゃなかったの?
そのシステムの一番古いソースとかドキュメント資料には
196x年とか入ってんじゃないの?
もっとも その流れで いまだにやってる やつらがいる話は
良くある話ですね それにしても 変数名までもですか?
これって
・ドキュメントしっかり だけど 頭使いたくない 仕様作成者 の作った仕様書
ただし 物(Doc)は有るけど 中身めちゃくちゃってこともある
・仕様作成者 プログラマ パンチャ デバッガ が全部別々の
人間が作業していた頃で
・デバッグもマシンではなくて ダンプを見ながらの作業だったり
こんな頃の流れでしょ
502 :
仕様書無しさん :04/04/10 13:22
>>498 >仕様書は古参SEの脳内にしかねーし、
そのくせ仕様を確認したら「なぜそんな事も知らない!」とか
ぬかしやがるからタチが悪いね。
古参連中共が「結局このシステムは俺達がいないと動かねーんだよなー」
とか宣ってたり。「古参がいないと動かせない」ように仕向けてるんだろーが。
自分が関わったプロジェクトでは、項目名が
[ファイルID] + [開始位置] + "-" + [バイト数]
形式だった。ファイルレイアウトは度重なるコピーで解読不能なものしか
残ってなかった。。。
「改良して」と渡されたVBのソース。 Private Sub FileRead() '省略 Call FileWrite 'ファイルを作成します End Sub ファイル名とか出力するデータが入ってる変数は当然グローバル。 作った人はすでに辞めてる。
>>501 90年代頭ごろに作られたものだけど、
開発したのはCOBOLとBASICやってた人間ばかり。
ソースもBASICかシェルスクリプトかって代物。
ちなみにコーディングし終わったら、
コンパイルする前に一度ソースコードをプリントアウトして
コンパイルエラーが出ないか修正箇所をペンで追ってチェックするという
古き良き時代錯誤の風習もある。
さすがに俺はすぐにコンパイルしてしまうが。
>>502 そうそう。聞いても「ソース見てください」って言うばかりなんですよ。
しかもヤツラの頭の中じゃデータや処理が完全に数字と合致してるらしく、
ミーティングで「0010の処理なんですけどね」なんて平然と言うし、
ソースのコメントにも「/*合計額にxx00160085金額を加算*/」とか
平然と書いてあるんですよ。
古参の連中は十数年間この仕事しかしてないので、
その間、時間がずっと止まってて、自分たちがおかしな事をしてるとは
微塵も思っていないらしい。
BASICってN88日本語BASICとかね。
(^_^; COBOLデモ 変数に日付入レルノハ 見タコト無イヨー 恵マレテタ ノカナ?
>>131 俺も似た様なコードを見た。書き直そうと思ったが、
上司に、デグレードが怖いのでやめろと言われた。
(↓本当はVBだけど、分かりやすいように半分C風に。)
Do While(true)
if (baka == 1) {aho = 56; Exit Do; }
if (baka == 2) {aho = 22; Exit Do; }
if (baka == 3) {aho = 46; Exit Do; }
if (baka == 4) {aho = 79; Exit Do; }
Exit Do
Loop
何がしたかったのか。俺には理解不能だ。
> 俺も似た様なコードを見た。書き直そうと思ったが、 > 上司に、デグレードが怖いのでやめろと言われた。 その上司が書いたんじゃないのかw
509 :
仕様書無しさん :04/04/10 21:12
>>131 >>507 これこれ、人のプログラムコードをそのように言う物ではありません
これをコーディングした人は その仕事を ステップ=金額 で請け負った
のですから... ここまでせこいことをして ステップ数を増やしたいのです
プロというのは しっかり動く状態で プログラムコードを 余分に付け加えても
まだしっかり動く コーディングをするのです
『何がしたいのだか』は コーディングされたコードの動作ではなくて
プログラマした本人が 自分にとって『何がしたいのだか』を考えるべき ですね
って 全部嘘だっぴょーん って言いたいけど たいていこんな奴はいるぞ!
皆さん気をつけようね。
ちなみに こんなコードを見つけたら 『ばかやろー!』ってコメントを
追記するのは私です。
>>131 のような事は良くやるけどなー。
switchの外に共通処理が入るんだけど、
スレの趣旨とずれて申し訳ないけど、 >509 氏の言う、ステップ数に応じた対価っていう形態は、あるんですか? 話には聞いたことあるけど。
>>511 鐵な某SIでは未だに「工数管理」とかいってプロジェクトへの貢献度を
ステップ数で評価してるようだ。
そこへ出向してた頃コードの無駄な処理を削る、なんて作業をした
俺は間違っているのか?
下記の者を懲戒処分とする。
>>512 ステップ数を削減して会社に損害を与えたため。
処分内容 削減したステップ数割合の減給3ヶ月とする
スパイラルな開発でもしてるのか ウォーターフォールでファンクションぽいんt ('A`)情報処理試験来週か
>515 ソース見てたら /* 真実は奏でられた……!! */ とかあるんかね > スパイラル
そういや、その上司にステップ数を出せとか言われたな。 ステップの数え方は場合によって違うとか、どこかのサイトに書いてたので、 どういう基準で出すのかと聞いたら、答えられなかった。 ちなみに、その上司はいつも見積もりを間違って、赤字プロジェクトばっか生んでるという噂が...。
常に同じ基準で見積もる。んで、実際の値と比較する。
これを繰り返すことで、精度が上がってくる。
むしろ、組織にノウハウとして貯めるための仕組みがあるかどうかだな。
ない場合に
>>517 のようになる。
ソースの行数をステップ数と呼んで見積もりの根拠としてるんだとしたら 同じ基準もクソも無いがな…
そのために繰り返すのでは? まさか、コメント行を省いてないからクソだとか、そういう低レベルな 話じゃないよね?
必死だなw
ソフトの価値を決めるのにソースの行数を根拠にしようとするのは 車の価値を決めるのに部品の総重量を根拠にしようとするような、 音楽の価値を決めるのに演奏時間を根拠にするようなもんだ。 そんなのを何度繰り返したって見積もりどおりにいくわけ無いだろうよ。
価値の話? 見積もりの話じゃなくて?
>523 ソフトの値段を決めるのにソースの行数を根拠にしようとするのは 車の値段を決めるのに部品の総重量を根拠にしようとするような、 音楽の値段を決めるのに演奏時間を根拠にするようなもんだ。 こう書けばいい?
繰り返していけば、見積もった行数と実工数は比例するようになるだろう。
つまりそれにしたがって価値もつけることができる。
ただ、これをやるだけの手順化や、情報の蓄積が進んでない、
管理レベルの低い職場だと無理だろう。そういう場所では、
必ずと言っていいほど反発がある。
>>522 がその典型。
まあ、現実にはそうもウマくいかないわけで、
異なる指標を持ち出してはひっかき回してきたわけだが。
とはいえ、
>>524 みたいなトンチンカンなのを挙げた話は聞かないな。
価値そのものではないが作業量の目安にはちょうどよい。 ステップ数なんてそんなもの
カラ改行の数で作業量がわかるとでも・・
>>528 コメントと空改行をステップ数に加えたければ、そうすればいい。
コメントも指標としては重要だと思うよ。 計測してみたけど、ちゃんと作ったのは、 コメント込み行数がコメント抜き行数の二倍ぐらいになることが多いな。 手を抜いたのはコメントが少ない。 つーか、まだカラ行数とか言ってるのが居るの?すごいねココは
>>530 それをステップ数に加えるなという話だろ。
あとお前をこのスレに加えたくないという話でもある。
ようやくカラ行をステップ数に含めるかどうかの話になったのか お前ら難儀なやつだなあ
いっそのことバイト数で計算したら?
>>532 煽るなら「ステップ数」の定義を勉強してからにしたら?
ウィザードで作られる部分はどう数えるの
>533 関数名や変数名ををGUIDにすればきっと価値が上がるな。
>536 いっそそこらの適当なファイルのMD5取ってそれを使ってはどうか。
>>510 君はコーディングの能力を高める努力をした方がいい。
空行やコメントをどーこーなんて余計なこと考えるなよ。 「目安」程度にしかならないものに、ルール作ったって無意味だろ。 ファイル容量を40で割るとか、そんな程度で十分。
>>525 技術革新が停止した世界なら反復により最適解を求められそうな気はする。
が、現実には、新しいプログラミング言語、新しいライブラリ、新しいIDE、
新しいシステム構成が次々と出ていて、以前の最適解が次回には最適でなくなる。
VBのC/Sアプリで培ったノウハウがASP.NETのWebアプリで有効かって言うと当然無理。
まあ、大脳皮質の発達が10数年停止したCOBOLerには向いてるかもね。
>>540 新しいのがでてくると有効でなくなるのは当たり前。
でも、最適化しなおすのに何年もかかるとは思えない。
まあ、Javaは出てきてからもう7年も経つね。
「変化した場合に最適化する手段」も決めておきたいもんだ。
新しい環境に慣れるのが苦手な人(540とか)も多いみたいだし。
>>541 そこでイテレーティブな開発方法論ですよ。
ステップ数の見積もりは結構出さされるなぁ どっちかと言うと、 「納期までに割り当てられる作業量を調整するための言い訳」 だが。 結局難易度によって意味が違うから、根拠なんてないんだがな。
曖昧な見積りだって全く出さないよりまし。
結局のところステップ数は、目で見えない何らかのものを 「推測する目安」にはなり得ると思うが、 そんな数字で実績だのを評価するような運用じゃ 実態に則さないし、水増し等のひずみも出る。 そんな話じゃないのか?
実態に則した結果がでるように調節を続けるしかないんでは? それがステップ数だかファンクションポイントだか知らんが。
おまいらの会社では仕様書に文章が書いてありますか? 漏れの会社ではスクリーンショットの束を指して「仕様書」と言いますが。
画面仕様書の一部にスクリーンショットが含まれるのは不思議ではないが 何の仕様書なんだ?
549 :
仕様書無しさん :04/04/17 21:19
>547 完成してから全画面スクリーンショットとっているの?
>>547 画面を見れば判るような事は文章で書いてあります。
>>550 GUI仕様書。
左上50px 50pxに高さ36px 幅100pxでユーザ名入力のテキストボックス。
ユーザ名の位置から30pxあけて同じ高さ、幅でパスワード入力のテキストボックス。
左上100px 100pxの位置に高さ36px 幅70pxでOKボタン、
そこから20pxあけて同じ高さ、幅でキャンセルボタンがある。
見たいな感じか
552 :
仕様書無しさん :04/04/17 22:03
ソースコードが汚いだけなら追うのがしんどいだけだからまだいい。 矛盾がのこったままの仕様をもとにプログラムを組まされるのはすごい苦痛。 もう辞めたい。
画面レイアウトの仕様書として VBでコントロールを並べただけのスクリーンショットでつ。 レイアウトはわかるんだけど、ボタンとかメニューが何の処理をするかが まったく書いてないですよ?
>553 それ、仕様書じゃなくて画面イメージなのでは?
機能を練りこまずに画面イメージを先に作らせるのって どこでもあるんだ…。 うちのところも営業とかから話が来た管理職が 勝手に画面イメージをExcelで描いて客と話進めたりしやがんだよ… 無論機能を練りこんでいくとそんな雰囲気で作った画面イメージじゃ成り立たなくなって 喧々囂々…。 画面が無いと客もイメージ沸かないっていうのは分かるけど その前に「システム化したいのは現状どういう流れで処理をしている事か」 を、ちゃんと解析させろよ…。 COBOLでファイルの中身を片っ端から印刷すりゃいい頃とは 話が違うんだよ…。
>>556 練りこまなきゃいけない機能にもよるけどね。
「COBOLでファイルの中身を片っ端から印刷すりゃいい」のと
大差ないシステム欲しがってるケース多いよ。
当然業務フローがきっちりわからなきゃだめなシステムもあるだろうけど、
単純なリプレースであればフローなんて変わらない。
>>556 漏れの経験だと、気張って業務フローの分析したら、大問題発覚してシステム作る
どころじゃ無くなったっていう事例があったな。
結構でかい案件だったんで、素直に言われた事だけやってりゃ良かったってチョット
後悔したよ。
>>558 デスマっちまうよりはマシかもわからんよ
それに、いい経験できたと思うんだが・・・
でかい案件潰した責任とらされて大幅減給、とかだったら確かに悔やむ気持ちもわかる ・・・が、実際は強行してもデスマになって大損害だして、結局大幅減給な罠
561 :
仕様書無しさん :04/04/19 12:09
業務フローを書かずに、データモデルも書かずに、カーディナリティの分析もせずに基本設計ですって。 チームが20人弱いるってのに、意思疎通をどうやってはかれと。 使用の正しさをどうやって検証しろと。
成果物(作成するもの)にはすべて、 それを検証する方法が定義されている必要があるんだよねぇ 要件定義書しかり、仕様書しかり、コードしかり・・・
何気に
>>558 はいい仕事をしてるんではないかと。
564 :
仕様書無しさん :04/04/19 13:47
先輩の書いたソースみたら全くインデントされてなかったよ。 行間隔が、1〜2行開いてる。 コメント一切なし!
565 :
仕様書無しさん :04/04/19 14:02
ソフ開午後Uのアルゴリズム、 失望した。
>>565 あんたがちゃんと事前調査をしていれば
高度情報処理技術者試験を受けているはずじゃないのか?
あんな小学生でも思いつくような探索アルゴリズム。 なめてんじゃねーよ! しかも、スタック使って失敗してやがるしwww だいいち最短距離求めるために、関係のないエリヤまで全部マーキングしていくこと自体 パフォーマンスの面で問題あるだろよ。 数学的に考えるならとりあえず始点から終点まで直線引いて、 間の障害物の形状を分析するのが一番速いと思う。
一般的な経路探索法に関する知識に疎い俺が言うのもなんだが、 A* とか、そういう別の使った方がいいんでないかい? まあ、スタック使って失敗はあんまりだな。 簡単なメモリ管理すらできてないってことだよな。
>>568 お前が午前で足きり喰らったのは分かったからおちつけ
>>569 そういう、スタックで大失敗してるアフォな問題が出たんだよ。
今年のソフ開に!
お前ら自分のバグは許せても、人の失敗には粘着しそうだな(w
去年みたいにSQLバリバリならそれはそれで文句いうくせにw
SQLはプログラミング言語じゃないしなー
575 :
仕様書無しさん :04/04/19 22:27
>>574 俺的には、SQLとPerlの「プログラミング言語」度は同じくらい。
>>575 SQLはプログラミング言語じゃありません。
HTMLをプログラミング言語というのと五十歩百歩です。
PL/SQLは別。
>>576 プログラミング言語の定義って曖昧だよな。
とりあえず、おまえの定義を晒してみ。
でたな定義厨
>>577 とりあえずあらゆる問題を解くための汎用性は必要じゃない?
>>579 人間はプログラミング言語を定義できなくなりました。
かぶった
と思ったけど、よく見たらかぶってなかった。 まあいいや
SQLがプログラミング言語でないと主張する人は Prologやlispはどうなのか? 己等が見慣れないものはプログラミング言語でないとか 述べやがったら怒髪天。 # おれ的には、コンピュータになにがしかの作業をさせるための # 人工言語はなんでもプログラミング言語。おおらかに。
人間がデバッグしなきゃならないのは全部プログラミング言語。 おおらかに。
>>585 テキストに色を付けたり文字を大きくしたりして表示させる
↓
HTMLはプログラミング言語
↓
Wordもプログラミング言語
まあ待て、プログラミング言語かどうかが、そんなに大事なことか?
プログラム言語に必須の要素は以下の点だと思う。 ・変数の定義とそれにたいするread/write/演算操作ができる ・条件分岐が出来る。 ・ループ処理が出来る。 この定義に従えば、 HTMLはプログラミング言語ではない。 SQLはストアドを書けばプログラミング言語である。
ふと もしPrologで業務プログラム組んであったら即辞めるっつーか逃走するな… いやまぁ読めないわけじゃないけど…
チューリングマシンと等価な演算が実現不可能なのはプログラミング言語じゃない したがって正規表現はプログラミング言語じゃない
593 :
仕様書無しさん :04/04/20 15:18
JavaScriptは?
かなりお粗末な部類ではあるが、プログラミング言語だろう<JS
>>589 ってことは、DOSのバッチファイルも含まれそうだな
「プログラミング言語の定義」 あなたがそうだと思うものがプログラミング言語です。ただし、他人の同意を得られるとは限りません。
>596 誰か言うと思ってた。
>596 俺的には犬猫の鳴き声聞いてもそうは思わんが、 虫の鳴き声はプログラミング言語っぽいと思う。
>>587 HTMLが表示処理をしているのではない。
表示しているのはあくまでブラウザなのであり、
HTMLはどのように表示するかを指定しているだけだ。
>どのように表示するかを指定 違う。文書にどのような論理的意味が存在するかを示しているだけ。 それをどのように表示するかは、極端に言えばブラウザが好きにやっていい。
601 :
仕様書無しさん :04/04/20 22:46
>>599 恥ずかしいヤシ発見!
したり顔で「Pコマンドは改行をするコマンドだ」とか
言っちゃうんだろうな(w
>>601 もまえさんも十二分に恥ずかしいと思われ
以下このスレは恥ずかしい
>>599 を晒すスレになりました。
外の用途では使用しないように。
とくに、>599。
多数の賛同をこの提案には得られると思う。
いや、反対するのは599くらいであろう。
なす大好き。
プログラムが処理をしているのではない。 処理しているのはあくまでハードウェアなのであり、 プログラムはどのように処理するかを指定しているだけだ。
606 :
仕様書無しさん :04/04/20 23:30
デグレがでまくるソースコードだな。 なにしろデグレなんてクソみてえなプログラム見たことすらなかった からな!アフォアフォアフォ
ハードウェアが処理をしているのではない。 処理しているのはあくまで小人さんなのであり、 ハードウェアは小人さんの住処を提供しているだけだ。
[デグレ] デーモン小暮の略。 [プログレ]
なんかそんなスレどっかにあったような…… [プログレ] プロの画家にしか使うことを許されない、絶妙至極な灰色。 [Prolog]
[Prolog] デスマが始まるきっかけ。 中途半端な仕様書のこと。 [dead end]
[dead end] 死こそ解放。 [スレ違い]
[スレ違い] 自治厨の切り札 [ぬるぽ]
[ぬるぽ] 2chを覚えてしばらく経った自称中級者がやたらと使いたがる言葉。 吉野家における「つゆだく」のようなもの。 [ポインタ]
あれ?なんでここ知ったかぶり辞典になってんの?w
>>605 オマエモナw
>>603 何が「以外と多い」んだ?
[ポインタ] 科学特捜隊が使用する車両 [終了]
[終了] 自治厨の切り札 [無限ループ]
Perl で書かれた CGI が重いから、Java で似たようなサイト作ってくれって頼まれたんだが、 // なんかもう、その時点で嫌な予感がしてたんだけど。 $var_1435_1213 = '....'; エエエェェェ(;´Д`)ェェェエエエ どうも、1435 がファイル名(に対する連番)で、1213 が変数名(に対する連番)らしい。 前にこの CGI をメンテしてた人の努力の結晶っぽい後付けの仕様書がある。 この仕様書を元に一から書き直した方が早いんじゃないだろうか……。 ちなみにその人は逃げたらしい。ケシカランとか言ってたが、そりゃ逃げたくもなるだろうよ……。
>>617 Perl->Javaなら、素直に書き直せよ。
>>617 その種の命名はインテリジェントコードと呼ばれるやつだ。皮肉な名前だが
俺も「書きなおし」したほうが良いと思う。規模に左右される問題では無いな。
「書きなおし」を正式に認めさせることが出来れば。だが
ぬるぽってマ板の用語かと思ってたんだけど、 2chの他板でも通用するんだー。 へぇへぇへぇ。 マ、ム以外の板あんまりみないから…
>>621 >警備やマスコミの方々を悩ませた謎のプレート。
2ch のぬるぽスレ住人でも悩む。
何で???
ぬるぽスレなんてものがあったのか いったいどんなスレだ
実体がないから参照できない・・・と。 もまえら引き篭もってないで外に出て来い・・・と。
MS-DOSにMS-Cなんて使ってたころは、よくぬるぽに書き込んで、 終了するときに "Null pointer assignment" なんて食らってたのを思い出した。
概要設計書があまりにも「設計ごっこ」だった。 基本設計フェーズだが、最低限これで概要設計レベルだろという程度に記述してレビューしてもらった。 おっさんたちは一様に「もう詳細設計できてるんじゃないの」とか言いやがった。 あいつら設計が何をすることだと思ってるんだ。
実装も出来ない連中に、実装に何が必要かなんて理解できるわけもないさ。
>>625 どこで書いてるかわかんなくて、強引に出ない様にした事があった…
いまは怒られるからすぐにわかるが。
>>600 一応言い訳しときますが、そのへんのことは知ってますよ。
マジ、ホントだって。
「表示しているのはあくまでブラウザ」とも書いてるわけで、
そのへんをくんでくだされ。なんとか。
ですので、
>>601 みたいなことはありません。さらさないでください。
まあ、みんな揚げ足を取ってるだけだから。
631 :
仕様書無しさん :04/04/23 20:55
変数名が全部大文字でしかも必ず3文字。 読みにくいし、コメントもないから何の用途で使ってるかわからん。
632 :
仕様書無しさん :04/04/23 22:29
>>631 せめて1変数を1つの目的で使ってりゃマシなんだけどねぇ。。
複数の目的で兼用してたり、あちこちの処理で無造作に値を
変えられてると、なかなかつらいよ..._| ̄|○
TEMPとTEMP1とTEMP2とTMPとTMP1とIとIIとJが絡んだCOBOLソース。 今後の修正を任されそうになったので 「俺は『デジタルドカタ』じゃ無いんで」と言って突っ返した。 こんなシステムの責任取れるかボケ。
634 :
仕様書無しさん :04/04/24 00:55
#define const
>>635 const_cast 知らん人が書いたのかなぁ
637 :
仕様書無しさん :04/04/25 12:33
constのせいでコンパイルとおんない時に切れた人がよくやる
>637 で、後々のメンテする人がここに書き込む、と。
639 :
仕様書無しさん :04/04/25 13:06
1関数に150行以上突っ込んでるのをみると嫌になってくる。 150でも多いようなきもするがな。
640 :
仕様書無しさん :04/04/25 13:25
1関数で2000行なんて、ざらに見かけますけど(w 自分が見た最高は3000行こえてたなー。
実際に見たなかで最高は一万 聞いたなかで最高は五万
642 :
仕様書無しさん :04/04/25 13:29
643 :
仕様書無しさん :04/04/25 13:40
今時関数の行数なんてどうでもいいが、 カット&コピーだらけだったりするともう嫌。
カット&ペーストとかなしで、2万行の関数なら見たことあるよ。 ツールの吐き出したコードだけど。
645 :
仕様書無しさん :04/04/25 14:14
>>644 >ツールの吐き出したコードだけど。
それならちょっと許せるかも... ツールは馬鹿だからなっ!
だけど そのツールを作った奴のことを 私は許せない!
それと 何千行もある 関数って コンパイラが
拒否するんじゃなかったっけ? これは昔の話か?
おおらかな時代になったもんだ....
>>645 僕はJavaでメソッドの長さが65535行を超えていますとかいう
エラーを出したことがありますよ
>>642 いや、悶絶はしないけど、読みたくない。
俺の最高は、2千かな。
自分で書いたのは千行くらいだけど、書きたくないね。
修正の時大変なんだもん。
特に他人が書いたものだと(TДT)
ツールでコード生成するのは問題ないが、 GenerationGapを考えてない奴は激しく糾弾する。
649 :
仕様書無しさん :04/04/25 15:06
ツールに罪はないだろう。っつうかツールが吐いたコードに直接手を加えて コピペするのがツールの使い方を間違っているっつうか。 手を加えざるをえないならツールの罪だろうけど。
650 :
仕様書無しさん :04/04/25 15:52
HTMLは一種のフィルターだよ。
652 :
仕様書無しさん :04/04/25 16:27
>>650 あなたは正常です。
ところが世の中には642のようなコードをかくことを自慢している
勘違い野郎や自称天才プログラマーがけっこういるんだよな。
653 :
仕様書無しさん :04/04/25 16:45
このまえ「ソースコードが大きすぎます」ってエラーでちゃった。 なんでかなー?
1つの関数に何行くらいのコード書く? 漏れは100〜120位に出来るだけ抑えているが。
ものによる
>>654 100なんて長すぎるだろ
50超えたら分割すべきじゃないかと思え
>>654 この前、実測してみた。総行数四万で、
23.6だったな。
50越えたら分割ってアフォか 必要なら分割だろ
モジュールの強度と結合度の話をしてイイか?
いいんでないの
>>659 オブジェクト指向に構造化の思想はいらない。
662 :
仕様書無しさん :04/04/25 18:22
>>658 その必要性を判断する基準の中に行数も入っているという話だろ 低脳
>必要なら分割だろ 「どれくらい長過ぎる時に、分割は必要か?」って話だろーが。
>>661 「既存のものを貶めて、新しいアプローチを提唱する」というマーケティング戦略に乗せられているぞ。
オブジェクト指向は構造化の発展形だ。
換言すれば「構造化はオブジェクト指向の基礎」なんだ。
>>658 みたいな奴がこのスレを賑わすコードを大量生産してるんだろうな
頭悪そうだしw
ある行数越えたら分割なんて思考停止がこのスレのコード量産しているんだろ。 はやく気付や池沼
668 :
仕様書無しさん :04/04/25 19:02
1.重複したコードがあってはならない 2.最小限のクラスからなるべき 3.最小限のメソッドからなるべき 基本中の基本だな。
>>667 プロのアフォとお見受けしました
で、どういう基準で関数の分割の必要性を判断するんで?
強度と結合度だろ
なんでもかんでも分割ってアフォ以外の何物でもないからな。 可読性悪くなるし。 5行以内の関数、量産してるんじゃねえよ。 お前だよ、お前。引き継ぐこっちの身にもなれ。
>>668 > 1.重複したコードがあってはならない
int add(int a, int b)
この関数以外加算禁止。
おれは「コードが明瞭に頭の中にイメージ出来るようになったら分割を終了しろ」 と教わったが
675 :
仕様書無しさん :04/04/25 19:49
>>674 よーし、昼飯はスパゲッティだ!
分割終了。
Aという処理とBという処理が必ずペアで行われる場合に、ソースが長くなるからっつって Aを定義し、Bを定義し、「A→B」と実行するCを定義するのはナンセンスだと思う。 単体でA、Bを呼び出す事が今後の変更などで想定されるとかならばさておきな。
俺の場合は、具体的な処理がイメージできる簡潔な名前を関数に 付けられるかどうかを一つの基準にしてるな。 長すぎる関数は、機能が詰め込まれ過ぎで名前が抽象的になりすぎる。 短すぎる関数は、機能が小さすぎて意味のある名前をつけられない。
>>677 そうすると
初期処理()
メイン処理()
終了処理()
つう分け方もナンセンスになってしまうのか?
> 長すぎる関数は、機能が詰め込まれ過ぎで名前が抽象的になりすぎる。 こっちは同意だが > 短すぎる関数は、機能が小さすぎて意味のある名前をつけられない。 そんなことないだろ 機能別に分割した結果、関数内の処理がほんのわずかになることは 当然ありうるし、関数が小さいから悪いということにはならない
なにかしら値を渡さないならそれでも良いかと
683 :
仕様書無しさん :04/04/25 21:05
メソッドのコードの行数が少ない設計だと、
圧縮のための圧縮が起こり、コミュニケーションが損なわれてしまう。
>>680 大概は実装上で分ける意味があるわけだが、それがないならナンセンス。
>>677 Chain of Responsibility
俺は20行越えたら長いと感じる。 オブジェクト指向だと委譲メソッドが増えるからなおさら。
20行は、さすがに短すぎだと思う。 それとも、かなーり上位のコードか?
動きをトレースする際に、「いくつの状態」を「何ステップに渡って」覚えておかなければならないか、 が読みやすさのキーだと思われ。 例えば↓の例ではAは約千行、Bは高々十数行だが、どちらがより読みやすいと思う? A( ) { func001( fp ); func002( fp ); : func999( fp ); } B( ) { int hoge = hoge_init( ); if( hoge>0 ){ int moge = moge_init(); if( moge>0 ){ sage(); moge_term(); } hoge_term(); } }
>>686 C 屋や関数呼び出しのコストをケチりたい C++ 屋ならわからんでもないが
それ以外では最近の主流はコメントのように読めるプログラミングだぞ。
すいませんすいません。 仕様書どおりに作ったら1関数1000行くらいになりそうです。 仕様書上でGOTOっぽい制御が容赦なく行われており、 ついでに設計者は逃げて現場にいません。 どうしたらいいですか!?
>>689 「リーダーに相談する」
「可能なら勝手に仕様書を書きなおす」
のどちらかだなぁ。ゴリオシされるようなら逃げるのが吉
>689 首吊り用の縄と練炭が欲しければ用意してやるよ。
>>689 関数単位の処理まで他人が設計するような仕事のスタイルがダメダメ
普通、関数は処理内容で分割するだろ・・・ 一定行数越えたら分割って、あほか? 分割するのは必要があって分割するのであって、分割する場所を わざわざ探して、無理矢理一箇所でしか使われないような短い関数 大量に作る必要なんか全く無い。
>>693 基本的には間違ってはいないが。
あなたは、少し上に書かれている「強度と結合度」について理解したほうがイイな
>>694 ああ、お前、そんなのまだ信じてるんだ。
行数が100とか20とかで長いなんて・・・ よほど簡単な仕事しかしてないんですねぇ。うらやましい。
20は短すぎ。 100ぐらいで、「ああ、整理したいなあ」と思い出す。 200を超えると、「何が何でも、整理しなくては!」と切実に思う。 でも、めんどくさいから、やんない。
「100が長い」のは普通だなあ
「20が長い」という世界は遭遇したこと無いけど
>>696 自分の経験年数さらしてみなさい
まだPG暦5年くらい。 ・・・いや、100が長いってマジで言ってる? 俺が作った画像処理用の関数は1000行超えてるが、 ここまでくれば確かに長いとは思う。でも、分割したいとは思わない。 ・・・長いかどうはか主観が入るとしても、長いから分割しよう、てのは ちょっとどうかと思うけどねぇ。
たった五年か(プ
五年もやってそれか(プ
もう煽りあいでわけわかめ
696 次に触る人のことも考えな。 読むのが面倒なんだよ。
「読めない」んじゃなくて「読みたくない」んだが。 日本語読む能力のない奴は、人間やめろ。
>>699 「100が長い」というのは真面目に言っているよ。「主観が入る」ってのは確かだけど、(一般論みたいだが)
「自分が作るときに把握できる長さの上限」は「他者の作成したものの把握可能な長さの上限」
というのは違うんだ。当然、前者は後者より長い。
自分の作ったプログラムを、その寿命が終わるまで保守するというのは通常、現実的でないのだから、
長さというのは、後者に合わせなくてはならない。
#例外はある。情報的強度を持つ関数だ
>長いから分割しよう、てのはちょっとどうかと思うけどねぇ。
書いてしまったものを(再コード化の手間を省くために)コードを物理的に分割し、論理的に複数の関数にするという作業は、
私も支持しない。
#本当は行数だけを判断基準にすることは誤りだ。「識別子の種類数」、「分岐の(ネストの)数」、「変数間の依存関係」
#等々のいろいろな判断基準がある。
経験年数をさらしてくれたので、自分もさらしておこう。25年だ
>>705 「読めない」事を「読みたくない」と脳内変換して
自己満足に浸る奴は、さっさと首吊って死ね。
>>699 長いから分割しよう、じゃなくて、長くならないように書くべきだ、と思う。
1000 行越える前に、自分のコードに疑問持たなかったの?
>>707 > 読むのが面倒なんだよ。
これ、どう読んだら「読めない」になるんだ?
建設的な議論じゃなくて煽り合いがしたいんなら他のところ行ってくれ。
>>708 >長いから分割しよう、じゃなくて、長くならないように書くべきだ
俺もこの意見には賛成だな。
>>699 時間のあるときに自分の書いたコードじっくり見直してみてはどうかな?
>706 若輩者あいてにマジメにレスして頂いてどうもです。 100行が長いか短いか、は、まあこの際置いておいて。、 他人の見やすいソース≠関数を細分化したソース、と考えるよ俺は。 確かに他人の作ったソースは読みにくいけど、それは関数の長さとは 直結しないと思うんだけどね。 いくら関数によって細かい処理がブラックボックス化されたとしたって、 結局その中身まできっちりチェックしなきゃまともにメンテできないわけだし、 その際に細かい単位であっちこっちに飛ばされる方がストレスが溜まるし、 その分け方如何で可読性は180°変わると思う。 短いほうがわかりやすいに決まっている。 でも、「わかりやすくする」ために短くするのならいいけど、どうも話の流れは 「短くする」ことが目的になってるようで、それは違うだろと。
>708、709 んー、まあその関数は、インラインアセンブラ使って速度重視で書いてるって いう理由もあったりするけど。 関数内で、 ・テーブルや必要情報の初期化 横一行の処理 ・横先頭の処理 ・横中間の処理 ・横終端の処理 これが縦の先頭、中間、終端と続く。 これらはすべて、微妙に違う処理になるのでまとめる事は不可。 先頭の初期化時に取得する情報は膨大で、引数で渡すのもナンセンス。 この関数でしか使わない情報をグローバル変数にするようなアホもできない。 長いことは認める。でも、必要だから長くなっているわけで、 短くすることを目的にしようとはどうしても思えない。 読みにくい分、コメント等をきっちり書いてカバーしてるつもりだよ。
>>708 昼休みに暇な奴だな。
飯食ったか?ちゃんとカルシウム摂れよ(プゲラ
俺、まだ、昼休みもらってない。
>>711 >・テーブルや必要情報の初期化
>横一行の処理
俺だったらこの辺は別関数に分けると思う。
もちろん、極限まで速度を重視しなければならない状況ならそうしない可能性はある。
>先頭の初期化時に取得する情報は膨大で、引数で渡すのもナンセンス。
構造体に突っ込んで参照渡しじゃダメ?
冗長な関数はアルゴリズムの不適合かあるいは不親切なコメントアウトかのいづれかであるかと。
>714 いいのでは?こんな感じになるんだろうね。 func(){ Init(Rec); Y1X1(Rec); Y1X2(Rec); Y1X3(Rec); Y2X1(Rec); Y2X2(Rec); Y2X3(Rec); Y3X1(Rec); Y3X2(Rec); Y3X3(Rec); } 実際はもうすこしごちゃごちゃすると思うけど。 そりゃ、この関数内はスッキリするんだろうけど、プログラム全体で見て 読みやすくなってるとは思えない、という話。
長い短いで関数分けする香具師はアフォということで
書き直しは認められませんですた_| ̄|○
イ`
>>714 >俺だったらこの辺は別関数に分けると思う。
>
>もちろん、極限まで速度を重視しなければならない状況ならそうしない可能性はある。
可読性を考えたら速度重視のコード展開でも、
インライン展開やマクロやファイルのインクルードを組み合わせれば、
同じ動作を行うコードの分割は可能なはず。
関数化するのは、流用性と可読性の為の手法の1つなのだから、
言語に依存しない構造化(ファイル分割等)は有用だと思うのだが。
速度重視を言い訳にしてもC言語で1000行もの関数を書くのは正気じゃないぞ
>>714 >俺だったらこの辺は別関数に分けると思う。
>
>もちろん、極限まで速度を重視しなければならない状況ならそうしない可能性はある。
可読性を考えたら速度重視のコード展開でも、
インライン展開やマクロやファイルのインクルードを組み合わせれば、
同じ動作を行うコードの分割は可能なはず。
関数化するのは、流用性と可読性の為の手法の1つなのだから、
言語に依存しない構造化(ファイル分割等)は有用だと思うのだが。
速度重視を言い訳にしてもC言語で1000行もの関数を書くのは正気じゃないぞ
熱いな
これだけは言える。 業務ロジック部分において 何でこんな書き方なの、という問に対する返答の一発目が 「この方が動作が速いんです」 だったソースの9割はゴミ。
ちょっと待て。 なぜC言語で記述することが前提で語るんだ?? 結局単一環境・単一言語の範囲でしか語れない ヴァカかよ。COBOLerと同レベルだな(pu
WindowsSDK時代(非MFC)のウィンドウプロシージャは平気で数百行に なってたと思うんだけど、たとえばあんな感じのswitch/caseとかで、 構造的かつ論理的に明確な形で長いのは認めてもいいんじゃあないの? つか、短くても読みにくいコードは読みにくいんだよ!
速さは定量的に検証されていなければならない。
すいませんすいません。 結局件のC言語のソースは800行になりました。 一つの処理呼び出しでCSV形式のファイルを出力するんですが、 その制御とか項目が微妙に似ていたり、違ったりといった感じで上手く関数分割できません。 (自分も無能な末端のコーダなんで偉そうなことはいえませんが) 基本設計はCobolerで詳細設計はVBerだそうです。 早く逃げたい! おまけ その仕様書の一部 A項目=0でB項目=0の時、””を編集する。 A項目=0でB項目≠0の時、””を編集する。 A項目≠0でB項目=0の時、””を編集する。 A項目≠0でB項目≠0の時、””を編集する。
VBerって「ぶいばー」って読めばええ?
>>699 自分は、一つの関数が200行超えた時点で、長さにヤバさを感じる。
500行超えるようだったら、まず最初から構造を見直す。
1000行になる前に、そのコードは絶対破棄する。
>>728 大騒ぎしたわりにはあれだな。0一個足りなくね?
Perlだと80行で書けたりしない?
すいませんすいません。 PerlとかVBScript、PL/SQLみたいなもう少し使い易い言語なら半分位で済んだかも知れませんが、 何せC言語は慣れてないもので…。 でもDBのカラム数が300オーバーとか数値で扱えばいい項目でも何でもかんでも文字列で取ってたりするんで、 あんま変わらないかもしれません。 更におまけ DBの列名 生年月日 → UmareDate ユーザ名 → UserIDName 後、KubunとKbunとKbnが混在してたりして…
>729 ビーバー
ISer は?
>>716 既に何人かにきつく言われてるとこ悪いが
func(){
Init(Rec);
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j)
Y[i]X[j](Rec);
}
こんな感じにできたらいいなあ、
とか思わないのかなあ?
(上記のままだと駄目かもだけど…)
>738 Y,X の初期化処理を書くのに、結局>716と同じ位の行数がかさむ悪寒。 それに Y[i]X[j]( Rec ) でどの関数が呼ばれるか判り辛くなるので、 漏れは>716のままが良いと思う。 あと>716自身は読みやすくならんと述べているが、それは Y1X1〜Y3X3 の中身の 書き方次第だと思われ。 例えば↓のような書き方は最悪。 ・統一規則で命名されてない、別々のファイルで定義する。 ・Recを延々とバケツリレーした挙句、最深部でメンバの値をこっそり変える。 ・const を適切に使用しない。
まだ続いてたのか。 ちなみに、記述言語はDelphi。 うーん、まあ、きっと俺の関数の書き方には問題があるんだろうね。 Delphiだけどソース出すから。どうすりゃいいか考えてみてよ。
興味ないからイラネ
Delphiはよめねーなー
>>742 インラインアセンブラの入ってるようなソースを持ち出してくるとは、卑怯なり。
えー、711でもそう言ってるし・・・
話はがらりと変わるが、さっき後輩のPG読んだら、変数がローマ字だったよ。 こんな感じ、int kotae; とか、int adoresu; とか泣けてきたよ。 *)実際のPGはCじゃないので
adoresuはちょっと泣けるがkotaeとかは時々やっちゃったりするなぁ。 無理やり英語にすると混乱してくる。
>>742 のソース・・・
>>716 の形式でまとめられている方が
死ぬほどコード追っかけるのが楽だと思う俺は5年目では失格でしょうか?
引き継いだとしたら、できれば触りたくない関数になるよ
750 :
仕様書無しさん :04/04/27 13:31
保守age
>742 インラインアセンブラで書いてる部分だけ切り出して別関数にするくらいしか思いつかんな。 後は緑・赤・青の3要素の処理を関数化する(オフセットだけの問題だからまとまる) とかかねえ。
delphi じゃ評価しようがないが、取り敢えず
>>711 >コメント等をきっちり書いてカバーしてるつもりだよ。
コードを見れば判るような無駄なコメントは
書かない方がマシ。
>752 そんなに無駄なコメントあるか? 俺にとって無駄なコメントって、 i = a; // iに代入 こういうのなんだが・・・
行数の65%がアセンブラじゃないか >まあその関数は、インラインアセンブラ使って速度重視で書いてる 「アセンブラをdelphiで包んでる」と表現した方が正しいと思うぞ。 ところで実感として、すべてdelphiで書いても速度は120%くらいにしかならないと思うんだけど、どう思う?
>>753 >XOR ebx,ebx // 初期化
とかかな?
まあ、神経質な奴は気になるんだろう。
>752は、無駄なコメントを省いてるつもりで必要なコメントを書いていないに一票
アセンブラ以外は全部コメント
>>740 てゆーか、500行超えたことないし。
おそらく、今まで300行を超えた関数は書いたことがない。
>>742 速いとか遅いとかいう以前に、BiLinearの拡縮(と平行移動?)で1KLはどーかと思うぞ。
>758 ケースバイケースだろ。威張るところじゃないぞ。
dictionary関数の乱用をみたときにやめようと思った。
>759 ほら・・・こういうふうに、速度重視って言ってるのに、それよりも長さにこだわるバカがいるから 行数の話になると荒れるんだよなぁ
>754 まったく同じ処理をアセンブラ使わずに書いたソースと比べると、 拡大・縮小とも、倍近い速度で処理できるようになってる。 Delphiの最適化がしょぼいのか、俺のソースがしょぼいのかは分からないけど。 まあ、もっと高速にできる人もいるだろうけど、MMXとか使わない限り 俺にはこれが限界・・・ あと、そのアセンブラで書いてないソースは450行くらい。
高速化を考えている人はオブジェクト化とかモジュール化とかは考えないの?
>>764 場合による。限界イッパイイッパイまで最適化するならモジュール化しない。
というより、モジュール化して動くものを作った後、高速化しながらほどいていく感じ。
高速化を追求してくと、ループを展開したりとかって話にまでなるしね。 呼び出しのコストを考えれば、わざわざやるもんでもないだろう。
関数名で1行、関数の中括弧開いて1行。閉じて1行。 ローカル変数の宣言で3行(ぐらい)。 変数宣言とコードの間に1行。 forループがあったりして、開いて閉じて、合計2行 if文があって、開いて閉じて、elseの分も開いて閉じて、合計4行 return に1行。 残り6行にコードを詰め込むのか……俺には20行は無理すぎる……orz
行数稼ごうと思うと、短いif文をelseまで含めて一行で書いたりするんだろうな。 あれ、見にくいから嫌いなんだけど。
>>768 複数行のものを一行にまとめたら行数稼げませんよ?
実際に辞めた奴居ないだろ?
771 :
仕様書無しさん :04/04/28 20:22
保守age
772 :
仕様書無しさん :04/04/29 09:43
1000行くらいのプログラムだけど そのうちの800行くらいがコメント ソースを修正するときに、古いところは、コメントで残すきまりなので 残骸のなかに、本物のコードが少しずつのこってる めちゃ読みづらい
コボリッシュだな
774 :
仕様書無しさん :04/04/29 10:54
775 :
仕様書無しさん :04/04/29 10:56
>>772 そんなのコメントだけ取り除くスクリプト作れば良いだけの話だろ?
逆にコメントに対して「読みづらい」と文句垂れてる
>>772 の方が
以上だと思うけどね。
コメントは残す決まり、という文が読めないらしいな・・・文盲め 貴様みたいな無職には、世の中のしがらみなんぞ理解できないんだろうよ
>>776 「古いコードをコメントとして残す決まり」を、世の中のしがらみ
と表現し、(必要悪の様に)しかたの無いことと思ってはいけない
そんな決まりを決めた奴が愚かであるだけだろ
まず、規約を定期的に改定するというメカニズムを作れ
>>776 みたいに何も考えずに人に言われた通りの仕事するだけの馬鹿こそ
社会の最大の癌
まぁ学生のうちはそうやっていきがってるのが仕事だ。
もしくはこの春入社した新人なのかもな。 それが当然と思ってないからこのスレに書き込んでる、と言う事も理解できない 低脳の新人なんて、先が知れてるが。 まあ、許せなきゃ辞めればいいし、そのコード規約を改定できるような権力を持てるまで 何年かかるかしらんががんばるのもいいんじゃないの?
能力がない奴ほど、環境のせいにしたがる。 権力もてるまでなにも努力しなかった奴が、いつのまにか権力を持つようになって・・・ まあ流転するってわけだよ。
コメントは日記ではない。
実際に規約を変えるのは結構難しかったりするけどなー 特に、過去の問題解決のために導入された規則だと。
問題解決のメリットと他の弊害のデメリットを比較検討して結論を 出せばいいだけのこと
>775 誤変換してるお前さんのほうが異常・・つーか、阿呆っぽい
786 :
仕様書無しさん :04/04/29 16:01
>775 を弁護するとだ、読むときだけスクリプト通したテンポラリを読めと 言ってるんだと思うぞ。 というか漏れもよくやる。
787 :
仕様書無しさん :04/04/29 16:07
やめた先輩のお下がりのPC使ってるんですが、 「きた」が「キタ━━━━(゚∀゚)━━━━!!」に変換されて困ります
>784 組織によってはきっちり提案書作って上申しても 「これまでの方法で問題なかったんだから このままで良いじゃん」 で潰されることもある
使えない新人がいきがってるスレはここですか?
792 :
仕様書無しさん :04/04/29 19:06
今会社で新人君達にCを教えてるのですが、 クイックソートのコードを作らせたら、 ソースファイル名がkuikkusouto.cの新人君がいました。 みんな四大卒なんですが...
君を笑わせたかったのだろう。
794 :
仕様書無しさん :04/04/29 19:31
hogehoge01(int hoge01,int hoge02){ return(hogehoge02(hoge02,hoge02)); }
コメント欄に書く履歴は日記としても読めるものを書け
中卒に失礼だろ
つづりがわからない、て事ならわかる。 ただ、それを調べるんじゃなくてローマ字で書いちゃう思考の持ち主って時点で そいつがどう料理しても使えない人間だってことは確定なんだよなー。 ・・・まさか、日本語だとは思ってないよな? soutoってあたり、ちょっと危険なにほひもするが・・・
クイック掃討
戦時中に、戦艦主砲の弾道計算をすばやく行うために 九一九総統が考案した手法。
'右クイックの場合の処理 '左クイックの場合の処理 'ダブルクイックの場合の処理
>806 EyeToyで肩を動かして操作するUIのソースだろw
>809 漏れが見た時点でトップにヒットしたとこは誤用ではなさげだが 2件目がポカーン なんだ、「開来ます」って。 いやしかし、もしコンパイラに意志があったら、 「あ〜あ、またretrunだとよ……typo何だろうけどなぁ、こいつほんと進歩ねーなー とりあえず「未定義の識別子です」、と。さてさてこのファイルだけで後何個 エラーがあるんだか。ハァ ヤッテランネ」 と、同じようなことを考えるかもなぁ、と言ってみるテスト。
>810 その2件目の、A-1図を見てみろ。 さらに進化してワブルクイックになってるぞ。
>>809 ハードデスク ってのもある。固い机?フロッピデスク…
Windows判とかフォレダとか、このページを読めと言われる人たちが不憫だ
不思議なのは、すべてが「クイック」ではなく、「クリック」という部分もあることだ。 『間違って』クリックと打ってしまったのか???
そこでディスクトップですよ
スキャン+OCRなのか、音声認識入力なのか、口述筆記なのか。
URLが me-ru/meru2.htm なんだが、誰も突っ込まないのか??
818 :
仕様書無しさん :04/05/03 12:25
インストゥールも忘れずに
インストロールしますた
820 :
仕様書無しさん :04/05/03 17:43
リーダが決めたCの関数の戻り値の決まり。 「エラー値は "INVALID" という文字列を返すこととする」 一同、「ハァ?」です。 #つまり作成する関数の戻り値は文字列型で返される文字列で判定を行えと。
知障の上司の下で働くとこっちまで知障になりそうな勢いになるのは仕様ですか?
当然のごとく、autoな配列のポインタを返すんですねセンセイ
824 :
仕様書無しさん :04/05/03 18:33
>>820 推察するに、エラー値の自由度が最大であらゆる理由を含めることが可能になる
からなのではないか?またデバッグ時に一目瞭然でエラーであることがわかるから
ではないか?
使用している言語によってはエラー判定のための比較はそれほど大変ではないから。
825 :
仕様書無しさん :04/05/03 18:34
>824 あちゃ。Cなのね。新でくる。
ちがうよ。 きっとこうするんだ。 : : return INVALID; }
ポイント:INVALIDはグローバル変数
#define INVALID 71 かな?
829 :
仕様書無しさん :04/05/03 18:45
グローバルにエラー文字列テーブルがあって、
それのポインタ返すんだよな?
はっきりいってウざい仕様だ、
>>820 のリーダは
「ケツに牛乳3g流し込んだまま花の応援団ポーズでコンクリ詰めにし洞爺湖の湖岸に半分沈める」
刑とします
>>ダブルクイック 「受信トイレ」を思い出したw
832 :
仕様書無しさん :04/05/03 19:19
このスレ、読んでると頭痛くなルネ。 僕の見つけたソース。 #define R 0 #define G 1 #define B 2 for(int i = R; i <= B; i++) ... 普通ですか?
int 異常すぎ
834 :
仕様書無しさん :04/05/03 19:55
事典のプログラム作るときに、関数名のprefixを Encyclopediaにするのは長くてやだなーと思って、 Zitenにした俺のソースコードは、後に笑われますか?
俺は確実に笑う。 Enc でいいじゃん
836 :
仕様書無しさん :04/05/03 20:10
>>835 残念ながらEncは別に使われていたのですよ。
Encyclopediaって、途中で切りにくいのよね・・・
Ped にしよう。PedSearch(), PedGet(), PedInsert()....
Encyclopediaはクラスや名前空間名じゃダメ?
839 :
仕様書無しさん :04/05/03 20:38
>834 語源的には 「encyclo」+「pedia」 EncPed ....わかりにくいな、忘れてくれ
>>834 COBOLerなら
kansu+数字でいいじゃん、悩むことはないじゃん。
とさらっと言ってくれそうだ。
兄さま、ずぃてんでぃすの
グボオォン
>>839 「通報しますた」とか「ペド野郎逝ってよし」てな反応を期待してたんだよぅ
>847 関数名にハァハァしてしまいましたが何か。
>834 辞典(Dictionary)ではなく、事典(Encyclopedia)なんですか?
ペドのネタが分からない俺は、プラグラマとして失格でしょうか・・・
>851 むしろ正常。
>>850 辞典(Dictionary)ではなく、事典(Encyclopedia)です。
ゲームの中に出てくるとある要素の一覧表示だったのですよ。
クラス的には Dictionary でいいじゃん。広義には Encyclopedia も含むし。 辞典と事典の違いはデータ側の問題で、プログラム側に違いはないだろ。
俺も賛成。 事典と辞典って、(見出し語, データ構造)の組というのは同じで、 事典のほうがデータ構造がリッチだというくらいにしか認識していない。 ポインタの型で分けるとか。
辞典と事典を一緒にするのは違和感あるなあ。 収録されていると期待される内容が全然違う。
ふむ、ということは"内容"を別クラスにすれば解決ですね。
DictionaryもEncyclopediaも連想配列のサブクラスだから似たようなもんだ
ごめん、辞典と辞書って何がどう違うの?
>859 ぐ ぐ れ 。
>>859 辞書で調べろ。
もっと詳しく知りたかったら、辞典で調べろ。
#「辞書」と「辞典」を調べても、大差ないことしか
#書いてないと思うが
辞典と事典が共通かどうかはおいといて、 このスレ的には「Encyclopedia」を表すにふさわしい 略語を見つける事はできなかったわけですな。
なぜ略語にしなければいけないかがワカラン
Encyclopediaがそのまますべての関数についている 事典ライブラリは嫌だな
俺だったらeccpにしちゃうな>Encyclopedia 略称にしちゃった時点でどうせノーヒントでは読めないんだし。 だったら強く発音する子音(と母音)を並べるのが一番いい気がする。
866 :
仕様書無しさん :04/05/04 18:58
EccpPut() エククププット ガッチャン語でレビュー
867 :
仕様書無しさん :04/05/04 19:48
5文字超えたあたりで変数eに代入して使うんだからどうでもいい派
こんどはマジレス。 事典に名前を付けてしまって、(e.g. GamePedia) それの略称を接頭辞にするのはどうだろう。(GPxxx())
>>832 あー、初心者時代にはそんな感じのことやってた。
enumとかtypedefとかの意義が分かってなかった頃だな。
しかし実際、きれいにforeach風なことを書くにはどうする?
>868 賛成
>>869 うーん。cにはenumの「次の列挙値」を取得する演算がないからねぇ
俺が書くなら
foo( RED, ・・・ );
foo( GREEN, ・・・ );
foo( BLUE, ・・・ );
みたいに、三回の関数参照の連接となりそうだ
おそらくRGBは配列になっているでしょうからXtNumberみたいなマクロを使う 方法もあるんじゃないかと。
>>871 C++ならenum型の演算子オーバーロードが出来る。
++とか--とかオーバーロードしよう。
>>872 XtNumber()がわかる人なんかどれだけいるのか?わら。
# うに板ならわかる人も多そうだけど。
>>873 最初と最後の値はどうしますか?
for (e=RED ; e!=BLUE ; ++e)
foo(e,...);
なんかにしてみたら、
>>871 よりも読醜くなってるよね。
ボクなら、3個の要素の配列を用意してループするけど...
>>875 すなおにそれっぽい関数か定数を作る。
for (e=ColorBegin(); e<ColorEnd(); ++e) {
//...
}
しかしenumがスコープを作らない(classやstructみたいに識別子が閉じない)のは
困りもんだよな。
(真面目に言うとenumの演算子オーバーロードはやめたほうがいいと思う)
漏れが思いつくのは foo( Rの情報を所有するbitmapなインターフェイスを持つクラス ); foo( Gの情報を所有するbitmapなインターフェイスを持つクラス ); foo( Bの情報を所有するbitmapなインターフェイスを持つクラス ); とするか fooR( ... ); fooG( ... ); fooB( ... ); とするか enum PrimaryColor{red,green,blue}; int PrimaryColorTable[]={red,green,blue}; でテーブルを使ったforループだな。
Cでコード書くなら enum { ColorR, ColorG, ColorB, RGBMAX = ColorB }; for (i = 0; i < RGBMAX; i++) { // } か?
enumの列挙値として最大値を入れてしまうかどうか、未だに悩む。 その型の取りうる値としては不正だけども、 入れてしまわないとその値を確実に取得する方法が他に無い。
>>879 その場合は i<=RGBMAX ではないか?
enum {
ColorR,
ColorG,
ColorB,
ColorEnd
};
for (i = 0; i < ColorEnd; i++) {
//
}
最初のやつを明示的に0にしないと不安が不安が不安が
enumの最初の値って、0に保証されてなかったっけ?
C++っぽくしてみた。かつ無遠慮な演算子オーバーロードはやめる方向で。 namespace color { enum primary {Red,Green,Blue}; primary begin(void); primary end(void); primary next(primary e); } // namespace color for (color::primary e=color::begin() ; e!=color::end() ; e=color::next(e)) foo(e,...)
そういうコードを引き継いだ香具師がまた辞めようと思うわけですね
独断と偏見で書くが、 この手の問題にイテレータパターンを使おうとする奴は病気だぞ
enumがintサイズだという仮定のほうが問題だな
この例では3つしかないからint以下なのは確実じゃん。
enumって、省略したらint型じゃなかったっけ?
>>890 省略って指定できるんだっけ?
C++ではうまく収まる最少の型になってくれるので、intサイズを越える定数を
列挙子に付けることが可能。ただし符号付き型にしかならない。
892 :
仕様書無しさん :04/05/05 15:22
>>890 ARM-C だと最低サイズになっちゃうよ。
例えば255までしか規定されてないと unsigned char になっちゃう。
まぁ、値で問題になるのは ColorEnd だけなんだろうから、intにキャストしちゃえばいいのでは?
勉強が必要な奴は結構いるようだねえ・・・ intにキャストするなんてバカっぽいことはしないほうがいいと思うよ
>>893 なんでしないといけない?
int未満の整数型は必ずintに格上げされて演算されるのだが。
(C++の型一致チェックを除く)
不要なところでキャストしないのいいなぁ うちの規約だと、型は全部明示的に変更する、ってルールがあるから キャストしないといけないんだよな
>>896 Base* p = static_cast<Base*>(new Derived);
int a = static_cast<int>('A');
とか書くのかな?
そんなルールに何の利点があるの?
>>896 馬鹿は規約を決めないで欲しいよね。でも馬鹿ほど規約を決めたがるんだよな。
(void)(int)(a = (int)((int)(char)b + (int)(char)c + (int)1));
(void)(int)printf((const char*)"%d\n", (int)a);
なかなか楽しそうだ。
('A');// マンドクセ
('A`)
(;;)
(1)
さすがはこの会社辞めようと思ったソースコードスレの住人。 笑えるコード書くね。
enumはint型として扱って問題ないよね?
>>904 enum {
a,
b = LONG_MAX
};
for (int i=0; i<=b; i++) {
//...
}
>>892 仕様の話をするのに今さらARMを持ち出さないようにな。わら。
# すばらしい本だとは思うけどね。今読んでも楽しめるし。
>>887 どんな病気だと思うのか、なぜなのか、言ってくれ。
外部イテレータか内部イテレータかでも話が違うような気もする。
>>906 CPUのARM向けのCコンパイラじゃないかなあ? C++って書いてないし。
unsignedになるのは規格から外れていると重う。
>>908 いいみたい。
ISO/IEC 9899:1999 6.7.2.2.4
Each enumerated type shall be compatible with char, a signed integer type, or an
unsigned integer type. The choice of type is implementation-defined,108) but shall be
capable of representing the values of all the members of the enumeration. The
enumerated type is incomplete until after the } that terminates the list of enumerator
declarations.
>>908 んだ。
携帯のシュミレータ(VC++)→実機移行で知った。
ずっと typedef int enum だと思ってたので新鮮だったの。
codewarriorは小さいサイズにしたと思う
むかしC++でenumがunsignedにならなくて困った覚えあり。 C++はだめなのか、自分が間抜けなのか?
>>909 それはいわゆるC99だが、組み込み用Cコンパイラがもう対応しているものなのか。
たぶんそうではないような気が。
914 :
シス屋さん ◆kKvCN0tjXE :04/05/06 23:14
後輩が1ファイル2万行1メガバイツのソースと格闘中に見つけたフラグ。(ドキュメントなし) ガ マ ン フ ラ グ なんだよそりゃ。_| ̄|○ このフラグがTRUEになるとステータスを出力することができるらしい。 FALSEのときは出力をガマンしているということなのだろう。
_ト ̄|○ もう出ちゃいそうだよ... ガマンフラグ=FALSE; // まだイッちゃダメ!
>>914 >>ガマンフラグ
爆笑!
ひさしぶりに笑わせていただきました。
ていうかそのソース書いたぷろぐらま、変ななセンス持ってるんじゃないの?
それが吉となるか凶となるか・・
こりゃUwaRite以来のヒットか?w
まあ、iだのjだのkよりましか。コメント付いてりゃ。 結構わかりやすいし(w
ハライテェ
>914 きっと元ソース書いた香具師も何かを必死にガマンしてたんだよ。 まぁなんだ、機能不全家庭で育った子供は機能不全家庭を作りがちだとかいうあれだよ。
GamenFlag のスペルミスじゃないのか?
ステータスの出力制御ということだから 画面フラグという可能性は低いかと。 つーか、ガマンフラグ面白すぎ。 ガッチャンかよ、ネタに続く面白さと認定
ステータスを画面に出力する時、画面が使用可能か否かの判定に使用する
よって
>>923
>923、925 なんつうか、リアルでも周りが爆笑してる時に一人で冷静に つまらないツッコミいれて場を白けさせるタイプ?
>>926 はその場の空気でどんな悪いことでもしてしまうタイプだな
>927はいきなり見当違いな事を言い出して周りを混乱させるタイプだな
>>928 は普段から「唐突に関係の無い話を持ち出さないこと」とか言って嫌われるタイプだな
俺のケツ毛は剛毛なタイプだな
>>932 はしらけかけた雰囲気の中で最高のネタを披露して爆笑を誘うタイプだな
そして俺が話を断ち切るタイプか。 もまえらいい加減に汁
だめだこりゃ。 次いってみよー
漏れも「ガマンフラグ」使おうかな?(w
if ( GamanFlag == 0 ) exit(1);
ヽ(`Д´)ノ
>>940 おれは本当に見たことが何度かある。
とあるプロジェクトでは全てのプログラムがインクルードするファイルに書いてあった
//共通に使えるコードはライブラリにした #include <library.c>
実体のinclude自体はライブラリの製作でstaticな関数にしたいけど ファイルは分けたいって場合に使わない?
>>947 >実体のinclude自体は
何が言いたいか解らないのは漏れだけか?
関数の宣言だけでなく定義が入ってる奴って事で.cのinclude
ちゃんとmakefile使えよ
>>951 解決するのか?
static関数しかないソースファイル…
むしろ、static にするなら別ファイルに分ける意味ないだろ。
>>947 理解できない。
ファイルを分けたいってコトは、多分再利用したいってコトなんだろうけど、
それなら static にしないで util.[ch] にでもブチ込め。
C ならマクロにするという手もある。
1.関数定義だけヘッダに書いて、include 2.本体は別compileしてあとでリンク が定石だと思っていたんだが… ちがうのか?
つうか、そんな大量のstatic関数ができる時点で設計に問題があると気付け。
>>956 そのソースファイル内でしか参照されない関数は全部staticにしていますが何か?
>>955 × 関数定義
○ 関数宣言
本体と言ってるのが関数定義だな。
(´・ω・`)ショボーン 確かCで頑張って多態してるソースで実装毎にファイルを分けてて、 全実装で共通のオブジェクト生成関数を定義するファイルから それらのファイルをincludeしてた。 多分各実装固有のオブジェクト生成関数をexportしたくなかったんだと思うけど、 書いたのは大分前の話なので細かい所は覚えてない・・・。 他にも似たような事やってるソースをどっかで見たと思うんだけどなぁ。
そろそろ次スレか?
>>959 ghostscript(freeなPostscriptクローン)ってなんかそんな感じじゃなかった?
プリンタの種別ごとにソースが分かれてて#includeしてた気が。
わざわざ今になって調べんのマンドクセけど。
一般的だとまで言うつもりは無いが、ファイル分割するような内容でかつ static 関数にしたい、 という場面が全く無いわけじゃない。 漏れの経験の範囲では、Linux のカーネルドライバを書いたときとか。
static inline int log2(int arg) { __asm { bsr eax, arg; mov arg, eax; } return arg; } こんなのが詰まった misc.h を書いてる (CPU は x86) けど こーゆーの見ると会社辞めたくなったりする?
VC++で作成されたMFCアプリなんだけど ダイアログ上にEditBoxやらComboBoxが200個近くあって それぞれ変数名がバラバラで初期化タイミングも統一されてないし 処置タイミングもバラバラだし個別に特殊処理も多いし。 丁寧にリソースエディタで作成されてる。作った人おつかれ。 とても面倒みれねー
せめて ON_COMMAND_RANGE/ON_CONTROL_RANGE 使ってくれ・・・ もうみたくない Onhogehoge
966 :
仕様書無しさん :04/05/13 02:48
>>965 なぜ駄目なのか解らないのだが...
OnHogehoge が数10個あったとしても、その処理は OnRange の中で switch 分岐
するのでは?
OnHogehoge が2〜3行しかない似たような処理であれば、メッセージを同じにして
wParam とかで動作させれば良いと思う。その場合、仕様が糞だ。
説明お願いします。
>>964 > ダイアログ上にEditBoxやらComboBoxが200個近くあって
それって一画面に収まるのか?
そりゃ、一度には見えないんだろ タブかなんかで切り替えるんだと思われ
>>966 >その処理は OnRange の中で switch 分岐
>するのでは?
しないだろう、普通。
さて、今度こそまな板娘を。
会社の指示で、わざわざクソコード書かされてるんだけど、 自分のやり方は忘れないようにしておかないと、転職後に 面倒になるよな・・・ 数百行の関数なんて吐き気がする・・・
ど〜ゆ〜指示なんだ。わざわざ長くして書けって言われるのか? 見積もりステップ数に合わせろって言われて{ }入れまくったことはあったな。
>>973 func() {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{//←ステップ数調整用
//なんか処理
}
}
}
}
(中略)
}
}
}
}
こんな感じか。
>>974 識別子毎に改行する方がまだマシなような
int main ( int argc , char * argv [ ] ) { return 0 ; }
むしろ辞めさせられる