前スレが4月を待たずに落ちたので建てました
int i = 1++;
5 :
仕様書無しさん:2007/04/04(水) 21:50:35
int CoreFunction(const int *a, ...引数がしばらく続く ){? return 0;?//?//?// コメントが2000行ほど続く?//?//?}
6 :
仕様書無しさん:2007/04/05(木) 03:12:51
気付かんかったorz
>>1 乙です
>>5 修正前のコードはコメントアウトして残す規約のプロジェクトに参加したとき
気付けば全体の95%くらいがコメントになっていて目眩がしたことならある
ねぇcvsくらい導入しようよ・・・
>>6 CVSを導入しつつもそういうルールのあるプロジェクトやったこと多々ある・・・
switch(iCnt){
case 10:
〜処理1〜
break;
case 20:
〜処理2〜
break;
case 30:
〜処理3〜
break;
(中略)
case 100:
〜処理100〜
break;
default:
break;
}
というのがあって、処理1、処理2・・・処理100の実質的な内容は全て同じ。
違うのはループカウンタがそれぞれiCntになっているだけ。
作者を殺したいと初めて思いました
switch case といえば、こういうコードが冗長に見えてしまう時期が俺にもありました・・・
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
/* Windows DLL callback entry point */
BOOL r;
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
r = DllProcessAttach(hinstDLL, lpvReserved);
break;
(途中省略)
default:
r = DllMainError(hinstDLL, lpvReserved);
}
return r;
}
static BOOL DllProcessAttach(HINSTANCE hinstDLL, LPVOID lpvReserved) { return TRUE; }
static BOOL DllThreadAttach(HINSTANCE hinstDLL, LPVOID lpvReserved) { return TRUE; }
static BOOL DllThreadDetach(HINSTANCE hinstDLL, LPVOID lpvReserved) { return TRUE; }
static BOOL DllProcessDetach(HINSTANCE hinstDLL, LPVOID lpvReserved) { return TRUE; }
static BOOL DllMainError(HINSTANCE hinstDLL, LPVOID lpvReserved) { return FALSE; }
1.VB.NETでOn Error Goto HOGE を連発 TryーCatchがいっこもない
2.クラスが殆どない モジュールうじゃうじゃ グローバルマンセー
14 :
7:2007/04/06(金) 13:09:26
いや、みいそ系
>>14 ( ´゚д゚`)アチャー
やっぱ大手の名前あっても上がだめな所はまだそんなのやってるんだな・・・
メーカー系はまず碌なものじゃない、と疑ってかからないと。
そういやF通には、C/C++ の「const」の存在を知ってる奴が
どれくらいいるんだろう。
>>16 そ・・・そんなに勉強不足なのか?
君と一緒に仕事したその会社の連中は・・・・
まぁ、俺もにたような経験はあるが・・・
18 :
仕様書無しさん:2007/04/06(金) 18:01:02
if (GetServer()->GetConnection() == GetConnection() &&
GetConnection()->BackendMinimumVersion(8,0) &&
!GetConnection()->HasFeature(FEATURE_FILEREAD))
hints.Add(HINT_INSTRUMENTATION);
頼むから省略するなと。
19 :
仕様書無しさん:2007/04/06(金) 23:01:16
constとstaticを理解するのは
CVSやVSS使ってても、元のコードはコメントアウトして残すプロジェクトしかみたことねえよ。
みかかとでーたとあいびーむがそうだったんだが。
削除させてくれるプロジェクトってあるのか?
リリースまでならソース上で履歴残さずともOKで、
リリース後の修正はソースに履歴を残す、というのならあった
>>20 オレが目にできるようなプロジェクトは残してるのがないので、残さないのが当たり前だとばかり思ってたが。
本来、履歴を残す必要なんてまったく無いのに、
誰か一人のボンクラが履歴を残してしまい、
その後は皆「右へならえ」で
ずるずる履歴を書き込んでしまうんだよ。
「グレシャムの法則」という奴だな。
修正履歴を必ず残させるコーディングルールと
サブルーチン使えば1行で済む処理が延々とコピペされたコード
リファクタリングという言葉に何か恨みでもあるんだろうか。
>>24 あぁ、コボルと富士通の話はきりがないのでどっか他所でやってくれな。
26 :
仕様書無しさん:2007/04/19(木) 23:35:59
4 8 15 16 23 42
27 :
仕様書無しさん:2007/04/19(木) 23:38:06
そーいう変な会社がうようようようよ
28 :
仕様書無しさん:2007/04/19(木) 23:39:59
元のソースは残すようにしてるけど、絶対残すルールは嫌だなあ
絶対消せルールよりはいいけど
いや「ぜったい消せ」のほうがマシだよ。
まったくだ
if(条件) {
b = true;
a.set1(true);
a.set2(true);
} else {
b = false;
a.set1(false);
a.set2(false);
}
if文にする意味がわかんね...
>>31 ソースコードにその処理の意味合いを持たせる為だと思う
>>31は
b = 条件;
a.set1(b);
a.set2(b);
のように記述しないのは何故? っていってるんだよな?
そして
>>32の言ってることが分からん。
>>33 あれかな、
elseをelse ifにして拡張可能とか。
>>31 そりゃ、「条件」が「式」だと知らずに
if (ここには条件しか書けない)
b = ここには真偽値のリテラルしか書けない
と思い込んでる典型的な阿呆が書いたからだろう。
そして俺も
>>32 の言ってることがわからん。
知らないだけで阿呆にされちゃカナワンなー
Option Explicitなし
if 謎の宣言なし変数>0 and hoge_index=1 Then
こんなんばっか
option explicit って入門書にも必ず出てるのにね
>>36 >>35のいう通りだったとして、
”冗長な(冗長すぎる)記述を、なんとかしようという気構えの無い奴”
である可能性が95%以上とみる。
そういうやつは、すごく無知なのに知っている知識だけでソース記述しようとするんだよね。。
つまり阿呆で十分だと思うんだ。
40 :
32:2007/04/21(土) 05:52:50
例えば、こう書いた場合
if (IsFileExist(path) == ture) {
このブロックはファイルが存在した時の処理
} else {
このブロックはファイルが存在しない時の処理
}
と、ソースコードからブロックの前提条件を明示でき、
IsFileExist()の結果により処理が変わる事を強調できます。
また、同じ関数の呼び出しパスででありながらブロックを
分けている事から、「同じ関数を呼んでいるが、行う処理は
IsFileExist()によって違うものになるよ。将来、処理の内容が
変わるかもよ。」と示唆することが出来ます。
これは社内で取り決めなどが無くても、ある程度経験のある人なら
読み取れる事だと私は考えております。
また、以下のように書かない理由は、
b = IsFileExist(path);
a.set1(b);
a.set2(b);
bはファイルの有無を意味しているが、
set1(),set2()の引数は"ファイルの有無を指定する"という
仕様ではない場合に、bの示すものと引数の意味合いが
異なってしまう為です。
これが悪い書き方とは言いませんが、値が同じだからといって、
意味合いの違うものを無闇に使いまわすのは、
そのコードの意図を汲み取り難くすると考えます。
>>37 VBって、Option Explicitがあっても、
dim s as string
・・・
if s = 0 then ・・・
みたいなコードがコンパイルできるんだよな。
今、VB4からVB6にコンバートする仕事をやってて、エラーが起きたらその場で止まるオプションに変更して、
動作確認してるけど、けっこう頻繁にとまってる。
大昔に作られて、けっこう保守が入ってるのに、なんでこんなバグが残ってるんだよって感じ。
42 :
仕様書無しさん:2007/04/21(土) 10:09:30
>>40 わりと同意かな・・・
つか、俺自身はブール型の引数というものが嫌いで不要だと思ってる。
視点の高さがまるで違うんだな。
短いコードを書けばいいと思ってるような奴はCOBOLでもやってろって話
>>40 変数名がbというのは反対だが(ファイルの使用目的とそれの存在を示す意味のある名前にするべき)、俺は変数に入れてあるほうが読みやすいと感じるな。
無駄なブロックやネストはできるかぎり無いほうが読みやすいと思う。
45 :
仕様書無しさん:2007/04/21(土) 10:19:21
沖縄県の方へ(命に関わる注意事項です)
沖縄県での選挙ですが、どうか民主党だけは避けてください。県民の生命に関わる可能性があります。
民主党の最大の公約は一国二制度(※)ですが、一度「一国二制度 沖縄 三千万」等で検索をお願いします。
この際、民主党のHPで調べても良いです。以下の注釈↓と矛盾することは書いてないはずですから…
※一国二制度
簡単に言えば沖縄を中国と日本の共有物にし、そこに3000万人の中国人を入植させます。
(つまり沖縄人口の 96% を中国人にして、実質、沖縄を中国人の居住地とします。)
さらに「自主」の名の下、沖縄で有事が起きても自衛隊は干渉できません。
3000万人の中国人が、少数派となった130万人の日本人に何をしても、です。
そして反日教育を受けた中国人の反日感情の強さは、ほとんどの日本人の理解を超えるものです。
今回の選挙で民主党が勝った場合、「自主」「発展」を連呼しつつ段階的に進めていくことになります。
自主と言っても、自主を認めるのが「住人の96%が中国人となった」後だということに気をつけてください。
発展と言っても、新沖縄の少数派となった「少数民族日本人」の発展ではないことに気をつけてください。
>>40 そりゃあ>40みたいな前提条件を勝手に組み込めばそういう解釈も可能だが
シンプルな>31だけを見せられたら>33のような反応してしまうのが普通だろ。
ここで>40とは正反対の前提条件があったとして、>31のような書き方をされたら
ありもしないニュアンスを醸しだしてかえって迷惑。
>>41 VBって暗黙の型変換が意味も無く強力過ぎ
たしかVB5のときに型変換のルールが微妙に変わった様な飢餓するが
今となってはどうでもいい事だ
char* buf = new char[sizeof(Hoge)];
Hoge* hoge = (Hoge) buf;
.
.
.
delete[] buf;
わかってねぇ〜〜〜〜〜。
なんかまずいの?
馬鹿にしたかったら馬鹿にしていいけど、その後でちゃんと何が分かってないのか説明してね。
キャストがおかしいってことか。
仮に typedef void *Hoge; だとしたらこれでOKって、いや違うC++だとアウトだ。
あれ?
51 :
31:2007/04/21(土) 19:37:43
>>40 >>31は、実際に見たものをココに書くために行った
抽象化の過程が悪かったと思います。
>>32及び
>>40も、ごもっともだと思いますよ。
実際自分が見たコードは
>>31で書いた風なものより"もっと"酷く、
貴方がされたような弁明の余地なんて無いだろう
ってな感じのものでした。
実際の処理をfileの有無に替えて書くと、
if( [条件] ) {
existFile = true;
a.setExsitFile(true);
b.setExistFile(true);
} else {
existFile = false;
a.setExistFile(false);
b.setExistFile(false);
}
こんな感じでした。
意味的にも書き分けるような部分ではないんです。
つまり、正に
>>35の言う通りな感じかなーと思ってます。
パケットのデータを取り出すのによく
>>48みたいなキャストするけどいかんのかね?
ま、確保したばかりの変数をキャストするのは珍しいと思うけどさ
>>52 普通は
Hoge* hoge = new Hoge;
だわな。
よくCから中途半端にC++へ移行した人がやってるのを見かける。
どうせnew=malloc程度に理解してんだろうね。
キャストは基本DQNでございます。
memcpyとか大好きなDQNがごろごろ。
大人しくCでもいじってろ。
先日見たJavaコード
long hoge = 1;
:
Long page = Long.valueOf(String.toString(hoge));
文字列にする意味ねぇ・・・
>>56 "valueOfがイイ、使え"
とか言われた人間がそこで思考停止するとそうなるな...
>>56-57 もっと深刻な「コボラ上がり」だったんじゃないかな。
やつらは、数値="0"〜"9"の並び(=ゾーン形式)っていう観念から
離れらんないから。
>>48も基本がなってない。
(Hoge)じゃなく(Hoge *)だろ。
主旨は違うんだけど、ここの
tp://d.hatena.ne.jp/nowokay/20070323
// null => 0, not null => 1
int p = Boolean.toString(data == null).length() - 4;
ってのが好き。やられた。
ソースコードじゃないんだけど。
DBのDDLをバージョン管理システムに入れてまして。
外注さんが直接DBをいじっちゃったので、
リポジトリのDDLに変更を反映してくれって頼んだら。
hoge.sql(手付かず)
hoge_日付.sql(新規)
ってファイルがリポジトリにあって
面白かったです。
最初、DLLと読んでしまったので、理解するのに時間がかかってしまった。
バージョン管理システムを、読み書きに手順が必要なファイルサーバだと
思ってる人、確かにいますね。
>バージョン管理システムを、読み書きに手順が必要なファイルサーバだと
>思ってる人、確かにいますね。
今のPRJリーダのことかーーーー
CVSなのになぜか
hoge
hoge_2
hoge_3
とディレクトリを切っている。
旧ソースを全てコメントとして残したり、
日付と変更者をコメントに書いて変更箇所をサンドイッチしたり。
ストレージとしてしか使っていないよ・・・orz
変更者が変質者に見えた・・・俺相当疲れてるな・・・
65 :
仕様書無しさん:2007/04/30(月) 01:15:17
IF IsNumeric(Cint(value)) Then
End If
orz ...
元気出せ。
VBの類は、暗黙の型変換を禁止するオプションがほしいよぬ
69 :
仕様書無しさん:2007/05/06(日) 14:05:22
俺の会社ポインタ型は全部void *って全社共通で決まってるから
VBのキャストぐらいでは混乱しないよ。
常に参照先の型について意識させることで社員の意識を高めようということか!
ごめん無理
関数ポインタも?
72 :
仕様書無しさん:2007/05/06(日) 15:33:12
全部void *
型の意味がよくわからない使いかたしまくってるよ
void hoge(int *val);
こんな関数とか平気作るし
73 :
仕様書無しさん:2007/05/06(日) 15:49:17
C++では関数ポインタはvoid *だとまずいんだよな
オーバーロードが解決できなくなるから
こういうことやるならまだしも(できるんか?)
int func(int) { ... }
double func(double) { ... }
void *p = reinterpret_cast<int (*)(int)> (func);
74 :
仕様書無しさん:2007/05/06(日) 15:51:08
呼び出し側書くの忘れてた
reinterpret_cast<int (*)(int)> (p)(10);
C++には、メンバ関数ポインタ、という鬼子もいるからね
76 :
仕様書無しさん:2007/05/07(月) 11:14:57
reinterpret_cast
↑
なんでこれ導入したんだろうね。。。
77 :
仕様書無しさん:2007/05/07(月) 11:58:25
いや、わりと低水準なことをするときには必要だろ。
static_castだと型変換がかかって値(メモリ上のビット列)が変化することがある。
reinterpret_castは型だけを変化させてビット列そのものは変化しない。
78 :
仕様書無しさん:2007/05/07(月) 12:13:08
そんな場面あるか?
組み込みとか
80 :
仕様書無しさん:2007/05/08(火) 10:05:32
kwsk
81 :
仕様書無しさん:2007/05/08(火) 14:28:58
ソースじゃないんだけど
あるSEがUML書きましたと言って提出してきた設計書が、
単なるフローチャートだったとき
しかもパーツの意味を間違えまくっているとき
いいじゃんか。
全部アクティビティ図だと脳内で変換するんだ。
変換して現実から目をそむけると。
はっぴ?
83 :
仕様書無しさん:2007/05/08(火) 18:54:42
フローチャートって実戦で使わないだろw
84 :
仕様書無しさん:2007/05/08(火) 19:09:35
>>81 フローチャート通りに実装していいんじゃね?
85 :
仕様書無しさん:2007/05/08(火) 22:07:33
様式に神経質なぐらいこだわる奴はたいていろくでもない
要はしっかり設計できてりゃいいってのがわかってないんだよな・・・
86 :
仕様書無しさん:2007/05/08(火) 22:24:16
UMLキチガイのことか
そうおもってさ。おぷそのつーるでグラフ化してみたわけよ、糞ソフト。
花火が見られた。
とりあえず生成結果を消した。
Happy99とは懐かしいな。
89 :
仕様書無しさん:2007/05/09(水) 10:07:23
しあわせ99?
ウイルスだったよな?確か
昔流行ったよな。確か花火が上がるやつだと記憶している。
92 :
仕様書無しさん:2007/05/09(水) 21:54:00
>>80 たとえばnewとかで取得した領域のアライメント調整で使う
#define AREASIZE 80
#define ALIGNSIZE 4
char* p; void* q;
p = new char[AREASIZE+ALIGNSIZE-1];
q = reinterpret_cast<void*>((reinterpret_cast<int>(p)+ALIGNSIZE-1)&~(ALIGNSIZE-1))
// ...
delete p;
Dim flgUmu As String = "nasi"
For Each ws In objBook.Worksheets
If ws.Name = strName Then
flgUmu = "ari"
End If
Next
もうどこからツッコめばいいのかorz
時々居るなぁ、Boolean使わない奴。
ポインタをintにキャストする香具師は、
LP64,LLP64環境で死亡で御座います
uintptr_tかchar*でないとマズいね。
ところで~(ALIGNSIZE-1)ってそのままで大丈夫?
ごめん、大丈夫そう。
>>96 ALIGNSIZEが2の冪乗値という条件付きだけどな
文末のセミコロンが抜けてるのは痛い>92
99 :
仕様書無しさん:2007/05/10(木) 01:43:21
#define private public
#define protected public
本当にこれが書かれたコードがあった。
しかも俺のすぐ上の上司が書いたっぽい。
陰謀めいたものを感じて冷や汗が出たよ
100 :
仕様書無しさん:2007/05/10(木) 09:36:17
private宣言してもリアルタイムデバッグではアクセス可能だろ?
意味なくね?
102 :
仕様書無しさん:2007/05/10(木) 11:49:46
全然privateじゃないってこと
カプセル化の意味も判らないんなら口挟まない方がいいんじゃね?
そこで防御策として
#ifdef private
#undef private
#endif
#ifdef protected
#undef protected
#endif
と自分のヘッダの先頭に書く必要が出てくる。
もはや冷戦だな。
105 :
仕様書無しさん:2007/05/10(木) 17:55:41
106 :
仕様書無しさん:2007/05/10(木) 18:57:15
>>104 その後にインクルードされるヘッダファイルの中で
#ifndef private
#define private public
#endif
#ifndef protected
#define protected public
#endif
と書かれてないか調べたか?
w
嫌な職場だなぁ
まさに冷戦。 誰が核のボタンを押すのか、押せるのか。 いやまて核は何なのか。
#define FIRE FILE なんての見て鬱になってたところだが、
ここ見てたらなんだか元気が出てきた。ウチはまだ大丈夫だ!
>>109 知らぬ間に
#define FILE FIRE
になっているかもしれんぞ。
大丈夫。
展開コードを参照すればw
113 :
仕様書無しさん:2007/05/11(金) 10:34:47
1つのプロジェクト内にファイルが1800個あったから、一体何かと思ったら
履歴を全部別ファイルにして残していて、わざわざコンパイルしない設定対象に1780個ぐらい加えているという・・・
バージョン管理ソフト使っていてこれかよ。出向先なので辞めるわけにはいかない、
明日から通勤時間に3年程かけようかとか本気で思った
>>111 sonyのバッテリーが発火した原因はそれか。
やめよう思うほどじゃないが
よく見るキモチワルイコード
if (a == 1) {
} else {
なんかのしょり
なんかのしょり
}
>>115 俺、よくこういうコード書きかけてしまう…
具体的にはこんなんですが。
if (a == 1) {
/* 〜ということやりたいけど後で考える */
} else {
なんかのしょり
なんかのしょり
}
(a == 1) の時の処理考えなくてよければ、こんなんかな。
if (a != 1) {
なんかのしょり
なんかのしょり
}
>>116 コーディング中には俺もよくやる。
問題は納品後のソースにそれが残ってることだと思います。
//TODO:この機能いらなくね??
とか
//TODO:うんこしたい
とか
//TODO:仕様はやくきめろやぼけ!!殺すぞ!!
とか
他人にはとても見せられないようなコメント
入れといて実装漏れ、修正漏れは絶対起こさないようにすべき
このコメントを納品した後のソースで、見たらその人は
この会社やめようって思うんだろうなー
でも、顧客の悪口は洒落にならないから書かないぜ!
んなコメント入れんなよ
普通、if(a)って書かね?
>119
出た〜〜〜っ!
121 :
仕様書無しさん:2007/05/13(日) 17:41:28
>>119 それキモい。
aはあくまでデータであり、真偽をあらわす値ではない。
ところでいつ a が boolean になったんだ?
C#とかだとコンパイルも出来ない。
ifは0かそうじゃないかだけしか見ないんだから
>>119で何の問題もないだろ
C#はシラネ
ifは0かそうじゃないかだけしか見ないんだから
ifは0かそうじゃないかだけしか見ないんだから
ifは0かそうじゃないかだけしか見ないんだから
ifは0かそうじゃないかだけしか見ないんだから
ifは0かそうじゃないかだけしか見ないんだから〜
お前とは組みたくない。
組込みマイコンのコンパイラでは常識的手法。
if(a)なら JNZ命令一行ですむ。
>>121 まじすか。
ただ、適切な変数名をつけて問題領域で考えれば分かりやすいと思うんだけどなぁ
int型でも俺はそうやってる
128 :
仕様書無しさん:2007/05/13(日) 18:07:33
if (a) って書いたら a == 1 以外のケースでも真と判定されることに気づかないかね。
>>126 if (a != 0) を if (a) に最適化するのはコンパイラの仕事ですよ。
より効率の良く等価な記述に変換する最適化はコンパイラにさせて
人間は正しい意味論に則った保守しやすいコードの記述に努めるべき。
で、aの型は・・・?
お前ら、if (isdigit(c) == 1)って書くの?
>>121 何か変なことになった場合に
if(a)の時点でa=0になっていると保証されてるなら
それでいいと思うが。
132 :
仕様書無しさん:2007/05/13(日) 18:25:26
>>130 isdigit関数の戻り値の意味は真偽値だとわかっているから if (isdigit(c)) で無問題。
ちなみに 真==1 とは限らないので、敢えて書くなら if (isdigit(c) != 0) が正解。
>>128 int型でもブール変数として使う場合は
むしろ、a == 1 以外のケースでも真と判定されなきゃまずいと思うけど
134 :
仕様書無しさん:2007/05/13(日) 18:32:31
if(a)って書くとバグの温床になるからやめろ
等号式書いても、今のコンパイラなら80年代と違って等価のコード出す。
今、最適化意識して各のはアルゴリズムの性能と無駄なシーケンス省くことだけ。
きもいくて古い書き方は捨てろ。恥だ
>>134 >if(a)って書くとバグの温床になるからやめろ
まぁif((hFile = CreateFile()))とかやってハマってた奴とかいたし、気持ちはわかるw
136 :
仕様書無しさん:2007/05/13(日) 18:38:38
isdigit
www
だーかーらー前提としてaの型を明らかにして話を進めろ
>135
じつはhFileの実体がスマートハンドルで、
operator boolみたいなのが定義されているとか
>137
新人はだまってROMしてなさい!
140 :
仕様書無しさん:2007/05/13(日) 18:55:15
>>137 ・aがブールを意味する値なら if (a) でおk
・そうでなければ比較の意図を明示的に表明すべし
でFA
>140
上の連中それをごっちゃにして噛み合わない議論してねぇ?
>>134 むしろ、バグの温床になるのは
if (a==0)
とかの方なんだがな・・・
typo で
if (a=0)
になってしまうから。
はいはいif(0==a)
144 :
仕様書無しさん:2007/05/13(日) 19:28:00
つか
if( a == b )を間違えないように定数比較したいなら
if( NULL == a)って書けばいいだろ。定数は必ず初項として記述すればいいだろ
仮にif( NULL = a)ってやればコンパイルエラー出る。
つうか2000年ぐらいまでのコーディング規約でいいものだけ取り入れて
かけよ。一般人ができる最低限度のコーディングの礼節だと思うがな。
>>144 読んで
ふと思ったんだが、
fj って今でもあるの?
確かにその書き方なら間違いが防げるけど、何故か普及してないな。
if( NULL == a)
と書くのはお断りだ
>>146 昔から議論はあるけど、警告が出るからそんなヘンな書き方をすることは無いってことで落ち着いてる。
if(a)
が一番美しい。
>151
>127
プログラムってのはデータと命令しかないわけよ。
そのデータが真偽値であるとか整数であるとかあるいは文字列であるとかの意味付けは
言語処理系上でのみ行われている文脈上のものでしかないの。
文法的に許されているなら
>>150を支持する。実際、美しい。
キモイとか許せないと思うなら
if(a)
という記述を許さない言語を使えば良いでしょ。
無限ループって怖くね?w
最初の書き込みで、aに入ってるのがbool値(0かそれ以外)か、ただの数値(たとえば0〜100とか)とか何も
書いてないのに、いきなり
「if (a) と書く」とか言うのは変だって言ってるんだろ。
156 :
仕様書無しさん:2007/05/13(日) 20:45:37
個人的に
if(a)
で書ける状況でもこういう書き方はしないなぁ。
たまたま文法的に成立するってだけだから。
古い書き方だと思う。
今はベタに、ちゃんと==使わないとダメだと思う。
ねえ、今は False =0, True = 1 であたりまえなの?
昔はそれぞれ 0, 0xff って実装もありだったと思うんで、
True のつもりで a == 1 なんて怖くて書けない。
せめて a == True とするのが、他人が読む時も精神衛生的にいいんジャマイカ?
>>155 >「if (a) と書く」とか言うのは変だって言ってるんだろ。
別に。
また、プログラムの読み手にとっても、
aに入ってるのがbool値か、ただの数値か
なんて考える必要はない。
a の評価値が 0 かそれ以外かさえ分かればよい。
こんな単純な話はない。
>>158 でも, bool値以外のデータだったら、
if (a == 1) を
if (a) にしたら、動作が違ってくるだろ?
a == 1 の比較だろ
a = 0 or 1 ならともかく
a = 2 のときは?
a = 100 のときは?
>>158 その場合、if(a) は発端
>>115 の if (a==1) と同一ではない。
発端の if (a==1) はあなたの「単純な話」にあてはまらない。
元の話わかってる?
aには、0か1が入ってるとか、
1,2,3のどれかが入ってるとか、なんら前提が示されてないのに、
if (a == 1) を if(a) と書き直したらダメだろ。
凡庸なプログラマってこうした思い込みしてコーディングしてんのかな…
なんかトンデモねぇ馬鹿が一匹迷い込んでないか
俺コイツと一緒に仕事すんのはマジで嫌
想定外の修正されてぶち壊されそう
初心者の俺にはよく分からんのだが
aの型について触れずに論議が進められるのは何故なの?
>165
何度か指摘してるんだが何故かまともに取り合ってくれないんだ(´・ω・`)
aには、0か1が入ってるとか、
1,2,3のどれかが入ってるとか、なんら前提が示されてないのに、
if(a)をif (a == 1) と書き直したらダメだろ。
>>167 >if(a)をif (a == 1) と書き直したらダメだろ。
それは誰もしてない。
>>165 少なくともCにおいては、if()の中身は式であって、その型は無関係だから。
>165
>166
>139
>>157 >せめて a == True とするのが、他人が読む時も精神衛生的にいいんジャマイカ?
bool値のある言語でそれをやったら、ちょっとヘタクソっぽい。
Cだと、
#define TRUE 0
#define FALSE -1
とか、ありえるので、わからなくもない。
キモイとか言える次元かよw
感覚上身についているかどうかのレベルの問題じゃね?
(センスというにはあまりに次元が低すぎる)
#include <stdio.h>
char* a;
int main(){
if (!a){
printf("a");
}
}
とかどうすんだよ。aが初期化されて無い判定は。
まさかbool型とか、コンパイラがうまくやってくれるからとか言っちゃって0で、==するのか?www
ショッペーーー
173 :
仕様書無しさん:2007/05/13(日) 21:05:31
今日はとくに変だな
このスレw
この人なんで火病ってんの?
でさー 115 がいつ C って決まったの?
>>175 暗黙の前提。ああいう構文の言語は全部がCから派生しているからね。
まあ細かいことはプログラム書く人の自由ということで、115の場合はひとつの例として、
if aが1のとき{何もしない} else {何かの処理}がキモチワルイコードと言っているだけだ。
じゃあここは間とって三項演算子で書こうぜ
>>115 の主張は
if (a == 1) {
/* 〜ということやりたいけど後で考える */
} else {
で、「/* 〜ということやりたいけど後で考える */ を書くのが嫌だ」って話であって、
今の話題は
>>119 が言う所の、
「if 文の括弧の中では、明示的に論理式を書く必要がない」か否か
って話だろ?
>暗黙の前提。
こういう自分勝手な解釈をするヤツが一番手におえない
それも勝手な解釈だな
その場合は前提を提示していないという意味で自分勝手な以下同文
>>179 俺が
> /* 〜ということやりたいけど後で考える */
を追加した
>>116 だけど、
>>115 はそんなこと主張してないぞ。
>>115 の if (a == 1) {} else { ... } の解釈はいろいろありえるが、俺は
「if (a == 1) の時何もやらない」だと解釈した。
俺は別なつもりで同じようなコードを書いてしまうとコメントしたつもりだったんだが、
俺が余計なこと書いて議論を混乱させたのか? すまんかった。
184 :
119:2007/05/13(日) 21:28:36
正直すまんかった。
俺が勝手に
>>115のaをブール値を表現する変数だと勘違いして
>>119を書いた。
でも、よく考えたら
>>115は明示的にa == 1って書いてるんでブール値ではないわな。
ブール値なら少なくともa == TRUEとか書かなきゃいかんはずだし。
まぁ、俺が言うのもなんだが>>140-
>>141でFAで
>>184 その辺って熟練のPGでも考え方に違いが出てくるので
PLの考えに合わせるのが無難と思う。
そういえば、MSの環境でBOOLって型があって
#define TRUE (1)
#define FALSE (0)
と定義されてるんだけど
APIで返す値に1以外の0じゃない値が返るものがあったりするねw
>>185 Windows APIのBOOL型の戻り値は、だいたい「成功すると0以外の値を返す」と
ドキュメントに記されているわけで、特定の定数TRUEを返すとは書かれていないんで
if (HogeHoge() == TRUE)
は間違い。普通はこういう書き方しないだろうけど。
ところでその#defineの括弧は不要なんじゃ...
どころか、GetMessageみたいな3値を返すBOOLもある
> ところでその#defineの括弧は不要なんじゃ...
まあ括弧でくくるクセをつけてあるのは良いことだと思う。
おう。そういう例があるから だいたい とさりげなく断っておいた。
俺はそれに嵌ったクチだし。
(ウィンドウの生成に失敗しているのにGetMessageして-1が返って無限ループorz)
>>186 APIリファレンスにも普通に-1を返すと記述されてたりするw
>>189 他にも罠wがいろいろあるのがMS仕様という印象
191 :
仕様書無しさん:2007/05/14(月) 05:41:07
スレタイが「この会社辞めようと思ったソースコード」なのになんで素人が混じってんだ?
192 :
仕様書無しさん:2007/05/14(月) 08:03:15
>>191 プロはこんな板見てないからじゃないか?
>>191 素人とプロの違いは技量の違いではない。
「それが生活基盤であるか否か」だけである。
だからいくら素人に見えても実態はプロである事は多い。
194 :
仕様書無しさん:2007/05/14(月) 08:58:01
とりあえず最悪の事態を考えてaはValiant型を想定しておくか
>>195 ちょっwwwww
SUGEEEEEEEEE
そんな先のことまで想定してコーディングするとはwww
俺絶対入社するわ
全部Variantで書いとくんで保守たのんますwww
197 :
仕様書無しさん:2007/05/14(月) 12:29:41
なんかスレが延びているとおもったら、またよくわからん話題で盛り上がってるのか
えーっと
ぬるぽ
がっ
// ここからそこまで何をしているのか不明
そこって何処よ…('A`)
' SOKOってラベルふってあんだろ
底でしょ
プロシージャ内と予測してみる
203 :
仕様書無しさん:2007/05/14(月) 19:31:37
ここってCの人が多いみたいね。
じゃあ、vb系を代表して:
Dim a, b As Integer
Cとは違います。多分正しくありませんよ〜
>>203 普通にそう書いてる奴多いな
俺はメンテの時に困るから書いてないけど
>>203 aはIntegerと見せかけて、バリバリのバリアントだな。
そういう紛らわしい書き方ができてしまうVBの言語仕様はどうみても糞だな。
206 :
仕様書無しさん:2007/05/14(月) 19:37:30
上の方でtrue=1, false=0とかあってけど、VBAではTrue=-1ね
多分VBも
>>203 そーいや専門学校で教師がそのソース書いてたな。
208 :
仕様書無しさん:2007/05/14(月) 19:45:10
やめて〜(実話)
For i=1 To 10000
Cells(i,1) = "なんたらかんたら"
Next
ExcelVBA だが、行は何行あるか分からないらしい。動けばいいのかな?
上級SEさんのコードでした。
>>205 更に、.NET 以降はあれで「どっちも Integer」という軽い罠。
>>208 まあSヨなら普通。
210 :
仕様書無しさん:2007/05/14(月) 19:52:34
211 :
仕様書無しさん:2007/05/14(月) 20:01:01
ソースじゃないけど聞いていい?
PL/SQLとTransact-SQLって同義なの?
前者はOracleで後者はSQLServerに使うものだと思っていたんだけど。
今日、面談で言われたよ〜
>>210 …あのさ、君が前段と後段のどっちに疑問を呈しているのか解るのって君だけなんだが。
(7:3 で前段と踏んだ)
>>211 ここが質問スレじゃないことくらい理解してほしいところなんだが。
>PL/SQLとTransact-SQLって同義なの?
「ストアドプロシージャの記述に使用できる」という一点のみが共通項。
214 :
仕様書無しさん:2007/05/14(月) 20:39:13
>>213 >>210 どす。
前段どす。
Dim a, b As Integer
って.netでもaはVariantじゃないの?
「VB.NET 変数宣言」でぐぐれかす
216 :
仕様書無しさん:2007/05/14(月) 21:03:36
ホントだ。知らんかった。
Dimってさ、もともとDimensionの略で、配列の次元を宣言するための
ものだったのにどーしてVBは一般の変数宣言に使うようになっちゃった
んだろう。
RubyとかLispとか動的型付けの言語でもコードが書かれてるんだから、
Variantでもいいじゃないか。
220 :
仕様書無しさん:2007/05/14(月) 21:55:27
そもそもoption explicitにしない奴もいるわな。
いいんじゃない?最近のPCは性能がいいから。
>195
Variant
>220
ハードウェアの進化には楽天的であれ
ソフトウェアの進化には悲観的であれ
エンジニアの技術力の進化には絶望的であれ
# 上の2つは201の鉄則より
224 :
仕様書無しさん:2007/05/15(火) 10:31:23
昨日を
today-1
と書くか
dateadd("d",-1,today)
と書くか
普通下だと思ってた俺はどうなのよ?
226 :
仕様書無しさん:2007/05/15(火) 10:59:04
反省しろ
ボリューム(D:)
↑
このへんがやる気ナイ・・
228 :
仕様書無しさん:2007/05/15(火) 11:43:17
>>225 すまん。Date-1だった。最近、VBやってないから忘れてた。
229 :
仕様書無しさん:2007/05/15(火) 12:07:08
>>203 あれ? 確かVB4か5までは a = variant, b = integerになるが、
VB5か6からは両方ともintegerになるような解釈になってなかったっけ
ま、毎回1つ1つきっちり書いている俺には関係ないが
ならん
231 :
仕様書無しさん:2007/05/15(火) 12:23:57
今確認したけど
dim a,b as integer
ってVB6SP6でやると
a=Empty
b=0
になってたからaの型はVariantになってるね
232 :
仕様書無しさん:2007/05/15(火) 12:27:45
バージョンで仕様が変わったら、やってられないだろ〜
.netはいいチャンスだと思ったんじゃない?
>206
その解釈は微妙。(VB(A)でもCでも)
どちらも、0が偽でそれ以外が真。
ただし、比較式などが返す値が、Cでは1、VB系は-1てこと。
>206自身はわかってるならそれはいいんだけど、
わかってない人が>206みたいな記述を読むと勘違いしたりする('A`)
234 :
229:2007/05/15(火) 16:09:20
>>231 ああ、.NETからの間違いだったかも
すまそ、ちょっとunicode変換されてくるは
>>235 今ちょっと試してみたけど、Excel VBA で Date 型だと書けてしまうな。気持ち悪い。
整数が日付、小数点以下が時刻ってことか…
俺はDateAddの方がどんな変数を操作してるかわかりやすいので安心できる。
真値を数値として扱うと-1になることを利用した演算式が
昔のBASICにゃたんまりあってのう……
a = a + (h > 3) * 1
とか
Oracle とかもDate型は数値扱いだろ
よくあるよくある
>>237 むしろ条件式を使うことがコード量を節約する手法の一つだったのさ。
>>237 の動作ってどうなるんだ?
こんな書き方しらねぇ・・・・
(h > 3)
この部分の解釈
>>240 真なら -1 で偽なら 0 になる。
つまり C で書きなおせば
if (h > 3) a += 1;
ってこと。
この例だとコード量節約にもならないような。
BASICならIF文使うと遅いからじゃね?
サンクス
なるほど そういう解釈になるのか!
しかし・・・可読性が落ちるな(;´Д`)
昔は遅かったからその辺のテクなんだろうなぁ・・・
最近のCPUで当時のBASICコードが動かせるとすると
ループで時間稼いだりしてた部分が瞬時に終わったり
笑える動作になるんだろうな
>>244 ウチは実際にそれで問題が出てたwwww
>>244 昔でもあったぞ。
ゲームでPC-9801VM(V30)でスピード最適化したシューティングゲームを
PC-9801RA(i386)で動作させてみたらレーシングゲームになった、とか
MSXturboRの通常モード(8ビットモード)で普通に出来たゲームが
高速モード(16ビットモード)では早すぎてゲームにならなかったり。
>>237 俺は Pascal(Delphi) で似たようなコードをよく書く。
Salary := BaseSalary + 1500 * OverHours * Ord(chkOvertimePaid.Checked);
Pascal では Ord(False) = 0、Ord(True) = 1 と言語で定義されている。
でも確かに 8 ビット時代の悪しき習慣のような感じもするな。
俺は同じ書き方やって言語で動作が違うような書き方はしないように心がけてる
じゃあ、Cで短絡評価は使わないってこと?
>>250 言語が変わったら、同じ書き方は出来ないと思うんだが。
>>255 なにその柔軟すぎる発想
お前PGとかこの業界やめたほうがいいよ
それとも釣りですか?
>>256 「同じ言語で、同じ書き方をして、違う動作をするような書き方」
であれば、しないのが当たり前。素人じゃあるまいし。
258 :
仕様書無しさん:2007/05/17(木) 14:17:15
おいおい
COBOLでかちゅーしゃ作れねーだろ
.netコボルならできるんじゃね?
261 :
仕様書無しさん:2007/05/17(木) 15:42:57
COBOLでJavaのVM作ればOK。
262 :
仕様書無しさん:2007/05/17(木) 16:12:45
Valiantをブリリアントと読んでいた。
そんな時期もありました。
━━ a. 勇敢な.
ひょっとして: variant valiantly Valerian
今年入社した会社のコード
if(《BOOL型変数》!= TRUE)
{
}else
{
処理;
}
もっと簡潔に書いてくれ・・・
BOOLというのが実は独自定義の真偽値型で、
TRUE==0でそれ以外がFALSEだとか?
>>265 それにしたってブロックからっぽにするんだったら
条件ひっくりかえしてelse削除でしょう。
>>267 ご指摘の通りだけど。else部分は省略禁止という規約も実在するしw
いや、条件に一致した場合の処理も後で書き加える可能性があるとか。
コメント残せよって話だけど。
Dim bFlag As Boolean = False
If bHoge Then bFlag = True
If bMoge Then bFlag = True
If bNuge Then bFlag = True
If bHage Then bFlag = True
:
:
If bFlag = False Then CB.Checked = True
なんつーか、下っ手くそなコードだなあ…
真偽定数と比較する奴ウザイ。
おれ明示的に描くようにしてるわ
真偽値と比較するのならなぜその結果をさらに真偽値と比較しないのか。
そしてその結果をさらに……
>>270 こういう、似たような処理をひたすら羅列して、ウォーリーを探せみたいな
ソース書いてる人って、どんな気持ちで書いてるんだろう?
あーめんどくせー
>275
きっと本気でそう思ってるんだろうなぁ……
恐らく「コピペでガンガンコードが書けて俺様ってば超Cool!!」とは思ってない気がする
コピペでコード書くのは全くCoolでない件
>>277 おまけにバグまでコピッてるのを見ると殴り殺したくなる。
こういう時はgrepするとワラワラと湧いてくるんだよな。orz
>>276 しかしどこぞの馬鹿に言わせると
馬鹿でも理解できるため良質なコードということになる。
良質なコードを生み出すことが超Coolでないわけなかろう。
正しくは「馬鹿だけ」が最小コストで理解できるコードだろ
>280
何か問題でも?
>>281 一般人には理解できないコードなのだが。
自分が一般人に含まれると勘違いしているのはイタさ倍増
多分、板住民同士でレビューしたら自称一般人だらけだろうなw
自分の知識が普通とか一般だと思うのは非常に危険だぞ。
285 :
仕様書無しさん:2007/05/18(金) 11:19:51
>>274 ステップ単価だったりして。
ステップ単価の文化に浸った人はコピペ多いよなぁ。
人月の狼
287 :
仕様書無しさん:2007/05/18(金) 17:25:39
ほら吹き狼
>>270 こういうふうに書き換えるのは、上手普通下手で言えばどれですかね?
Dim bFlag As Boolean = False
If (bHoge Or bMoge Or bNuge Or bHage Or ...) Then
bFlag = True
End if
If Not bFlag Then CB.Checked = True
他の人のコード見て勉強する機会があまりないので。
270は、どれか1つのフラグがいらなくなったら1行削ればいいので、
案外上手なのかもしれんと思いました
Dim bFlag As Boolean = False
If (False _
Or bHoge _
Or bMoge _
Or bNuge _
Or bHage _
Or ..._
) Then
bFlag = True
End if
290 :
288:2007/05/18(金) 20:11:38
>>289 ナルホド、これなら1行で消せますね。
他のコードで同じ書き方してました。
If 条件式でやるのはためらいますが。
hogeとかmageをセットしてるコードのほうが気になる。
自分はVB(でしょ?)知らないんだけど
bFlag = bHoge Or bMoge Or bNuge Or bHage Or ...
とは書けないの?
そこまで分岐するならビット演算とかどうよ?
VBScript環境やまして.netはよー知らんが、レガシVBとかVBAでは
s = "hogehoge" _
'& "piyopiyo" _
& "fugafuga"
は文法エラーということを忘れてる人はおらんか。
いや忘れていいなら忘れてしまいたい貴方♪だが。
>292
書けるお。
>>288 cb.checked = cb.checked Or ( Not ( _
bHoge _
Or bHage _
Or bHuge _
:
) )
C言語で。
typedef void (*func)(void);
・
・中略
・
func pFunc = (func)0x00010000;
pFunc();
辞めよう、とまでは思わないが、組み込みってこえぇ、と思った。
他には
void free(struct Data *pstData){
struct Memory *pstMemory;
if(pstData==NULL)return;
pstMemory = (struct Memory *)(((char *)pstData) - sizeof(struct Header));
pstMemory->stHeader.nUsed = 0;
}
とか
value = array[-2];
とか
自分が今まで覚えてきたことを色々否定された気分になった。
>>296 俺も怖い。組み込みは鬼門と考えるようにする。
>>296 スマン。
2つ目のやつの問題点を教えてくれ。
これよくあったよ・・・@携帯電話の網の中の人
というか普通のfreeも大雑把に見ると
>>296の二つ目みたいなもんだ。
300 :
仕様書無しさん:2007/05/19(土) 03:15:26
せめて
(uintptr_t)pstData - (unsigned)(&(((Memory*)0)->データ));
にできないかねぇ。
>>298 プログラム全体で見ると整合性が取れてるんだけど、
free関数単体で見ると、引数pstDataからさらに前のアドレスってことは
一見アクセス出来る範囲外のアドレスを叩いてるように見える。
極端な話すると
int main(int argc, char *argv[])
{
char *str = argv[-1];
printf("%s\n",str);
return 0;
}
みたいなコトをしてるように見えるわけだ。
>>300 うは・・・。
構造体のアライメントを運用で気ぃつけるとかはあったけど、
そういう発想は無かったな・・・。
さんきぅ。参考になります。
>>296 value = array[-2];
これの動作は未定義なのでは?
バグ、それも謎の挙動が多いと評判最悪のシステムのメンテを担当する事になった。
普通に順繰りに実行すればいい処理1〜3をわざわざ
for(i=1; i<=3; i++){
switch (i){
case 1 : 処理1
case 2 : 処理2
case 3 : 処理3
}
}
みたいな謎のロジックで実行していたりしてアタマ痛い…他にも
char *hoge(char *s, const char *ct, int n){
if n==0{
strcpy(s, ct);
} else {
strcat(s, ct);
}
retuen s;
}
を遥かに大規模にしたような、標準関数を1つに纏めて、引数で実行する関数を
選択するようなのもあって、作った本人はかなり自慢げに
「これで標準関数を覚える必要が無くなり、ソースの可読性も増した」と
94年当時の日付入りでコメントを残しているんだが、
その問題の関数の前後で情け容赦なく素でstrcpyとか使われていて、
もう何が何だが・・・
リファインして良いか責任者に聞いたら、結構重要な部分だから、
汚いソースでも動いている以上手直し不可だって。
>>304 上はよく見る。
下もよく見・・・るわけねえええええ
>>304 上は各処理の後にbreak;はあるの?
あったらただの馬鹿だな。
>>304 Fの仕事の後では全然なんでもないと感じる。
やつら車輪の再発明大好きで、標準関数同等品の再開発はもちろん、
それを作ったのが同じF内でも課が違えば、自分ところで再開発するからな。
一つのシステムに同じ機能が何箇所も独立してコーディングされてて、
成績上位者が軒並み逃げるのも判る気がする、と思った。
>306
>上は各処理の後にbreak;はあるの?
実はある…orz
完璧、思いつきで組んでみた的な無駄なロジックいっぱい。
一つの関数内でローカル変数を初めはインデックスカウンタ、
下の方では値の交換のための受け皿に使ってたりもするし。
>>308 >一つの関数内でローカル変数を初めはインデックスカウンタ、
>下の方では値の交換のための受け皿に使ってたりもするし。
この誘惑に駆られちゃうことがあるな…
新しい目的のローカル変数が欲しいんだけど、既にいくつものローカル変数があって
新しく宣言するのは気が引ける時とか。
「おやこの変数この処理の後は使ってないや、使っちゃえ」って感じで。
保守を優先するなら、目的が違えば新しく宣言すべき?(規約にもよるだろうけど、一般論として)
>>309 > 保守を優先するなら、目的が違えば新しく宣言すべき?(規約にもよるだろうけど、一般論として)
当然だ。
ローカル変数多すぎってのは、リファクタリングの必要がある可能性があるよ。
クソみたいなソースをリファインするのは我慢できるが、
クソみたいなソースと付き合うのは苦痛だな。
>>309 確認したいが。
その関数内のローカル変数の現在の個数はいくつか?
(一般論を知りたいか?w)
>>309 ジジイみたいに関数の先頭でどっさり宣言するからだろ。
スコープ絞って宣言すれば、ほとんどそんなことにはならん。
>296
freeってそんなもんでしょ。組み込みじゃなくても
GNU libcのmalloc/freeはもっとスゴイ、という話を聞くけど。
>>312 10個かな。
2次元矩形の現在の開始〜終了座標と更新前の同座標を保持する必要があって、
元データの構造体1個と、それぞれ単独変数に追い出した4個×2で9個。
それに、問題の変数1個。他にもあったかも。
単独変数に追い出した4個×2はなくてもいいと思うんだけど、それないとコード追いにくいって
メンバがいるもんで、残してる。
リファクタリングの精神忘れてました。ありがと。見直してみる。
>>314 組み込みじゃなければmalloc/freeを使えば良いわけで。
そういや昔居た会社での事。
引数の数が8個9個が当たり前で、うち6個はどの関数でもやり取りされてるから、
「構造体にまとめませんか?」って提案したら、「難しくなるから駄目」って却下。
やたら構造体とかポインタだとかに拒絶反応のあるところだった。
>>306 >>304の上の処理はbreakが
あるかないかよりもswitchの後に続く処理が
あるかないかが重要なんでは?
>>296 malloc/free周りは基本はそんなかんじでしょ。
俺も自作したとき、似たようなコード書いた。
>>309 俺は、単純なカウンタ変数やインデックスの
受け皿の変数は使いまわしてもいいと思う。
例えば
int i, j, k;
を意味ごとに
int hoge_i;
みたいに名前を変えたくないしな。
321 :
仕様書無しさん:2007/05/19(土) 13:18:12
そんな素人コーディングだめだろ
俺等のところ同じようにしろ
int int_id_0000001, int_id_0000002, int_id_00000003
こうやって全部定義すれば仕様書みれば全部意味がわかる
>320
必要な時にブロックを生成して、なかで
int iを幾らでも定義すりゃいいじゃん。
>>309 グローバル変数として宣言すれば、宣言は1回で済むぞ。
同じものを幾らでも使いまわせる。
これは便利。覚えておけ。
後輩がそのパターンをやてってくれて頭抱えてるんだが。
学歴あってもセンスないやつはダメだ('A`)
>>323 そういう時は、自分で同じパターンの
読みにくいコードを書いてやって、
後輩に読ませれてみればよい。
本人はそれがわかりやすいと思って書いてるんだから
意図が理解できるはずもない
仮に
>>324みたいな事をやって、
そいつがそのソースを即理解できたのなら、
文句ないんじゃねえの?
だって本当に分かり易かったんだろ?
とりあえずLispとかPrologとかマイナー系言語で書いて
「俺には判りやすいんだからいいだろ」といっとけ
>>327 自分が見て分かり易いかどうかより、
他人が見て分かり易いかどうかの方が重要なんじゃないか?
「俺はいつも"他人が見て分かり易いコード"を書くように努めている」
という奴に限って糞コードを書く件について、どう思う?
>330
そこの会社のわかりやすいコードのレベル=クソコードなだけ。
書いているうちにそれしかかけなくなる罠
みんないろいろなコメントありがとう。一般論もっと聞けるとうれしいけど。
>>320 i, j, k で思い出した。
漏れは i と j がぱっと見た目で区別しづらいことがあるから、
一文字変数は i, k, m, n, x, y, z, a, b みたいに、区別しやすい飛び飛びの
アルファベット使ってる。l も大文字の I と混乱すると嫌だから使わない。
i, j, k のように一文字アルファベット連続で使うのは、どんな理由があるのかな?
>>323 遠慮しときます。
ウッカリ、ある関数で使った後にもかかわらず別の関数で以前の値を保持しているつもりで
使おうとする実装をやってしまって、デバッグで痛い目にあったことがある。
>>332 大昔のFOTRANでI,J,K,L,M,Nで始まる変数は宣言なしで整数型になったから
>>334 とてもためになりました、ありがとうございます。
会社に入ってから勉強した文系プログラマなのでこうした基礎教養がないです。
N M
Σ Σ Aij
i=0 j=0
こっちの法の使い方がもとだとおもうけどねー
元来FORTRAN(FORmula TRANslation)ってのは数式の処理目的だから当然だな
飛び飛びって初めて見たな。
それはそれで激しく嫌だ。
>>336 そして数式でiから始まる文字を使うのはiがindex(添え字)の頭文字だからだろうか。
iterationのiだと主張してる人もいたが数学に元を辿ると違いそうだなぁ。
元FORTRAN屋なんて自分以外には何人生き残ってるか知らんが、
いまだにi〜nで始まる変数名を見ると「整数型」と思ってしまう。
たぶん、一生治らんなw
index
j
k
length
m
number
一文字変数ならi〜nは整数だと感じる
それは普通だろ。
むしろ、「倍精度実数型」や「文字列型」とか定数のiを作るほうがどうかしてる。
何でうちの会社はこういうのがいるんだろう…。難読化か?
逆にaやbが整数だと気持悪い
>>338 漏れもすっきりしてるわけでありません。
i と j を打ち間違えてチェックに時間をとられたり、i I と l の区別に一瞬
ためらうことがあるので、そういうところで時間ロスしたくないと思って、
ぱっと見ても視認しやすい文字だけ使うようになりました。
皆さんはそういうことないですか? 漏れが下手なんでしょうね。
>>344 そーゆー時はフォントを書き換えると良いよ
>>344 うちのコーディング規約では、そもそも1文字の変数名が禁止。
それと意味の無い変数名も禁止。
例えば表を処理する二元配列のループ回すカウンタとかなら、
int nCntRaw,nCntCol;
とかになるかな。
>>345 そういう意見出ると思ってました。
開発環境が固定されてなくて、設定を持ち歩いたり、いちいちフォントを設定しなおすのが
面倒なんです。
使える開発環境のデフォルトの設定ですぐ読めるコードを優先してます。
>>346 普段は漏れもそうです。一文字変数は、ループカウンタのような限定された状況だけですね。
こんな感じ。
for ( i = nStartRow; i <= nEndRow; i++ ) {
for ( k = nStartCol; k <= nEndCol; k++ ) {
寿命の短かったり重要でない、変数名が短いほうがいい。
ソースがうるさくなる。
>意味の無い変数名
だったら nXXXXって意味ないからやめろ
int CntRaw,CntCol;
でおけ
350 :
仕様書無しさん:2007/05/19(土) 22:21:05
int CR, CCでいいじゃん
>>349 あー、説明不足で申し訳ナス。
メインC言語なんだが、「決まったプリフィクス」をつけることになってんだ。
癖でつけてしもた。
例えばこんなのが変数の先頭に付く
int → n
char → c
void * → p
int * → pn
構造体 → st
列挙型 → e
グローバル変数 g_
ハンガリアンはいまどき、はやらないな。
353 :
仕様書無しさん:2007/05/19(土) 22:30:05
>>351 つか、M$すら使わなくなったDQN記法をなぜ採用する?
おまえの会社頭おかしくね?
>>353 さぁ?そうなってる背景は知らんし、今んトコ困って無い。
良かったらどこがDQNなのか教えて貰えんか?
一文字変数禁止なんてルールきめたやつって、コードを読み書きした経験がろくにないんだろうな。
うちの会社にもいまだにハンガリアンしてるやつがいて
ワロタ
現在進行中の糞プロジェクトなんか、コーディング規約がめちゃハンガリアン
でかけりゃでかいほどハンガリアン率が高いと思う
359 :
仕様書無しさん:2007/05/19(土) 23:05:14
俺できるよねって感じで売り込んでるじじぃPGなんかは
ハンガリアン率が高い。
JavaとかUnix系とかはハンガリアン使わないんじゃないの?
int cntRaw,cntCol;
俺はこうかな。
つかRawって何だ。Rowだよな。
>>356を読んでみたが、デメリットが良く分からんかった。
個人的には変数名でデータの型がわかるだけで大分便利なんだが。
慣れてしまったら煩わしくも無いし。
慣れるまでに掛かるコストがメリットと釣りあわない(or無い)ので
ハンガリアンなコーディング規約はクソだ、ということか?
>>363 型情報は名前にのせるほど重要じゃないってことだろ。
>>362 フツーに間違えた・・・。
よく間違える。
>>365 JAVAとかRubyとかはさておき、C言語じゃ大事だと思ってたんだが、
世間的にはそういう認識なんか・・・。
勉強になりました。
MSも捨てた記法だし
MSはC言語自体捨ててる
>>360 それが未だに使われてるから困る
死ねばいいと思う
>>366 型情報を変数名に入れると、
型が変わる度に名前が変わる事になる。
そんなのおかしい、不自然だと思わないか?
例えば、「身長」がmm単位からcm単位に仕様変更され、
型が整数型から浮動小数点数になっても、身長は身長だろ?
>>362 cunt rawの略。つまり生まんこってことだ。
>>363 変数の型を変えたい時に面倒なんだよ。
あと、型情報が重要じゃないわけではない。
変数の宣言箇所を見るのが面倒くさくなるほど
ソースをでかくする設計をまず見直せって事でしょ。
プリフィクスなんていらん。
読み返してみたけど。
プレフィックスをつけるべきだ
という発言は誰もしていないね
>>363 変数名って適当な長さがあるでしょ。
その中に重要な情報を載せていくと型名を載せる余地が無くなるわけだ。
型名は探せばわかるが、変数名に載せないとわからない情報がある。
あとは、機械的にチェックするツールが無きゃ信用できないから意味が無いと思う。
if(i==0){
foo();
}else{
//空文
}
規約でelse省略不可だったんじゃないの
もともと処理あったけどいらなくなって消して、elseだけが残ったとか?
378 :
仕様書無しさん:2007/05/20(日) 02:42:21
379 :
仕様書無しさん:2007/05/20(日) 02:59:30
if(i!=0){
//空文
}else{
huu();
}
Javaでハンガリアンやりたがる奴は頃してもいいよね。
>>370 型が変わると変数名も変えないといけないってのはハンガリアン否定論としてよく聞くけど、
実際問題、型を変える頻度ってどれくらいあるもの?
変えるのだって、「拡張する必要があって止むを得ず」ならともかく、「使い方を間違ってたから
変更」みたいなのなら、それは設計をちゃんとやってないただのバカだと思う。
変数名の他の部分で、以前の型に依存した処理をやってて、バグを招く可能性がある。
それに、「変数名の型を変える」だけなら、今はエディタやIDEがマシになってるんだから、
一括置換ですむのでは?
>>356のリンク先で議論されている「チェックのしやすさ」の点で、システムハンガリアンも
有効活用できると思うんだけどな。こだわりすぎるとよくないけど。
変数名を変えられるエディタなら、
変数の型もでてくるんでねーの。
#ま、クラス・構造体に対して、システムハンガリアンは
#大抵のところ無力だから、どーでもいいけど
ハンガリアン使ってるのはうざいなぁ…
醜くて仕方がない
385 :
370:2007/05/20(日) 13:01:44
>>381 頻度とかは無関係。
別に同じシステム内に限った話じゃなく、
全く別のシステムでも、同じ物を表す変数の名前を付ける場合でもいい。
同じ物を示すなら、当然同じ名前を付けるだろ?
名前に表現方法を入れるのは不自然だと言ってるんだよ。
身長の例でいくと、
単位がmmでもcmでもインチでも尺でも、身長は身長だ。
混在して使う必要がないなら、名前に表現方法など不要だろ?
386 :
仕様書無しさん:2007/05/20(日) 13:33:41
>>385 単位がmm、cm → 基本型
身長 → クラス
わざと混同してるのか?
>ハンガリアン
どーでも良いが、そろそろ大分スレ違いじゃまいか?
相変わらずヴァカだなM$
だから素人に文献書かせるとろくなことにならない
自分が今書いてるところの変数の型も覚えてられないような奴とか、
覚えてられなくなるような無駄に長い処理書くような奴は
プログラム書く資格ねぇよ。
こう言うと「他人が書いたのを解析するときにいいじゃないか」とか出てくるが、
「そのハンガリアンで書かれてる型が実際の型と一致してること」はまったく保証されないんだが?
>>381 頻度は確かに低い。低いが、無いわけじゃないだろ?
それに、型に依存した処理をやってて型変更時バグるってのは、「変更時にチェックしたか」が問題であって、
変数名をハンガリアンで書いてようが書いてまいが同じこと。
ハンガリアンは
その変数が出てくるたびに
いちいち/*コメント*/つけるようなもんだ。
宣言部分を検索すれば済む話だよね
検索するようでは駄目だ。
もう関数(メソッド)の長さの話になってしまうが。
っつーかIDE使ってれば変数の型なんぞすぐに知ることができるだろうに
いったいいつの時代の開発環境なんでつか?
viつこーてます
VisutalStudio を使いまわしてると
わかるとおもうが、勝手に変数名に
dwとか付いたり開発者が言いくる
められたのかどうかしらないが、
仕様的にヴァカすぎる
その仕様を疑いなくそのまま放置する
M$の幹部どもも率直にヴァカまっしぐら
というかハンガリアン広めておいて
元の文献の趣旨理解していないとは
どういうカラクリになったらそうなる
んじゃい!
397 :
仕様書無しさん:2007/05/20(日) 21:08:12
>>390 型変更した時に変数名を変えれば、それによる挙動のチェックを
モレが出ないようにフレームワーク化出来る。
あと
>「そのハンガリアンで書かれてる型が実際の型と
> 一致してること」はまったく保証されないんだが?
コーディング規約守れボケ。
約束事が守られてない前提で仕事出来ん。
規約に無いのにハンガリアンに頼る奴のことは知らん。
398 :
仕様書無しさん:2007/05/20(日) 21:36:53
IDE全盛の今となってはハンガリアンが嫌われるのもよくわかるけど、
他人のコードがハンガリアンだからと言って貶す資格はないよね。
まあ、結局はコーディング規約守れって話だよね。
いや、だからハンガリアンがコーディング規約に無い以上、使ってもらっては困るんだがw
>型変更した時に変数名を変えれば、それによる挙動のチェックを
>モレが出ないようにフレームワーク化出来る。
あほか?これのどこがハンガリアンに関連すんだ?テストフレームワークとかコンパイラの仕事だろが
よけいな仕事をやっておいて自己満足してんじゃねえぞ
このスレは基地外が多いですね
>>399 コーディング規約にハンガリアンを入れるのを否定してるんじゃないの?
>あほか?これのどこがハンガリアンに関連すんだ?テストフレームワークとかコンパイラの仕事だろが
型変える→宣言箇所の変数名を変える
→変数を使ってるところをチェックしたら、使用箇所の変数名を変える
という風にルール化すると、未チェック部分があったらコンパイルが通らない
すべてを置換
面倒だから、みんなboost::anyにしようぜ。それでハンガリアンも問題無し。
わかった。
荒れる元ってだけでも
ハンガリアンは使わない方が吉、と。
論争する時間がもったいないわい。
ええー、組み込みならシステムシステムハンガリアンは結構有効だよぉ
Win16でFARポインタとNEARポインタを区別したいときには良かったけど
組み込みだとなにがいいのさ。
Microsoftはついには人々に言い始めたのだ。「ハンガリアン記法は推奨しない」。
ポインタのアラインとか、データ範囲(-0x80~0x7F)とか。
リソース少ないとなんでもかんでもlongにはできん。
:
:
int i = 0;
array[i] = i++;
今までよく動いてたと思う。危なっかしいったら。
なんかようわからんけど、変数名の頭にintとかfloatとか付けるのは
それが的確な名前ならそれでもいいという考え。
ハンガリアンが愚かなのはint型だからintってprefixを付ければ良い
とかいう思考停止故だと思ってる。
ポインタの p とかはあった方がいいなーと思うことが多いな
それより vector が困る。
std::vector<HOGE> hogeVec;
HOGE hoge;
hogeVec.push_back(hoge);
Vec とかつけるのあまり好きでないんだが、他にいい案が浮かばない
それあとでやっぱりdequeにしよう、とかいったときどーするの?
>>411 うん、だから困ってるんだよ
変えるべきは下の HOGE hoge; なのかもしれないけど、いい案が浮かばないの
名前の変更なんか、IDEのリファクタリングで一発じゃん。
hogeVecはいかがなものかとは思うが。
ハンガリー人はテンプレートパラメータにどんな
プリフィックスをつけるの?
>411
月並みだがVecを何の目的で使うかジャマイカ
ListでもBagでもCollectionでもお好きなのをだうぞ
ハンガリアン、ハンガリアンとか言うヤシに限って、
クラスのプリフィックスがclsだったり、構造体のプリフィックスがstrとかだったりする。
ハンガリアンの意味、利点を履き違えてるとしか思えない。
そこが、ハンガリアンが愚かである所以だと思われ。
>>414 それいったら型が何かなんて
IDEなら一発ジャン。
いいっこなしよ。
自分はその
「IDEが無ければ開発作業自体が出来ないPGを多量生産するような考え方」
は承服しない。
>>420 テキストエディターが神
の派閥なわけ????
>>421 そんなものに派閥なんかあるか!w
エディタが使われていないころから仕事をしているPGさ。
>>422 「emacsは最高のIDE」という派閥がある
>>422 あ・・・あれか??
ベタでCやベーシック書いてた時代なのか??
MSX世代の予感・・・・
テキストエディタが神とは言わんが、
現局に行ってviしか無い環境でソース弄くるというのはある・・・
#もちろんデスマ中
>>425 おまwww
こんなところ書き込んでる場合じゃねええええ
>>424 BASICにはエディタが組み込まれてたがな(俗にカーソルエディタと呼ばれてた)
エディタなしっつーとパンチカードの時代になるな
コーディング用紙に書いてパンチャーに渡す
そんな時代もあ〜ったねと〜♪
辞めようってほどじゃないんだけど、もうとっくに辞めてった奴が残した遺産。
BOOL InitInstance( HANDLE hInstance, int nCmdShow )
{
HANDLE hWnd;
hWnd = CreateWindow( 中略 );
if ( hWnd == NULL ) return ( FALSE );
ShowWindow( hWnd, nCmdShow );
UpdateWindow( hWnd );
return ( TRUE );
}
なんだその無駄な改行は。
昔から一行おき/二行おきに書く人はいたけどねw
431 :
仕様書無しさん:2007/05/21(月) 10:46:14
コメント行を機械的に取り除いた跡かもしれない。
…UpdateWindowに何行コメント書いてたんだyp!
ハンガリアン云々と高尚な話題で議論出来る人たちが裏山しい。
俺なんか、今戦ってるソースが
Select Case Ret
Case 1
Call FuncA( 1 )
Case 2
Call FuncA( 2 )
Case 3
Call FuncA( 3 )
Case 4
Call FuncA( 4 )
Else
End Select
こんなんばっかりだぜ('A`)
あ、>432の一番下のElseは無しね。
434 :
仕様書無しさん:2007/05/21(月) 12:38:48
>>427 >パンチカードの時代になるな
紙テープもお忘れなく。
ソースの修正ツールはハサミとノリだ。
>>435 磁気テープもお忘れなく。
修正ツールはユーティリティ起動とそれに対するバッチスクリプトを含むJCLだ。
宇宙戦艦ヤマトの記憶媒体は磁気テープだぞ!
jspとjavascriptでコードが汚いのは最悪だ、、、
紙テープを目視で読んで東京湾に出現した怪獣を特定する。
JSPとかJavaScriptが汚いのはもうしょうがないよ。
あれはそういう人力で何とかしましょう、っていうアーキテクチャだと思う。
さっさと諦めて他人に押し付けた方がいい。
JavaScriptのソースはやだよぉ〜〜。
型変換気持ち悪いよぉ〜〜。
str-0ってなんだよぉ〜〜。
num+""ってなんだよぉ〜〜。
>>441 わかる・・・気持ちはわかるぞ・・・・
だが・・・・嫌でもやらねばWEBアプリは客先のバカな要求に耐えられない
気持ち悪いなら明示的に型変換関数使えよ。
他人が書いたソースだろ?
明示的に型変換したらしたで今度は次の奴が気持ち悪いとか思いそうだな
気持悪さならPerlが一番じゃないかと
@_とかマジ死んでくれ。
染まると気持ちいい
引数一つで済むような些細な差異しかない、同じ処理をする関数が延々10個近くあるソース。
頃したい。
>>449 そんなのが36個あるソースのメンテをやらされてます
1関数あたり1000行超えてます
書き直せばぁ
逆にステップ数を稼ぐ手法としてはいんでね?
後のメンテは考えてないけどね。
それとも、保守も時間がかかるからその分ふんだくれることを狙ってるのかな。
ソースの1行を修正する度に理由を書いて判子貰わないと作業できない場所。
あー、リリース前の話ねw
455 :
仕様書無しさん:2007/05/30(水) 21:53:38
今日たまたま発見したもの
if (flag ? true : false) {
何がやりたかったんだろう・・・
if (trim(hoge = "")) then
hoge = "zzz"
end if
String型の変数に全てTrimが掛かっている
458 :
仕様書無しさん:2007/05/30(水) 22:19:30
Private bool HogeHoge()
{
if (!Nullpo)
{
return false;
}
else
{
…………………………………
…………………………………
…………………………………
if (Nullpo)
{
return false;
}
}
}
…のところにスリープとか入ってそうだな
460 :
仕様書無しさん:2007/05/30(水) 22:32:56
ソースコードじゃないけど・・
cvsでキーワード置換使ってるの見たとき
try {
// .......
} catch(NullPointerException e) {
System.out.println("ガッ!");
} catch(Throwable e) {
}
解ったから消せ。
あと、握りつぶすんじゃねぇorz
テラワロス
try {
・・・
} catch(ArrayIndexOutOfBoundsException arrayIndexOutOfBoundsException) {
・・・
}
>>463 あるある・・・
もしかして、伝説のforループを例外で抜けさせるアレ?
ループを抜けるのにthrowを使うのはよくやらないか?
別に、break, return, gotoのどれかでいいじゃん。
>>465 素直にbreak使うか、多重ループならばメソッドしやがれですぅ
たかがループ抜けるだけなのにいちいちthrowなんてありえねぇ
470 :
仕様書無しさん:2007/05/31(木) 22:53:36
添字に-1が入ってきても普通に抜けられるのはまずいんでない?
無限ループの仕様だから、ループを抜けるのが例外なんだよ!!
ふーん
ほ〜
MISRAのコーディングルールに従ってください
って言われたときは、やめよーかなと思ったよ・・・
で、メンテするコードがコーディングルールを
まったく無視してるのを見たときに
やっぱ辞めておけばよかったと思ったね
>>470 可能性があるなら添え字に出来る範囲の数かちゃんとチェックしてくれよ。
バグ出たら追いづらくて仕方ない。
と思ったんだが、もしやスタックやら何やらのメモリ潰れるような現象を想定してるのか・・・
MISRAって知らんかったので、ググってみたけど、無料じゃ読めんのか。
a = hogehoge();
a = a; // debug
b = fugafuga(a);
b = b; // debug
return b;
みたいにほぼ一行おきに無意味な代入文があるソース。
邪魔だから消しとこうと思ったんだが
for (i = 0; i < c; i++)
i = i; // debug
burabura(i);
…えーと、今これで動いてるわけだし、余計なことはやめとくかな…
うん。これは触らない方が良いな。
外すとヤバい無駄代入ってあるんだよな・・・
480 :
仕様書無しさん:2007/05/31(木) 23:46:28
1ファイルで2万ステップ
グローバル変数1000個弱
関数が関数を呼び出しまくりでいくら掘り下げても関数の仕様がわからない
大手もクソなんだなと思った
>>304 そういうループとswitch分の逐次処理をよく見るんだけど、ああいう書き方ってどこで教えてるの?
あと、どういうメリットがあると思っているんだろう。
本人を問い詰めて聞きたいのだが、既存ソースなのでどこの誰が書いたのかすら分からない。
>>483 無限forループにして iを処理ポインタにしてるのなら見た。
処理の途中から好きなところまで戻れる。
逐次処理でやる意味は不明。
>>483 うぇぇええwww番号がついて順番がわかりやすいえwwwwwwwwうぇえwwww
コメント?つけませんwwwwww
たとえばこんなかんじかな
for( i=0; i<N; i++ )
{
〜関数にするほどでもないけどコピペを連ねたくはない処理〜
switch(i)
{
case 0:
〜処理0〜
if( … )
break;
case 1:
〜処理1〜
if( … )
i=0;
break;
…
}
}
>>483 「同じようなコードは出来るだけ書かないようにする」という思想があるよ。
再利用とかじゃなくて、コピペっぽいことね。
まぁ個人的にゃ、メリットもデメリットも無い普通のコードに見えるが。
俺が見たのは以下のような処理。
iはfor文のループ変数とswitch文の条件にしか使っていなかった。
int array[5];
for (int i = 0; i < 5; i++) {
switch (i) {
case 0:
array[0] = func0();
break;
case 1:
array[1] = func1();
break;
case 2:
array[2] = func2();
break;
case 3:
array[3] = func3();
break;
case 4:
array[4] = func4();
break;
}
}
実際は、配列が30くらいの大きさで、case文が30個連なってた。
全て異なる処理でした。
>>489 そういうケースに遭遇したことは俺はないな。
無駄代入は文字通り時間的には無駄でしかないから、タイミングか何かの問題か?
それともメモリが不安定とか?
>>486 forループの中でiをいじるのは行儀がよくないし
それだったらコピペしてくれた方が100倍まし・・。
goto的な処理をgotoを使わずに無理矢理やるってことか
それだったら素直にgotoした方がまだましだな
ループカウンタをループカウンタ以外の用途で
使って何も感じない人は
コードコンプリート読んだらいいと思うよ。
>>491 >forループの中でiをいじるのは行儀がよくないし
そーゆーコーディング規約なら仕方ないが、そうでなきゃ別に。
俺なんて、「C/C++ に while 要らない派」だし。
>>491-493 ナニソレ?
じゃあforじゃなくてwhileだったら良いのか?
永久ループしてif(i>=N)break;で抜けてたらどうなんだ。
可読性もなんもカワンネくてアホくさい。
forでi使ってたらカウンタに見えるって、思い込み強いんじゃない?
>>486のiは、単なる制御用変数だろ。
そしてスパゲティコードが生産される、と
「〜に見えるって、思い込み強いんじゃない?」
そして俺言語生産。
typedef 〜
typedef 〜
typedef 〜
今、クソコードの生成過程が走馬灯のように・・・
>>496 だからコードコンプリートでも読んで出直した方が
周りの皆の(特に保守任された人の)ためになるよ。
ちょっとした変更でとんでもない動きになりうる事もある。
全部が全部そうだとはいわないが
だからこそ統一ルールとして、いじりたい変数は
カウンタとは別に用意した方がよい。
ちゃんと判りやすい名前でな。
なんでこんな基本中の基本の
受け売り書かにゃいかんのか。
受け売りかYO!
>>496 >forでi使ってたらカウンタに見えるって
単なるループカウンタではないのなら、i なんて使わない方がいいわけで。
単なるループカウンタでないなら
ループカウンタとして使う時点で危険が危ない。
簡単に見えるの、最初だけ。
ささいな変更でもどっかーんですよ。
コードコンプリートだとマコネルさん、
単なるループカウンタですら意味がある場合は
ちゃんとhogeIndexみたいな名前つけろとまで
書いとるな。そりゃちょっと面倒くさいよとは思うが。
>危険が危ない
・・・。
危険が危なくなったら二重否定で安全ってことじゃないか?
>>503 >コードコンプリートだとマコネルさん、
信望者なのかも知らんが、元MSじゃなかったか?あいつ。
>>508 そうだよ。
ジョエル・スポルスキーもそうだな。
で?
>>509 いやね、MS製品みるにつけ 「実践してねぇんだろなあ」と思ったり。
ま、書いてあることは概ね当たり前のことなんで
本自体が信用ならないわけじゃないんだが。
「自分が痛い目にあったから良く分かる」という事かも
>>494 breakやcontinueってのはanonymous gotoなわけで
anonymousな分ただのgotoよりタチが悪い
>>512 gotoより処理順が拘束されるから似たり寄ったりだと思う
>>512 行き先わかってるから、gotoとは違うだろ。
それがgotoなら、returnだって関数の最後の行へのgotoだけど、returnも関数の最後にひとつしか使わないって主義?
まぁ、break/continueは確かに行き先が分かりにくいという問題はあるねぇ。
ただ、何処に行くか分からないほどループ内が長いとか、breakで何処に出るかわかんないほど
ネストしてる時点で負けてると思うが。
ちなみに私は会社で「caseとcaseの間は長くて5行以内にしろ」と叫んでみてるところです。
横綱級の凶悪なコードはswitch-case絡んでることが多いもんで…。
goto 文使ってとんでもない所にジャンプかますバカも実際居るからな
ループの中のブロックが長いとcontinueとかbreakが憎らしくなる。
まぁ関数分割しろよって話だね。
分かってて使う分にはまったく問題ないよね
インデントが深くならず可読性があがるし。
あれ〜?とおもった項目
・&& ||演算子の右辺は副作用を含んではいけない
・continueを使用してはならない
・switch以外でのbreakもダメ
・可変長引数使うな
・再帰するな
・returnは関数の最後にひとつだけしか許さないんだからッ
>・returnは関数の最後にひとつだけしか許さないんだからッ
これはちょっとイヤかも。
>>519 元が自動車とかの高信頼性分野で組み込み専用のコーディングルールだからね・・
そんなもんだよ
可変長変数禁止とか再帰禁止はスタック絡みの懸念かなぁ。
本文読んでないから憶測でしかないが。
まぁ可変長引数ならJava式にvoid**で逃げる手も……自分で書いてて辞めたくなるわorz
>>522 >可変長変数禁止
これは明確な型チェックが出来ないからだと思われ。
voidのポインタ使ってもルール45にひっかかるっぽい。
・全ての型のポインタへの、またはポインタからの全ての型へのキャスティングは使用してはならない。
ポインタ型でキャストしている場合、ポインタ型の変数に対してキャストしている場合、
およびポインタ型を返す関数呼び出しに対してキャストしている場合、
「違反」レベルでレポートします。
だそうな。void *、使いどころねぇ・・・。
524 :
仕様書無しさん:2007/06/02(土) 01:34:07
ダウンキャストとかアップキャスト明示的サポートしてる
言語じゃないと危険で使えないよ。
for(double i = 0; i < 100; i = i + 0.1) {
}
演算誤差でハマりそうだな
VBの日付型(内部Double)を使って、日付の前後を調べるために
If( Date1 < Date2 ) Then
>527
途中で送信しちまった。
「日付型」という名前にごまかされているが、DoubleはDoubleだっちゅーの。
実数を直接大小比較するなぞ素人以下だ。
SQLの話
SELECT
NVL(項目名,NULL)
・
・
・
何がやりたいんだと
>>528 実数を == で比較するのは素人だが < や > で比較するのが素人とは初耳。
531 :
仕様書無しさん:2007/06/02(土) 14:21:42
>>528 ほんとにごめんなさい。教えて下さい。
Double を比較するのはいけないんでしょうか?
例えば、(Java)
double a = 1.0;
double b = 1.1;
if (a < b)
{
//
}
とかってダメなんですか?
是非、理由を教えて下さい。独学でやってきたタイプなので、
そういうのに疎いんです…。
「直接大小比較」が問題みたいだから、次のようならいいのかな?
diff = Date2 - Date1
If (diff > 0) Then
まさか VB だけに DateDiff() 使えって話じゃないよね?
中でやってることは上と似たようなものだと思うんだが。
534 :
仕様書無しさん:2007/06/02(土) 14:57:02
おまいら馬鹿か!
大学で何を習って来た?
IEEE754の規格書とその関連論文ちゃんと読め。
更に言うと、intelはIEEEに従ってすらいない。
一般論として浮動小数の比較はタブー。常識。
535 :
仕様書無しさん:2007/06/02(土) 15:00:11
ちゃんとやるなら正規化して
アセンブラでFPU命令叩いて
比較だな。
VB ならそれはコンパイラで面倒見てるのでは?
おいおいプログラミング暦20年の俺にもわからんぞ
>>534 じゃあ2つの浮動小数点データの大小を比較したくなったらどうすればいいの?
有効桁数とか誤差を意識して使ってる分にはいいんじゃね?
まぁ、お金関係の計算には使いにくいけど。
確かに==での比較は問題があるだろうが、大小の比較も問題あるとすると、
「秒程度の精度は浮動小数点を使用しても保証できる」という前提が崩れてくる。
その前提が崩れるということは、Date型は「秒程度は誤差あるかもしれませんwww」な
型になるわけで、そんならそもそも「Date型使うな」にするべき。
つーか、そのDate型は内部表現が浮動小数点だとしても、それぐらいの誤差考慮はコンパイラなり
ライブラリでやっとらんのか?
>>531 その数値において必要な精度を考慮して問題なければいい。
重要なのは、浮動小数点はある程度の誤差を持つということ。
その誤差が許容できるかどうかは実装者が適宜判断しなければならない。
>>525 が変数 i をループ内部の演算に使いたいんだったら、まともなのはこんなところかね?
for (i = 0; i < 1000; i = i + 1) {
double j = i
j = j / 10
}
545 :
仕様書無しさん:2007/06/02(土) 15:21:02
>>544 jにdoubleつけるなら、iにも必要だろ。
あとなんでi++を使わんのだ?
なんでセミコロンがないのだ?
もしかしてC系じゃないのか。
何もかもが気にくわねぇ。
この場合iはintでも構わんが、そもそもiの型が何なのかもこのソースからじゃ分からんな。
いらいらさせるソースという意味では
>>545に禿同。
547 :
仕様書無しさん:2007/06/02(土) 15:47:04
馬鹿にされている対象者と同レベルなのに
「まともなのはこんなところかね」
とか、あたかも上級者の如き知ったかぶりもまた
イライラさせる要因だなw
ということで、
>>544 も
この会社辞めようと思ったソースコード
にめでたく認定されました。
549 :
仕様書無しさん:2007/06/02(土) 15:51:31
へっ
辞めてやんよ!
>>550 日付には文字列を使えばいいんだよ。
日付型使ってる奴は馬鹿。
552 :
仕様書無しさん:2007/06/02(土) 18:54:45
>>540 なるほど…。誤差ですか。
んでとりあえず調べてみたんですが、Java では Double クラスに
static int compare (double a,double b)
というのがあるみたいで、実際にやってみると
double a = 1.0;
double b = 1.1;
double c = 1.0;
System.out.println (Double.compare (a,b) + "," + Double.compare (b,a) + "," + Double.compare (a,c));
で
-1,1,0
が出力されました。これを比較に使えばいいという事でしょうか。
ただ、Double.compare で 0 が出るのがいったいどういう条件なのかが
いまいちよく分かりませんが…。
554 :
仕様書無しさん:2007/06/02(土) 19:03:52
>>525も用途によるべな。
精度とか気にしなくていいから、とりあえずグラフを描くっちゅーんであれば
あまし会社辞めたくはならんぜよ。
for (double t = 0; t < 100.0; t += 0.1) {
double level = model.calcData(t);
view.plot(t, level);
}
>>553 まあなんだ、関東近辺に住んでるならかなりの人が使っているであろう
某サービスの中の金勘定プログラムな。
文字列を受け渡してそういう計算をして、結果を文字列で返してくるという
専用のライブラリがあるわけだよ。。。
関係ないけど、これからスイカがうまい季節になるな。。。
>>555 所定の座標100.0までグラフ書き終わるまでだろ
何回回るかは知らん。
話ループしそうなんでカウンタの話は勘弁な。
>>542 これって大小比較でなく等価判定の話だよねえ?
君、何か勘違いしてない?
559 :
仕様書無しさん:2007/06/02(土) 19:56:33
だから、"0.1"を2進数で表記してみろ。
>>557 こういう奴が居る会社がスレタイトルにあるような会社という事が解った。
>>561 新人じゃあるまいし、浮動小数でループなんかするコードはヤバイだろ。
00111110000000100
01000001000001100
01000001000000100
01000001000000100
01000001011000100
00111100011001110
565 :
542:2007/06/02(土) 21:35:32
>>558 あなたのアンカー先のレスにあるアンカーの先にはなんて書いてます?
俺にはこのように読めたんだが。
>>538 >じゃあ2つの浮動小数点データの大小を比較したくなったらどうすればいいの?
あなたの言うように、これは大小比較でなく等価判定の話と理解すべきだったんだろうか?
横槍だけども
>565=>542
何だその間接参照のネストだらけの表現はw
「このように読めた」と言いつつ、どう読めたか明示してないし。
>542のURLにある記述は、浮動小数点数の一致判定に関するもの。
大小比較の話じゃないよ。
サンプルコードに出てくる大小比較は、比較対照の2数の差が
許容誤差範囲内かどうかを判定するためのものだよ。
浮動小数点どうしの比較がタブーだなんてのは単なる妄言なんですね?
安心して寝られそうです。
やっちゃ駄目なのは等号で同値比較をすること。
浮動小数点の比較のときに念のために
>=ってぐあいにイコールつけたりしても問題ないですかね?
問題は無いと思う。意味があるかどうかは別として。
Select Case True
Case (hoge = "")
処理1
Case (hoge = "00") And (hage = fusa) And (mona = 1) And (giko = "01")
処理2
Case (hoge = "00") And (hage = fusa) And (mona = 1) And (giko = "02")
処理3
Case (hoge = "00") And (hage = fusa) And (mona = 1) And (giko >= "03")
処理4
Case (hoge = "00") And (hage = fusa) And (mona >= 2)
処理5
Case (hoge = "00") And (hage <> fusa)
処理6
Case (hoge >= "01")
処理7
End Select
orz
スゲエ、VBか?
悪い意味でVBを使いこなしてるな。
> Select Case True
だめだろ、さすがに。これは。
>>575 なんで?
お前、select case の使い方知らないだろ
VBではこれは当たり前のコードなのか?
……VBは糞って言われてる理由がはじめてわかった気がした
なんで?とか素で返ってくるあたり・・・その会社はヤバイな。
そんなコード書いてプログラマとして気持ち悪くないのか
Caseのチャンク数が上限に近い。
ちゃんと決定表を使うべきかと
>577
業務でVB使い続けて10年超えるけど、
こんなのは初めて見るよw
VBに慣れてても普通書かないコードだとは思うけど、
この程度で会社辞めてたらNEETまっしぐらだな
>>580 オタクの会社はこんなコードを書く奴を放置しておくの?
>572
ところでElseIfって知ってる? と聞きたくなるコードだなぁ
>>572の生産された過程は多分こんな感じだろう。
1. CASE文で書いてOKな仕様だった
2. 仕様変更なり考慮漏れで条件が追加された
IF文に変更することなく、CASEのままでどうにかならないかと思考錯乱
3. こうすれば出来る!と閃いた。
氏ねばいいと思う
いつのまにか572がコードを書いたことになってるな
前スレで
>>572に似たコード見たぞ。まあ
>>572はありえないとして、
TrueでのSelect Case自体は使い方によっちゃありかも、という流れだったような。
>>586 > TrueでのSelect Case自体は使い方によっちゃありかも、という流れだったような。
ほんとか?どんなケースだよ。
そんな選択はないと思うんだが。
>>527のケースでは < や > でも精度上問題ないが、やはり浮動小数点数を
単に不等号演算子で比較する奴はアフォ。
>>588理由を説明してくれ。問題となる例を挙げてくれるだけでもいい。
>581
放置してないからこそ、ここで初めて見ることになったんでは。
>>589 不等号は論理的に「等しい」を含まない。
有限精度の浮動小数点数での「等しい」とは、比較対象が十分に近い範囲内にあるということ。
不等号演算子はこの範囲内であっても厳密に数の大小を判定するのであれば、
まずは等しいと見なせるかどうかを判定し、その場合を除外して不等号演算子にかけないといけない。
これに準ずる手順を踏まなければ「等しく、かつ等しくない」という矛盾を許容することになる。
>>588 OK
分かったからアフォではない方法とやらを示してみ?
>まずは等しいと見なせるかどうかを判定し、その場合を除外して不等号演算子にかけないといけない。
これでは不十分?
>>595 ばっかwwwwww
こうやんだよwwwww
If CType(Date1.ToString("yyyyMMdd"),Integer) < CType(Date2.ToString("yyyyMMdd") ,Integer) Then
end if
ああ、「日付の前後」で「日時の前後」じゃなかったわけか。
ようやく要件を確認できた
こんな調子じゃ転職してもすぐ辞めたいと思える会社ばっかりのようだな
他社開発のソースを見てたらこんなん出てきた・・・
(Java)
if (oHogeHoge.equals(null)) {
//何かの処理
}
おもいっきりガッしたくなった。
ガッもそうだが
oHogeHogeのoも
かなしいなあ
>>599 てか、その処理って絶対に使えないんじゃ?
到達不能コードにはならない?
空気嫁ない=新人とは限らない
一応oHogeHogeがnull指してるんなら成り立ちそうな気もするけど、どうなんだろ。(oHogeHoge==nullと同じ?)
実験してみる気も起きない。
>>604 良くわかんないけど、equalsはstaticだっけ?
null時に呼んだら嫌なこと起こりそうなんだが。
良くわかんないのに発言してすまそ。
>>604 マジレスすれば、oHogeHogeがnullならヌルポ。
nullでなかったならば、定義上は必ずequalsはflaseになる。
608 :
仕様書無しさん:2007/06/05(火) 23:39:04
>>572 Select Case関連だが、うちの会社では、
Select Case job
Case 0
'なんかの処理
job = job + 1
Case 1
'なんかの処理
job = job + 10
Case 11
'なんかの処理
job = 0
End Select
みたいなのがいっぱい・・・。
しかも、jobはグローバル変数orz
今解析中のVBソース、「版管理」をコメントでやってる、と覚悟はしてたんだが
連続でプロシージャ二つまるごと履歴コメント化とかもうねアボガドorz
せめて履歴だけのゴミコメントはとっぱらいたいんだが
VB6ってコメント削除でバイナリ変わるっけ? 試しに削ってコンパイルしてexeをdiffに掛けたら一致せん……
>>599 >if (oHogeHoge.equals(null)) {
oHogeHogeのequalsはオーバーライドされていて、無効なデータや空データだったら、
nullとequalsでtrueと宣言されているのかもしれない。
if (! oHogeHoge.isValid()) {
くらいの気持ちで。
・・・つーか、equalsってオーバーライドできないの?折れJava抑止卵子。
>>609 EXEの構造よー知らんけど、生成時のタイムスタンプとかがヘッダに入らん?
>>610 オーバライドはできるけど、任意のオブジェクトに対してequals(null)は
「必ずfalseを返す」ことというガイドラインがある。
ガイドラインに沿っていないようなコードがあったらこのスレ向きだろうな。
>>609 611の言うとおり。その程度の知識もない人に引き継がれたというのは
ちょっと不安になる会社だな・・・
気になるやつ
public sub aaa(a,b)
...
end sub
呼び出しで
aaa (a,b)
callを記述してない ってのが焦点でいいんだよね?
>>614はエラーだろうが、これならたいがい通る。
Public Sub aaa(a)
...
End Sub
aaa (a)
さて、何故だ?
Cでの開発なんだけど。
プロジェクト共通のヘッダーファイルの中に、#define NULL 0 が存在した。
しかも、stdio.h内のNULLの#defineがそのままだから、2重定義の警告が出まくり。
その共通ファイルを直せばいいだけじゃん?!
>>616 public sub aaa(a,b)
...
end sub
aaa a,b
Private Sub SeikyuSyori()
''*---------------------- いろんな処理
・・・・
'○○ってさー、なんかキモくない?喫煙ルームで
'気安く話しかけてくるけど、もう死ねと思うよ。
'
'そうそう!そんな感じ!
'なんか臭いそうだしね
End Sub
IPメッセかメールの内容をソース上に下書きして
貼り付けてたらしい。その消し忘れ。
○○は俺の名前orz
リアルで辞めました。
イ`
VBってシェア的にはそんなに多くないはずなのにこの晒される量と来たら・・・。
VBてやっぱりレベルが低い人の割合が多いということかね。
どっかで読んだな。VBは敷居が低いかわりに天井も低い
簡単にできるが出来ることも限られる、それなりの言語でしかない
ただ、「簡単にできる」=「コスト削減」と思って、VB導入をやたら薦めてくる上司とかSEも
いるんだよねえorz
「出来ることも限られる、それなりの言語」は、今は正しくない。
Win32 API 呼び出しもできるし、多くのアプリケーションは VB 向けのタイプライブラリを提供してるので、
駆使すれば、それなりではあるが何でもできてしまう。
問題は、何でもできるためにはコードが汚くなりがちなことか。
結局同じことを言ってるだけじゃん
PowerBuilderよりはマシ
出来ることも限られる <> 何でもできてしまう
ではないのか?
C/C++・・・ワケの解らん奴が組むとぬるぽでフリーズ
VB・・・・ワケの解らん奴が組んでもぬるぽでフリーズしないが、意味不明なバグが紛れ込む
(ワケの解らん奴がAPI使うとほぼ100%の確立でフリーズするがw)
VB の API 呼び出し難しいんだよな。
API によくあるポインタ使えないもんだから VB の言語仕様をよく考えてコード書かないといかん。
今はサンプルコードがいっぱいあるから楽になったが。動かない時は C/C++ よりもっと試行錯誤になる。
VBのプロジェクトはデスマ率高杉。
>>630 けどさ、Cのプロジェクトでデスマ始まると本当に死人が出る場合がw
デスマにするのは10万ステップ譲って許そう。
だが、放火だけして逃げんな、責任もって氏ね。
と、あべしが放火したプロジェクトに投入されたヤシが申してました。
mySqlConn.Open()
mySqlCmd.Connection = mySqlConn
SQL = "SELECT * FROM TABLE"
mySqlCmd.CommandText = SQL
mySqlReader = mySqlCmd.ExecuteReader()
While mySqlReader.Read()
If mySqlReader("HOGE") = "1" Then
DropDownList.Items.Add(mySqlReader("HAGE"))
End If
End While
mySqlReader.Close()
mySqlConn.Close()
何のためのSQLだと言っていいですか
635 :
仕様書無しさん:2007/06/07(木) 23:13:07
VB6.0自体は、それほど悪い言語でもないと思うんだがな、
private/publicってスコープ明記できるし。
ただ、使う人間が悪すぎるんだよな・・・。
MSの余計なお世話に甘える奴が
カオスコードを書く
638 :
仕様書無しさん:2007/06/08(金) 00:47:27
639 :
仕様書無しさん:2007/06/08(金) 00:48:21
Z80CPUデュアルコアですがなにか?
>635
でもなぁ……隣で.net使ってる椰子がいるとさぁ。
Formの派生クラスとかTextBoxの派生クラスとか作り置きできるのがテラウラヤマシス……
同じような機能持ったフォームが3個以上になったあたりから激しく鬱陶しくなってくる
>>640 そりゃ機能的には絶対勝てないっしょwww
ちょっとしたツール作るのに久々にVB6開いたけど・・・すぐ閉じてVB.NETつかいましたとさw
Private Sub Text1_Change()
End Sub
Private Sub Text2_Change()
End Sub
Private Sub Text3_Change()
End Sub
Private Sub Text3_LostFocus()
End Sub
Private Sub Text8_LostFocus()
End Sub
Private Sub Text5_Change()
End Sub
Private Sub Text12_Change()
End Sub
Private Sub Text15_Change()
End Sub
Private Sub Text9_Change()
End Sub
でもデフォルトでコントロール配列にできるし
賛否両論だろうけど
どとねとはコントロール配列使えないんだよな。その点だけは却って不便になった希ガス
>>644 イベントハンドラ共有できるし、コンテナクラスに入れられるし、特に不便なところはないだろ。
vb6はフォーカス関係が糞過ぎる
いつの間にVB6議論スレにwwwww
648 :
仕様書無しさん:2007/06/08(金) 23:31:24
>>640 そりゃ.NETにはかなわんでしょ。
ただ、管理者がアフォで.Net framework入れさせてくれないときに
仕方なくVB6を使わなきゃいけないこともあるし。
VB.netも、標準モジュールが使えてしまうのが気に入らないが・・・。
int i, ii, iii, iv, v, vi, vii, viii;
ivとviがまぎらわしくて困るんですけど
ワロタ
俺のところで採用してみるかwww
652 :
仕様書無しさん:2007/06/09(土) 01:22:01
>>633 あべしは責任点火だけは得意だからな。
火の無いPJに無理矢理放火してデスマにする。
Access VBA
'××が0
If Me.XXXX.Value = 0 Then
ret = MsgBox("××が 0 です。" + vbCrLf _
& "続行しますか?", vbYesNo + vbExclamation, "××")
If ret = vbNo Then Exit Sub
Exit Sub
End If
えーっと・・・
てりやきマック吹いたw
続行らめぇ!!!!
if(a==TURE){
if( !strcmp(b,c)){
#define TURE 32
コンパイル通ってるのなら「ツレ」で正しいのかも知れない。
まぁでも確かにそこはかとなく辞めたくなるな・・・
・・・なんで32?
コンパイル通るのもすごいけど。
>>657-658 if(hogehoge() == TRUE){ ... }
とか書く馬鹿コードをあぶり出すためじゃないの?
if(hogehoge() == TRUE){ ... }
の何が悪いのか。
C/C++では偽値は0、真値は「0以外」。
一応ブーリアンは単項で条件判断すべき・・・とJavaの本では奨めていたが、
俺は ==TRUE は良いと思うよ。分かりやすいし。
>>661 んなものはhogehoge()の関数仕様次第じゃまいか。
そもそもC/C++にはTRUEなんてものは存在しない。
論理定数と比較するのはアホのすること。
ところで誰かTUREをフォローしてあげないのですか?
wwww
TUREたwwwwwwwwwwwwwっうぇ
Win32APIが返すBOOL型はマジで勘弁して欲しいと思う。
>>668 3値を表現するための苦肉の策だからな…
他にいい方法があるかわからん。
TUREはおいといて、Win32でなら、
if(hogehoge() != FALSE){ ... }
だな
>>669 boost::logic::tribool
>>672 だから、返値は論理定数じゃなくて単なるint値なんだろ?
Win32APIのBOOL型ってTRUE/FALSEじゃないの?
初めて知った俺はUnixプログラマ
676 :
仕様書無しさん:2007/06/09(土) 17:42:56
BOOL型なんてないよね。
UNIXにはあるの?
>>674 「関数仕様でTRUEまたはFALSEを返す」って書いてあったら直値使うのマズいっしょや。
そのTRUE/FALSEを返すっていう関数仕様の是非は、まぁ是とも非とも言わないけど。
個人的にはSUCCESS/FAILUREを自分で定義して使うのが好きだが。
>>676 むしろWindowsだとVC++でwindows.hをincludeするとBOOL型を使える。
gcc(g++)にはなかったと思うなぁ。
678 :
仕様書無しさん:2007/06/09(土) 18:22:37
>>677 >windows.hをincludeするとBOOL型を使える。
それ名前再定義したINT型じゃね?
>>678 まぁその通りだが、それがどうかしたのか?
MS的にBOOLは整数型なんだろうな。
ドキュメントにTRUE,FALSEの文字が見えないところをみると。
ホント紛らわしいよ。
#define FALSE (0!=0)
#define TRUE (0==0)
>>675 一部、TRUE,FALSE以外の値を返すAPIがあるらしい。
亀レスすまそ
>>104 おもむろに
#undef private
#undef protected
でいいと思うよ。#ifdefは要らない。
#ifdefといえば、
typedefされているかどうかを
#ifdef HOGEHOGE
で調べているコードを見たことがあるw
>#ifdefといえば、
>typedefされているかどうかを
>#ifdef HOGEHOGE
>で調べているコードを見たことがあるw
それはよくあると思う。なぜwかわからん。
typedef unsigned short ushort;
...
#ifdef ushort // 調べたつもり
ってコードを笑ったんじゃね?
上の方で実数の比較(EQU, GT, LT)はまずい、って話があっが、確かに言いたいことは分かるし
一般論としてはそうだけど、俺的にはちょっと現実に合わない机上論にも聞こえるな。
天文学的に扱う数字のレンジが広い場合は知らないが。
実数の型を使う場面というのは、演算結果に求められるある精度があるとして、
演算の累積誤差があるとしてもその必要な精度を満たす場合なわけだ、普通は。
であるとすれば、比較の前に必要な桁までで丸めた後の実数型を比較するのはなにも問題がない。
というより、これが意味的に問題でない場面でしか普通は使わない。
687 :
683:2007/06/10(日) 10:37:43
#iftypedef
>>686 あれは、ポインタがわからん奴がポインタ禁止とか言ってるのと同じ。
たしかにおまえには役に立つルールだが、自分だけにしてくれというやつ。
entityのクラスにfiledを持たせちゃだめだって
それclass?と思ったが、長いものには巻かれた。
>>686 ようは
・誤差を意識しないで使用する人(
>>686の「普通」でない人)が確かに居る
・「誤差を意識してますよ」ってのを明示しないと後で見た人が混乱するかもしれない
てことだと思う。
自分中心に判断しちゃいかんだろ。
俺としてはgtとltはまだ分からんでもないが、eqは流石に怖いねぇ。
0とのeq比較は例外だよな?
void normalize(Vec3 *v)
{
float sqmag = dotproduct(v, v);
float imag;
assert(sqmag != 0);
imag = 1.0f / sqrtf(sqmag);
v->x *= imag;
v->y *= imag;
v->z *= imag;
}
{
float r = 0;
while (r == 2*M_PI) { // (゚:ω;゚;`;;)
...
r += om;
}
}
>>693 > r == 2*M_PI
r != 2*M_PI
だった orz
>>686 比較の前に必要精度で丸めるのであれば問題ないだろうが、実際はそれすらしない厨もいるわけで。
ソースコードじゃないんだが、
「ちゃんとモジュール化しといてよ」と言ったら
「そんな高望みしないでください」と返された。
いや、貴方、情報系の現役学生なわけで、それを言っちゃったら、ねぇ
そんな彼から上がってくるコードは main() only なソースコード。
実験用システムに適合させるように書き直すこっちの身にもなってください('A`)
ソースコード
だよ
>>696 その子はバイト君かな?
ゆとり学生にしてみれば高望みもいいとこ。
書くだけで精一杯だろ。こいつら設計なんてすっとばしてハナからガシガシ組むんだから。
699 :
仕様書無しさん:2007/06/11(月) 16:36:04
一昔前は情報系と言えば、理工系最高偏差値だったが、
偽装派遣で今や最低人気。それでなくても、ゆとり教育。
偽装派遣に嫌気が差して大学に戻ってTAなんぞやってる
が、学生レポートなんてmain()だけのが大半。どーせ
情報実習でやる課題なんてToy Problemばっかしだし。
それでも自分で作ればまだ良い方。コピペが大半。
2割くらいがコピペ改変(変数や関数名を変えただけ)
だし。
自分で作るだけでも、ゆとり世代の情報系なら上出来。
情報系っていっても半数以上が初級シスアドすら取れないレベルだからな。
日本の大学なんてそんなもん。
701 :
仕様書無しさん:2007/06/11(月) 17:05:28
昔はそんなこと無かったんだがな。
偽装請負ですっかり不人気に成ってしまった。
間違って入って来る奴は、ゲームが好き、
とかその程度の動機で来る勘違い君ばっか。
702 :
仕様書無しさん:2007/06/11(月) 18:03:51
初歩的な情報教育ですらまともに教えてもらってないのに高等な事を学ぶ方が無茶
情報系じゃない高校生の俺の方がマトモなんじゃないかと思えてきた。
情報系の大学生の俺が来ましたよ。
情報系って、どんなことを習うんですか?
情報のことだよ
っつーか質問スレ逝け
>>698 バイトじゃなくて本分の研究。(ちなみに修士課程)
別機関と絡んで実験するんでインタフェースのすりあわせやらも
必要なんだが、そこらも曖昧なのよね。
複数ユーザが同時に使う実験なのにシングルユーザでの利用しか想定し
てないし(´;ω;`)
いっそソースじゃなくて仕様書くださいと。
別業界の内定とってるので、マ板の人々には迷惑かけないのが救いです。
>>703 たぶんそこらの大学生より上。自信持って精進しておくれ。
>>705 知識的には基本情報でやるようなこと。
大学入る前から開発やってたりするような人間には講義は暇だと思う。
かといって、あぐらかいてたら4年で泣くけどな。
>>705 理論だけで、コードは一切書かない所とかあるらしい。
スレ違いな話題を引っ張ってすまなんだ。
ちょっと愚痴りたかった。
今は反省している
例のSICPとかやってるのかと思ってた>情報系
if(d>0)
{
処理;
}
else if(d<=0)
{
処理2
}
・・・・・?
>711
ウザいが、辞めようとまでは思わない・・・・・と思った俺はもうマヒしちゃってんだろうか('∀`)
>>711 実は別スレッドで d を弄ってて、ifの評価中にも d が変わっちゃうんだよ( ゚∀゚)
それはそれで奇天烈なことに違いはないが
>>713 もしそうなら、本当に会社を辞めそうだ。
マルチスレッドで書き換えとかでもなければこのくらいは許容範囲だろ
もっととんでもねーの見てきてると・・・
ああオレももうダメですかそうですか\(^o^)/
だんだんと慣れてきちゃうんだよね。
if( a < 0 ) {
// 処理1
} else if( 0 > a) {
// 処理2
}
とか・・・麻痺してくると意味があるのか?と思えてしまう。
そしてa = 0 が原因で障害となるわけだ・・・
>717
どう見ても a == 0 の時スルーするためのコードだろ
常識的に考えて・・・_| ̄|○
>>719 処理1と処理2の内容が異なる理由を3行で
a < 0 処理1
a > 0 処理2
a = 0 スルー
>>721 そういう意図なんだろうな、真実は・・・
723 :
711:2007/06/12(火) 22:45:39
うちの会社のコードはこの書き方がデフォみたいで
違和感を覚えた新人の自分の方がおかしいのかと思ってましたが・・・
みなさんの反応見て安心しました
//void swap(int a, int b)
void swap(int *a, int *b)
{
// a = b;
// b = a;
// *a = *b;
// *b = *a;
int *c;
c = (int *)malloc(sizeof(char)*sizeof(int));
*c = *b;
*b = *a;
*a = *c;
}
「並べ替えするとなんかスワップしまくるんだよねー」
ってシャレですかそれはorz
>>722 if( a < 0 ) {
b = c/-a;
} else if( 0 > a) {
b = c/a;
}
じゃない?
if (a < 0) {
処理1
}
else if (a > 0) {
処理2
}
else if (a = 0) {
スルー
}
志村〜free, free
おまえら、 a < 0 とa > 0 が異なると思っているってマジレス禁止?
で?
>>724 ちょwそれでスワップしまくるってどんな貧弱な環境www
mallocのコストはお高くつくしヒープやキャッシュも汚れていいこと無しだが、
余程のことがない限りスワップはせんだろ。
732 :
仕様書無しさん:2007/06/13(水) 02:10:53
/* void get_marroc( int saize, char **baf ) { */
/* ↑2003.1.22.スペルミスを修正 */
void get_maloc( int sizu, char **baff ) {
(つд`)
( ゚д゚)・・・
せつねぇぇ(ノ∀`)
修正点のコードレビューしてないのかよ・・・
736 :
仕様書無しさん:2007/06/13(水) 07:41:29
>>727,
>>731 もしかして、mallocとfreeはセットで使わないと
いけないとか思い込んでる?
自分でmalloc書けば分かることだが、freeなんて
よっぽどのことが無い限りワザワザする必要無い
よ。むしろスコープを間違うと
>>730さんの言う
通り。
下手な入門本読んでないで、K&R嫁。単純mark&
sweepアルゴリズムだが、mallocの実装も載って
る。非常にタメに成るから嫁。
これは・・・
K&R に GC 付き malloc の実装なんて載ってたっけ?
>>736 こういう奴がいるからmalloc禁止しなきゃならなくなるんだよなぁ…。
あ、釣り? はいはい釣られましたよっと。
>>724 俺なら
>sizeof(char)*sizeof(int)
これだけで目の前が暗くなる。
>>736 君も入門書から読んではどうかね。
むしろ sizeof(char) だけで、何かしら嫌な予感がするね。
>>724 の「スワップしまくる」を見てスワップの意味を勘違いして???になった。
スワップさせてんだから正常だろ?と。
HDDに追い出す方のスワップだったのね。
>>727 見るまでメモリリーク見逃してた。GC言語ばっか使ってるからスキルダウンorz
懐かしのfree論争思い出した
その論争では結局どういう結論に到達したん?
まぁ、訊かずとも見当はつくが・・・
そもそも、わざわざmallocしている意味がわからん。
>744
ぐだぐだになってなんとなく沈静化→何かのきっかけで再噴火 を繰り返してるらしい。
ていうか、まだfjってあったのねw
fj.comp.lang.cでググると出てくるよ。
これが普通か?
void swap(int *a, int *b) {
int tmp = *b;
*b = *a;
*a = tmp;
}
コメント化している部分がこれまた泣ける…。
>>724 学生の僕でも「これはない」と思いました
>>747 実に「普通」ですばらしい。そういう「普通」のコードをかける人は珍しくなってしまったような気が
void swap(int *a, int *b)
{
*b ^= *a;
*a ^= *b;
*b ^= *a;
}
遅そうだ
>>749 あなたのような人材は「君子危うきに近寄らず」で別業界に就職すること
になるのですよ。
>>751 PICとかの非力組み込み系だとアリだと思う
>>751 そういう小手先の技を覚えて嬉しいのは判りますが
関数にしてたんじゃメリットが薄くなることに気付きましょう。
それと、*a == *b のときどうなるかも考えましょう。
試してみろ
*a = 34, *b = 34 として、
*b ^= *a; // *a = 34, *b = 0
*a ^= *b; // *a = 34, *b = 0
*b ^= *a; // *a = 34, *b = 34
めでたしめでたし。
*a == *b じゃなくて a == b と言いたいのかな、
>>754 は。
758 :
仕様書無しさん:2007/06/13(水) 21:11:29
char *data = 30000;
先輩、あのう・・・・いや、なんでもないっす。
コンパイルエラー出てからでいいから、気付いてね・・・
>>758 組み込みに違いない。
てかコレ、エラーどころか警告も出ないんじゃね?
組み込みか!組み込みなんだな?
0x7530に文字列が入ってるんだな?
>>732 /* 200X.X.XX 誤字なおしときました */
//void make_sparse_map(double *data, int wid, int hi)
void make_space_map(double *data, int wid, int hi)
>>760 いや、charがunsignedな環境において
リンカで固定にマッピングされた記憶領域に
バイト単位でアクセスしたいと見た。
組み込みやってるけど、
>>758には違和感ないぞ。
あえて言うならdefineしろってくらい。
試しに整数で初期化してみたけど警告しか出なかったよ。
あれ?手元の gcc で -std=c99 -pedantic 付けて試しても警告しか出ない。
エラーになるのって C++ から?
C++から、っていうか、C++とC99は既に全然別物
C++は暗黙の型変換、厳しいね。
しーくっく
770 :
仕様書無しさん:2007/06/15(金) 16:30:11
if (strncmp(&AAA->xxx[0], " ", 1) != 0) {}
素直に、
if (AAA->xxx[0] != ' ') {}
じゃだめなのか??
エラーだろそれじゃ
もっと素直に
if (AAA->xxx[0] ) {}
だろ
半角スペースとの比較じゃんかよ。
>771の居る会社ヤバス
>>770 != ' ')
顔文字に見えた・・・・ごめん、ちょっと疲れているみたいだ
明日も仕事いってくる
級位者には高段者の打つ手の深い意味など理解できないのさ。
そのくせ自分と同格のつもりで口をきいてくる。
いや
>>751がそうだと言うつもりはないが、
論理演算程度で嬉しくなっちゃう奴を上級者と呼ぶのはかなり抵抗がるけどね。
ブール代数っていうのは高校の数Iの内容なんだぞw
まともな日本語書けよ。
なんだよ、「ゆとりでも?」って。
人に通じる文章かけないお前が何言ってるんだw
>777はナッチだな
精進せにゃ!
「ゆとり世代でも高校で習う?」と俺は脳内補完した
というかその程度の補完ができないのはきっとゆとり。
吟味せず勝手に脳内補完するのはゆとり。
ゆとり世代からマジレス
ブール変数なんて数V、数C
でも教えてくれません><
チーズ鱈で有名なのはなとり。
↑
×ブール変数
○ブール代数
汚しすまん
>>776 >論理演算程度で嬉しくなっちゃう奴
お前がなんで、そう思っちゃうのかがわからない。
変な深読みをしすぎてるんじゃないの?
俺は
>>751の書き込みからだと
ユーモアと誠実な人柄を感じるけどな。
ここC/C++多いんだな。
うちの部署もC/C++で開発してるんだけど、
こないだ社外の業者に「若い子で」っていう条件を付けて構内外注を頼んだら、
「C/C++がまともに出来る人は35歳以上になります」って言われたよ。
最近の子はC/C++は出来ないらしい。
おまいら年寄りだろw
>>789 それ、時々聞くけど、それだと OS の開発やメンテなんかできなさそうだ。Linux や UNIX など。
>>789 じゃ、最近の子は何ができるんだ?
猫も杓子もjavaか?
組み込み系とかハードを触るソフトは軒並み全滅だろ
>>789 C/C++まともに出来る若い奴はそういう外注なんかに就職しないんだよ。
アセンブラ使いよりは多かろう>C/C++使い
Cは必修。
JAVAは選択だけど実質必修。
C++は研究室で使ったり使わなかったり。
>>794 FORTRAN必修
BASICとCは実質必修
あとは選択
ただし、Pascalは生まれつき習得済みということになっていた。
突然必修の実験科目に出てきて、犠牲者続出w
アセンブラ必修というすごいところもあったな。
つーかC/C++ってメモリ管理しなきゃならんので、
当然プログラマの比重が大きい。
そんなの気軽に外注に頼む時点でおかしい。
っていうか今はRubyとかPHPとかPerlがメインだしw
>>796 だれも外注に丸投げとは言ってないけどな。
新人を教育してC/C++を教えて使えるようにするのが時間的に無理だったから、即使える人材がほしかっただけ。
何人か使ったんだけど、C/C++の使える外注はオッサンばかりで、頭固くて使いづらいんだよねw
外注の偉い人に聞いたら今はJavaやWeb系の人が多いそうだ。UNIT,LinuxでC/C++は骨董品らしい。
スレ違いだったよごめんな
>>798 ×UNIT
○UNIX
typoすまん
>>798 まぁスレ違いなんだが。
JavaやWeb系は流行りモノだからな。
「趣味でC/C++」という時代はもう過去というのが俺の印象。
UNIX系弄って遊んでた人間がIT業界に来る時代じゃない。
俺は30歳でBSDで遊んでた人間だが、
同期10人居て「趣味PC弄り」って奴、居ないよ。
>>798 >だれも外注に丸投げとは言ってないけどな。
いや、漏れもいってないけど。
そもそも頼む時点で駄目だといってるつもりなんだけど。
頼むんなら、管理ごと丸ごと任せられるような信頼できる
業者に丸投げしたほうがましだと思う。
C/C++でそういった中途半端な対応をすると、後で、
泣きみるのはあなたの数代後の後輩だ。
>>801 C/C++ を駆使するような製品は、普通、その会社の中核製品だから、
管理まで外注するところは少ないと思う。そこまで行ったら、売った方がましでしょ。
うちもそう。プログラマだけ派遣を頼んで、設計や管理は自社でやってる。
>>801 いやー・・・請負よか派遣のが良いと思うけどなぁ。
派遣てことは管理は自分らがやるわけだし。
◎安倍自民党改悪の住民税の大増税 2007年6月から開始
年収(万円) 月収(万円) 社会保険 18年度住民税 19年度住民税 上昇額 前年度比倍率
150 12.50 181968 19500 35200 15700 1.80 約2倍
200 16.67 245520 33600 65800 32200 1.96 約2倍
250 20.83 288864 47900 96500 46600 2.01 2倍以上
300 25.00 346632 61300 125700 64400 2.05 2倍以上
350 29.17 433296 73500 152000 64400 2.07 2倍以上
400 33.33 491064 88900 185200 96300 2.08 2倍以上
450 37.50 548832 113100 219500 106400 1.94 約2倍
500 41.67 592164 146000 255100 109100 1.74 約2倍
550 45.83 678816 175100 286500 111400 1.64 約2倍
600 50.00 722160 208000 322100 114100 1.55 約2倍
650 54.17 765480 241000 357800 116800 1.48
700 58.33 852132 275600 393100 117500 1.43
750 62.50 895476 316300 433800 117500 1.37
800 66.67 929424 358000 475500 117500 1.32
http://money6.2ch.net/test/read.cgi/seiji/1168693249/
こないだ見たソースが関数ポインタだらけで泣いた
関数ポインタ≒gotoだからなあ。
無ければ不便だが、濫用されるとgoto以上に訳分からなくなる。
場合によっては、どこまで飛ばされるかは飛んでみないとわからないこともあるし。
ところで関数ポインタといえば、昔俺が書いたコードにこんなのがある。
void (*p)(void) = f;
p = (void (*)(void))((char *) p + 0x10);
いま見ると激しくorzだが、当時はこれでハッカー気取ったもんだ・・・
俺なんかgotoだらけのやつをいじったよ。
あっちもこっちもgoto。
…… // goto
……
…… // goto
…… // goto
でもコメントアウトされててさ。
誰かが全部goto文を潰したのかと思って(人−)感謝してた。
後藤だってことに気づくまで2ヶ月かかったよ。
gotô
>>809 後藤さん乙って書こうとしたら
そんなオチかよ
コメントを晒すスレは落ちちゃったんだな
格好良いなgotoってw
gotooza-sama
void foo(int (&arr)[10]) {
...
}
...
int a[10];
foo(a);
えーと、配列(int[10])を引数にしたいんですかね?
>>815 配列を参照で渡そうと思ったら、それしかやりようがないと思うが。
void foo(int arr[]) でええやん
へぇ、>815みたいな書き方もできるんか。知らんかった。
だが>817のほうが広く使われている気がするな。
配列のサイズを限定できるのが良いんじゃないか。
これとテンプレートを組み合わせるとちょっと楽しいよ。
セキュア版CRT関数のテンプレートオーバーロードで使われてた気がする。
俺なら容赦無く void foo(int* arr) って書いちゃうよ?
俺はいちいちサイズも渡しちゃってたわ。
うーむ恥ずかしい。
ちょっと気になったのだけれども、
その参照で渡した配列に対してsizeofは効くの?
効きそうな気がするけど。
>>817 その arr はポインタだと気付こう。
>>823 >その参照で渡した配列に対してsizeofは効くの?
sizeof(int) * 要素数になるのか、という意味であれば
勿論そう。
>>815 なるほどな。C++で参照がポインタの置き換えであることを利用したのか。
ポインタを使えば多次元配列渡しになることは知っていたが、こういうhackがあったとは。
お前の会社のソース、もっと見たい(笑)
(皮肉ではなく)けっこう参考になりそうだ。
>>826 >こういうhackがあったとは。
「配列へのポインタ」を「配列への参照」にしただけで
hack つー程のもんでもない。
>>827 多次元配列渡しの用途が主だった配列へのポインタを
そういった用途に囚われることなく、型セーフな配列渡しに応用できるのは
十分hackだと思う。
void foo(int arr[][10]) {
for (int i = 0; i < 10; i++)
(*arr)[i]=i;
}
...
int a[10];
foo(&a);
↑のような発想が素晴らしい。
これのポインタを参照に置き換えること自体はhackという程でもないことは同意するが
それだけでさらに直感的な記述が可能になる点もまた素晴らしい。
void foo(int arr[static 10])ってなこと出来なかったか?
えー。
>>815は辞めようと思った本人が不勉強でFA?
>>828 そのコードが何をしたいのか意図が読めないんだが。
1: void foo(int arr[][10])
2: void foo(int (*arr)[10])
1,2は等価(だよね?)で、あえて1の書き方をするなら
arrを2次元配列的に使いたいということだろうから、
(*arr)[i]=i; は arr[0][i]=i; のような使い方をするべきだし、
引数arrは基本的に2次元配列を与えられるべき。
>>815をそのままポインタに置き換えるならこうでないか?
void foo(int (* const arr)[10])
……だとおもうのだが、どっかまちがってる?
C/C++はずいぶん前に少しやったきりなので勘違いしてるやも。
スレッドストッパー俺、乙 org
なんなんだよ、もう……
834 :
仕様書無しさん:2007/06/25(月) 09:43:02
気にすんな。ネタの寿命が尽きたらこんなもんだ。
次に誰かネタを投下するまで数ヶ月間止まることすらある。
つーわけでネタ待ちage
VB.NET
if label1.backcolor equals(label1.backcolor) then
label1.backcolor = label1.backcolor
end if
>>833 ==
>>832 かい?
細部に至るまで同意だったので
わざわざレスせんでもいいかなとオモタ。
837 :
832:2007/06/25(月) 11:12:32
>>834,836
Thanks. 救われるぜ。
レスがつかないのは別にどうでもいいが、
スレまで止まるとちょっと気になってな。
>835
3回読み直してやっと解った
ていうか何がしたいんだw
>>832 些細な突っ込みだけど
void foo(int (* const arr)[10]);
void foo(int (*arr)[10]);
この2つの宣言は等価。引数への直接の const は関数の型に影響しない。
ただし定義においてはローカル変数への const と同等に働く。
まぁ現役で C/C++ 使ってる奴でも知らないことが多いくらいだから、
やっぱり気にしなくてもいいけどね。
>>839 うわ、ほんとだ。(gcc 3.4.6)
宣言と定義でconstの有無が違っていてもエラーにならないね。
変数自体がconstになっても呼び出し側には一切無関係なので
宣言では省略可能になっているのだろうか。
宣言でconstあり、定義でなし、ってのもできるからちがうかも。
なんにせよ、宣言と定義が違っては混乱の元にしかならない希ガス。
どうだろう。宣言の不要なconstは書かない方がいいかもしれない。
const char * p
char const * p
char * const p
ぱっと見ただけなら、どれも同じに見えて余計混乱しそう。
別に辞めようと思ったわけではないが
i++;
i++;
i++;
ってのがあった
i+=3;
をしたかったらしい
即値加算命令よりインクリメント命令×3の方が速いプロセッサなんだろう
たぶん
二回か三回程度の処理なら、いちいちループにするより、同じ処理を並べて書いたほうが
処理は速い、とどっかで読んだ記憶がある。MS-DOS時代の話なので眉唾ですがw
ループじゃないし・・・。
846 :
仕様書無しさん:2007/06/25(月) 16:47:44
>>840 >宣言でconstあり、定義でなし、ってのもできるからちがうかも。
その場合でも呼び出し側には一切影響ないだろ。
混乱の元になんかならない。
>>838 うちの社長のバカ息子が書いたコードです。
誰も突っ込めずorz
てかこんなのばっかw
ソースチェックする身になってくれ
>>847 影響のないものは省略したほうが見やすいかもしれない。
>>841 しかし、定義はconstでないのに宣言にのみ書く理由はないだろう。
無意味なだけでなく実態に即してもいないのならバグの疑いがある。
つまり混乱の元。
>>847 >>840 だと宣言のみconstでは影響が出るようにも読めるな。
“ちがうのかも”と否定したのは“宣言では省略可能”の部分なんだ。
定義では存在しないものを“付加できる”からね。
書き方が悪くてスマソ。
>>848 VBやってないからequalsの動作がよくわからないんだが
label1.backcolorクラスにequalsって同値検査のメソッドがあると思えば良いの?
・・・いや、だとしても何をやろうとしてるのか想像も付かないんだけど。
>851
何をしたかったかって……あ、そーだ、
ハ_ハ
∩ ゚∀゚)') コンパイラの最適化性能を試してたんだよ!
〉 / かしこいコンパイラならきっと全部消してくれるよね!
.(_/ 丿
残ってるってことはMS製コンパイラは
>>851 >equalsって同値検査のメソッドがあると思えば良いの?
是。
>だとしても何をやろうとしてるのか想像も付かない
同意。
処理ですらない
またあったよw
Private sub Form_Load(byval sender as Object,byval e as System.EventArgs) Handles MyBase.Load
try
ソケットなんてまったく使ってない処理
catch ex as SocketException
エラー処理
end try
End Sub
そりゃあ何かの名残だろ、と善意に解釈。
でもそれとは別に、OnLoad のオーバーライドじゃなく
Load イベントハンドラなのが気になる。
ある程度高度なw
行数水増し
他のForm_Loadのコピペだな。
if (・・・){
for (・・・){
if (・・・)
goto aaa;
}
} else{
if (・・・)
goto aaa;
}
return TRUE;
aaa:
・・・
bbb;
BOOL flag = FALSE;
for (・・・){
if (・・・)
flag = TRUE;
if (・・・)
flag = TRUE;
if (flag && ・・・)
goto ccc
}
goto ddd
ccc:
・・・
goto bbb;
ddd:
・・・
return TRUE;
こんな感じの関数があっちこっちに点在してやがる。
組んだ奴はある意味天才な気がする。
伝統的なスパゲティだな。
書いた奴は「本物のプログラマ」に違いない。
昔聞いた格言
「スパゲティでも出来たては美味しい」
でも芯があったり、ゆですぎたりするのは嫌だな。
866 :
仕様書無しさん:2007/06/26(火) 23:56:23
>>842 inc x三連発よりx+=3の方が生成される命令コードが長かったとかないかな。
可変長Opコードでinc x三連発はが3byteで済むけど、可算を使うともっとかかるとか。
今時そんな最適化をできないコンパイラはないだろうけど、とっても古いコードだったらないともいえない。
867 :
仕様書無しさん:2007/06/27(水) 00:01:20
x+=1;
x+=1;
x+=1;
てなコードなら三菱で大量に見た。
行数で給料が変わるのかもシレン。
5000タッチまで
VB6でプロシージャというプロシージャ全部
Function Hoge(...) As Integer
On Error Goto ErrorTrap
...
Hoge = RETURN_SUCCESS
Exit Function
ErrorTrap:
MsgBox "エラーが発生しました。"
Hoge = RETURN_ERROR
End Function
傷害対応チームが大活躍。
下手なキノコより飛べそうなコードだな
874 :
仕様書無しさん:2007/06/27(水) 11:19:20
ファンクションだよね
データベースにエラーログを書き込むぐらいのことはして欲しい
糞コード規約と言えば、全ての関数の先頭にOn Error Resume Nextをつける
ってのもあったなぁ(VB 4 の時代)
>>870 > 傷害対応チームが大活躍。
エラーメッセージが出るたびにバット持ったチーマーが
作成者をボコりに行く様子を想像してしまった。w
メッセージボックスが出てくるたびに呼びつけられて対応させられるんだろうから
あながち間違ってないかもしれないな>877
879 :
仕様書無しさん:2007/06/27(水) 15:09:42
変数名の命名にセンスがなさすぎる以前に、英単語の綴りすら
でたらめな箇所が複数あるソースは、いきなり、読む気なくす。
path の意味でつけた変数名が pass であったり。
一般教養のないやつ、しかも自己流で書いてるやつ、もう辞めれ!
おまえらの尻拭いはもういい加減うんざりなんだよ。
>879
泣きたくなるよね。
前にもどっかで書いたけど、集計値のつもりなんだろうけど
TotaruData
とか、もういやぽ('A`)
UwaWrite
あるある。
銀行系で変数とメソッドを全部ローマ字ってコーディング規約のソースを見たことがあるんだが、
for(int kaunto = 0; kaunto < 10; kaunto++) とか
public void raito() とか ← write
class Banku とか・・・笑い死ぬかと思ったwww
か・・・漢だ・・・。
RDBの設計ならば幾らでもあるな。
1個のカラムを色々な用途で使わないでください><
1個のカラムに複数の項目を入れないでください><
数値項目(0許可)の項目が入力されてない時、どうして0をDBに登録するんですか?><
全部にNOT_NULLは勘弁してください><
お願いだからリレーションしてください><
200万件×50テーブルのの集計をオンラインリアルタイムで0.5秒以内にはできません><
履歴はテープに取ってください、履歴テーブルが本テーブルの20倍あります(=ω=.)
マスターテーブル作ってください>△<
か…おとこだ…。?
>>882 class Banku
ってのもすごいな
やさしいjavaとかそういう本みたいだ
class Kasutama
それならKokyakuにしとけよ…
伝説のうわらいとの初出はいつだっけ?
カスみたいな顧客なんだろ
>>870 おれんとこは、エラーが起きたら、ログにだけ書き出して、無視が基本。
(ファイルIOとか、どうしても避けられない場合以外は)
エラーが起きてるのに、ユーザーに操作を続けさせるほうが、あとあとの被害が大きいと思うのがけど…
そんなのそのソフトの使われ方次第でしょ?
動ける限りエラーは無視する方がいいソフトもあれば
どんなエラーでも報告した方がいいソフトもある
動ける限りって、エラー後にまともに動いてる保証がまったく無い事が問題だろうに
業務内容によるわな。
エラーが起きたらログにはき出しておいて、然るべき処置をしてそのまま動作続行せにゃならん場合もある。
896 :
仕様書無しさん:2007/06/28(木) 17:26:38
FAなんかだととにかくメッセージボックスは出さずに画面に表示していって処理は止めないな
データ不整合を引き起こさない限り続行が基本。データ不整合を
引き起こしてしまうかどうかが不明な場合は停止せざるをえない。
そして、ほとんどのエラーはよくわからんちんなケースに分類され
るので、停止させてる。そうこうしてるちに、いっそのこと全部停止w
で、時間当たり百万や千万単位の損失を出す訳だ。
sti
iret
なんでこんな糞ソースを直さなければならねんだ。
>>899 それは何だ?
変数名だとしたら何が入ってるの?
関数名だとしたら何を返すの?
それが判らんと何が糞なのか判らん…
スッチーに入れたい
って意味か
>>893 >動ける限りエラーは無視する方がいいソフトもあれば
それはねえ。
想定外のエラーでエラーハンドラに飛んだら、止めるしかねえだろ。
>>899-901 x86でiRetする前に割り込み許可するのはイカれてる、って話じゃね?
客先で大爆笑してしまって客とトラブルになったソースコード
if( ifJyoKen ) {
// 処理
}
どうも部署で偉い人が書いたコードだったらしい・・・orz
俺が悪いの・・・ねえ?
「うはwwなんだこの変数名wwありえねー(^д^)9m プギャー」
「wwww ..... (゜д゜ )( ;゜д゜)アレ? ナンカ マワリガシズカデスヨ?」
こんな感じ?
>>903 それは動ける限りを超えているので止まるのは仕方ない
Strutsだかなんかのフレームワークで恐ろしいコーディング規約の元に作成されたソースがあった
publiv void actionPerformed( ) { // ←だっけ?うろ覚え
// ループカウンタ
int i, j, k, l, m, n, o, p;
・・・・キョロ(ω・`))(´・ω・`)(( ´・ω)キョロ
ひふみ・・・8重ループ!!?
実際はそこまで使っていなかったんですが、7重ループに10階層くらいifが埋まってましたYO
>>907 元が、基本的にエラーを無視してるって話じゃん。
>>904 それiretじゃなくてretiじゃねえの?w
激しいインデントのために頻繁な横スクロールが必要
>>911 激しいインシデントって読んでしまった。w
>>911 残念ながらインデントはされていなかった
理由を聞いたら、横スクロールして読みにくくなるからインデントしなかったらしい。
本気でぶっ殺そうかと思った
すげえなw
>>905 客先で客のソースを爆笑してトラブらないと思ってるお前が怖いわ。
味方にすると恐ろしそうな奴・・・
笑う奴は流石にいないだろ
そんなのに関わらなきゃならない自分が泣けてくるだけで
会社辞めようと思ったコードじゃ、爆笑しても可笑しくはないんだろう
客のものとはいえ、あまりにひどいから会社を辞める覚悟で爆笑か。
やめようというようなものでもないけれど
/* テスト */
if (条件1) {
} else if (条件2) {
} else if (条件3) {
こんな感じで条件全部記述
/* ここから本番 */
if (条件1) {
処理;
}
お試しコードは止めないけど、後で消して欲しかった
基本的に何か問題がある箇所以外は一切修正してはいけないルールに
なっていて消すわけにもいかないし見るたびにどうにも気になる
それ、テスト部分を消すと動作が変わったら泣けるよな
良くある話です
>>910 君が使っているCPUは8051とかZ810なのかもしれないが、
x86のニーモニックはiretなんだぜ?
923 :
919:2007/06/29(金) 00:23:21
やはりこれぐらいならよくあるのか…
どうやらテスト部分で条件1しかこないことを確信したらしく
本番のとこでは条件1の場合だけ処理して残りは全部無視
してるんだけど、もし他の条件になった場合には異常終了
するあたりがかなり素敵だと思った。
IRETはフラグをスタックから戻して、割り込み復帰する(フラグは呼び出し前の状態に戻される)から、その前にフラグをセットしても無意味だな
class Hoge {
public:
Hoge mhoge
}
てのがあって、
Hoge huga = 略
if (huga.mhoge) {
} else if (huga.mhoge.mhoge) {
} else if (huga.mhoge.mhoge.mhoge) {
・・・
てのが、いっぱいあったとき。
で、処理内容も同じとき・・・
再帰してくれよ・・・。
>>899 その昔は
EI
RETI
だったので、それをそのままx86に移植した。
Z80か
8086でも
STI
IRET
じゃなかったっけか
>>908 まぁ避けられないなら何重ループでも構わんが
(ある程度でメソッドに切り出せ、ってのはあるが…)
アルゴリズムのオーダーの概念も考えずに、無闇に多重ループする馬鹿が多すぎ。
Javaなんて特に標準ライブラリが充実してる環境なら、気の利いたアルゴリズム
使ったって、そんなに複雑なコードにはならんのに。
入社試験で離散数学の試験くらいやってくれ…。
たとえばどんな?
DBからテーブルAをごっそり
同DBからテーブルBをごっそり
for で上の2つを join 処理。
もうね、なんのためのDBなのかと、SQLなのかと ⊂⌒~⊃_Д_)⊃
きっとDBサーバのメモリーが貧相だから
しかたなく代わりに処理してるんだよ
if (code.equals(Hoge.FOO)) {
return 0;
}
if (code.equals(Hoge.BOO)) {
return 1;
}
if (code.equals(Hoge.POO)) {
return 2;
}
実際には7段くらいのネストで、30個ぐらい続いてた。
まぁ他に書きよう無いんじゃないか?
書きようはないが、ちと設計を疑うな。
英語嫌いの社内SEがいて
trueとfalseのことを真と偽で説明したら
真と偽って何だよ?
と聞かれた。
その時の俺の顔には漫符が3種ぐらい付いてたと思う。
スレタイすら読めないお前も同類だよ
なんでこのスレで話すわけ?
適切なスレあるだろ。
心から馬鹿だな。
ついでだから書くが「間に合うかどうか」と「要望通りかどうか」は全くの別問題。
その辺の話を詰めてない時点でどっちも馬鹿。
なんかアホくさい日記だなと思ってたら、こいついつかのキチガイじゃねーか
お前はとっととプログラマを辞めろと言うに
バカのくせに続けてるからこういう問題起こすんだよな
周りに迷惑かかるからとっとと辞めろよ
940 :
仕様書無しさん:2007/07/02(月) 01:24:33
私が書いたコードより酷いコードを見た事がありません><
俺の書いた最悪のコード見せたろか。目がつぶれるかもしれんぞ。
目が!目がああぁぁぁぁ!!!
ふはは、見ろ!コードがゴミのようだ!
SE、君のアホづらには、心底うんざりさせられる
↑SEを「営業」に変えて、言ってみてぇえぇぇえぇぇぇ
辞めようと思ったほどじゃないけどげんなりしたソース、ってのはここでもいいのかな?
947 :
仕様書無しさん:2007/07/03(火) 11:34:00
'path = dir & filename
'↓Stringの連結は遅いので改善
path = new StringBuilder(dir).Append(filename).ToString()
StringBuilderの甘い罠
たぶん948は949みたいな反応が返ってくるのを期待して、むしろそっちを笑おうと
思ってるんだと思うよw
突っ込みどころはむしろ別のところにあるだろ。
いやまあ、948自身も実は天然って可能性もあるが。
相変わらずVBばっかだな。
/* wkの1,2,3.4,5,6,7,8,9番目のパラメータに、
元の1,7,3,4,9,6,2,8,5番目のパラメータの符号を反転して設定する。*/
movstr(wk+7,r1buf+7); /* xxx.xx, (1):(1)から */
_asm_c("\n\tpush\tH\n"); /* 末尾の位置 HL push */
srcparm(r1buf+5,7); /* 7番目のパラメータ位置 */
_asm_c("\n\tXCHG\t;\n"); /* それをDEに */
_asm_c("\n\tpop\tH\n"); /* 末尾の位置 HL POP */
((t_call)movstr)(); /* xxx.xx, (2):(7)から */
・・・ LSIC80で、こんなのが100行くらい。cのstring関数だと、3MHzの8085には重すぎて
(HL)<--(DE)というASMのコードを出さなければいけなくなった。これ保守する人はご愁傷様
ちなみにclibが一切要らないので異様に小さなコードが出てた(w
953 :
仕様書無しさん:2007/07/04(水) 16:49:02
Printfじゃなければ軽いんじゃないの?
うんにゃ、strxxxだけで入力uart4800bpsに間に合わなかったの(入力ringが1周りしちゃう)
>>948-950 パスの連結にはSystem.IO.Path#Combineを使えって話かい?
超絶亀レス&スレ違い、かつ流れぶった切りで申し訳ないが、
>>370辺りで話題になってる変数名のプレフィックスについて。
「変数の型を変える時に名前まで変えるのがメンドイ」ってあるけど、
型を変えた場合、それによる影響を検討する際に、チェックを兼ねて1箇所づつ名前変えていったりとかしないの?俺だけ?
(本来は詳細設計書上で確認できるべきなんだろうけど・・・。)
リファクタリングで単に型名だけ変えたりすることもあるし一概には言えない・・・
一括でやらんと変更し忘れで
959 :
仕様書無しさん:2007/07/05(木) 01:16:28
・200行以上のループがあるとき。
・1関数が1000行とか超えちゃってる時。
・1ファイルが2000行とか超えちゃってるとき。
・インデントがあってなくて、しかもタブとスペースがごっちゃに使われてるとき。
・5重以上のネストを見たとき。
・なんちゃってハンガリアン記法とか使われてるとき。
・バグフィックスのコメントがソースのいたるところにご丁寧に残してあるとき。
これ全部ANDだったら酷い話だが、ORだったら辞めようと思わない会社なんてないんじゃね。
961 :
仕様書無しさん:2007/07/05(木) 01:53:15
>>960 得てしてこういう条件はandのときが多い。
うちの会社はこんなもんだ
・1000行以上のループがある
・1関数が3000行とか超えちゃってる
・1ファイルが30000行とか超えちゃってる
・5重以上のネストを見た
・なんちゃってハンガリアン記法とか使われてる
・バグフィックスのコメントがソースのいたるところにご丁寧に残してあり、しかも間違っている。
そんなコード腐るほどあるな。。。
プラグラムのイロハも知らない時から仕事やらせりゃそんなもんだろ。
俺も殺したくなったことあるよ。
ま。。。糞コードでも理解して修正できる能力も必要ってことで。
そういうコードを糞野郎がいじりるとさらに大変なことになってくるけどな。