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

このエントリーをはてなブックマークに追加
1仕様書無しさん
この会社辞めようと思ったソースコード。
プログラマとして幻滅するソースコード。
プログラマを悩ませるソースコード。
をつらつらと綴っていって頂戴。

ちなみにここは質問スレじゃないので
技術的な質問がしたいならム板 http://pc11.2ch.net/tech/ に逝って。

前スレ
この会社辞めようと思ったソースコード#15
http://pc11.2ch.net/test/read.cgi/prog/1167117526/
2仕様書無しさん:2007/04/02(月) 12:45:43
前スレが4月を待たずに落ちたので建てました
3仕様書無しさん:2007/04/02(月) 19:09:11
int i = 1++;
4仕様書無しさん:2007/04/04(水) 16:50:18
>>3

何がしたいんだ?
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くらい導入しようよ・・・
7仕様書無しさん:2007/04/05(木) 06:32:40
>>6
CVSを導入しつつもそういうルールのあるプロジェクトやったこと多々ある・・・
8仕様書無しさん:2007/04/05(木) 17:42:27
switch(iCnt){
case 10:
  〜処理1〜
  break;

case 20:
  〜処理2〜
  break;

case 30:
  〜処理3〜
  break;

(中略)

case 100:
  〜処理100〜
  break;

 default:
  break;
}

というのがあって、処理1、処理2・・・処理100の実質的な内容は全て同じ。
違うのはループカウンタがそれぞれiCntになっているだけ。

作者を殺したいと初めて思いました
9仕様書無しさん:2007/04/05(木) 17:58:37
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; }
10仕様書無しさん:2007/04/05(木) 18:53:53
1.VB.NETでOn Error Goto HOGE を連発 TryーCatchがいっこもない
2.クラスが殆どない モジュールうじゃうじゃ グローバルマンセー
11仕様書無しさん:2007/04/06(金) 02:08:34
>>9
関数テーブル作っちゃいかんの?
12仕様書無しさん:2007/04/06(金) 12:05:59
>>7
ウチの会社のことか
13仕様書無しさん:2007/04/06(金) 12:58:37
>>7それなんてT芝?
一部だとは思うけどさ
147:2007/04/06(金) 13:09:26
いや、みいそ系
15仕様書無しさん:2007/04/06(金) 13:15:25
>>14
( ´゚д゚`)アチャー
やっぱ大手の名前あっても上がだめな所はまだそんなのやってるんだな・・・
16仕様書無しさん:2007/04/06(金) 13:36:36
メーカー系はまず碌なものじゃない、と疑ってかからないと。

そういやF通には、C/C++ の「const」の存在を知ってる奴が
どれくらいいるんだろう。
17仕様書無しさん:2007/04/06(金) 17:55:09
>>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を理解するのは
20仕様書無しさん:2007/04/07(土) 12:25:22
CVSやVSS使ってても、元のコードはコメントアウトして残すプロジェクトしかみたことねえよ。
みかかとでーたとあいびーむがそうだったんだが。
削除させてくれるプロジェクトってあるのか?
21仕様書無しさん:2007/04/07(土) 14:42:35
リリースまでならソース上で履歴残さずともOKで、
リリース後の修正はソースに履歴を残す、というのならあった
22仕様書無しさん:2007/04/07(土) 16:20:05
>>20
オレが目にできるようなプロジェクトは残してるのがないので、残さないのが当たり前だとばかり思ってたが。
23仕様書無しさん:2007/04/07(土) 16:25:38
本来、履歴を残す必要なんてまったく無いのに、
誰か一人のボンクラが履歴を残してしまい、
その後は皆「右へならえ」で
ずるずる履歴を書き込んでしまうんだよ。

「グレシャムの法則」という奴だな。
24仕様書無しさん:2007/04/07(土) 23:19:42
修正履歴を必ず残させるコーディングルールと
サブルーチン使えば1行で済む処理が延々とコピペされたコード

リファクタリングという言葉に何か恨みでもあるんだろうか。
25仕様書無しさん:2007/04/10(火) 20:20:00
>>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
元のソースは残すようにしてるけど、絶対残すルールは嫌だなあ
絶対消せルールよりはいいけど
29仕様書無しさん:2007/04/19(木) 23:43:16
いや「ぜったい消せ」のほうがマシだよ。
30仕様書無しさん:2007/04/20(金) 00:52:17
まったくだ
31仕様書無しさん:2007/04/20(金) 07:23:59
if(条件) {
 b = true;
 a.set1(true);
 a.set2(true);
} else {
 b = false;
 a.set1(false);
 a.set2(false);
}

if文にする意味がわかんね...
32仕様書無しさん:2007/04/20(金) 13:04:25
>>31
ソースコードにその処理の意味合いを持たせる為だと思う
33仕様書無しさん:2007/04/20(金) 13:53:20
>>31
b = 条件;
a.set1(b);
a.set2(b);
のように記述しないのは何故? っていってるんだよな?

そして>>32の言ってることが分からん。
34仕様書無しさん:2007/04/20(金) 14:11:21
>>33
あれかな、
elseをelse ifにして拡張可能とか。
35仕様書無しさん:2007/04/20(金) 14:35:35
>>31
そりゃ、「条件」が「式」だと知らずに
  if (ここには条件しか書けない)
    b = ここには真偽値のリテラルしか書けない
と思い込んでる典型的な阿呆が書いたからだろう。

そして俺も >>32 の言ってることがわからん。
36仕様書無しさん:2007/04/20(金) 15:31:47
知らないだけで阿呆にされちゃカナワンなー
37仕様書無しさん:2007/04/20(金) 23:07:56
Option Explicitなし


if 謎の宣言なし変数>0 and hoge_index=1 Then




こんなんばっか
38仕様書無しさん:2007/04/20(金) 23:47:42
option explicit って入門書にも必ず出てるのにね
39仕様書無しさん:2007/04/21(土) 03:49:33
>>36
>>35のいう通りだったとして、
”冗長な(冗長すぎる)記述を、なんとかしようという気構えの無い奴”
である可能性が95%以上とみる。
そういうやつは、すごく無知なのに知っている知識だけでソース記述しようとするんだよね。。

つまり阿呆で十分だと思うんだ。
4032: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の示すものと引数の意味合いが
異なってしまう為です。

これが悪い書き方とは言いませんが、値が同じだからといって、
意味合いの違うものを無闇に使いまわすのは、
そのコードの意図を汲み取り難くすると考えます。
41仕様書無しさん:2007/04/21(土) 08:31:50
>>37
VBって、Option Explicitがあっても、

dim s as string
・・・
if s = 0 then ・・・

みたいなコードがコンパイルできるんだよな。
今、VB4からVB6にコンバートする仕事をやってて、エラーが起きたらその場で止まるオプションに変更して、
動作確認してるけど、けっこう頻繁にとまってる。
大昔に作られて、けっこう保守が入ってるのに、なんでこんなバグが残ってるんだよって感じ。
42仕様書無しさん:2007/04/21(土) 10:09:30
>>40
わりと同意かな・・・

つか、俺自身はブール型の引数というものが嫌いで不要だと思ってる。
43仕様書無しさん:2007/04/21(土) 10:17:07
視点の高さがまるで違うんだな。
短いコードを書けばいいと思ってるような奴はCOBOLでもやってろって話
44仕様書無しさん:2007/04/21(土) 10:18:26
>>40
変数名がbというのは反対だが(ファイルの使用目的とそれの存在を示す意味のある名前にするべき)、俺は変数に入れてあるほうが読みやすいと感じるな。
無駄なブロックやネストはできるかぎり無いほうが読みやすいと思う。
45仕様書無しさん:2007/04/21(土) 10:19:21
沖縄県の方へ(命に関わる注意事項です)

沖縄県での選挙ですが、どうか民主党だけは避けてください。県民の生命に関わる可能性があります。
民主党の最大の公約は一国二制度(※)ですが、一度「一国二制度 沖縄 三千万」等で検索をお願いします。
この際、民主党のHPで調べても良いです。以下の注釈↓と矛盾することは書いてないはずですから…

※一国二制度
 簡単に言えば沖縄を中国と日本の共有物にし、そこに3000万人の中国人を入植させます。
 (つまり沖縄人口の 96% を中国人にして、実質、沖縄を中国人の居住地とします。)
 さらに「自主」の名の下、沖縄で有事が起きても自衛隊は干渉できません。
 3000万人の中国人が、少数派となった130万人の日本人に何をしても、です。
 そして反日教育を受けた中国人の反日感情の強さは、ほとんどの日本人の理解を超えるものです。

今回の選挙で民主党が勝った場合、「自主」「発展」を連呼しつつ段階的に進めていくことになります。
自主と言っても、自主を認めるのが「住人の96%が中国人となった」後だということに気をつけてください。
発展と言っても、新沖縄の少数派となった「少数民族日本人」の発展ではないことに気をつけてください。
46仕様書無しさん:2007/04/21(土) 15:37:30
>>40
そりゃあ>40みたいな前提条件を勝手に組み込めばそういう解釈も可能だが
シンプルな>31だけを見せられたら>33のような反応してしまうのが普通だろ。

ここで>40とは正反対の前提条件があったとして、>31のような書き方をされたら
ありもしないニュアンスを醸しだしてかえって迷惑。
47仕様書無しさん:2007/04/21(土) 17:54:27
>>41
VBって暗黙の型変換が意味も無く強力過ぎ
たしかVB5のときに型変換のルールが微妙に変わった様な飢餓するが
今となってはどうでもいい事だ
48仕様書無しさん:2007/04/21(土) 19:08:06
char* buf = new char[sizeof(Hoge)];
Hoge* hoge = (Hoge) buf;
.
.
.
delete[] buf;




わかってねぇ〜〜〜〜〜。
49仕様書無しさん:2007/04/21(土) 19:27:18
なんかまずいの?
馬鹿にしたかったら馬鹿にしていいけど、その後でちゃんと何が分かってないのか説明してね。
50仕様書無しさん:2007/04/21(土) 19:32:28
キャストがおかしいってことか。
仮に typedef void *Hoge; だとしたらこれでOKって、いや違うC++だとアウトだ。

あれ?
5131: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の言う通りな感じかなーと思ってます。
52仕様書無しさん:2007/04/21(土) 20:34:41
パケットのデータを取り出すのによく>>48みたいなキャストするけどいかんのかね?
ま、確保したばかりの変数をキャストするのは珍しいと思うけどさ
53仕様書無しさん:2007/04/21(土) 21:27:33
>>52

普通は

Hoge* hoge = new Hoge;

だわな。
よくCから中途半端にC++へ移行した人がやってるのを見かける。
どうせnew=malloc程度に理解してんだろうね。
54仕様書無しさん:2007/04/21(土) 23:49:33
>>49
説明するまでもないだろ。
55仕様書無しさん:2007/04/22(日) 01:05:47
キャストは基本DQNでございます。
memcpyとか大好きなDQNがごろごろ。

大人しくCでもいじってろ。
56仕様書無しさん:2007/04/22(日) 01:30:29
先日見たJavaコード

long hoge = 1;
 :
Long page = Long.valueOf(String.toString(hoge));

文字列にする意味ねぇ・・・
57仕様書無しさん:2007/04/22(日) 14:58:11
>>56
"valueOfがイイ、使え"
とか言われた人間がそこで思考停止するとそうなるな...
58仕様書無しさん:2007/04/22(日) 16:21:19
>>56-57
もっと深刻な「コボラ上がり」だったんじゃないかな。
やつらは、数値="0"〜"9"の並び(=ゾーン形式)っていう観念から
離れらんないから。
59仕様書無しさん:2007/04/22(日) 23:10:42
>>48も基本がなってない。
(Hoge)じゃなく(Hoge *)だろ。
60仕様書無しさん:2007/04/23(月) 13:19:44
主旨は違うんだけど、ここの
tp://d.hatena.ne.jp/nowokay/20070323

// null => 0, not null => 1
int p = Boolean.toString(data == null).length() - 4;

ってのが好き。やられた。
61仕様書無しさん:2007/04/23(月) 15:03:51
ソースコードじゃないんだけど。
DBのDDLをバージョン管理システムに入れてまして。

外注さんが直接DBをいじっちゃったので、
リポジトリのDDLに変更を反映してくれって頼んだら。

hoge.sql(手付かず)
hoge_日付.sql(新規)

ってファイルがリポジトリにあって
面白かったです。
62仕様書無しさん:2007/04/23(月) 21:40:52
最初、DLLと読んでしまったので、理解するのに時間がかかってしまった。

バージョン管理システムを、読み書きに手順が必要なファイルサーバだと
思ってる人、確かにいますね。

63仕様書無しさん:2007/04/23(月) 21:58:34
>バージョン管理システムを、読み書きに手順が必要なファイルサーバだと
>思ってる人、確かにいますね。

今のPRJリーダのことかーーーー

CVSなのになぜか
hoge
hoge_2
hoge_3
とディレクトリを切っている。
旧ソースを全てコメントとして残したり、
日付と変更者をコメントに書いて変更箇所をサンドイッチしたり。

ストレージとしてしか使っていないよ・・・orz
64仕様書無しさん:2007/04/29(日) 14:33:46
変更者が変質者に見えた・・・俺相当疲れてるな・・・
65仕様書無しさん:2007/04/30(月) 01:15:17
IF IsNumeric(Cint(value)) Then

End If

orz ...
66仕様書無しさん:2007/05/01(火) 18:01:28
元気出せ。
67仕様書無しさん:2007/05/05(土) 15:38:53
VBの類は、暗黙の型変換を禁止するオプションがほしいよぬ
68仕様書無しさん:2007/05/05(土) 16:36:40
>>67
vb.net にはあるぞ
69仕様書無しさん:2007/05/06(日) 14:05:22
俺の会社ポインタ型は全部void *って全社共通で決まってるから
VBのキャストぐらいでは混乱しないよ。
70仕様書無しさん:2007/05/06(日) 14:14:37
常に参照先の型について意識させることで社員の意識を高めようということか!


ごめん無理
71仕様書無しさん:2007/05/06(日) 15:12:53
関数ポインタも?
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);
75仕様書無しさん:2007/05/06(日) 15:52:53
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
そんな場面あるか?
79仕様書無しさん:2007/05/07(月) 21:37:54
組み込みとか
80仕様書無しさん:2007/05/08(火) 10:05:32
kwsk
81仕様書無しさん:2007/05/08(火) 14:28:58
ソースじゃないんだけど

あるSEがUML書きましたと言って提出してきた設計書が、
単なるフローチャートだったとき

しかもパーツの意味を間違えまくっているとき
82仕様書無しさん:2007/05/08(火) 18:15:31
いいじゃんか。

全部アクティビティ図だと脳内で変換するんだ。
変換して現実から目をそむけると。

はっぴ?
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キチガイのことか
87仕様書無しさん:2007/05/08(火) 23:39:21
そうおもってさ。おぷそのつーるでグラフ化してみたわけよ、糞ソフト。


花火が見られた。

とりあえず生成結果を消した。
88仕様書無しさん:2007/05/09(水) 09:23:11
Happy99とは懐かしいな。
89仕様書無しさん:2007/05/09(水) 10:07:23
しあわせ99?
90仕様書無しさん:2007/05/09(水) 10:14:18
ウイルスだったよな?確か
91仕様書無しさん:2007/05/09(水) 19:20:16
昔流行ったよな。確か花火が上がるやつだと記憶している。
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;
93仕様書無しさん:2007/05/09(水) 22:19:23
 Dim flgUmu As String = "nasi"
 For Each ws In objBook.Worksheets
  If ws.Name = strName Then
   flgUmu = "ari"
  End If
 Next



もうどこからツッコめばいいのかorz
94仕様書無しさん:2007/05/09(水) 22:58:11
時々居るなぁ、Boolean使わない奴。
95仕様書無しさん:2007/05/09(水) 23:15:01
ポインタをintにキャストする香具師は、
LP64,LLP64環境で死亡で御座います
96仕様書無しさん:2007/05/09(水) 23:26:18
uintptr_tかchar*でないとマズいね。
ところで~(ALIGNSIZE-1)ってそのままで大丈夫?
97仕様書無しさん:2007/05/09(水) 23:36:30
ごめん、大丈夫そう。
98仕様書無しさん:2007/05/09(水) 23:57:03
>>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宣言してもリアルタイムデバッグではアクセス可能だろ?
意味なくね?
101仕様書無しさん:2007/05/10(木) 11:00:05
>>100
はあ?
102仕様書無しさん:2007/05/10(木) 11:49:46
全然privateじゃないってこと
103仕様書無しさん:2007/05/10(木) 12:24:19
カプセル化の意味も判らないんなら口挟まない方がいいんじゃね?
104仕様書無しさん:2007/05/10(木) 12:31:25
そこで防御策として

#ifdef private
#undef private
#endif
#ifdef protected
#undef protected
#endif

と自分のヘッダの先頭に書く必要が出てくる。
もはや冷戦だな。
105仕様書無しさん:2007/05/10(木) 17:55:41
>>104
勘弁してください……
106仕様書無しさん:2007/05/10(木) 18:57:15
>>104
その後にインクルードされるヘッダファイルの中で

#ifndef private
#define private public
#endif
#ifndef protected
#define protected public
#endif

と書かれてないか調べたか?

107仕様書無しさん:2007/05/10(木) 19:19:40
嫌な職場だなぁ
108仕様書無しさん:2007/05/10(木) 22:26:52
まさに冷戦。 誰が核のボタンを押すのか、押せるのか。 いやまて核は何なのか。
109仕様書無しさん:2007/05/10(木) 23:18:03
#define FIRE FILE なんての見て鬱になってたところだが、
ここ見てたらなんだか元気が出てきた。ウチはまだ大丈夫だ!
110仕様書無しさん:2007/05/10(木) 23:48:01
>>106
オワットルwww
111仕様書無しさん:2007/05/11(金) 00:48:52
>>109
知らぬ間に

#define FILE FIRE

になっているかもしれんぞ。
112仕様書無しさん:2007/05/11(金) 01:38:14
大丈夫。
展開コードを参照すればw
113仕様書無しさん:2007/05/11(金) 10:34:47
1つのプロジェクト内にファイルが1800個あったから、一体何かと思ったら
履歴を全部別ファイルにして残していて、わざわざコンパイルしない設定対象に1780個ぐらい加えているという・・・


バージョン管理ソフト使っていてこれかよ。出向先なので辞めるわけにはいかない、
明日から通勤時間に3年程かけようかとか本気で思った
114仕様書無しさん:2007/05/12(土) 01:22:44
>>111
sonyのバッテリーが発火した原因はそれか。
115仕様書無しさん:2007/05/13(日) 07:16:31
やめよう思うほどじゃないが
よく見るキモチワルイコード

if (a == 1) {
} else {
 なんかのしょり
 なんかのしょり
}
116仕様書無しさん:2007/05/13(日) 08:38:20
>>115
俺、よくこういうコード書きかけてしまう…
具体的にはこんなんですが。

if (a == 1) {
 /* 〜ということやりたいけど後で考える */
} else {
 なんかのしょり
 なんかのしょり
}

(a == 1) の時の処理考えなくてよければ、こんなんかな。

if (a != 1) {
 なんかのしょり
 なんかのしょり
}
117仕様書無しさん:2007/05/13(日) 14:21:06
>>116
コーディング中には俺もよくやる。
問題は納品後のソースにそれが残ってることだと思います。

//TODO:この機能いらなくね??
とか
//TODO:うんこしたい
とか
//TODO:仕様はやくきめろやぼけ!!殺すぞ!!
とか
他人にはとても見せられないようなコメント
入れといて実装漏れ、修正漏れは絶対起こさないようにすべき
このコメントを納品した後のソースで、見たらその人は
この会社やめようって思うんだろうなー

でも、顧客の悪口は洒落にならないから書かないぜ!
118仕様書無しさん:2007/05/13(日) 14:26:10
んなコメント入れんなよ
119仕様書無しさん:2007/05/13(日) 17:13:43
普通、if(a)って書かね?
120仕様書無しさん:2007/05/13(日) 17:20:56
>119

出た〜〜〜っ!
121仕様書無しさん:2007/05/13(日) 17:41:28
>>119
それキモい。
aはあくまでデータであり、真偽をあらわす値ではない。
122仕様書無しさん:2007/05/13(日) 17:44:10
ところでいつ a が boolean になったんだ?
123仕様書無しさん:2007/05/13(日) 17:44:34
C#とかだとコンパイルも出来ない。
124仕様書無しさん:2007/05/13(日) 17:47:02
ifは0かそうじゃないかだけしか見ないんだから>>119で何の問題もないだろ
C#はシラネ
125仕様書無しさん:2007/05/13(日) 17:51:42
ifは0かそうじゃないかだけしか見ないんだから
ifは0かそうじゃないかだけしか見ないんだから
ifは0かそうじゃないかだけしか見ないんだから
ifは0かそうじゃないかだけしか見ないんだから



ifは0かそうじゃないかだけしか見ないんだから〜



お前とは組みたくない。
126仕様書無しさん:2007/05/13(日) 17:56:10
組込みマイコンのコンパイラでは常識的手法。
if(a)なら JNZ命令一行ですむ。
127仕様書無しさん:2007/05/13(日) 17:59:30
>>121
まじすか。
ただ、適切な変数名をつけて問題領域で考えれば分かりやすいと思うんだけどなぁ
int型でも俺はそうやってる
128仕様書無しさん:2007/05/13(日) 18:07:33
if (a) って書いたら a == 1 以外のケースでも真と判定されることに気づかないかね。

>>126
if (a != 0) を if (a) に最適化するのはコンパイラの仕事ですよ。

より効率の良く等価な記述に変換する最適化はコンパイラにさせて
人間は正しい意味論に則った保守しやすいコードの記述に努めるべき。
129仕様書無しさん:2007/05/13(日) 18:17:16
で、aの型は・・・?
130仕様書無しさん:2007/05/13(日) 18:19:03
お前ら、if (isdigit(c) == 1)って書くの?
131仕様書無しさん:2007/05/13(日) 18:23:03
>>121
何か変なことになった場合に
if(a)の時点でa=0になっていると保証されてるなら
それでいいと思うが。
132仕様書無しさん:2007/05/13(日) 18:25:26
>>130
isdigit関数の戻り値の意味は真偽値だとわかっているから if (isdigit(c)) で無問題。

ちなみに 真==1 とは限らないので、敢えて書くなら if (isdigit(c) != 0) が正解。
133仕様書無しさん:2007/05/13(日) 18:27:44
>>128
int型でもブール変数として使う場合は
むしろ、a == 1 以外のケースでも真と判定されなきゃまずいと思うけど
134仕様書無しさん:2007/05/13(日) 18:32:31
if(a)って書くとバグの温床になるからやめろ

等号式書いても、今のコンパイラなら80年代と違って等価のコード出す。
今、最適化意識して各のはアルゴリズムの性能と無駄なシーケンス省くことだけ。

きもいくて古い書き方は捨てろ。恥だ
135仕様書無しさん:2007/05/13(日) 18:38:06
>>134
>if(a)って書くとバグの温床になるからやめろ
まぁif((hFile = CreateFile()))とかやってハマってた奴とかいたし、気持ちはわかるw
136仕様書無しさん:2007/05/13(日) 18:38:38
isdigit

www
137仕様書無しさん:2007/05/13(日) 18:38:42
だーかーらー前提としてaの型を明らかにして話を進めろ
138仕様書無しさん:2007/05/13(日) 18:47:19
>135
じつはhFileの実体がスマートハンドルで、
operator boolみたいなのが定義されているとか
139仕様書無しさん:2007/05/13(日) 18:51:44
>137

新人はだまってROMしてなさい!
140仕様書無しさん:2007/05/13(日) 18:55:15
>>137

・aがブールを意味する値なら if (a) でおk
・そうでなければ比較の意図を明示的に表明すべし

でFA
141仕様書無しさん:2007/05/13(日) 19:04:34
>140
上の連中それをごっちゃにして噛み合わない議論してねぇ?
142仕様書無しさん:2007/05/13(日) 19:08:37
>>134
むしろ、バグの温床になるのは
if (a==0)
とかの方なんだがな・・・
typo で
if (a=0)
になってしまうから。
143仕様書無しさん:2007/05/13(日) 19:12:33
はいはいif(0==a)
144仕様書無しさん:2007/05/13(日) 19:28:00
つか
if( a == b )を間違えないように定数比較したいなら
if( NULL == a)って書けばいいだろ。定数は必ず初項として記述すればいいだろ
仮にif( NULL = a)ってやればコンパイルエラー出る。

つうか2000年ぐらいまでのコーディング規約でいいものだけ取り入れて
かけよ。一般人ができる最低限度のコーディングの礼節だと思うがな。

145仕様書無しさん:2007/05/13(日) 19:34:08
>>144 読んで
ふと思ったんだが、
fj って今でもあるの?
146仕様書無しさん:2007/05/13(日) 19:35:09
確かにその書き方なら間違いが防げるけど、何故か普及してないな。
147仕様書無しさん:2007/05/13(日) 19:36:49
if( NULL == a)
と書くのはお断りだ
148仕様書無しさん:2007/05/13(日) 19:38:54
>>146
昔から議論はあるけど、警告が出るからそんなヘンな書き方をすることは無いってことで落ち着いてる。
149仕様書無しさん:2007/05/13(日) 19:40:09
>>144
きもいくて古い書き方は捨てろ。恥だ 
150仕様書無しさん:2007/05/13(日) 20:18:41
if(a)

が一番美しい。
151仕様書無しさん:2007/05/13(日) 20:25:30
152仕様書無しさん:2007/05/13(日) 20:31:36
>151
>127
153仕様書無しさん:2007/05/13(日) 20:36:17
プログラムってのはデータと命令しかないわけよ。
そのデータが真偽値であるとか整数であるとかあるいは文字列であるとかの意味付けは
言語処理系上でのみ行われている文脈上のものでしかないの。
文法的に許されているなら>>150を支持する。実際、美しい。
キモイとか許せないと思うなら
if(a)
という記述を許さない言語を使えば良いでしょ。
154仕様書無しさん:2007/05/13(日) 20:37:43
無限ループって怖くね?w
155仕様書無しさん:2007/05/13(日) 20:38:51
最初の書き込みで、aに入ってるのがbool値(0かそれ以外)か、ただの数値(たとえば0〜100とか)とか何も
書いてないのに、いきなり

「if (a) と書く」とか言うのは変だって言ってるんだろ。
156仕様書無しさん:2007/05/13(日) 20:45:37
個人的に
if(a)
で書ける状況でもこういう書き方はしないなぁ。
たまたま文法的に成立するってだけだから。
古い書き方だと思う。
今はベタに、ちゃんと==使わないとダメだと思う。
157仕様書無しさん:2007/05/13(日) 20:45:46
ねえ、今は False =0, True = 1 であたりまえなの?
昔はそれぞれ 0, 0xff って実装もありだったと思うんで、
True のつもりで a == 1 なんて怖くて書けない。
せめて a == True とするのが、他人が読む時も精神衛生的にいいんジャマイカ?
158仕様書無しさん:2007/05/13(日) 20:46:32
>>155
>「if (a) と書く」とか言うのは変だって言ってるんだろ。 

別に。

また、プログラムの読み手にとっても、
aに入ってるのがbool値か、ただの数値か
なんて考える必要はない。

a の評価値が 0 かそれ以外かさえ分かればよい。
こんな単純な話はない。
159仕様書無しさん:2007/05/13(日) 20:49:42
>>158
でも, bool値以外のデータだったら、

if (a == 1) を

if (a) にしたら、動作が違ってくるだろ?

160仕様書無しさん:2007/05/13(日) 20:50:14
a == 1 の比較だろ

a = 0 or 1 ならともかく
a = 2 のときは?
a = 100 のときは?
161仕様書無しさん:2007/05/13(日) 20:50:16
>>158
その場合、if(a) は発端>>115  の if (a==1) と同一ではない。
発端の if (a==1) はあなたの「単純な話」にあてはまらない。
元の話わかってる?
162仕様書無しさん:2007/05/13(日) 20:52:26
aには、0か1が入ってるとか、
1,2,3のどれかが入ってるとか、なんら前提が示されてないのに、

if (a == 1) を if(a) と書き直したらダメだろ。
163仕様書無しさん:2007/05/13(日) 20:53:39
凡庸なプログラマってこうした思い込みしてコーディングしてんのかな…
164仕様書無しさん:2007/05/13(日) 20:54:14
なんかトンデモねぇ馬鹿が一匹迷い込んでないか
俺コイツと一緒に仕事すんのはマジで嫌
想定外の修正されてぶち壊されそう
165仕様書無しさん:2007/05/13(日) 20:54:56
初心者の俺にはよく分からんのだが
aの型について触れずに論議が進められるのは何故なの?
166仕様書無しさん:2007/05/13(日) 20:55:46
>165
何度か指摘してるんだが何故かまともに取り合ってくれないんだ(´・ω・`)
167仕様書無しさん:2007/05/13(日) 20:56:02
aには、0か1が入ってるとか、
1,2,3のどれかが入ってるとか、なんら前提が示されてないのに、

if(a)をif (a == 1) と書き直したらダメだろ。
168仕様書無しさん:2007/05/13(日) 20:57:42
>>167
>if(a)をif (a == 1) と書き直したらダメだろ。

それは誰もしてない。
169仕様書無しさん:2007/05/13(日) 20:59:43
>>165
少なくともCにおいては、if()の中身は式であって、その型は無関係だから。
170仕様書無しさん:2007/05/13(日) 21:01:13
>165
>166

>139
171仕様書無しさん:2007/05/13(日) 21:02:10
>>157
>せめて a == True とするのが、他人が読む時も精神衛生的にいいんジャマイカ?

bool値のある言語でそれをやったら、ちょっとヘタクソっぽい。

Cだと、
#define TRUE 0
#define FALSE -1
とか、ありえるので、わからなくもない。

172仕様書無しさん:2007/05/13(日) 21:04:05
キモイとか言える次元かよw
感覚上身についているかどうかのレベルの問題じゃね?
(センスというにはあまりに次元が低すぎる)
#include <stdio.h>
char* a;

int main(){
if (!a){
printf("a");
}
}
とかどうすんだよ。aが初期化されて無い判定は。
まさかbool型とか、コンパイラがうまくやってくれるからとか言っちゃって0で、==するのか?www
ショッペーーー
173仕様書無しさん:2007/05/13(日) 21:05:31
今日はとくに変だな
このスレw
174仕様書無しさん:2007/05/13(日) 21:05:35
この人なんで火病ってんの?
175仕様書無しさん:2007/05/13(日) 21:06:28
でさー 115 がいつ C って決まったの?
176仕様書無しさん:2007/05/13(日) 21:08:32
>>175
暗黙の前提。ああいう構文の言語は全部がCから派生しているからね。
177仕様書無しさん:2007/05/13(日) 21:09:17
まあ細かいことはプログラム書く人の自由ということで、115の場合はひとつの例として、
if aが1のとき{何もしない} else {何かの処理}がキモチワルイコードと言っているだけだ。
178仕様書無しさん:2007/05/13(日) 21:14:59
じゃあここは間とって三項演算子で書こうぜ
179仕様書無しさん:2007/05/13(日) 21:15:01
>>115 の主張は
if (a == 1) { 
 /* 〜ということやりたいけど後で考える */ 
} else { 
で、「/* 〜ということやりたいけど後で考える */ を書くのが嫌だ」って話であって、
今の話題は >>119 が言う所の、
「if 文の括弧の中では、明示的に論理式を書く必要がない」か否か
って話だろ?
180仕様書無しさん:2007/05/13(日) 21:16:07
>暗黙の前提。

こういう自分勝手な解釈をするヤツが一番手におえない
181仕様書無しさん:2007/05/13(日) 21:19:37
>>180

>>115 ≠ >>176 というのも、暗黙の前提だな。
182仕様書無しさん:2007/05/13(日) 21:23:04
それも勝手な解釈だな
その場合は前提を提示していないという意味で自分勝手な以下同文
183仕様書無しさん:2007/05/13(日) 21:23:42
>>179
俺が
> /* 〜ということやりたいけど後で考える */
を追加した >>116 だけど、>>115 はそんなこと主張してないぞ。

>>115 の if (a == 1) {} else { ... } の解釈はいろいろありえるが、俺は
「if (a == 1) の時何もやらない」だと解釈した。
俺は別なつもりで同じようなコードを書いてしまうとコメントしたつもりだったんだが、

俺が余計なこと書いて議論を混乱させたのか? すまんかった。
184119:2007/05/13(日) 21:28:36
正直すまんかった。
俺が勝手に>>115のaをブール値を表現する変数だと勘違いして>>119を書いた。
でも、よく考えたら>>115は明示的にa == 1って書いてるんでブール値ではないわな。
ブール値なら少なくともa == TRUEとか書かなきゃいかんはずだし。

まぁ、俺が言うのもなんだが>>140->>141でFAで
185けーつえーき:2007/05/13(日) 21:58:00
>>184
その辺って熟練のPGでも考え方に違いが出てくるので
PLの考えに合わせるのが無難と思う。

そういえば、MSの環境でBOOLって型があって
#define TRUE (1)
#define FALSE (0)
と定義されてるんだけど
APIで返す値に1以外の0じゃない値が返るものがあったりするねw
186仕様書無しさん:2007/05/13(日) 22:10:58
>>185
Windows APIのBOOL型の戻り値は、だいたい「成功すると0以外の値を返す」と
ドキュメントに記されているわけで、特定の定数TRUEを返すとは書かれていないんで

if (HogeHoge() == TRUE)

は間違い。普通はこういう書き方しないだろうけど。

ところでその#defineの括弧は不要なんじゃ...
187仕様書無しさん:2007/05/13(日) 22:18:46
どころか、GetMessageみたいな3値を返すBOOLもある
188仕様書無しさん:2007/05/13(日) 22:21:39
> ところでその#defineの括弧は不要なんじゃ...
まあ括弧でくくるクセをつけてあるのは良いことだと思う。
189仕様書無しさん:2007/05/13(日) 22:26:24
おう。そういう例があるから だいたい とさりげなく断っておいた。
俺はそれに嵌ったクチだし。
(ウィンドウの生成に失敗しているのにGetMessageして-1が返って無限ループorz)
190仕様書無しさん:2007/05/13(日) 23:17:00
>>186
APIリファレンスにも普通に-1を返すと記述されてたりするw

>>189
他にも罠wがいろいろあるのがMS仕様という印象
191仕様書無しさん:2007/05/14(月) 05:41:07
スレタイが「この会社辞めようと思ったソースコード」なのになんで素人が混じってんだ?
192仕様書無しさん:2007/05/14(月) 08:03:15
>>191
プロはこんな板見てないからじゃないか?
193仕様書無しさん:2007/05/14(月) 08:26:50
>>191
素人とプロの違いは技量の違いではない。
「それが生活基盤であるか否か」だけである。
だからいくら素人に見えても実態はプロである事は多い。
194仕様書無しさん:2007/05/14(月) 08:58:01
>>193
てことは>>191もプロになるんだろうな。
195仕様書無しさん:2007/05/14(月) 11:30:47
とりあえず最悪の事態を考えてaはValiant型を想定しておくか
196仕様書無しさん:2007/05/14(月) 11:44:27
>>195
ちょっwwwww
SUGEEEEEEEEE

そんな先のことまで想定してコーディングするとはwww
俺絶対入社するわ
全部Variantで書いとくんで保守たのんますwww
197仕様書無しさん:2007/05/14(月) 12:29:41
なんかスレが延びているとおもったら、またよくわからん話題で盛り上がってるのか


えーっと



ぬるぽ
198仕様書無しさん:2007/05/14(月) 12:35:31
がっ
199仕様書無しさん:2007/05/14(月) 16:51:48
// ここからそこまで何をしているのか不明




そこって何処よ…('A`)
200仕様書無しさん:2007/05/14(月) 17:52:51
' SOKOってラベルふってあんだろ
201仕様書無しさん:2007/05/14(月) 17:56:16
底でしょ
202仕様書無しさん:2007/05/14(月) 17:58:54
プロシージャ内と予測してみる
203仕様書無しさん:2007/05/14(月) 19:31:37
ここってCの人が多いみたいね。
じゃあ、vb系を代表して:
Dim a, b As Integer
Cとは違います。多分正しくありませんよ〜
204仕様書無しさん:2007/05/14(月) 19:34:04
>>203
普通にそう書いてる奴多いな
俺はメンテの時に困るから書いてないけど
205仕様書無しさん:2007/05/14(月) 19:37:00
>>203 aはIntegerと見せかけて、バリバリのバリアントだな。
そういう紛らわしい書き方ができてしまうVBの言語仕様はどうみても糞だな。
206仕様書無しさん:2007/05/14(月) 19:37:30
上の方でtrue=1, false=0とかあってけど、VBAではTrue=-1ね
多分VBも
207仕様書無しさん:2007/05/14(月) 19:44:45
>>203
そーいや専門学校で教師がそのソース書いてたな。
208仕様書無しさん:2007/05/14(月) 19:45:10
やめて〜(実話)
For i=1 To 10000
Cells(i,1) = "なんたらかんたら"
Next
ExcelVBA だが、行は何行あるか分からないらしい。動けばいいのかな?
上級SEさんのコードでした。
209仕様書無しさん:2007/05/14(月) 19:51:16
>>205
更に、.NET 以降はあれで「どっちも Integer」という軽い罠。

>>208
まあSヨなら普通。
210仕様書無しさん:2007/05/14(月) 19:52:34
>>209
そうなの?違うんじゃない?
211仕様書無しさん:2007/05/14(月) 20:01:01
ソースじゃないけど聞いていい?
PL/SQLとTransact-SQLって同義なの?
前者はOracleで後者はSQLServerに使うものだと思っていたんだけど。
今日、面談で言われたよ〜
212仕様書無しさん:2007/05/14(月) 20:01:03
>>209
セル1つ1つに値を入れる奴はヘタレ。
213仕様書無しさん:2007/05/14(月) 20:33:28
>>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じゃないの?
215仕様書無しさん:2007/05/14(月) 20:41:35
「VB.NET 変数宣言」でぐぐれかす
216仕様書無しさん:2007/05/14(月) 21:03:36
ホントだ。知らんかった。
217仕様書無しさん:2007/05/14(月) 21:21:01
Dimってさ、もともとDimensionの略で、配列の次元を宣言するための
ものだったのにどーしてVBは一般の変数宣言に使うようになっちゃった
んだろう。
218仕様書無しさん:2007/05/14(月) 21:30:23
RubyとかLispとか動的型付けの言語でもコードが書かれてるんだから、
Variantでもいいじゃないか。
219仕様書無しさん:2007/05/14(月) 21:31:21
>>218
底辺乙
220仕様書無しさん:2007/05/14(月) 21:55:27
そもそもoption explicitにしない奴もいるわな。
いいんじゃない?最近のPCは性能がいいから。
221仕様書無しさん:2007/05/14(月) 22:00:50
>195
Variant
222仕様書無しさん:2007/05/14(月) 23:14:36
>220
ハードウェアの進化には楽天的であれ
ソフトウェアの進化には悲観的であれ
エンジニアの技術力の進化には絶望的であれ

# 上の2つは201の鉄則より
223仕様書無しさん:2007/05/14(月) 23:59:36
224仕様書無しさん:2007/05/15(火) 10:31:23
昨日を
today-1
と書くか
dateadd("d",-1,today)
と書くか
225仕様書無しさん:2007/05/15(火) 10:56:39
普通下だと思ってた俺はどうなのよ?
226仕様書無しさん:2007/05/15(火) 10:59:04
反省しろ
227仕様書無しさん:2007/05/15(火) 11:36:02
ボリューム(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つきっちり書いている俺には関係ないが
230仕様書無しさん:2007/05/15(火) 12:17:15
ならん
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はいいチャンスだと思ったんじゃない?
233仕様書無しさん:2007/05/15(火) 13:35:50
>206
その解釈は微妙。(VB(A)でもCでも)
どちらも、0が偽でそれ以外が真。
ただし、比較式などが返す値が、Cでは1、VB系は-1てこと。

>206自身はわかってるならそれはいいんだけど、
わかってない人が>206みたいな記述を読むと勘違いしたりする('A`)
234229:2007/05/15(火) 16:09:20
>>231
ああ、.NETからの間違いだったかも

すまそ、ちょっとunicode変換されてくるは
235仕様書無しさん:2007/05/15(火) 22:23:41
>>228
そんなの書けたか?
236仕様書無しさん:2007/05/15(火) 22:37:00
>>235
今ちょっと試してみたけど、Excel VBA で Date 型だと書けてしまうな。気持ち悪い。
整数が日付、小数点以下が時刻ってことか…
俺はDateAddの方がどんな変数を操作してるかわかりやすいので安心できる。
237仕様書無しさん:2007/05/16(水) 00:22:54
真値を数値として扱うと-1になることを利用した演算式が
昔のBASICにゃたんまりあってのう……
a = a + (h > 3) * 1
とか
238仕様書無しさん:2007/05/16(水) 00:44:08
Oracle とかもDate型は数値扱いだろ
よくあるよくある
239仕様書無しさん:2007/05/16(水) 07:10:34
>>237
むしろ条件式を使うことがコード量を節約する手法の一つだったのさ。
240仕様書無しさん:2007/05/16(水) 09:46:11
>>237
の動作ってどうなるんだ?
こんな書き方しらねぇ・・・・

(h > 3)
この部分の解釈
241仕様書無しさん:2007/05/16(水) 10:15:20
>>240
真なら -1 で偽なら 0 になる。

つまり C で書きなおせば
if (h > 3) a += 1;
ってこと。

この例だとコード量節約にもならないような。
242仕様書無しさん:2007/05/16(水) 10:35:26
BASICならIF文使うと遅いからじゃね?
243仕様書無しさん:2007/05/16(水) 10:41:02
サンクス
なるほど そういう解釈になるのか!
しかし・・・可読性が落ちるな(;´Д`)

昔は遅かったからその辺のテクなんだろうなぁ・・・
244仕様書無しさん:2007/05/16(水) 12:02:18
最近のCPUで当時のBASICコードが動かせるとすると
ループで時間稼いだりしてた部分が瞬時に終わったり
笑える動作になるんだろうな
245仕様書無しさん:2007/05/16(水) 12:03:41
>>238 は何を言ってるんだ…?
246仕様書無しさん:2007/05/16(水) 12:06:52
>>244
ウチは実際にそれで問題が出てたwwww
247仕様書無しさん:2007/05/16(水) 12:47:25
>>244
昔でもあったぞ。
ゲームでPC-9801VM(V30)でスピード最適化したシューティングゲームを
PC-9801RA(i386)で動作させてみたらレーシングゲームになった、とか
248仕様書無しさん:2007/05/16(水) 13:30:20
MSXturboRの通常モード(8ビットモード)で普通に出来たゲームが
高速モード(16ビットモード)では早すぎてゲームにならなかったり。
249仕様書無しさん:2007/05/16(水) 19:37:21
>>237
俺は Pascal(Delphi) で似たようなコードをよく書く。

Salary := BaseSalary + 1500 * OverHours * Ord(chkOvertimePaid.Checked);

Pascal では Ord(False) = 0、Ord(True) = 1 と言語で定義されている。
でも確かに 8 ビット時代の悪しき習慣のような感じもするな。
250仕様書無しさん:2007/05/16(水) 20:39:53
俺は同じ書き方やって言語で動作が違うような書き方はしないように心がけてる
251仕様書無しさん:2007/05/16(水) 20:44:09
じゃあ、Cで短絡評価は使わないってこと?
252仕様書無しさん:2007/05/16(水) 20:50:09
>>251
C・C++は別格
253仕様書無しさん:2007/05/16(水) 20:51:54
>>251
短絡的な発想だな
254仕様書無しさん:2007/05/16(水) 20:57:30
>>253
だれがうまいこと言えとwww
255仕様書無しさん:2007/05/17(木) 11:43:10
>>250
言語が変わったら、同じ書き方は出来ないと思うんだが。
256仕様書無しさん:2007/05/17(木) 12:56:49
>>255
なにその柔軟すぎる発想
お前PGとかこの業界やめたほうがいいよ
それとも釣りですか?
257仕様書無しさん:2007/05/17(木) 14:00:51
>>256
「同じ言語で、同じ書き方をして、違う動作をするような書き方」
であれば、しないのが当たり前。素人じゃあるまいし。
258仕様書無しさん:2007/05/17(木) 14:17:15
>>257
日本語嫁よwwwwww
259仕様書無しさん:2007/05/17(木) 14:53:11
おいおい
COBOLでかちゅーしゃ作れねーだろ
260仕様書無しさん:2007/05/17(木) 15:32:20
.netコボルならできるんじゃね?
261仕様書無しさん:2007/05/17(木) 15:42:57
COBOLでJavaのVM作ればOK。
262仕様書無しさん:2007/05/17(木) 16:12:45
Valiantをブリリアントと読んでいた。
そんな時期もありました。
263仕様書無しさん:2007/05/17(木) 17:02:51
━━ a. 勇敢な.
ひょっとして: variant valiantly Valerian
264仕様書無しさん:2007/05/17(木) 17:58:31
今年入社した会社のコード

if(《BOOL型変数》!= TRUE)
{
}else
{
処理;
}

もっと簡潔に書いてくれ・・・
265仕様書無しさん:2007/05/17(木) 18:14:47
BOOLというのが実は独自定義の真偽値型で、
TRUE==0でそれ以外がFALSEだとか?
266仕様書無しさん:2007/05/17(木) 18:15:54
>>264
既出のものかと思いきや応用編か……。
267仕様書無しさん:2007/05/17(木) 18:48:13
>>265
それにしたってブロックからっぽにするんだったら
条件ひっくりかえしてelse削除でしょう。
268仕様書無しさん:2007/05/17(木) 18:52:06
>>267
ご指摘の通りだけど。else部分は省略禁止という規約も実在するしw
269仕様書無しさん:2007/05/17(木) 19:07:26
いや、条件に一致した場合の処理も後で書き加える可能性があるとか。
コメント残せよって話だけど。
270仕様書無しさん:2007/05/17(木) 19:39:21
  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

なんつーか、下っ手くそなコードだなあ…
271仕様書無しさん:2007/05/17(木) 22:03:48
真偽定数と比較する奴ウザイ。
272仕様書無しさん:2007/05/17(木) 22:30:17
おれ明示的に描くようにしてるわ
273仕様書無しさん:2007/05/17(木) 22:50:57
真偽値と比較するのならなぜその結果をさらに真偽値と比較しないのか。
そしてその結果をさらに……
274仕様書無しさん:2007/05/18(金) 00:13:13
>>270
こういう、似たような処理をひたすら羅列して、ウォーリーを探せみたいな
ソース書いてる人って、どんな気持ちで書いてるんだろう?
275仕様書無しさん:2007/05/18(金) 00:14:06
あーめんどくせー
276仕様書無しさん:2007/05/18(金) 01:57:47
>275
きっと本気でそう思ってるんだろうなぁ……
恐らく「コピペでガンガンコードが書けて俺様ってば超Cool!!」とは思ってない気がする
277仕様書無しさん:2007/05/18(金) 07:36:40
コピペでコード書くのは全くCoolでない件
278仕様書無しさん:2007/05/18(金) 08:12:42
>>277
おまけにバグまでコピッてるのを見ると殴り殺したくなる。
こういう時はgrepするとワラワラと湧いてくるんだよな。orz
279仕様書無しさん:2007/05/18(金) 09:16:43
>>276
しかしどこぞの馬鹿に言わせると
馬鹿でも理解できるため良質なコードということになる。

良質なコードを生み出すことが超Coolでないわけなかろう。
280仕様書無しさん:2007/05/18(金) 09:26:30
正しくは「馬鹿だけ」が最小コストで理解できるコードだろ
281仕様書無しさん:2007/05/18(金) 09:31:22
>280

何か問題でも?
282仕様書無しさん:2007/05/18(金) 09:41:40
>>281
一般人には理解できないコードなのだが。
283仕様書無しさん:2007/05/18(金) 09:46:16
自分が一般人に含まれると勘違いしているのはイタさ倍増
284仕様書無しさん:2007/05/18(金) 10:26:37
多分、板住民同士でレビューしたら自称一般人だらけだろうなw

自分の知識が普通とか一般だと思うのは非常に危険だぞ。
285仕様書無しさん:2007/05/18(金) 11:19:51
>>274
ステップ単価だったりして。
ステップ単価の文化に浸った人はコピペ多いよなぁ。
286仕様書無しさん:2007/05/18(金) 17:23:52
人月の狼
287仕様書無しさん:2007/05/18(金) 17:25:39
ほら吹き狼
288仕様書無しさん:2007/05/18(金) 19:41:19
>>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行削ればいいので、
案外上手なのかもしれんと思いました
289仕様書無しさん:2007/05/18(金) 19:56:25

  Dim bFlag As Boolean = False
  If (False _
  Or bHoge _
  Or bMoge _
  Or bNuge _
  Or bHage _
  Or ..._
  ) Then
     bFlag = True
  End if
290288:2007/05/18(金) 20:11:38
>>289
ナルホド、これなら1行で消せますね。
他のコードで同じ書き方してました。
If 条件式でやるのはためらいますが。
291仕様書無しさん:2007/05/18(金) 20:52:54
hogeとかmageをセットしてるコードのほうが気になる。
292仕様書無しさん:2007/05/18(金) 23:47:38
自分はVB(でしょ?)知らないんだけど
bFlag = bHoge Or bMoge Or bNuge Or bHage Or ...
とは書けないの?
293仕様書無しさん:2007/05/19(土) 00:04:03
そこまで分岐するならビット演算とかどうよ?
294仕様書無しさん:2007/05/19(土) 01:06:41
VBScript環境やまして.netはよー知らんが、レガシVBとかVBAでは
s = "hogehoge" _
'& "piyopiyo" _
& "fugafuga"
は文法エラーということを忘れてる人はおらんか。
いや忘れていいなら忘れてしまいたい貴方♪だが。

>292
書けるお。
295仕様書無しさん:2007/05/19(土) 02:05:39
>>288
cb.checked = cb.checked Or ( Not ( _
      bHoge _
      Or bHage _
      Or bHuge _
        :
      ) )
296仕様書無しさん:2007/05/19(土) 02:28:24
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];
とか

自分が今まで覚えてきたことを色々否定された気分になった。
297仕様書無しさん:2007/05/19(土) 02:49:14
>>296
俺も怖い。組み込みは鬼門と考えるようにする。
298仕様書無しさん:2007/05/19(土) 02:56:53
>>296
スマン。
2つ目のやつの問題点を教えてくれ。
これよくあったよ・・・@携帯電話の網の中の人
299仕様書無しさん:2007/05/19(土) 03:10:34
というか普通のfreeも大雑把に見ると>>296の二つ目みたいなもんだ。
300仕様書無しさん:2007/05/19(土) 03:15:26
せめて
(uintptr_t)pstData - (unsigned)(&(((Memory*)0)->データ));
にできないかねぇ。
301仕様書無しさん:2007/05/19(土) 03:20:18
>>298
プログラム全体で見ると整合性が取れてるんだけど、
free関数単体で見ると、引数pstDataからさらに前のアドレスってことは
一見アクセス出来る範囲外のアドレスを叩いてるように見える。

極端な話すると

int main(int argc, char *argv[])
{
char *str = argv[-1];
printf("%s\n",str);
return 0;
}

みたいなコトをしてるように見えるわけだ。
302仕様書無しさん:2007/05/19(土) 03:29:37
>>300
うは・・・。
構造体のアライメントを運用で気ぃつけるとかはあったけど、
そういう発想は無かったな・・・。

さんきぅ。参考になります。
303仕様書無しさん:2007/05/19(土) 08:47:17
>>296
value = array[-2]; 

これの動作は未定義なのでは?
304仕様書無しさん:2007/05/19(土) 08:56:50
バグ、それも謎の挙動が多いと評判最悪のシステムのメンテを担当する事になった。
普通に順繰りに実行すればいい処理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とか使われていて、
もう何が何だが・・・
リファインして良いか責任者に聞いたら、結構重要な部分だから、
汚いソースでも動いている以上手直し不可だって。
305仕様書無しさん:2007/05/19(土) 09:11:22
>>304
上はよく見る。
下もよく見・・・るわけねえええええ
306仕様書無しさん:2007/05/19(土) 09:13:56
>>304
上は各処理の後にbreak;はあるの?
あったらただの馬鹿だな。
307仕様書無しさん:2007/05/19(土) 09:14:24
>>304
Fの仕事の後では全然なんでもないと感じる。
やつら車輪の再発明大好きで、標準関数同等品の再開発はもちろん、
それを作ったのが同じF内でも課が違えば、自分ところで再開発するからな。
一つのシステムに同じ機能が何箇所も独立してコーディングされてて、
成績上位者が軒並み逃げるのも判る気がする、と思った。
308仕様書無しさん:2007/05/19(土) 09:33:28
>306
>上は各処理の後にbreak;はあるの?
実はある…orz

完璧、思いつきで組んでみた的な無駄なロジックいっぱい。
一つの関数内でローカル変数を初めはインデックスカウンタ、
下の方では値の交換のための受け皿に使ってたりもするし。
309仕様書無しさん:2007/05/19(土) 09:57:15
>>308
>一つの関数内でローカル変数を初めはインデックスカウンタ、
>下の方では値の交換のための受け皿に使ってたりもするし。

この誘惑に駆られちゃうことがあるな…
新しい目的のローカル変数が欲しいんだけど、既にいくつものローカル変数があって
新しく宣言するのは気が引ける時とか。
「おやこの変数この処理の後は使ってないや、使っちゃえ」って感じで。

保守を優先するなら、目的が違えば新しく宣言すべき?(規約にもよるだろうけど、一般論として)
310仕様書無しさん:2007/05/19(土) 10:28:46
>>309
> 保守を優先するなら、目的が違えば新しく宣言すべき?(規約にもよるだろうけど、一般論として)

当然だ。
ローカル変数多すぎってのは、リファクタリングの必要がある可能性があるよ。
311仕様書無しさん:2007/05/19(土) 11:06:29
クソみたいなソースをリファインするのは我慢できるが、
クソみたいなソースと付き合うのは苦痛だな。
312仕様書無しさん:2007/05/19(土) 11:34:09
>>309
確認したいが。
その関数内のローカル変数の現在の個数はいくつか?
(一般論を知りたいか?w)
313仕様書無しさん:2007/05/19(土) 11:53:02
>>309
ジジイみたいに関数の先頭でどっさり宣言するからだろ。
スコープ絞って宣言すれば、ほとんどそんなことにはならん。
314仕様書無しさん:2007/05/19(土) 12:23:41
>296
freeってそんなもんでしょ。組み込みじゃなくても
GNU libcのmalloc/freeはもっとスゴイ、という話を聞くけど。
315仕様書無しさん:2007/05/19(土) 12:34:29
>>312
10個かな。
2次元矩形の現在の開始〜終了座標と更新前の同座標を保持する必要があって、
元データの構造体1個と、それぞれ単独変数に追い出した4個×2で9個。
それに、問題の変数1個。他にもあったかも。

単独変数に追い出した4個×2はなくてもいいと思うんだけど、それないとコード追いにくいって
メンバがいるもんで、残してる。
リファクタリングの精神忘れてました。ありがと。見直してみる。
316仕様書無しさん:2007/05/19(土) 12:45:31
>>314
組み込みじゃなければmalloc/freeを使えば良いわけで。
317仕様書無しさん:2007/05/19(土) 12:55:01
そういや昔居た会社での事。
引数の数が8個9個が当たり前で、うち6個はどの関数でもやり取りされてるから、
「構造体にまとめませんか?」って提案したら、「難しくなるから駄目」って却下。
やたら構造体とかポインタだとかに拒絶反応のあるところだった。
318仕様書無しさん:2007/05/19(土) 13:03:11
>>306

>>304の上の処理はbreakが
あるかないかよりもswitchの後に続く処理が
あるかないかが重要なんでは?
319仕様書無しさん:2007/05/19(土) 13:05:28
>>296
malloc/free周りは基本はそんなかんじでしょ。
俺も自作したとき、似たようなコード書いた。
320仕様書無しさん:2007/05/19(土) 13:13:34
>>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

こうやって全部定義すれば仕様書みれば全部意味がわかる
322仕様書無しさん:2007/05/19(土) 13:52:56
>320
必要な時にブロックを生成して、なかで
int iを幾らでも定義すりゃいいじゃん。
323仕様書無しさん:2007/05/19(土) 13:58:09
>>309
グローバル変数として宣言すれば、宣言は1回で済むぞ。
同じものを幾らでも使いまわせる。
これは便利。覚えておけ。
324仕様書無しさん:2007/05/19(土) 14:53:47
後輩がそのパターンをやてってくれて頭抱えてるんだが。
学歴あってもセンスないやつはダメだ('A`)
325仕様書無しさん:2007/05/19(土) 14:57:01
>>323
そういう時は、自分で同じパターンの
読みにくいコードを書いてやって、
後輩に読ませれてみればよい。
326仕様書無しさん:2007/05/19(土) 15:04:14
本人はそれがわかりやすいと思って書いてるんだから
意図が理解できるはずもない
327仕様書無しさん:2007/05/19(土) 15:09:48
仮に>>324みたいな事をやって、
そいつがそのソースを即理解できたのなら、
文句ないんじゃねえの?

だって本当に分かり易かったんだろ?
328仕様書無しさん:2007/05/19(土) 15:12:24
とりあえずLispとかPrologとかマイナー系言語で書いて
「俺には判りやすいんだからいいだろ」といっとけ
329仕様書無しさん:2007/05/19(土) 15:29:50
>>327
自分が見て分かり易いかどうかより、
他人が見て分かり易いかどうかの方が重要なんじゃないか?
330仕様書無しさん:2007/05/19(土) 15:32:20
「俺はいつも"他人が見て分かり易いコード"を書くように努めている」
という奴に限って糞コードを書く件について、どう思う?
331仕様書無しさん:2007/05/19(土) 16:10:17
>330
そこの会社のわかりやすいコードのレベル=クソコードなだけ。
書いているうちにそれしかかけなくなる罠
332仕様書無しさん:2007/05/19(土) 16:31:38
みんないろいろなコメントありがとう。一般論もっと聞けるとうれしいけど。

>>320
i, j, k で思い出した。
漏れは i と j がぱっと見た目で区別しづらいことがあるから、
一文字変数は i, k, m, n, x, y, z, a, b みたいに、区別しやすい飛び飛びの
アルファベット使ってる。l も大文字の I と混乱すると嫌だから使わない。
i, j, k のように一文字アルファベット連続で使うのは、どんな理由があるのかな?
333仕様書無しさん:2007/05/19(土) 16:33:59
>>323
遠慮しときます。
ウッカリ、ある関数で使った後にもかかわらず別の関数で以前の値を保持しているつもりで
使おうとする実装をやってしまって、デバッグで痛い目にあったことがある。
334仕様書無しさん:2007/05/19(土) 16:41:27
>>332
大昔のFOTRANでI,J,K,L,M,Nで始まる変数は宣言なしで整数型になったから
335仕様書無しさん:2007/05/19(土) 16:53:02
>>334
とてもためになりました、ありがとうございます。
会社に入ってから勉強した文系プログラマなのでこうした基礎教養がないです。
336仕様書無しさん:2007/05/19(土) 17:13:00
N  M
Σ Σ Aij
i=0 j=0

こっちの法の使い方がもとだとおもうけどねー
337仕様書無しさん:2007/05/19(土) 17:19:11
元来FORTRAN(FORmula TRANslation)ってのは数式の処理目的だから当然だな
338仕様書無しさん:2007/05/19(土) 17:25:33
飛び飛びって初めて見たな。
それはそれで激しく嫌だ。
339仕様書無しさん:2007/05/19(土) 17:28:06
>>336
そして数式でiから始まる文字を使うのはiがindex(添え字)の頭文字だからだろうか。
iterationのiだと主張してる人もいたが数学に元を辿ると違いそうだなぁ。
340仕様書無しさん:2007/05/19(土) 17:32:41
元FORTRAN屋なんて自分以外には何人生き残ってるか知らんが、
いまだにi〜nで始まる変数名を見ると「整数型」と思ってしまう。
たぶん、一生治らんなw
341仕様書無しさん:2007/05/19(土) 17:44:36
index
j
k
length
m
number

一文字変数ならi〜nは整数だと感じる
342仕様書無しさん:2007/05/19(土) 18:26:05
それは普通だろ。

むしろ、「倍精度実数型」や「文字列型」とか定数のiを作るほうがどうかしてる。
何でうちの会社はこういうのがいるんだろう…。難読化か?
343仕様書無しさん:2007/05/19(土) 18:33:01
逆にaやbが整数だと気持悪い
344仕様書無しさん:2007/05/19(土) 21:20:44
>>338
漏れもすっきりしてるわけでありません。
i と j を打ち間違えてチェックに時間をとられたり、i I と l の区別に一瞬
ためらうことがあるので、そういうところで時間ロスしたくないと思って、
ぱっと見ても視認しやすい文字だけ使うようになりました。
皆さんはそういうことないですか? 漏れが下手なんでしょうね。
345仕様書無しさん:2007/05/19(土) 21:58:25
>>344
そーゆー時はフォントを書き換えると良いよ
346仕様書無しさん:2007/05/19(土) 21:59:34
>>344
うちのコーディング規約では、そもそも1文字の変数名が禁止。
それと意味の無い変数名も禁止。
例えば表を処理する二元配列のループ回すカウンタとかなら、
int nCntRaw,nCntCol;
とかになるかな。
347仕様書無しさん:2007/05/19(土) 22:13:21
>>345
そういう意見出ると思ってました。
開発環境が固定されてなくて、設定を持ち歩いたり、いちいちフォントを設定しなおすのが
面倒なんです。
使える開発環境のデフォルトの設定ですぐ読めるコードを優先してます。

>>346
普段は漏れもそうです。一文字変数は、ループカウンタのような限定された状況だけですね。
こんな感じ。
  for ( i = nStartRow; i <= nEndRow; i++ ) {
    for ( k = nStartCol; k <= nEndCol; k++ ) {
348仕様書無しさん:2007/05/19(土) 22:17:07
寿命の短かったり重要でない、変数名が短いほうがいい。
ソースがうるさくなる。
349仕様書無しさん:2007/05/19(土) 22:19:17
>意味の無い変数名
だったら nXXXXって意味ないからやめろ

int CntRaw,CntCol;

でおけ
350仕様書無しさん:2007/05/19(土) 22:21:05
int CR, CCでいいじゃん
351仕様書無しさん:2007/05/19(土) 22:24:06
>>349
あー、説明不足で申し訳ナス。
メインC言語なんだが、「決まったプリフィクス」をつけることになってんだ。
癖でつけてしもた。

例えばこんなのが変数の先頭に付く
int → n
char → c
void * → p
int * → pn
構造体 → st
列挙型 → e
グローバル変数 g_
352仕様書無しさん:2007/05/19(土) 22:28:17
ハンガリアンはいまどき、はやらないな。
353仕様書無しさん:2007/05/19(土) 22:30:05
>>351
つか、M$すら使わなくなったDQN記法をなぜ採用する?
おまえの会社頭おかしくね?
354仕様書無しさん:2007/05/19(土) 22:35:42
>>353
さぁ?そうなってる背景は知らんし、今んトコ困って無い。
良かったらどこがDQNなのか教えて貰えんか?
355仕様書無しさん:2007/05/19(土) 22:45:41
一文字変数禁止なんてルールきめたやつって、コードを読み書きした経験がろくにないんだろうな。
356仕様書無しさん:2007/05/19(土) 22:50:14
ttp://local.joelonsoftware.com/mediawiki/index.php/%E9%96%93%E9%81%95%E3%81%A3%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AF%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E8%A6%8B%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B
ハンガリアン記法の暗黒面が支配権を得たのだ。

それがなぜなのか、どういう経緯でそうなったのか誰も知らないのだが、
どうやらWindowsチームのドキュメントライターたちが、不用意にシステム
ハンガリアンとして知られるようになるものを作り出したということらしい。

システムハンガリアンはlongを意味する"l"、unsigned longを意味する"ul"、
double word(これは、実際は、その、unsigned longと同じものだ)を意味する
"dw"のような、あまり役に立たないプレフィックスを使う。
システムハンガリアンでは、プレフィックスが教えてくれるのは変数のデータ型だけだ。

プログラマたちは、自分たちの使っているハンガリアン記法の誤解されたサブセット
がはなはだ煩わしくほとんど役立たずであることに気づき、反旗を翻したのだ。
Microsoftはついには人々に言い始めたのだ。「ハンガリアン記法は推奨しない」。
357仕様書無しさん:2007/05/19(土) 22:55:28
うちの会社にもいまだにハンガリアンしてるやつがいて
ワロタ
358仕様書無しさん:2007/05/19(土) 22:59:08
現在進行中の糞プロジェクトなんか、コーディング規約がめちゃハンガリアン
でかけりゃでかいほどハンガリアン率が高いと思う
359仕様書無しさん:2007/05/19(土) 23:05:14
俺できるよねって感じで売り込んでるじじぃPGなんかは
ハンガリアン率が高い。
360仕様書無しさん:2007/05/19(土) 23:07:36
JavaとかUnix系とかはハンガリアン使わないんじゃないの?
361仕様書無しさん:2007/05/19(土) 23:08:03
int cntRaw,cntCol;

俺はこうかな。
362仕様書無しさん:2007/05/19(土) 23:08:49
つかRawって何だ。Rowだよな。
363仕様書無しさん:2007/05/19(土) 23:40:25
>>356を読んでみたが、デメリットが良く分からんかった。

個人的には変数名でデータの型がわかるだけで大分便利なんだが。
慣れてしまったら煩わしくも無いし。

慣れるまでに掛かるコストがメリットと釣りあわない(or無い)ので
ハンガリアンなコーディング規約はクソだ、ということか?
364仕様書無しさん:2007/05/19(土) 23:47:00
>>362
冷凍と生のカウンタなんだろ
365仕様書無しさん:2007/05/19(土) 23:51:15
>>363
型情報は名前にのせるほど重要じゃないってことだろ。
366仕様書無しさん:2007/05/20(日) 00:07:38
>>362
フツーに間違えた・・・。
よく間違える。

>>365
JAVAとかRubyとかはさておき、C言語じゃ大事だと思ってたんだが、
世間的にはそういう認識なんか・・・。

勉強になりました。
367仕様書無しさん:2007/05/20(日) 00:12:50
MSも捨てた記法だし
368仕様書無しさん:2007/05/20(日) 00:18:39
MSはC言語自体捨ててる
369仕様書無しさん:2007/05/20(日) 00:29:43
>>360
それが未だに使われてるから困る
死ねばいいと思う
370仕様書無しさん:2007/05/20(日) 00:33:01
>>366
型情報を変数名に入れると、
型が変わる度に名前が変わる事になる。
そんなのおかしい、不自然だと思わないか?

例えば、「身長」がmm単位からcm単位に仕様変更され、
型が整数型から浮動小数点数になっても、身長は身長だろ?
371仕様書無しさん:2007/05/20(日) 00:33:53
>>362
cunt rawの略。つまり生まんこってことだ。

>>363
変数の型を変えたい時に面倒なんだよ。

あと、型情報が重要じゃないわけではない。
変数の宣言箇所を見るのが面倒くさくなるほど
ソースをでかくする設計をまず見直せって事でしょ。
プリフィクスなんていらん。
372仕様書無しさん:2007/05/20(日) 01:03:05
読み返してみたけど。
プレフィックスをつけるべきだ
という発言は誰もしていないね
373仕様書無しさん:2007/05/20(日) 01:10:10
>>363
変数名って適当な長さがあるでしょ。
その中に重要な情報を載せていくと型名を載せる余地が無くなるわけだ。
型名は探せばわかるが、変数名に載せないとわからない情報がある。

あとは、機械的にチェックするツールが無きゃ信用できないから意味が無いと思う。
374仕様書無しさん:2007/05/20(日) 01:11:44
>>372
>>354の質問に答えてるだけ
375仕様書無しさん:2007/05/20(日) 02:09:24
if(i==0){
 foo();
}else{
 //空文
}
376仕様書無しさん:2007/05/20(日) 02:18:26
規約でelse省略不可だったんじゃないの
377仕様書無しさん:2007/05/20(日) 02:34:42
もともと処理あったけどいらなくなって消して、elseだけが残ったとか?
378仕様書無しさん:2007/05/20(日) 02:42:21
>>269の逆バージョンという可能性も
379仕様書無しさん:2007/05/20(日) 02:59:30
if(i!=0){
//空文
}else{
huu();
}
380仕様書無しさん:2007/05/20(日) 07:10:11
Javaでハンガリアンやりたがる奴は頃してもいいよね。
381仕様書無しさん:2007/05/20(日) 07:23:06
>>370
型が変わると変数名も変えないといけないってのはハンガリアン否定論としてよく聞くけど、
実際問題、型を変える頻度ってどれくらいあるもの?
変えるのだって、「拡張する必要があって止むを得ず」ならともかく、「使い方を間違ってたから
変更」みたいなのなら、それは設計をちゃんとやってないただのバカだと思う。
変数名の他の部分で、以前の型に依存した処理をやってて、バグを招く可能性がある。
それに、「変数名の型を変える」だけなら、今はエディタやIDEがマシになってるんだから、
一括置換ですむのでは?
>>356のリンク先で議論されている「チェックのしやすさ」の点で、システムハンガリアンも
有効活用できると思うんだけどな。こだわりすぎるとよくないけど。
382仕様書無しさん:2007/05/20(日) 10:15:33
変数名を変えられるエディタなら、
変数の型もでてくるんでねーの。

#ま、クラス・構造体に対して、システムハンガリアンは
#大抵のところ無力だから、どーでもいいけど
383仕様書無しさん:2007/05/20(日) 12:51:14
>>380
Yes
384仕様書無しさん:2007/05/20(日) 12:54:09
ハンガリアン使ってるのはうざいなぁ…
醜くて仕方がない
385370:2007/05/20(日) 13:01:44
>>381
頻度とかは無関係。
別に同じシステム内に限った話じゃなく、
全く別のシステムでも、同じ物を表す変数の名前を付ける場合でもいい。

同じ物を示すなら、当然同じ名前を付けるだろ?


名前に表現方法を入れるのは不自然だと言ってるんだよ。

身長の例でいくと、
単位がmmでもcmでもインチでも尺でも、身長は身長だ。

混在して使う必要がないなら、名前に表現方法など不要だろ?
386仕様書無しさん:2007/05/20(日) 13:33:41
>>385
単位がmm、cm → 基本型
身長 → クラス

わざと混同してるのか?
387仕様書無しさん:2007/05/20(日) 14:16:48
>ハンガリアン
どーでも良いが、そろそろ大分スレ違いじゃまいか?
388仕様書無しさん:2007/05/20(日) 15:06:41
相変わらずヴァカだなM$
389仕様書無しさん:2007/05/20(日) 15:47:53
だから素人に文献書かせるとろくなことにならない
390仕様書無しさん:2007/05/20(日) 15:51:12
自分が今書いてるところの変数の型も覚えてられないような奴とか、
覚えてられなくなるような無駄に長い処理書くような奴は
プログラム書く資格ねぇよ。

こう言うと「他人が書いたのを解析するときにいいじゃないか」とか出てくるが、
「そのハンガリアンで書かれてる型が実際の型と一致してること」はまったく保証されないんだが?

>>381
頻度は確かに低い。低いが、無いわけじゃないだろ?
それに、型に依存した処理をやってて型変更時バグるってのは、「変更時にチェックしたか」が問題であって、
変数名をハンガリアンで書いてようが書いてまいが同じこと。
391仕様書無しさん:2007/05/20(日) 16:51:49
ハンガリアンは
その変数が出てくるたびに
いちいち/*コメント*/つけるようなもんだ。
392仕様書無しさん:2007/05/20(日) 16:58:58
宣言部分を検索すれば済む話だよね
393仕様書無しさん:2007/05/20(日) 17:12:54
検索するようでは駄目だ。
もう関数(メソッド)の長さの話になってしまうが。
394仕様書無しさん:2007/05/20(日) 18:23:13
っつーかIDE使ってれば変数の型なんぞすぐに知ることができるだろうに

いったいいつの時代の開発環境なんでつか?
395仕様書無しさん:2007/05/20(日) 18:32:51
viつこーてます
396仕様書無しさん:2007/05/20(日) 18:53:55
VisutalStudio を使いまわしてると
わかるとおもうが、勝手に変数名に
dwとか付いたり開発者が言いくる
められたのかどうかしらないが、
仕様的にヴァカすぎる
その仕様を疑いなくそのまま放置する
M$の幹部どもも率直にヴァカまっしぐら
というかハンガリアン広めておいて
元の文献の趣旨理解していないとは
どういうカラクリになったらそうなる
んじゃい!
397仕様書無しさん:2007/05/20(日) 21:08:12
>>390
型変更した時に変数名を変えれば、それによる挙動のチェックを
モレが出ないようにフレームワーク化出来る。

あと
>「そのハンガリアンで書かれてる型が実際の型と
> 一致してること」はまったく保証されないんだが?
コーディング規約守れボケ。
約束事が守られてない前提で仕事出来ん。
規約に無いのにハンガリアンに頼る奴のことは知らん。
398仕様書無しさん:2007/05/20(日) 21:36:53
IDE全盛の今となってはハンガリアンが嫌われるのもよくわかるけど、
他人のコードがハンガリアンだからと言って貶す資格はないよね。
まあ、結局はコーディング規約守れって話だよね。
399仕様書無しさん:2007/05/20(日) 21:57:44
いや、だからハンガリアンがコーディング規約に無い以上、使ってもらっては困るんだがw

>型変更した時に変数名を変えれば、それによる挙動のチェックを
>モレが出ないようにフレームワーク化出来る。
あほか?これのどこがハンガリアンに関連すんだ?テストフレームワークとかコンパイラの仕事だろが
よけいな仕事をやっておいて自己満足してんじゃねえぞ
400仕様書無しさん:2007/05/20(日) 22:02:40
このスレは基地外が多いですね
401仕様書無しさん:2007/05/20(日) 22:07:41
>>399
コーディング規約にハンガリアンを入れるのを否定してるんじゃないの?

>あほか?これのどこがハンガリアンに関連すんだ?テストフレームワークとかコンパイラの仕事だろが
型変える→宣言箇所の変数名を変える
→変数を使ってるところをチェックしたら、使用箇所の変数名を変える

という風にルール化すると、未チェック部分があったらコンパイルが通らない
402仕様書無しさん:2007/05/20(日) 22:22:48
すべてを置換
403仕様書無しさん:2007/05/20(日) 22:25:42
面倒だから、みんなboost::anyにしようぜ。それでハンガリアンも問題無し。
404仕様書無しさん:2007/05/20(日) 22:29:26
わかった。
荒れる元ってだけでも
ハンガリアンは使わない方が吉、と。

論争する時間がもったいないわい。
405仕様書無しさん:2007/05/20(日) 22:34:29
ええー、組み込みならシステムシステムハンガリアンは結構有効だよぉ
406仕様書無しさん:2007/05/20(日) 22:37:43
Win16でFARポインタとNEARポインタを区別したいときには良かったけど
組み込みだとなにがいいのさ。
407仕様書無しさん:2007/05/20(日) 22:44:41
Microsoftはついには人々に言い始めたのだ。「ハンガリアン記法は推奨しない」。
408仕様書無しさん:2007/05/20(日) 22:53:52
ポインタのアラインとか、データ範囲(-0x80~0x7F)とか。
リソース少ないとなんでもかんでもlongにはできん。
409仕様書無しさん:2007/05/20(日) 23:34:36
 :
 :
int i = 0;
array[i] = i++;

今までよく動いてたと思う。危なっかしいったら。
410仕様書無しさん:2007/05/20(日) 23:45:08
なんかようわからんけど、変数名の頭にintとかfloatとか付けるのは
それが的確な名前ならそれでもいいという考え。

ハンガリアンが愚かなのはint型だからintってprefixを付ければ良い
とかいう思考停止故だと思ってる。
411仕様書無しさん:2007/05/20(日) 23:56:50
ポインタの p とかはあった方がいいなーと思うことが多いな
それより vector が困る。

std::vector<HOGE> hogeVec;
HOGE hoge;
hogeVec.push_back(hoge);

Vec とかつけるのあまり好きでないんだが、他にいい案が浮かばない
412仕様書無しさん:2007/05/21(月) 00:05:03
それあとでやっぱりdequeにしよう、とかいったときどーするの?
413仕様書無しさん:2007/05/21(月) 00:07:05
>>411
うん、だから困ってるんだよ
変えるべきは下の HOGE hoge; なのかもしれないけど、いい案が浮かばないの
414仕様書無しさん:2007/05/21(月) 00:15:38
名前の変更なんか、IDEのリファクタリングで一発じゃん。
hogeVecはいかがなものかとは思うが。
415仕様書無しさん:2007/05/21(月) 00:29:39
ハンガリー人はテンプレートパラメータにどんな
プリフィックスをつけるの?
416仕様書無しさん:2007/05/21(月) 00:54:41
>411
月並みだがVecを何の目的で使うかジャマイカ
ListでもBagでもCollectionでもお好きなのをだうぞ
417仕様書無しさん:2007/05/21(月) 01:34:11
ハンガリアン、ハンガリアンとか言うヤシに限って、
クラスのプリフィックスがclsだったり、構造体のプリフィックスがstrとかだったりする。

ハンガリアンの意味、利点を履き違えてるとしか思えない。


そこが、ハンガリアンが愚かである所以だと思われ。
418仕様書無しさん:2007/05/21(月) 01:36:11
>>414
それいったら型が何かなんて
IDEなら一発ジャン。

いいっこなしよ。
419仕様書無しさん:2007/05/21(月) 01:59:42
>>417
strはstringとかぶるぞ。
420仕様書無しさん:2007/05/21(月) 02:10:00
自分はその
「IDEが無ければ開発作業自体が出来ないPGを多量生産するような考え方」
は承服しない。
421仕様書無しさん:2007/05/21(月) 02:12:34
>>420
テキストエディターが神
の派閥なわけ????
422仕様書無しさん:2007/05/21(月) 02:21:36
>>421
そんなものに派閥なんかあるか!w
エディタが使われていないころから仕事をしているPGさ。
423仕様書無しさん:2007/05/21(月) 02:28:19
>>422
「emacsは最高のIDE」という派閥がある
424仕様書無しさん:2007/05/21(月) 02:31:00
>>422
あ・・・あれか??
ベタでCやベーシック書いてた時代なのか??
MSX世代の予感・・・・
425仕様書無しさん:2007/05/21(月) 02:40:13
テキストエディタが神とは言わんが、
現局に行ってviしか無い環境でソース弄くるというのはある・・・

#もちろんデスマ中
426仕様書無しさん:2007/05/21(月) 02:41:12
>>425
おまwww
こんなところ書き込んでる場合じゃねええええ
427仕様書無しさん:2007/05/21(月) 08:22:04
>>424
BASICにはエディタが組み込まれてたがな(俗にカーソルエディタと呼ばれてた)

エディタなしっつーとパンチカードの時代になるな
428仕様書無しさん:2007/05/21(月) 08:33:23
コーディング用紙に書いてパンチャーに渡す
そんな時代もあ〜ったねと〜♪
429仕様書無しさん:2007/05/21(月) 09:50:33
辞めようってほどじゃないんだけど、もうとっくに辞めてった奴が残した遺産。

BOOL InitInstance( HANDLE hInstance, int nCmdShow )
{

HANDLE hWnd;

hWnd = CreateWindow( 中略 );


if ( hWnd == NULL ) return ( FALSE );





ShowWindow( hWnd, nCmdShow );




UpdateWindow( hWnd );



return ( TRUE );


}

なんだその無駄な改行は。
430仕様書無しさん:2007/05/21(月) 10:31:15
昔から一行おき/二行おきに書く人はいたけどねw
431仕様書無しさん:2007/05/21(月) 10:46:14
コメント行を機械的に取り除いた跡かもしれない。

…UpdateWindowに何行コメント書いてたんだyp!
432仕様書無しさん:2007/05/21(月) 10:58:15
ハンガリアン云々と高尚な話題で議論出来る人たちが裏山しい。

俺なんか、今戦ってるソースが

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`)
433仕様書無しさん:2007/05/21(月) 10:58:58
あ、>432の一番下のElseは無しね。
434仕様書無しさん:2007/05/21(月) 12:38:48
>>432
とても見やすいコードダネ
435仕様書無しさん:2007/05/21(月) 13:56:54
>>427
>パンチカードの時代になるな
紙テープもお忘れなく。
ソースの修正ツールはハサミとノリだ。
436仕様書無しさん:2007/05/21(月) 14:06:17
>>435
磁気テープもお忘れなく。
修正ツールはユーティリティ起動とそれに対するバッチスクリプトを含むJCLだ。
437仕様書無しさん:2007/05/21(月) 14:26:36
宇宙戦艦ヤマトの記憶媒体は磁気テープだぞ!
438仕様書無しさん:2007/05/21(月) 14:39:23
jspとjavascriptでコードが汚いのは最悪だ、、、
439仕様書無しさん:2007/05/21(月) 16:58:08
紙テープを目視で読んで東京湾に出現した怪獣を特定する。
440仕様書無しさん:2007/05/21(月) 20:06:28
JSPとかJavaScriptが汚いのはもうしょうがないよ。
あれはそういう人力で何とかしましょう、っていうアーキテクチャだと思う。
さっさと諦めて他人に押し付けた方がいい。
441仕様書無しさん:2007/05/21(月) 22:03:22
JavaScriptのソースはやだよぉ〜〜。
型変換気持ち悪いよぉ〜〜。
str-0ってなんだよぉ〜〜。
num+""ってなんだよぉ〜〜。
442仕様書無しさん:2007/05/21(月) 23:59:23
>>441
わかる・・・気持ちはわかるぞ・・・・
だが・・・・嫌でもやらねばWEBアプリは客先のバカな要求に耐えられない
443仕様書無しさん:2007/05/22(火) 02:53:02
気持ち悪いなら明示的に型変換関数使えよ。
444仕様書無しさん:2007/05/22(火) 03:55:27
他人が書いたソースだろ?
445仕様書無しさん:2007/05/22(火) 09:07:13
明示的に型変換したらしたで今度は次の奴が気持ち悪いとか思いそうだな
446仕様書無しさん:2007/05/23(水) 09:26:40
気持悪さならPerlが一番じゃないかと
447仕様書無しさん:2007/05/23(水) 09:51:47
@_とかマジ死んでくれ。
448仕様書無しさん:2007/05/23(水) 10:40:51
染まると気持ちいい
449仕様書無しさん:2007/05/25(金) 14:25:41
引数一つで済むような些細な差異しかない、同じ処理をする関数が延々10個近くあるソース。
頃したい。
450仕様書無しさん:2007/05/25(金) 19:23:45
>>449
そんなのが36個あるソースのメンテをやらされてます
1関数あたり1000行超えてます
451仕様書無しさん:2007/05/25(金) 19:28:11
書き直せばぁ
452仕様書無しさん:2007/05/25(金) 22:18:15
逆にステップ数を稼ぐ手法としてはいんでね?
453仕様書無しさん:2007/05/25(金) 23:05:25
後のメンテは考えてないけどね。
それとも、保守も時間がかかるからその分ふんだくれることを狙ってるのかな。
454仕様書無しさん:2007/05/27(日) 12:18:27
ソースの1行を修正する度に理由を書いて判子貰わないと作業できない場所。

あー、リリース前の話ねw
455仕様書無しさん:2007/05/30(水) 21:53:38
今日たまたま発見したもの

if (flag ? true : false) {

何がやりたかったんだろう・・・
456仕様書無しさん:2007/05/30(水) 22:14:38
if (trim(hoge = "")) then
  hoge = "zzz"
end if
457仕様書無しさん:2007/05/30(水) 22:19:07
String型の変数に全てTrimが掛かっている
458仕様書無しさん:2007/05/30(水) 22:19:30
Private bool HogeHoge()
{
  if (!Nullpo)
  {
    return false;
  }
  else
  {
    …………………………………
    …………………………………
    …………………………………
    if (Nullpo)
    {
      return false;
    }
  }
}
459仕様書無しさん:2007/05/30(水) 22:31:43
…のところにスリープとか入ってそうだな
460仕様書無しさん:2007/05/30(水) 22:32:56
ソースコードじゃないけど・・
cvsでキーワード置換使ってるの見たとき
461仕様書無しさん:2007/05/30(水) 22:34:08
try {
     // .......
} catch(NullPointerException e) {
    System.out.println("ガッ!");
} catch(Throwable e) {
}

解ったから消せ。
あと、握りつぶすんじゃねぇorz
462仕様書無しさん:2007/05/31(木) 02:10:44
テラワロス
463仕様書無しさん:2007/05/31(木) 21:13:29
try {
・・・
} catch(ArrayIndexOutOfBoundsException arrayIndexOutOfBoundsException) {
・・・
}
464仕様書無しさん:2007/05/31(木) 21:19:22
>>463
あるある・・・
もしかして、伝説のforループを例外で抜けさせるアレ?
465仕様書無しさん:2007/05/31(木) 21:33:11
ループを抜けるのにthrowを使うのはよくやらないか?
466仕様書無しさん:2007/05/31(木) 21:37:22
別に、break, return, gotoのどれかでいいじゃん。
467仕様書無しさん:2007/05/31(木) 21:48:27
>>465
うほっいい例外
468仕様書無しさん:2007/05/31(木) 21:48:37
>>465
素直にbreak使うか、多重ループならばメソッドしやがれですぅ
469仕様書無しさん:2007/05/31(木) 22:40:30
たかがループ抜けるだけなのにいちいちthrowなんてありえねぇ
470仕様書無しさん:2007/05/31(木) 22:53:36
添字に-1が入ってきても普通に抜けられるのはまずいんでない?
471仕様書無しさん:2007/05/31(木) 22:56:01
無限ループの仕様だから、ループを抜けるのが例外なんだよ!!
472仕様書無しさん:2007/05/31(木) 23:03:06
ふーん
473仕様書無しさん:2007/05/31(木) 23:08:03
ほ〜
474仕様書無しさん:2007/05/31(木) 23:09:07
 MISRAのコーディングルールに従ってください
って言われたときは、やめよーかなと思ったよ・・・

 で、メンテするコードがコーディングルールを
まったく無視してるのを見たときに
 やっぱ辞めておけばよかったと思ったね
475仕様書無しさん:2007/05/31(木) 23:27:17
>>470
可能性があるなら添え字に出来る範囲の数かちゃんとチェックしてくれよ。
バグ出たら追いづらくて仕方ない。

と思ったんだが、もしやスタックやら何やらのメモリ潰れるような現象を想定してるのか・・・
476仕様書無しさん:2007/05/31(木) 23:33:32
MISRAって知らんかったので、ググってみたけど、無料じゃ読めんのか。
477仕様書無しさん:2007/05/31(木) 23:41:08
a = hogehoge();
a = a; // debug
b = fugafuga(a);
b = b; // debug
return b;

みたいにほぼ一行おきに無意味な代入文があるソース。
邪魔だから消しとこうと思ったんだが

for (i = 0; i < c; i++)
  i = i; // debug
  burabura(i);

…えーと、今これで動いてるわけだし、余計なことはやめとくかな…
478仕様書無しさん:2007/05/31(木) 23:45:05
うん。これは触らない方が良いな。
479仕様書無しさん:2007/05/31(木) 23:46:09
外すとヤバい無駄代入ってあるんだよな・・・
480仕様書無しさん:2007/05/31(木) 23:46:28
1ファイルで2万ステップ
グローバル変数1000個弱
関数が関数を呼び出しまくりでいくら掘り下げても関数の仕様がわからない

大手もクソなんだなと思った
481仕様書無しさん:2007/05/31(木) 23:58:12
>>477 どうせ最適化で外されてるでしょ。
482仕様書無しさん:2007/06/01(金) 00:28:21
>>477
潜在バグがたんまりありそうな予感。
483仕様書無しさん:2007/06/01(金) 00:53:25
>>304
そういうループとswitch分の逐次処理をよく見るんだけど、ああいう書き方ってどこで教えてるの?
あと、どういうメリットがあると思っているんだろう。
本人を問い詰めて聞きたいのだが、既存ソースなのでどこの誰が書いたのかすら分からない。
484仕様書無しさん:2007/06/01(金) 01:47:53
>>483
無限forループにして iを処理ポインタにしてるのなら見た。
処理の途中から好きなところまで戻れる。
逐次処理でやる意味は不明。
485仕様書無しさん:2007/06/01(金) 01:48:23
>>483
うぇぇええwww番号がついて順番がわかりやすいえwwwwwwwwうぇえwwww
コメント?つけませんwwwwww
486仕様書無しさん:2007/06/01(金) 01:57:21
たとえばこんなかんじかな

for( i=0; i<N; i++ )
{
〜関数にするほどでもないけどコピペを連ねたくはない処理〜
switch(i)
{
case 0:
〜処理0〜
if( … )
break;
case 1:
〜処理1〜
if( … )
i=0;
break;

}
}
487仕様書無しさん:2007/06/01(金) 02:02:43
>>483
「同じようなコードは出来るだけ書かないようにする」という思想があるよ。
再利用とかじゃなくて、コピペっぽいことね。

まぁ個人的にゃ、メリットもデメリットも無い普通のコードに見えるが。
488仕様書無しさん:2007/06/01(金) 02:47:08
俺が見たのは以下のような処理。
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仕様書無しさん:2007/06/01(金) 03:26:33
>>477-479
ハードにバグがあって無駄代入が無いと
やばい物があった。
490仕様書無しさん:2007/06/01(金) 06:07:29
>>489
そういうケースに遭遇したことは俺はないな。
無駄代入は文字通り時間的には無駄でしかないから、タイミングか何かの問題か?
それともメモリが不安定とか?
491仕様書無しさん:2007/06/01(金) 08:36:27
>>486
forループの中でiをいじるのは行儀がよくないし
それだったらコピペしてくれた方が100倍まし・・。
492仕様書無しさん:2007/06/01(金) 09:35:47
goto的な処理をgotoを使わずに無理矢理やるってことか
それだったら素直にgotoした方がまだましだな
493仕様書無しさん:2007/06/01(金) 10:19:00
ループカウンタをループカウンタ以外の用途で
使って何も感じない人は
コードコンプリート読んだらいいと思うよ。
494仕様書無しさん:2007/06/01(金) 10:51:32
>>474
MISRA ってなんじゃい、とググってみました。
話の流れから

  ttp://www.kumikomi.net/article/report/2006/12misra/figure1.html
  項目 No.58「(switch 文の条件を終了する以外は) break 文は使用し
  てはならない」

てのをみつけたんですが、

  プログラム構造をよく考えれば break や continue というみっともない制御
  文は入れずにすむ.

…ええっと、これ書いたのはどこの脳足りんですか?
495仕様書無しさん:2007/06/01(金) 10:58:13
>>491
>forループの中でiをいじるのは行儀がよくないし
そーゆーコーディング規約なら仕方ないが、そうでなきゃ別に。
俺なんて、「C/C++ に while 要らない派」だし。
496仕様書無しさん:2007/06/01(金) 11:07:15
>>491-493
ナニソレ?
じゃあforじゃなくてwhileだったら良いのか?
永久ループしてif(i>=N)break;で抜けてたらどうなんだ。
可読性もなんもカワンネくてアホくさい。
forでi使ってたらカウンタに見えるって、思い込み強いんじゃない?
>>486のiは、単なる制御用変数だろ。
497仕様書無しさん:2007/06/01(金) 11:28:57
そしてスパゲティコードが生産される、と
498仕様書無しさん:2007/06/01(金) 11:36:21
「〜に見えるって、思い込み強いんじゃない?」
そして俺言語生産。
typedef 〜
typedef 〜
typedef 〜
499仕様書無しさん:2007/06/01(金) 11:48:05
今、クソコードの生成過程が走馬灯のように・・・
500仕様書無しさん:2007/06/01(金) 12:23:56
>>496
だからコードコンプリートでも読んで出直した方が
周りの皆の(特に保守任された人の)ためになるよ。

ちょっとした変更でとんでもない動きになりうる事もある。
全部が全部そうだとはいわないが
だからこそ統一ルールとして、いじりたい変数は
カウンタとは別に用意した方がよい。

ちゃんと判りやすい名前でな。

なんでこんな基本中の基本の
受け売り書かにゃいかんのか。
501仕様書無しさん:2007/06/01(金) 12:26:31
受け売りかYO!
502仕様書無しさん:2007/06/01(金) 12:42:05
>>496
>forでi使ってたらカウンタに見えるって
単なるループカウンタではないのなら、i なんて使わない方がいいわけで。
503仕様書無しさん:2007/06/01(金) 13:03:53
単なるループカウンタでないなら
ループカウンタとして使う時点で危険が危ない。

簡単に見えるの、最初だけ。
ささいな変更でもどっかーんですよ。

コードコンプリートだとマコネルさん、
単なるループカウンタですら意味がある場合は
ちゃんとhogeIndexみたいな名前つけろとまで
書いとるな。そりゃちょっと面倒くさいよとは思うが。
504仕様書無しさん:2007/06/01(金) 16:54:02
>危険が危ない

・・・。
505仕様書無しさん:2007/06/01(金) 17:01:39
危険が危なくなったら二重否定で安全ってことじゃないか?
506仕様書無しさん:2007/06/01(金) 17:05:35
507仕様書無しさん:2007/06/01(金) 17:11:26
>>504 貴様ドラえもんを観ていなかったな?
508仕様書無しさん:2007/06/01(金) 17:19:10
>>503
>コードコンプリートだとマコネルさん、
信望者なのかも知らんが、元MSじゃなかったか?あいつ。
509仕様書無しさん:2007/06/01(金) 18:30:31
>>508
そうだよ。
ジョエル・スポルスキーもそうだな。

で?
510仕様書無しさん:2007/06/01(金) 18:59:40
>>509
いやね、MS製品みるにつけ 「実践してねぇんだろなあ」と思ったり。
ま、書いてあることは概ね当たり前のことなんで
本自体が信用ならないわけじゃないんだが。
511仕様書無しさん:2007/06/01(金) 20:08:13
「自分が痛い目にあったから良く分かる」という事かも
512仕様書無しさん:2007/06/01(金) 20:22:56
>>494
breakやcontinueってのはanonymous gotoなわけで
anonymousな分ただのgotoよりタチが悪い
513仕様書無しさん:2007/06/01(金) 20:37:17
>>512
gotoより処理順が拘束されるから似たり寄ったりだと思う
514仕様書無しさん:2007/06/01(金) 21:02:47
>>512
行き先わかってるから、gotoとは違うだろ。
それがgotoなら、returnだって関数の最後の行へのgotoだけど、returnも関数の最後にひとつしか使わないって主義?

515仕様書無しさん:2007/06/01(金) 21:29:53
まぁ、break/continueは確かに行き先が分かりにくいという問題はあるねぇ。

ただ、何処に行くか分からないほどループ内が長いとか、breakで何処に出るかわかんないほど
ネストしてる時点で負けてると思うが。

ちなみに私は会社で「caseとcaseの間は長くて5行以内にしろ」と叫んでみてるところです。
横綱級の凶悪なコードはswitch-case絡んでることが多いもんで…。
516仕様書無しさん:2007/06/01(金) 22:11:54
goto 文使ってとんでもない所にジャンプかますバカも実際居るからな
517仕様書無しさん:2007/06/01(金) 23:27:00
MISRAのチェッカのマニュアルに、MISRAが載ってた。
http://documentation.renesas.com/jpn/products/tool/rjj10j1600_sqmlnt_u.pdf
518仕様書無しさん:2007/06/02(土) 00:03:39
ループの中のブロックが長いとcontinueとかbreakが憎らしくなる。
まぁ関数分割しろよって話だね。
分かってて使う分にはまったく問題ないよね
インデントが深くならず可読性があがるし。
519仕様書無しさん:2007/06/02(土) 00:04:57
あれ〜?とおもった項目
・&& ||演算子の右辺は副作用を含んではいけない
・continueを使用してはならない
・switch以外でのbreakもダメ
・可変長引数使うな
・再帰するな
・returnは関数の最後にひとつだけしか許さないんだからッ
520仕様書無しさん:2007/06/02(土) 00:42:49
>・returnは関数の最後にひとつだけしか許さないんだからッ 

これはちょっとイヤかも。
521仕様書無しさん:2007/06/02(土) 00:52:39
>>519
元が自動車とかの高信頼性分野で組み込み専用のコーディングルールだからね・・
そんなもんだよ
522仕様書無しさん:2007/06/02(土) 00:56:22
可変長変数禁止とか再帰禁止はスタック絡みの懸念かなぁ。
本文読んでないから憶測でしかないが。
まぁ可変長引数ならJava式にvoid**で逃げる手も……自分で書いてて辞めたくなるわorz
523仕様書無しさん:2007/06/02(土) 01:16:47
>>522
>可変長変数禁止
これは明確な型チェックが出来ないからだと思われ。

voidのポインタ使ってもルール45にひっかかるっぽい。

・全ての型のポインタへの、またはポインタからの全ての型へのキャスティングは使用してはならない。
ポインタ型でキャストしている場合、ポインタ型の変数に対してキャストしている場合、
およびポインタ型を返す関数呼び出しに対してキャストしている場合、
「違反」レベルでレポートします。

だそうな。void *、使いどころねぇ・・・。
524仕様書無しさん:2007/06/02(土) 01:34:07
ダウンキャストとかアップキャスト明示的サポートしてる
言語じゃないと危険で使えないよ。
525仕様書無しさん:2007/06/02(土) 10:50:56
for(double i = 0; i < 100; i = i + 0.1) {
}
526仕様書無しさん:2007/06/02(土) 11:52:36
演算誤差でハマりそうだな
527仕様書無しさん:2007/06/02(土) 12:53:44
VBの日付型(内部Double)を使って、日付の前後を調べるために

If( Date1 < Date2 ) Then
528仕様書無しさん:2007/06/02(土) 12:54:43
>527
途中で送信しちまった。
「日付型」という名前にごまかされているが、DoubleはDoubleだっちゅーの。
実数を直接大小比較するなぞ素人以下だ。
529仕様書無しさん:2007/06/02(土) 13:57:41
SQLの話
SELECT
    NVL(項目名,NULL)




何がやりたいんだと
530仕様書無しさん:2007/06/02(土) 14:19:23
>>528
実数を == で比較するのは素人だが < や > で比較するのが素人とは初耳。
531仕様書無しさん:2007/06/02(土) 14:21:42
>>528
ほんとにごめんなさい。教えて下さい。
Double を比較するのはいけないんでしょうか?

例えば、(Java)

double a = 1.0;
double b = 1.1;

if (a < b)
{
//
}

とかってダメなんですか?
是非、理由を教えて下さい。独学でやってきたタイプなので、
そういうのに疎いんです…。
532仕様書無しさん:2007/06/02(土) 14:42:39
>>531
俺もそれでやってる。普通じゃない?
今のところ、>>527-528の理解が特殊だと思ってるけど。
533仕様書無しさん:2007/06/02(土) 14:47:04
「直接大小比較」が問題みたいだから、次のようならいいのかな?

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命令叩いて
比較だな。
536仕様書無しさん:2007/06/02(土) 15:05:52
VB ならそれはコンパイラで面倒見てるのでは?
537仕様書無しさん:2007/06/02(土) 15:06:16
おいおいプログラミング暦20年の俺にもわからんぞ
538仕様書無しさん:2007/06/02(土) 15:06:43
>>534
じゃあ2つの浮動小数点データの大小を比較したくなったらどうすればいいの?
539仕様書無しさん:2007/06/02(土) 15:06:48
有効桁数とか誤差を意識して使ってる分にはいいんじゃね?
まぁ、お金関係の計算には使いにくいけど。
540仕様書無しさん:2007/06/02(土) 15:08:41
確かに==での比較は問題があるだろうが、大小の比較も問題あるとすると、
「秒程度の精度は浮動小数点を使用しても保証できる」という前提が崩れてくる。

その前提が崩れるということは、Date型は「秒程度は誤差あるかもしれませんwww」な
型になるわけで、そんならそもそも「Date型使うな」にするべき。

つーか、そのDate型は内部表現が浮動小数点だとしても、それぐらいの誤差考慮はコンパイラなり
ライブラリでやっとらんのか?

>>531
その数値において必要な精度を考慮して問題なければいい。
重要なのは、浮動小数点はある程度の誤差を持つということ。
その誤差が許容できるかどうかは実装者が適宜判断しなければならない。
541仕様書無しさん:2007/06/02(土) 15:09:20
でも>>525はダメだと思う。
542仕様書無しさん:2007/06/02(土) 15:12:23
>>538
ずっと教えてクレクレ君だとこの先つらいぞ。自分でも調べられるようになっておかないと。
ほれ。
http://msdn2.microsoft.com/ja-jp/library/ae382yt8(VS.80).aspx
543仕様書無しさん:2007/06/02(土) 15:14:08
>>525はダメだな。
544仕様書無しさん:2007/06/02(土) 15:17:37
>>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系じゃないのか。
何もかもが気にくわねぇ。
546仕様書無しさん:2007/06/02(土) 15:30:59
この場合iはintでも構わんが、そもそもiの型が何なのかもこのソースからじゃ分からんな。
いらいらさせるソースという意味では>>545に禿同。
547仕様書無しさん:2007/06/02(土) 15:47:04
馬鹿にされている対象者と同レベルなのに

「まともなのはこんなところかね」

とか、あたかも上級者の如き知ったかぶりもまた
イライラさせる要因だなw
548仕様書無しさん:2007/06/02(土) 15:50:20
ということで、>>544
この会社辞めようと思ったソースコード
にめでたく認定されました。
549仕様書無しさん:2007/06/02(土) 15:51:31
へっ
辞めてやんよ!
550仕様書無しさん:2007/06/02(土) 17:55:27
>>527
何がわるいのかわからん。

>>533 みたいしても結局同じだよね。
551仕様書無しさん:2007/06/02(土) 18:42:56
>>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 が出るのがいったいどういう条件なのかが
いまいちよく分かりませんが…。
553仕様書無しさん:2007/06/02(土) 18:58:47
>>551 加算、減算、日数差とか求める時は?
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);
}
555仕様書無しさん:2007/06/02(土) 19:07:33
>>554 それでそのループは何回まわるんだ?
556仕様書無しさん:2007/06/02(土) 19:11:39
>>553
まあなんだ、関東近辺に住んでるならかなりの人が使っているであろう
某サービスの中の金勘定プログラムな。
文字列を受け渡してそういう計算をして、結果を文字列で返してくるという
専用のライブラリがあるわけだよ。。。

関係ないけど、これからスイカがうまい季節になるな。。。
557仕様書無しさん:2007/06/02(土) 19:13:14
>>555
所定の座標100.0までグラフ書き終わるまでだろ
何回回るかは知らん。
話ループしそうなんでカウンタの話は勘弁な。
558仕様書無しさん:2007/06/02(土) 19:54:48
>>542
これって大小比較でなく等価判定の話だよねえ?
君、何か勘違いしてない?
559仕様書無しさん:2007/06/02(土) 19:56:33
だから、"0.1"を2進数で表記してみろ。
560仕様書無しさん:2007/06/02(土) 20:00:26
>>557
こういう奴が居る会社がスレタイトルにあるような会社という事が解った。
561仕様書無しさん:2007/06/02(土) 20:19:26
>>559
それとこれとどういう関係が?
562仕様書無しさん:2007/06/02(土) 20:21:52
>>561
新人じゃあるまいし、浮動小数でループなんかするコードはヤバイだろ。
563仕様書無しさん:2007/06/02(土) 20:28:48
>>562
ああ、そっちのほうか。
564仕様書無しさん:2007/06/02(土) 21:07:03
00111110000000100
01000001000001100
01000001000000100
01000001000000100
01000001011000100
00111100011001110
565542:2007/06/02(土) 21:35:32
>>558
あなたのアンカー先のレスにあるアンカーの先にはなんて書いてます?
俺にはこのように読めたんだが。
>>538
>じゃあ2つの浮動小数点データの大小を比較したくなったらどうすればいいの?
あなたの言うように、これは大小比較でなく等価判定の話と理解すべきだったんだろうか?
566仕様書無しさん:2007/06/02(土) 22:22:37
>>551
次のリンク先の「無意味な値」を参照

http://msdn2.microsoft.com/ja-jp/library/ae382yt8(VS.80).aspx
567仕様書無しさん:2007/06/03(日) 00:38:43
横槍だけども
>565=>542
何だその間接参照のネストだらけの表現はw
「このように読めた」と言いつつ、どう読めたか明示してないし。

>542のURLにある記述は、浮動小数点数の一致判定に関するもの。
大小比較の話じゃないよ。
サンプルコードに出てくる大小比較は、比較対照の2数の差が
許容誤差範囲内かどうかを判定するためのものだよ。
568仕様書無しさん:2007/06/03(日) 01:14:24
浮動小数点どうしの比較がタブーだなんてのは単なる妄言なんですね?
安心して寝られそうです。
569仕様書無しさん:2007/06/03(日) 02:29:05
やっちゃ駄目なのは等号で同値比較をすること。
570仕様書無しさん:2007/06/03(日) 10:52:21
浮動小数点の比較のときに念のために
>=ってぐあいにイコールつけたりしても問題ないですかね?
571仕様書無しさん:2007/06/03(日) 11:30:02
問題は無いと思う。意味があるかどうかは別として。
572仕様書無しさん:2007/06/03(日) 15:00:36
 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
573仕様書無しさん:2007/06/03(日) 15:58:09
スゲエ、VBか?
悪い意味でVBを使いこなしてるな。
574仕様書無しさん:2007/06/03(日) 17:14:00
>>572
別に悪くない。
575仕様書無しさん:2007/06/03(日) 18:28:11
>  Select Case True

だめだろ、さすがに。これは。
576仕様書無しさん:2007/06/03(日) 18:45:34
>>575
なんで?
お前、select case の使い方知らないだろ
577仕様書無しさん:2007/06/03(日) 18:49:34
VBではこれは当たり前のコードなのか?

……VBは糞って言われてる理由がはじめてわかった気がした
578仕様書無しさん:2007/06/03(日) 18:52:32
なんで?とか素で返ってくるあたり・・・その会社はヤバイな。
そんなコード書いてプログラマとして気持ち悪くないのか
579仕様書無しさん:2007/06/03(日) 19:07:24
Caseのチャンク数が上限に近い。
ちゃんと決定表を使うべきかと
580仕様書無しさん:2007/06/03(日) 20:45:30
>577
業務でVB使い続けて10年超えるけど、
こんなのは初めて見るよw

VBに慣れてても普通書かないコードだとは思うけど、
この程度で会社辞めてたらNEETまっしぐらだな
581仕様書無しさん:2007/06/03(日) 20:51:57
>>580
オタクの会社はこんなコードを書く奴を放置しておくの?
582仕様書無しさん:2007/06/03(日) 21:14:31
>572
ところでElseIfって知ってる? と聞きたくなるコードだなぁ
583仕様書無しさん:2007/06/03(日) 21:34:41
>>572の生産された過程は多分こんな感じだろう。
1. CASE文で書いてOKな仕様だった
2. 仕様変更なり考慮漏れで条件が追加された
   IF文に変更することなく、CASEのままでどうにかならないかと思考錯乱
3. こうすれば出来る!と閃いた。

氏ねばいいと思う
584仕様書無しさん:2007/06/03(日) 21:56:41
いつのまにか572がコードを書いたことになってるな
585仕様書無しさん:2007/06/03(日) 21:58:39
>>584
そのように解釈できるとはSUGEEE
586仕様書無しさん:2007/06/03(日) 23:41:45
前スレで>>572に似たコード見たぞ。まあ>>572はありえないとして、
TrueでのSelect Case自体は使い方によっちゃありかも、という流れだったような。
587仕様書無しさん:2007/06/04(月) 00:27:06
>>586
> TrueでのSelect Case自体は使い方によっちゃありかも、という流れだったような。

ほんとか?どんなケースだよ。
そんな選択はないと思うんだが。
588仕様書無しさん:2007/06/04(月) 01:29:26
>>527のケースでは < や > でも精度上問題ないが、やはり浮動小数点数を
単に不等号演算子で比較する奴はアフォ。
589仕様書無しさん:2007/06/04(月) 02:43:50
>>588理由を説明してくれ。問題となる例を挙げてくれるだけでもいい。
590仕様書無しさん:2007/06/04(月) 03:12:30
>581
放置してないからこそ、ここで初めて見ることになったんでは。
591仕様書無しさん:2007/06/04(月) 05:38:33
>>589
不等号は論理的に「等しい」を含まない。

有限精度の浮動小数点数での「等しい」とは、比較対象が十分に近い範囲内にあるということ。
不等号演算子はこの範囲内であっても厳密に数の大小を判定するのであれば、
まずは等しいと見なせるかどうかを判定し、その場合を除外して不等号演算子にかけないといけない。

これに準ずる手順を踏まなければ「等しく、かつ等しくない」という矛盾を許容することになる。
592仕様書無しさん:2007/06/04(月) 05:42:11
>>588
OK
分かったからアフォではない方法とやらを示してみ?
593仕様書無しさん:2007/06/04(月) 05:49:05
>まずは等しいと見なせるかどうかを判定し、その場合を除外して不等号演算子にかけないといけない。

これでは不十分?
594仕様書無しさん:2007/06/04(月) 07:26:38
>>593
それで十分だ
595仕様書無しさん:2007/06/04(月) 19:41:38
>>593
>>527のような場合は実際どうやんの?
596仕様書無しさん:2007/06/04(月) 22:46:56
>>595
ばっかwwwwww
こうやんだよwwwww

If CType(Date1.ToString("yyyyMMdd"),Integer) < CType(Date2.ToString("yyyyMMdd") ,Integer) Then

end if
597仕様書無しさん:2007/06/04(月) 23:19:53
ああ、「日付の前後」で「日時の前後」じゃなかったわけか。
ようやく要件を確認できた
598仕様書無しさん:2007/06/05(火) 03:03:52
こんな調子じゃ転職してもすぐ辞めたいと思える会社ばっかりのようだな
599仕様書無しさん:2007/06/05(火) 07:15:44
他社開発のソースを見てたらこんなん出てきた・・・
(Java)

if (oHogeHoge.equals(null)) {
//何かの処理
}

おもいっきりガッしたくなった。
600仕様書無しさん:2007/06/05(火) 13:15:32
ガッもそうだが
oHogeHogeのoも
かなしいなあ
601仕様書無しさん:2007/06/05(火) 20:44:23
>>599
てか、その処理って絶対に使えないんじゃ?
到達不能コードにはならない?
602仕様書無しさん:2007/06/05(火) 20:51:26
全然空気読めてない601はこっち池
http://pc11.2ch.net/test/read.cgi/prog/1159175153/
603仕様書無しさん:2007/06/05(火) 20:59:06
空気嫁ない=新人とは限らない
604仕様書無しさん:2007/06/05(火) 21:18:27
一応oHogeHogeがnull指してるんなら成り立ちそうな気もするけど、どうなんだろ。(oHogeHoge==nullと同じ?)
実験してみる気も起きない。
605仕様書無しさん:2007/06/05(火) 21:36:41
>>604
良くわかんないけど、equalsはstaticだっけ?
null時に呼んだら嫌なこと起こりそうなんだが。

良くわかんないのに発言してすまそ。
606仕様書無しさん:2007/06/05(火) 21:40:22
>>604
マジレスすれば、oHogeHogeがnullならヌルポ。
nullでなかったならば、定義上は必ずequalsはflaseになる。
607仕様書無しさん:2007/06/05(火) 22:57:23
>>603
この流れ、どう見ても初心者
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
609仕様書無しさん:2007/06/06(水) 00:20:52
今解析中のVBソース、「版管理」をコメントでやってる、と覚悟はしてたんだが
連続でプロシージャ二つまるごと履歴コメント化とかもうねアボガドorz
せめて履歴だけのゴミコメントはとっぱらいたいんだが
VB6ってコメント削除でバイナリ変わるっけ? 試しに削ってコンパイルしてexeをdiffに掛けたら一致せん……
610仕様書無しさん:2007/06/06(水) 00:36:06
>>599
>if (oHogeHoge.equals(null)) {
oHogeHogeのequalsはオーバーライドされていて、無効なデータや空データだったら、
nullとequalsでtrueと宣言されているのかもしれない。
if (! oHogeHoge.isValid()) {
くらいの気持ちで。

・・・つーか、equalsってオーバーライドできないの?折れJava抑止卵子。
611仕様書無しさん:2007/06/06(水) 01:33:05
>>609
EXEの構造よー知らんけど、生成時のタイムスタンプとかがヘッダに入らん?
612仕様書無しさん:2007/06/06(水) 04:18:43
>>610
オーバライドはできるけど、任意のオブジェクトに対してequals(null)は
「必ずfalseを返す」ことというガイドラインがある。
ガイドラインに沿っていないようなコードがあったらこのスレ向きだろうな。
613仕様書無しさん:2007/06/06(水) 08:14:56
>>609
611の言うとおり。その程度の知識もない人に引き継がれたというのは
ちょっと不安になる会社だな・・・
614仕様書無しさん:2007/06/06(水) 13:26:19
気になるやつ

public sub aaa(a,b)
...
end sub



呼び出しで
aaa (a,b)
615仕様書無しさん:2007/06/06(水) 15:55:41
callを記述してない ってのが焦点でいいんだよね?
616仕様書無しさん:2007/06/06(水) 16:00:31
>>614はエラーだろうが、これならたいがい通る。

Public Sub aaa(a)
...
End Sub

aaa (a)


さて、何故だ?
617仕様書無しさん:2007/06/07(木) 00:56:10
Cでの開発なんだけど。
プロジェクト共通のヘッダーファイルの中に、#define NULL 0 が存在した。
しかも、stdio.h内のNULLの#defineがそのままだから、2重定義の警告が出まくり。
618仕様書無しさん:2007/06/07(木) 01:05:19
その共通ファイルを直せばいいだけじゃん?!
619仕様書無しさん:2007/06/07(木) 09:28:17
>>616
public sub aaa(a,b)
...
end sub


aaa a,b
620仕様書無しさん:2007/06/07(木) 13:43:41
Private Sub SeikyuSyori()
''*---------------------- いろんな処理
・・・・

'○○ってさー、なんかキモくない?喫煙ルームで
'気安く話しかけてくるけど、もう死ねと思うよ。
'
'そうそう!そんな感じ!
'なんか臭いそうだしね
End Sub

IPメッセかメールの内容をソース上に下書きして
貼り付けてたらしい。その消し忘れ。
○○は俺の名前orz

リアルで辞めました。
621仕様書無しさん:2007/06/07(木) 14:08:40
イ`
622仕様書無しさん:2007/06/07(木) 15:27:36
VBってシェア的にはそんなに多くないはずなのにこの晒される量と来たら・・・。
VBてやっぱりレベルが低い人の割合が多いということかね。
623仕様書無しさん:2007/06/07(木) 16:13:25
どっかで読んだな。VBは敷居が低いかわりに天井も低い
簡単にできるが出来ることも限られる、それなりの言語でしかない

ただ、「簡単にできる」=「コスト削減」と思って、VB導入をやたら薦めてくる上司とかSEも
いるんだよねえorz
624仕様書無しさん:2007/06/07(木) 16:57:14
「出来ることも限られる、それなりの言語」は、今は正しくない。
Win32 API 呼び出しもできるし、多くのアプリケーションは VB 向けのタイプライブラリを提供してるので、
駆使すれば、それなりではあるが何でもできてしまう。
問題は、何でもできるためにはコードが汚くなりがちなことか。
625仕様書無しさん:2007/06/07(木) 17:02:30
結局同じことを言ってるだけじゃん
626仕様書無しさん:2007/06/07(木) 17:10:21
PowerBuilderよりはマシ
627仕様書無しさん:2007/06/07(木) 17:10:52
出来ることも限られる <> 何でもできてしまう
ではないのか?
628仕様書無しさん:2007/06/07(木) 17:15:32
C/C++・・・ワケの解らん奴が組むとぬるぽでフリーズ
VB・・・・ワケの解らん奴が組んでもぬるぽでフリーズしないが、意味不明なバグが紛れ込む
(ワケの解らん奴がAPI使うとほぼ100%の確立でフリーズするがw)
629仕様書無しさん:2007/06/07(木) 17:20:54
VB の API 呼び出し難しいんだよな。
API によくあるポインタ使えないもんだから VB の言語仕様をよく考えてコード書かないといかん。
今はサンプルコードがいっぱいあるから楽になったが。動かない時は C/C++ よりもっと試行錯誤になる。
630仕様書無しさん:2007/06/07(木) 17:49:01
VBのプロジェクトはデスマ率高杉。
631仕様書無しさん:2007/06/07(木) 18:14:37
>>630
けどさ、Cのプロジェクトでデスマ始まると本当に死人が出る場合がw
632仕様書無しさん:2007/06/07(木) 22:54:50
>>631
C#で死んでます
633仕様書無しさん:2007/06/07(木) 22:57:31
デスマにするのは10万ステップ譲って許そう。
だが、放火だけして逃げんな、責任もって氏ね。

と、あべしが放火したプロジェクトに投入されたヤシが申してました。
634仕様書無しさん:2007/06/07(木) 23:11:13
 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ってスコープ明記できるし。

ただ、使う人間が悪すぎるんだよな・・・。
636仕様書無しさん:2007/06/07(木) 23:27:06
>>634
SQLいんじぇくしょん対策だなw
637仕様書無しさん:2007/06/07(木) 23:29:05
MSの余計なお世話に甘える奴が
カオスコードを書く
638仕様書無しさん:2007/06/08(金) 00:47:27
>>633
本番機のハードスペック教えろや

639仕様書無しさん:2007/06/08(金) 00:48:21
Z80CPUデュアルコアですがなにか?
640仕様書無しさん:2007/06/08(金) 00:53:31
>635
でもなぁ……隣で.net使ってる椰子がいるとさぁ。
Formの派生クラスとかTextBoxの派生クラスとか作り置きできるのがテラウラヤマシス……
同じような機能持ったフォームが3個以上になったあたりから激しく鬱陶しくなってくる
641仕様書無しさん:2007/06/08(金) 00:58:19
>>640
そりゃ機能的には絶対勝てないっしょwww
ちょっとしたツール作るのに久々にVB6開いたけど・・・すぐ閉じてVB.NETつかいましたとさw

642仕様書無しさん:2007/06/08(金) 01:00:02
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
643仕様書無しさん:2007/06/08(金) 01:02:02
でもデフォルトでコントロール配列にできるし 
賛否両論だろうけど

644仕様書無しさん:2007/06/08(金) 09:48:01
どとねとはコントロール配列使えないんだよな。その点だけは却って不便になった希ガス
645仕様書無しさん:2007/06/08(金) 20:21:42
>>644
イベントハンドラ共有できるし、コンテナクラスに入れられるし、特に不便なところはないだろ。
646仕様書無しさん:2007/06/08(金) 22:06:19
vb6はフォーカス関係が糞過ぎる
647仕様書無しさん:2007/06/08(金) 22:16:43
いつの間にVB6議論スレにwwwww
648仕様書無しさん:2007/06/08(金) 23:31:24
>>640
そりゃ.NETにはかなわんでしょ。
ただ、管理者がアフォで.Net framework入れさせてくれないときに
仕方なくVB6を使わなきゃいけないこともあるし。

VB.netも、標準モジュールが使えてしまうのが気に入らないが・・・。
649仕様書無しさん:2007/06/08(金) 23:35:28
int i, ii, iii, iv, v, vi, vii, viii;

ivとviがまぎらわしくて困るんですけど
650仕様書無しさん:2007/06/09(土) 00:02:41
ワロタ
651仕様書無しさん:2007/06/09(土) 00:06:00
俺のところで採用してみるかwww
652仕様書無しさん:2007/06/09(土) 01:22:01
>>633
あべしは責任点火だけは得意だからな。
火の無いPJに無理矢理放火してデスマにする。
653仕様書無しさん:2007/06/09(土) 01:56:33
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


えーっと・・・
654仕様書無しさん:2007/06/09(土) 02:10:46
てりやきマック吹いたw
655仕様書無しさん:2007/06/09(土) 10:12:12
続行らめぇ!!!!
656仕様書無しさん:2007/06/09(土) 12:19:32
if(a==TURE){
  if( !strcmp(b,c)){
657仕様書無しさん:2007/06/09(土) 14:08:39
#define TURE 32

コンパイル通ってるのなら「ツレ」で正しいのかも知れない。

まぁでも確かにそこはかとなく辞めたくなるな・・・
658仕様書無しさん:2007/06/09(土) 14:47:25
・・・なんで32?

コンパイル通るのもすごいけど。
659仕様書無しさん:2007/06/09(土) 14:55:17
>>657-658
if(hogehoge() == TRUE){ ... }
とか書く馬鹿コードをあぶり出すためじゃないの?
660仕様書無しさん:2007/06/09(土) 14:59:08
if(hogehoge() == TRUE){ ... }
の何が悪いのか。
661仕様書無しさん:2007/06/09(土) 15:05:50
C/C++では偽値は0、真値は「0以外」。
662仕様書無しさん:2007/06/09(土) 15:06:32
一応ブーリアンは単項で条件判断すべき・・・とJavaの本では奨めていたが、
俺は ==TRUE は良いと思うよ。分かりやすいし。
663仕様書無しさん:2007/06/09(土) 15:10:13
>>661
んなものはhogehoge()の関数仕様次第じゃまいか。
そもそもC/C++にはTRUEなんてものは存在しない。
664仕様書無しさん:2007/06/09(土) 15:11:29
論理定数と比較するのはアホのすること。
665仕様書無しさん:2007/06/09(土) 15:14:15
これだな。
http://www.kouno.jp/home/c_faq/c9.html#2
「もし君が「if((a == b) == TRUE)」が「if(a == b)」の改良版であると信じるのなら、
 なぜそこで止めるのか。なぜ「if (((a == b) == TRUE) == TRUE)」を 使わないのか」
666仕様書無しさん:2007/06/09(土) 15:18:56
ところで誰かTUREをフォローしてあげないのですか?
667仕様書無しさん:2007/06/09(土) 15:21:15
wwww
TUREたwwwwwwwwwwwwwっうぇ
668仕様書無しさん:2007/06/09(土) 15:27:08
Win32APIが返すBOOL型はマジで勘弁して欲しいと思う。
669仕様書無しさん:2007/06/09(土) 15:36:35
>>668
3値を表現するための苦肉の策だからな…
他にいい方法があるかわからん。
670仕様書無しさん:2007/06/09(土) 15:47:09
TUREはおいといて、Win32でなら、
if(hogehoge() != FALSE){ ... }
だな
671仕様書無しさん:2007/06/09(土) 15:51:14
>>669 boost::logic::tribool
672仕様書無しさん:2007/06/09(土) 15:51:59
673仕様書無しさん:2007/06/09(土) 16:01:53
>>672
だから、返値は論理定数じゃなくて単なるint値なんだろ?
674仕様書無しさん:2007/06/09(土) 16:04:49
>>673
なら 0 と比較しろよ。
675仕様書無しさん:2007/06/09(土) 17:25:41
Win32APIのBOOL型ってTRUE/FALSEじゃないの?
初めて知った俺はUnixプログラマ
676仕様書無しさん:2007/06/09(土) 17:42:56
BOOL型なんてないよね。

UNIXにはあるの?
677仕様書無しさん:2007/06/09(土) 18:16:21
>>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型じゃね?
679仕様書無しさん:2007/06/09(土) 18:35:36
>>678
まぁその通りだが、それがどうかしたのか?
680仕様書無しさん:2007/06/09(土) 18:53:40
MS的にBOOLは整数型なんだろうな。
ドキュメントにTRUE,FALSEの文字が見えないところをみると。
ホント紛らわしいよ。
681仕様書無しさん:2007/06/09(土) 22:33:38
#define FALSE (0!=0)
#define TRUE (0==0)
682仕様書無しさん:2007/06/09(土) 22:38:40
>>675
一部、TRUE,FALSE以外の値を返すAPIがあるらしい。
683仕様書無しさん:2007/06/10(日) 01:49:07
亀レスすまそ
>>104
おもむろに
#undef private
#undef protected
でいいと思うよ。#ifdefは要らない。

#ifdefといえば、
typedefされているかどうかを
#ifdef HOGEHOGE
で調べているコードを見たことがあるw
684仕様書無しさん:2007/06/10(日) 06:47:00
>#ifdefといえば、
>typedefされているかどうかを
>#ifdef HOGEHOGE
>で調べているコードを見たことがあるw

それはよくあると思う。なぜwかわからん。
685仕様書無しさん:2007/06/10(日) 08:28:15
typedef unsigned short ushort;
...
#ifdef ushort // 調べたつもり

ってコードを笑ったんじゃね?
686仕様書無しさん:2007/06/10(日) 10:17:24
上の方で実数の比較(EQU, GT, LT)はまずい、って話があっが、確かに言いたいことは分かるし
一般論としてはそうだけど、俺的にはちょっと現実に合わない机上論にも聞こえるな。
天文学的に扱う数字のレンジが広い場合は知らないが。

実数の型を使う場面というのは、演算結果に求められるある精度があるとして、
演算の累積誤差があるとしてもその必要な精度を満たす場合なわけだ、普通は。

であるとすれば、比較の前に必要な桁までで丸めた後の実数型を比較するのはなにも問題がない。
というより、これが意味的に問題でない場面でしか普通は使わない。
687683:2007/06/10(日) 10:37:43
>>685
仰るとおり

>>684
typedefの代わりにdefineする人でつか?
688仕様書無しさん:2007/06/10(日) 12:11:02
#iftypedef
689仕様書無しさん:2007/06/10(日) 12:58:46
>>686
あれは、ポインタがわからん奴がポインタ禁止とか言ってるのと同じ。
たしかにおまえには役に立つルールだが、自分だけにしてくれというやつ。
690仕様書無しさん:2007/06/10(日) 13:14:44
entityのクラスにfiledを持たせちゃだめだって
それclass?と思ったが、長いものには巻かれた。
691仕様書無しさん:2007/06/10(日) 18:09:20
>>686
ようは
・誤差を意識しないで使用する人(>>686の「普通」でない人)が確かに居る
・「誤差を意識してますよ」ってのを明示しないと後で見た人が混乱するかもしれない
てことだと思う。
自分中心に判断しちゃいかんだろ。

俺としてはgtとltはまだ分からんでもないが、eqは流石に怖いねぇ。
692仕様書無しさん:2007/06/10(日) 20:15:23
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;
}
693仕様書無しさん:2007/06/10(日) 20:32:37
{
float r = 0;
while (r == 2*M_PI) { // (゚:ω;゚;`;;)
...
r += om;
}
}
694仕様書無しさん:2007/06/10(日) 20:34:19
>>693
> r == 2*M_PI
r != 2*M_PI
だった orz
695仕様書無しさん:2007/06/11(月) 12:03:10
>>686
比較の前に必要精度で丸めるのであれば問題ないだろうが、実際はそれすらしない厨もいるわけで。
696仕様書無しさん:2007/06/11(月) 12:07:37
ソースコードじゃないんだが、
「ちゃんとモジュール化しといてよ」と言ったら
「そんな高望みしないでください」と返された。

いや、貴方、情報系の現役学生なわけで、それを言っちゃったら、ねぇ
そんな彼から上がってくるコードは main() only なソースコード。
実験用システムに適合させるように書き直すこっちの身にもなってください('A`)
697仕様書無しさん:2007/06/11(月) 12:22:22
ソースコード
だよ
698仕様書無しさん:2007/06/11(月) 12:45:55
>>696
その子はバイト君かな?
ゆとり学生にしてみれば高望みもいいとこ。

書くだけで精一杯だろ。こいつら設計なんてすっとばしてハナからガシガシ組むんだから。
699仕様書無しさん:2007/06/11(月) 16:36:04
一昔前は情報系と言えば、理工系最高偏差値だったが、
偽装派遣で今や最低人気。それでなくても、ゆとり教育。

偽装派遣に嫌気が差して大学に戻ってTAなんぞやってる
が、学生レポートなんてmain()だけのが大半。どーせ
情報実習でやる課題なんてToy Problemばっかしだし。
それでも自分で作ればまだ良い方。コピペが大半。
2割くらいがコピペ改変(変数や関数名を変えただけ)
だし。

自分で作るだけでも、ゆとり世代の情報系なら上出来。
700仕様書無しさん:2007/06/11(月) 16:45:00
情報系っていっても半数以上が初級シスアドすら取れないレベルだからな。
日本の大学なんてそんなもん。
701仕様書無しさん:2007/06/11(月) 17:05:28
昔はそんなこと無かったんだがな。
偽装請負ですっかり不人気に成ってしまった。
間違って入って来る奴は、ゲームが好き、
とかその程度の動機で来る勘違い君ばっか。
702仕様書無しさん:2007/06/11(月) 18:03:51
初歩的な情報教育ですらまともに教えてもらってないのに高等な事を学ぶ方が無茶
703仕様書無しさん:2007/06/11(月) 20:06:38
情報系じゃない高校生の俺の方がマトモなんじゃないかと思えてきた。
704仕様書無しさん:2007/06/11(月) 20:29:19
情報系の大学生の俺が来ましたよ。
705仕様書無しさん:2007/06/11(月) 21:14:04
情報系って、どんなことを習うんですか?
706仕様書無しさん:2007/06/11(月) 21:16:46
情報のことだよ

っつーか質問スレ逝け
707仕様書無しさん:2007/06/11(月) 21:38:37
>>698
バイトじゃなくて本分の研究。(ちなみに修士課程)
別機関と絡んで実験するんでインタフェースのすりあわせやらも
必要なんだが、そこらも曖昧なのよね。
複数ユーザが同時に使う実験なのにシングルユーザでの利用しか想定し
てないし(´;ω;`)
いっそソースじゃなくて仕様書くださいと。

別業界の内定とってるので、マ板の人々には迷惑かけないのが救いです。

>>703
たぶんそこらの大学生より上。自信持って精進しておくれ。

>>705
知識的には基本情報でやるようなこと。
大学入る前から開発やってたりするような人間には講義は暇だと思う。
かといって、あぐらかいてたら4年で泣くけどな。
708仕様書無しさん:2007/06/11(月) 21:38:38
>>705
理論だけで、コードは一切書かない所とかあるらしい。
709696, 707:2007/06/11(月) 21:40:40
スレ違いな話題を引っ張ってすまなんだ。
ちょっと愚痴りたかった。
今は反省している
710仕様書無しさん:2007/06/11(月) 21:41:25
例のSICPとかやってるのかと思ってた>情報系
711仕様書無しさん:2007/06/12(火) 14:34:46
if(d>0)
{
処理;
}
else if(d<=0)
{
処理2
}

・・・・・?
712仕様書無しさん:2007/06/12(火) 14:39:21
>711
ウザいが、辞めようとまでは思わない・・・・・と思った俺はもうマヒしちゃってんだろうか('∀`)
713仕様書無しさん:2007/06/12(火) 14:50:41
>>711
実は別スレッドで d を弄ってて、ifの評価中にも d が変わっちゃうんだよ( ゚∀゚)

それはそれで奇天烈なことに違いはないが
714仕様書無しさん:2007/06/12(火) 15:35:39
>>713
もしそうなら、本当に会社を辞めそうだ。
715仕様書無しさん:2007/06/12(火) 20:21:54
>>712
もうダメかなぁと (=ω=.)
716仕様書無しさん:2007/06/12(火) 20:45:07
マルチスレッドで書き換えとかでもなければこのくらいは許容範囲だろ
もっととんでもねーの見てきてると・・・
ああオレももうダメですかそうですか\(^o^)/
717仕様書無しさん:2007/06/12(火) 21:04:11
だんだんと慣れてきちゃうんだよね。
if( a < 0 ) {
  // 処理1
} else if( 0 > a) {
  // 処理2
}
とか・・・麻痺してくると意味があるのか?と思えてしまう。
そしてa = 0 が原因で障害となるわけだ・・・
718仕様書無しさん:2007/06/12(火) 21:11:26
>>716
ちゃんとセマフォか何かで保護しろよ。
719仕様書無しさん:2007/06/12(火) 21:14:13
>717
どう見ても a == 0 の時スルーするためのコードだろ
常識的に考えて・・・_| ̄|○
720仕様書無しさん:2007/06/12(火) 21:32:30
>>719
処理1と処理2の内容が異なる理由を3行で
721仕様書無しさん:2007/06/12(火) 21:45:52
a < 0 処理1
a > 0 処理2
a = 0 スルー
722仕様書無しさん:2007/06/12(火) 21:51:41
>>721
そういう意図なんだろうな、真実は・・・
723711:2007/06/12(火) 22:45:39
うちの会社のコードはこの書き方がデフォみたいで
違和感を覚えた新人の自分の方がおかしいのかと思ってましたが・・・

みなさんの反応見て安心しました
724仕様書無しさん:2007/06/12(火) 22:59:00
//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
725仕様書無しさん:2007/06/12(火) 23:00:31
>>722

if( a < 0 ) {
 b = c/-a;
} else if( 0 > a) {
 b = c/a;
}

じゃない?
726仕様書無しさん:2007/06/12(火) 23:00:59
if (a < 0) {
処理1
}
else if (a > 0) {
処理2
}
else if (a = 0) {
スルー
}
727仕様書無しさん:2007/06/12(火) 23:01:59
志村〜free, free
728仕様書無しさん:2007/06/12(火) 23:02:25
おまえら、 a < 0 とa > 0 が異なると思っているってマジレス禁止?
729仕様書無しさん:2007/06/12(火) 23:04:45
で?
730仕様書無しさん:2007/06/13(水) 01:36:22
>>724
ちょwそれでスワップしまくるってどんな貧弱な環境www
mallocのコストはお高くつくしヒープやキャッシュも汚れていいこと無しだが、
余程のことがない限りスワップはせんだろ。
731仕様書無しさん:2007/06/13(水) 01:48:44
732仕様書無しさん:2007/06/13(水) 02:10:53
/* void get_marroc( int saize, char **baf ) { */
/* ↑2003.1.22.スペルミスを修正 */
void get_maloc( int sizu, char **baff ) {



(つд`)
733仕様書無しさん:2007/06/13(水) 02:19:18
( ゚д゚)・・・
734仕様書無しさん:2007/06/13(水) 02:23:30
せつねぇぇ(ノ∀`)
735仕様書無しさん:2007/06/13(水) 02:26:05
修正点のコードレビューしてないのかよ・・・
736仕様書無しさん:2007/06/13(水) 07:41:29
>>727,>>731
もしかして、mallocとfreeはセットで使わないと
いけないとか思い込んでる?

自分でmalloc書けば分かることだが、freeなんて
よっぽどのことが無い限りワザワザする必要無い
よ。むしろスコープを間違うと>>730さんの言う
通り。

下手な入門本読んでないで、K&R嫁。単純mark&
sweepアルゴリズムだが、mallocの実装も載って
る。非常にタメに成るから嫁。
737仕様書無しさん:2007/06/13(水) 07:43:26
>>732
そりゃ辞めるわ…。(絶句)
738仕様書無しさん:2007/06/13(水) 07:46:06
これは・・・
K&R に GC 付き malloc の実装なんて載ってたっけ?
739仕様書無しさん:2007/06/13(水) 08:01:15
>>736

こういう奴がいるからmalloc禁止しなきゃならなくなるんだよなぁ…。

あ、釣り? はいはい釣られましたよっと。
740仕様書無しさん:2007/06/13(水) 10:36:04
>>724
俺なら
>sizeof(char)*sizeof(int)
これだけで目の前が暗くなる。

>>736
君も入門書から読んではどうかね。
741仕様書無しさん:2007/06/13(水) 11:03:16
むしろ sizeof(char) だけで、何かしら嫌な予感がするね。
742仕様書無しさん:2007/06/13(水) 11:14:56
>>724 の「スワップしまくる」を見てスワップの意味を勘違いして???になった。
スワップさせてんだから正常だろ?と。
HDDに追い出す方のスワップだったのね。

>>727 見るまでメモリリーク見逃してた。GC言語ばっか使ってるからスキルダウンorz
743仕様書無しさん:2007/06/13(水) 11:33:36
懐かしのfree論争思い出した
744仕様書無しさん:2007/06/13(水) 13:50:23
その論争では結局どういう結論に到達したん?

まぁ、訊かずとも見当はつくが・・・
745仕様書無しさん:2007/06/13(水) 15:10:51
そもそも、わざわざmallocしている意味がわからん。
746仕様書無しさん:2007/06/13(水) 15:18:03
>744
ぐだぐだになってなんとなく沈静化→何かのきっかけで再噴火 を繰り返してるらしい。
ていうか、まだfjってあったのねw
fj.comp.lang.cでググると出てくるよ。
747仕様書無しさん:2007/06/13(水) 15:39:19
これが普通か?
void swap(int *a, int *b) {
  int tmp = *b;
  *b = *a;
  *a = tmp;
}
748仕様書無しさん:2007/06/13(水) 15:57:40
コメント化している部分がこれまた泣ける…。
749仕様書無しさん:2007/06/13(水) 16:57:30
>>724
学生の僕でも「これはない」と思いました
750仕様書無しさん:2007/06/13(水) 17:22:17
>>747
実に「普通」ですばらしい。そういう「普通」のコードをかける人は珍しくなってしまったような気が
751仕様書無しさん:2007/06/13(水) 17:31:06
void swap(int *a, int *b)
{
  *b ^= *a;
  *a ^= *b;
  *b ^= *a;
}

遅そうだ
752仕様書無しさん:2007/06/13(水) 17:39:44
>>751
そういうのを暗黒面というんだ
753仕様書無しさん:2007/06/13(水) 17:43:16
>>749
あなたのような人材は「君子危うきに近寄らず」で別業界に就職すること
になるのですよ。

>>751
PICとかの非力組み込み系だとアリだと思う
754仕様書無しさん:2007/06/13(水) 18:14:10
>>751
そういう小手先の技を覚えて嬉しいのは判りますが
関数にしてたんじゃメリットが薄くなることに気付きましょう。
それと、*a == *b のときどうなるかも考えましょう。
755仕様書無しさん:2007/06/13(水) 18:31:16
>>754
どうなるの?
756仕様書無しさん:2007/06/13(水) 18:33:29
試してみろ
757仕様書無しさん:2007/06/13(水) 18:42:37
*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;




先輩、あのう・・・・いや、なんでもないっす。
コンパイルエラー出てからでいいから、気付いてね・・・
759仕様書無しさん:2007/06/13(水) 21:15:06
>>758
組み込みに違いない。

てかコレ、エラーどころか警告も出ないんじゃね?
760仕様書無しさん:2007/06/13(水) 21:15:17
組み込みか!組み込みなんだな?
0x7530に文字列が入ってるんだな?
761仕様書無しさん:2007/06/13(水) 21:25:17
>>732
/* 200X.X.XX 誤字なおしときました */
//void make_sparse_map(double *data, int wid, int hi)
void make_space_map(double *data, int wid, int hi)
762仕様書無しさん:2007/06/13(水) 21:26:26
>>760
いや、charがunsignedな環境において
リンカで固定にマッピングされた記憶領域に
バイト単位でアクセスしたいと見た。
763仕様書無しさん:2007/06/13(水) 21:41:58
組み込みやってるけど、>>758には違和感ないぞ。
あえて言うならdefineしろってくらい。
764仕様書無しさん:2007/06/13(水) 21:42:32
>>759
ポインタは整数で初期化できないよ。
765仕様書無しさん:2007/06/13(水) 22:11:21
試しに整数で初期化してみたけど警告しか出なかったよ。
766仕様書無しさん:2007/06/13(水) 22:33:46
あれ?手元の gcc で -std=c99 -pedantic 付けて試しても警告しか出ない。
エラーになるのって C++ から?
767仕様書無しさん:2007/06/13(水) 22:51:27
C++から、っていうか、C++とC99は既に全然別物
C++は暗黙の型変換、厳しいね。
768仕様書無しさん:2007/06/13(水) 23:28:04
しーくっく
769仕様書無しさん:2007/06/14(木) 10:10:01
>>757
ちょっと抜けてるんだろう。754は
770仕様書無しさん:2007/06/15(金) 16:30:11
if (strncmp(&AAA->xxx[0], " ", 1) != 0) {}
素直に、
if (AAA->xxx[0] != ' ') {}
じゃだめなのか??
771仕様書無しさん:2007/06/15(金) 19:27:59
エラーだろそれじゃ
もっと素直に
if (AAA->xxx[0] ) {}
だろ
772仕様書無しさん:2007/06/15(金) 20:39:19
半角スペースとの比較じゃんかよ。
>771の居る会社ヤバス
773仕様書無しさん:2007/06/15(金) 22:47:59
>>770
!= ' ')

顔文字に見えた・・・・ごめん、ちょっと疲れているみたいだ
明日も仕事いってくる
774仕様書無しさん:2007/06/16(土) 02:48:59
>>769
指摘している>>754よりも>>751のほうがあきらかに技術力は上。
書き込みを見比べてもその差は歴然。

っていうか、>>754みたいな奴が一番恥ずかしいよ。
775仕様書無しさん:2007/06/16(土) 04:01:03
級位者には高段者の打つ手の深い意味など理解できないのさ。
そのくせ自分と同格のつもりで口をきいてくる。
776仕様書無しさん:2007/06/16(土) 13:05:43
いや>>751がそうだと言うつもりはないが、
論理演算程度で嬉しくなっちゃう奴を上級者と呼ぶのはかなり抵抗がるけどね。

ブール代数っていうのは高校の数Iの内容なんだぞw
777仕様書無しさん:2007/06/16(土) 14:07:56
>>776
ゆとりでも?
778仕様書無しさん:2007/06/16(土) 14:16:46
まともな日本語書けよ。
なんだよ、「ゆとりでも?」って。
人に通じる文章かけないお前が何言ってるんだw
779仕様書無しさん:2007/06/16(土) 14:27:37
>777はナッチだな
780仕様書無しさん:2007/06/16(土) 15:02:23
精進せにゃ!
781仕様書無しさん:2007/06/16(土) 16:20:22
「ゆとり世代でも高校で習う?」と俺は脳内補完した
782仕様書無しさん:2007/06/16(土) 16:53:24
というかその程度の補完ができないのはきっとゆとり。
783仕様書無しさん:2007/06/16(土) 17:18:39
吟味せず勝手に脳内補完するのはゆとり。
784仕様書無しさん:2007/06/16(土) 17:28:15
ゆとり世代からマジレス

ブール変数なんて数V、数C
でも教えてくれません><
785仕様書無しさん:2007/06/16(土) 17:28:25
チーズ鱈で有名なのはなとり。
786仕様書無しさん:2007/06/16(土) 17:29:32

×ブール変数
○ブール代数

汚しすまん
787仕様書無しさん:2007/06/16(土) 23:15:11
普通の>>747 でいくか >>751 でいくかはターゲット依存でそ
ちゃんと使う理由があるなら >>751 でも無問題だと思うが
788仕様書無しさん:2007/06/17(日) 00:31:26
>>776
>論理演算程度で嬉しくなっちゃう奴

お前がなんで、そう思っちゃうのかがわからない。
変な深読みをしすぎてるんじゃないの?

俺は>>751の書き込みからだと
ユーモアと誠実な人柄を感じるけどな。
789仕様書無しさん:2007/06/17(日) 08:01:53
ここC/C++多いんだな。
うちの部署もC/C++で開発してるんだけど、
こないだ社外の業者に「若い子で」っていう条件を付けて構内外注を頼んだら、
「C/C++がまともに出来る人は35歳以上になります」って言われたよ。
最近の子はC/C++は出来ないらしい。

おまいら年寄りだろw
790仕様書無しさん:2007/06/17(日) 08:27:24
>>789
それ、時々聞くけど、それだと OS の開発やメンテなんかできなさそうだ。Linux や UNIX など。
791仕様書無しさん:2007/06/17(日) 10:04:04
>>789
じゃ、最近の子は何ができるんだ?
猫も杓子もjavaか?

組み込み系とかハードを触るソフトは軒並み全滅だろ
792仕様書無しさん:2007/06/17(日) 10:10:59
>>789
C/C++まともに出来る若い奴はそういう外注なんかに就職しないんだよ。
793仕様書無しさん:2007/06/17(日) 11:24:16
アセンブラ使いよりは多かろう>C/C++使い
794仕様書無しさん:2007/06/17(日) 14:16:46
Cは必修。
JAVAは選択だけど実質必修。
C++は研究室で使ったり使わなかったり。
795仕様書無しさん:2007/06/17(日) 14:44:45
>>794
FORTRAN必修
BASICとCは実質必修
あとは選択

ただし、Pascalは生まれつき習得済みということになっていた。
突然必修の実験科目に出てきて、犠牲者続出w

アセンブラ必修というすごいところもあったな。
796仕様書無しさん:2007/06/17(日) 15:28:53
つーかC/C++ってメモリ管理しなきゃならんので、
当然プログラマの比重が大きい。
そんなの気軽に外注に頼む時点でおかしい。

797仕様書無しさん:2007/06/17(日) 15:35:41
っていうか今はRubyとかPHPとかPerlがメインだしw
798仕様書無しさん:2007/06/17(日) 16:49:46
>>796
だれも外注に丸投げとは言ってないけどな。
新人を教育してC/C++を教えて使えるようにするのが時間的に無理だったから、即使える人材がほしかっただけ。

何人か使ったんだけど、C/C++の使える外注はオッサンばかりで、頭固くて使いづらいんだよねw
外注の偉い人に聞いたら今はJavaやWeb系の人が多いそうだ。UNIT,LinuxでC/C++は骨董品らしい。

スレ違いだったよごめんな
799仕様書無しさん:2007/06/17(日) 16:51:20
>>798
×UNIT
○UNIX
typoすまん
800仕様書無しさん:2007/06/17(日) 17:28:31
>>798
まぁスレ違いなんだが。

JavaやWeb系は流行りモノだからな。
「趣味でC/C++」という時代はもう過去というのが俺の印象。

UNIX系弄って遊んでた人間がIT業界に来る時代じゃない。

俺は30歳でBSDで遊んでた人間だが、
同期10人居て「趣味PC弄り」って奴、居ないよ。
801仕様書無しさん:2007/06/17(日) 20:00:25
>>798
>だれも外注に丸投げとは言ってないけどな。
いや、漏れもいってないけど。

そもそも頼む時点で駄目だといってるつもりなんだけど。

頼むんなら、管理ごと丸ごと任せられるような信頼できる
業者に丸投げしたほうがましだと思う。

C/C++でそういった中途半端な対応をすると、後で、
泣きみるのはあなたの数代後の後輩だ。

802仕様書無しさん:2007/06/17(日) 20:55:40
>>801
お前馬鹿杉w
803仕様書無しさん:2007/06/17(日) 21:13:13
>>801

C/C++ を駆使するような製品は、普通、その会社の中核製品だから、
管理まで外注するところは少ないと思う。そこまで行ったら、売った方がましでしょ。
うちもそう。プログラマだけ派遣を頼んで、設計や管理は自社でやってる。
804仕様書無しさん:2007/06/17(日) 22:36:45
>>801
いやー・・・請負よか派遣のが良いと思うけどなぁ。
派遣てことは管理は自分らがやるわけだし。
805仕様書無しさん:2007/06/17(日) 23:39:00
>>804
業務内容によると思われ
806仕様書無しさん:2007/06/18(月) 01:57:13
◎安倍自民党改悪の住民税の大増税  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/
807仕様書無しさん:2007/06/18(月) 16:57:07
こないだ見たソースが関数ポインタだらけで泣いた
808仕様書無しさん:2007/06/18(月) 17:48:40
関数ポインタ≒gotoだからなあ。
無ければ不便だが、濫用されるとgoto以上に訳分からなくなる。
場合によっては、どこまで飛ばされるかは飛んでみないとわからないこともあるし。

ところで関数ポインタといえば、昔俺が書いたコードにこんなのがある。
void (*p)(void) = f;
p = (void (*)(void))((char *) p + 0x10);
いま見ると激しくorzだが、当時はこれでハッカー気取ったもんだ・・・
809仕様書無しさん:2007/06/18(月) 23:30:17
俺なんかgotoだらけのやつをいじったよ。
あっちもこっちもgoto。

…… // goto
……
…… // goto
…… // goto

でもコメントアウトされててさ。
誰かが全部goto文を潰したのかと思って(人−)感謝してた。
















後藤だってことに気づくまで2ヶ月かかったよ。
810仕様書無しさん:2007/06/18(月) 23:31:11
gotô
811仕様書無しさん:2007/06/18(月) 23:36:45
>>809
後藤さん乙って書こうとしたら
そんなオチかよ
812仕様書無しさん:2007/06/19(火) 14:19:10
コメントを晒すスレは落ちちゃったんだな
813仕様書無しさん:2007/06/19(火) 18:43:13
格好良いなgotoってw
814仕様書無しさん:2007/06/19(火) 21:52:03
gotooza-sama
815仕様書無しさん:2007/06/21(木) 11:18:52
void foo(int (&arr)[10]) {
...
}

...

int a[10];
foo(a);

えーと、配列(int[10])を引数にしたいんですかね?
816仕様書無しさん:2007/06/21(木) 11:44:20
>>815
配列を参照で渡そうと思ったら、それしかやりようがないと思うが。
817仕様書無しさん:2007/06/21(木) 12:16:33
void foo(int arr[]) でええやん
818仕様書無しさん:2007/06/21(木) 12:39:17
へぇ、>815みたいな書き方もできるんか。知らんかった。
だが>817のほうが広く使われている気がするな。
819仕様書無しさん:2007/06/21(木) 12:54:40
配列のサイズを限定できるのが良いんじゃないか。
これとテンプレートを組み合わせるとちょっと楽しいよ。
セキュア版CRT関数のテンプレートオーバーロードで使われてた気がする。
820仕様書無しさん:2007/06/21(木) 12:59:51
俺なら容赦無く void foo(int* arr) って書いちゃうよ?
821仕様書無しさん:2007/06/21(木) 13:42:04
>>820
配列サイズも渡すの?それとも番兵?
822仕様書無しさん:2007/06/21(木) 14:17:24
俺はいちいちサイズも渡しちゃってたわ。
うーむ恥ずかしい。
823仕様書無しさん:2007/06/21(木) 14:18:28
ちょっと気になったのだけれども、
その参照で渡した配列に対してsizeofは効くの?
効きそうな気がするけど。
824仕様書無しさん:2007/06/21(木) 14:35:19
>>817
その arr はポインタだと気付こう。
825仕様書無しさん:2007/06/21(木) 14:38:25
>>823
>その参照で渡した配列に対してsizeofは効くの?
sizeof(int) * 要素数になるのか、という意味であれば
勿論そう。
826仕様書無しさん:2007/06/21(木) 14:49:27
>>815
なるほどな。C++で参照がポインタの置き換えであることを利用したのか。
ポインタを使えば多次元配列渡しになることは知っていたが、こういうhackがあったとは。

お前の会社のソース、もっと見たい(笑)
(皮肉ではなく)けっこう参考になりそうだ。
827仕様書無しさん:2007/06/21(木) 15:57:37
>>826
>こういうhackがあったとは。
「配列へのポインタ」を「配列への参照」にしただけで
hack つー程のもんでもない。
828仕様書無しさん:2007/06/21(木) 16:51:38
>>827
多次元配列渡しの用途が主だった配列へのポインタを
そういった用途に囚われることなく、型セーフな配列渡しに応用できるのは
十分hackだと思う。

void foo(int arr[][10]) {
for (int i = 0; i < 10; i++)
(*arr)[i]=i;
}
...
int a[10];
foo(&a);

↑のような発想が素晴らしい。
これのポインタを参照に置き換えること自体はhackという程でもないことは同意するが
それだけでさらに直感的な記述が可能になる点もまた素晴らしい。
829仕様書無しさん:2007/06/21(木) 19:17:27
void foo(int arr[static 10])ってなこと出来なかったか?
830仕様書無しさん:2007/06/21(木) 22:50:53
えー。>>815は辞めようと思った本人が不勉強でFA?
831仕様書無しさん:2007/06/22(金) 09:49:42
>>829
そりゃ C99 だ。
832仕様書無しさん:2007/06/22(金) 11:05:44
>>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++はずいぶん前に少しやったきりなので勘違いしてるやも。
833仕様書無しさん:2007/06/25(月) 09:29:37
スレッドストッパー俺、乙 org
なんなんだよ、もう……
834仕様書無しさん:2007/06/25(月) 09:43:02
気にすんな。ネタの寿命が尽きたらこんなもんだ。
次に誰かネタを投下するまで数ヶ月間止まることすらある。

つーわけでネタ待ちage
835仕様書無しさん:2007/06/25(月) 10:33:55
VB.NET

if label1.backcolor equals(label1.backcolor) then
label1.backcolor = label1.backcolor
end if
836仕様書無しさん:2007/06/25(月) 10:36:49
>>833 == >>832 かい?
細部に至るまで同意だったので
わざわざレスせんでもいいかなとオモタ。
837832:2007/06/25(月) 11:12:32
>>834,836
Thanks. 救われるぜ。
レスがつかないのは別にどうでもいいが、
スレまで止まるとちょっと気になってな。
838仕様書無しさん:2007/06/25(月) 11:44:03
>835
3回読み直してやっと解った
ていうか何がしたいんだw
839仕様書無しさん:2007/06/25(月) 11:47:35
>>832
些細な突っ込みだけど

void foo(int (* const arr)[10]);
void foo(int (*arr)[10]);

この2つの宣言は等価。引数への直接の const は関数の型に影響しない。
ただし定義においてはローカル変数への const と同等に働く。

まぁ現役で C/C++ 使ってる奴でも知らないことが多いくらいだから、
やっぱり気にしなくてもいいけどね。
840仕様書無しさん:2007/06/25(月) 14:28:14
>>839
うわ、ほんとだ。(gcc 3.4.6)
宣言と定義でconstの有無が違っていてもエラーにならないね。

変数自体がconstになっても呼び出し側には一切無関係なので
宣言では省略可能になっているのだろうか。
宣言でconstあり、定義でなし、ってのもできるからちがうかも。

なんにせよ、宣言と定義が違っては混乱の元にしかならない希ガス。
841仕様書無しさん:2007/06/25(月) 14:39:26
どうだろう。宣言の不要なconstは書かない方がいいかもしれない。

const char * p
char const * p
char * const p

ぱっと見ただけなら、どれも同じに見えて余計混乱しそう。
842仕様書無しさん:2007/06/25(月) 14:52:15
別に辞めようと思ったわけではないが

i++;
i++;
i++;

ってのがあった
i+=3;
をしたかったらしい
843仕様書無しさん:2007/06/25(月) 15:09:07
即値加算命令よりインクリメント命令×3の方が速いプロセッサなんだろう
たぶん
844仕様書無しさん:2007/06/25(月) 15:20:15
二回か三回程度の処理なら、いちいちループにするより、同じ処理を並べて書いたほうが
処理は速い、とどっかで読んだ記憶がある。MS-DOS時代の話なので眉唾ですがw
845仕様書無しさん:2007/06/25(月) 16:36:39
ループじゃないし・・・。
846仕様書無しさん:2007/06/25(月) 16:47:44
>>838
コード量の水増しじゃねーのw
847仕様書無しさん:2007/06/25(月) 18:02:17
>>840
>宣言でconstあり、定義でなし、ってのもできるからちがうかも。

その場合でも呼び出し側には一切影響ないだろ。
混乱の元になんかならない。
848仕様書無しさん:2007/06/25(月) 19:16:56
>>838
うちの社長のバカ息子が書いたコードです。
誰も突っ込めずorz

てかこんなのばっかw
ソースチェックする身になってくれ
849仕様書無しさん:2007/06/25(月) 20:24:35
>>847
影響のないものは省略したほうが見やすいかもしれない。 >>841
しかし、定義はconstでないのに宣言にのみ書く理由はないだろう。
無意味なだけでなく実態に即してもいないのならバグの疑いがある。
つまり混乱の元。
850仕様書無しさん:2007/06/25(月) 20:38:30
>>847
>>840 だと宣言のみconstでは影響が出るようにも読めるな。
“ちがうのかも”と否定したのは“宣言では省略可能”の部分なんだ。
定義では存在しないものを“付加できる”からね。
書き方が悪くてスマソ。
851仕様書無しさん:2007/06/25(月) 22:03:56
>>848
VBやってないからequalsの動作がよくわからないんだが
label1.backcolorクラスにequalsって同値検査のメソッドがあると思えば良いの?

・・・いや、だとしても何をやろうとしてるのか想像も付かないんだけど。
852仕様書無しさん:2007/06/25(月) 23:52:29
>851
何をしたかったかって……あ、そーだ、
         ハ_ハ  
       ∩ ゚∀゚)') コンパイラの最適化性能を試してたんだよ!
        〉  / かしこいコンパイラならきっと全部消してくれるよね!
      .(_/ 丿
853仕様書無しさん:2007/06/26(火) 00:35:57
残ってるってことはMS製コンパイラは
854仕様書無しさん:2007/06/26(火) 11:37:01
>>851
>equalsって同値検査のメソッドがあると思えば良いの?
是。
>だとしても何をやろうとしてるのか想像も付かない
同意。
855仕様書無しさん:2007/06/26(火) 12:16:24
>>854
つーかその処理まったくいらないだろw
856仕様書無しさん:2007/06/26(火) 14:03:10
処理ですらない
857仕様書無しさん:2007/06/26(火) 14:22:25
またあったよ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
858仕様書無しさん:2007/06/26(火) 14:36:33
そりゃあ何かの名残だろ、と善意に解釈。

でもそれとは別に、OnLoad のオーバーライドじゃなく
Load イベントハンドラなのが気になる。
859仕様書無しさん:2007/06/26(火) 16:21:12
ある程度高度なw
行数水増し
860仕様書無しさん:2007/06/26(火) 18:58:14
他のForm_Loadのコピペだな。
861仕様書無しさん:2007/06/26(火) 21:23:18
  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;

こんな感じの関数があっちこっちに点在してやがる。
組んだ奴はある意味天才な気がする。
862仕様書無しさん:2007/06/26(火) 21:44:39
伝統的なスパゲティだな。
書いた奴は「本物のプログラマ」に違いない。

863仕様書無しさん:2007/06/26(火) 21:59:18
昔聞いた格言

「スパゲティでも出来たては美味しい」
864仕様書無しさん:2007/06/26(火) 23:24:35
>>863
けだし名言だな。
865仕様書無しさん:2007/06/26(火) 23:38:43
でも芯があったり、ゆですぎたりするのは嫌だな。
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;

てなコードなら三菱で大量に見た。
868仕様書無しさん:2007/06/27(水) 00:09:38
行数で給料が変わるのかもシレン。
869仕様書無しさん:2007/06/27(水) 00:51:42
5000タッチまで
870仕様書無しさん:2007/06/27(水) 01:40:08
VB6でプロシージャというプロシージャ全部
Function Hoge(...) As Integer
  On Error Goto ErrorTrap
  ...
  Hoge = RETURN_SUCCESS
  Exit Function
ErrorTrap:
  MsgBox "エラーが発生しました。"
  Hoge = RETURN_ERROR
End Function

傷害対応チームが大活躍。
871仕様書無しさん:2007/06/27(水) 02:25:28
下手なキノコより飛べそうなコードだな
872仕様書無しさん:2007/06/27(水) 02:26:54
>>870
全部想定済みのエラーって事なんだろ?
873仕様書無しさん:2007/06/27(水) 09:34:01
>>870
糞コード規約のにほい
874仕様書無しさん:2007/06/27(水) 11:19:20
ファンクションだよね

データベースにエラーログを書き込むぐらいのことはして欲しい
875仕様書無しさん:2007/06/27(水) 12:51:47
糞コード規約と言えば、全ての関数の先頭にOn Error Resume Nextをつける
ってのもあったなぁ(VB 4 の時代)
876仕様書無しさん:2007/06/27(水) 14:39:15
>>861
刹那的なソースだねw
877仕様書無しさん:2007/06/27(水) 14:59:30
>>870
> 傷害対応チームが大活躍。

エラーメッセージが出るたびにバット持ったチーマーが
作成者をボコりに行く様子を想像してしまった。w
878仕様書無しさん:2007/06/27(水) 15:05:13
メッセージボックスが出てくるたびに呼びつけられて対応させられるんだろうから
あながち間違ってないかもしれないな>877
879仕様書無しさん:2007/06/27(水) 15:09:42
変数名の命名にセンスがなさすぎる以前に、英単語の綴りすら
でたらめな箇所が複数あるソースは、いきなり、読む気なくす。

path の意味でつけた変数名が pass であったり。

一般教養のないやつ、しかも自己流で書いてるやつ、もう辞めれ!
おまえらの尻拭いはもういい加減うんざりなんだよ。
880仕様書無しさん:2007/06/27(水) 15:14:03
>879
泣きたくなるよね。

前にもどっかで書いたけど、集計値のつもりなんだろうけど

TotaruData

とか、もういやぽ('A`)
881仕様書無しさん:2007/06/27(水) 19:14:57
UwaWrite
882仕様書無しさん:2007/06/27(水) 19:27:59
あるある。
銀行系で変数とメソッドを全部ローマ字ってコーディング規約のソースを見たことがあるんだが、
for(int kaunto = 0; kaunto < 10; kaunto++) とか
public void raito() とか ← write
class Banku とか・・・笑い死ぬかと思ったwww
883仕様書無しさん:2007/06/27(水) 19:33:43
か・・・漢だ・・・。
884仕様書無しさん:2007/06/27(水) 19:40:32
RDBの設計ならば幾らでもあるな。

1個のカラムを色々な用途で使わないでください><
1個のカラムに複数の項目を入れないでください><
数値項目(0許可)の項目が入力されてない時、どうして0をDBに登録するんですか?><
全部にNOT_NULLは勘弁してください><
お願いだからリレーションしてください><
200万件×50テーブルのの集計をオンラインリアルタイムで0.5秒以内にはできません><
履歴はテープに取ってください、履歴テーブルが本テーブルの20倍あります(=ω=.)
マスターテーブル作ってください>△<
885仕様書無しさん:2007/06/27(水) 19:42:11
か…おとこだ…。?
886仕様書無しさん:2007/06/27(水) 19:46:39
>>885
か…漢だ…のガイドライン き…其の4だ!
http://ex20.2ch.net/test/read.cgi/gline/1181921523/
887仕様書無しさん:2007/06/27(水) 23:41:45
>>882
class Banku
ってのもすごいな
やさしいjavaとかそういう本みたいだ
888仕様書無しさん:2007/06/27(水) 23:47:21
class Kasutama

それならKokyakuにしとけよ…
889仕様書無しさん:2007/06/27(水) 23:53:30
伝説のうわらいとの初出はいつだっけ?
890仕様書無しさん:2007/06/27(水) 23:54:06
カスみたいな顧客なんだろ
891仕様書無しさん:2007/06/28(木) 00:02:00
892仕様書無しさん:2007/06/28(木) 00:10:08
>>870
おれんとこは、エラーが起きたら、ログにだけ書き出して、無視が基本。
(ファイルIOとか、どうしても避けられない場合以外は)
エラーが起きてるのに、ユーザーに操作を続けさせるほうが、あとあとの被害が大きいと思うのがけど…
893仕様書無しさん:2007/06/28(木) 05:08:59
そんなのそのソフトの使われ方次第でしょ?
動ける限りエラーは無視する方がいいソフトもあれば
どんなエラーでも報告した方がいいソフトもある
894仕様書無しさん:2007/06/28(木) 17:12:52
動ける限りって、エラー後にまともに動いてる保証がまったく無い事が問題だろうに
895仕様書無しさん:2007/06/28(木) 17:18:04
業務内容によるわな。
エラーが起きたらログにはき出しておいて、然るべき処置をしてそのまま動作続行せにゃならん場合もある。
896仕様書無しさん:2007/06/28(木) 17:26:38
FAなんかだととにかくメッセージボックスは出さずに画面に表示していって処理は止めないな

897仕様書無しさん:2007/06/28(木) 17:30:52
データ不整合を引き起こさない限り続行が基本。データ不整合を
引き起こしてしまうかどうかが不明な場合は停止せざるをえない。
そして、ほとんどのエラーはよくわからんちんなケースに分類され
るので、停止させてる。そうこうしてるちに、いっそのこと全部停止w
898仕様書無しさん:2007/06/28(木) 18:19:22
で、時間当たり百万や千万単位の損失を出す訳だ。
899仕様書無しさん:2007/06/28(木) 19:40:48
sti
iret

なんでこんな糞ソースを直さなければならねんだ。
900仕様書無しさん:2007/06/28(木) 19:56:43
>>899が何に切れてるのか解りません
901仕様書無しさん:2007/06/28(木) 19:59:27
>>899
それは何だ?
変数名だとしたら何が入ってるの?
関数名だとしたら何を返すの?
それが判らんと何が糞なのか判らん…
902仕様書無しさん:2007/06/28(木) 20:00:09
スッチーに入れたい

って意味か
903仕様書無しさん:2007/06/28(木) 20:00:17
>>893
>動ける限りエラーは無視する方がいいソフトもあれば 

それはねえ。
想定外のエラーでエラーハンドラに飛んだら、止めるしかねえだろ。
904仕様書無しさん:2007/06/28(木) 20:19:19
>>899-901
x86でiRetする前に割り込み許可するのはイカれてる、って話じゃね?
905仕様書無しさん:2007/06/28(木) 21:06:47
客先で大爆笑してしまって客とトラブルになったソースコード

if( ifJyoKen ) {
    // 処理
}

どうも部署で偉い人が書いたコードだったらしい・・・orz
俺が悪いの・・・ねえ?
906仕様書無しさん:2007/06/28(木) 21:34:33
「うはwwなんだこの変数名wwありえねー(^д^)9m プギャー」

「wwww ..... (゜д゜ )( ;゜д゜)アレ? ナンカ マワリガシズカデスヨ?」

こんな感じ?
907仕様書無しさん:2007/06/28(木) 21:38:31
>>903
それは動ける限りを超えているので止まるのは仕方ない
908仕様書無しさん:2007/06/28(木) 21:46:31
Strutsだかなんかのフレームワークで恐ろしいコーディング規約の元に作成されたソースがあった

publiv void actionPerformed( ) { // ←だっけ?うろ覚え
   // ループカウンタ
   int i, j, k, l, m, n, o, p;

・・・・キョロ(ω・`))(´・ω・`)(( ´・ω)キョロ
ひふみ・・・8重ループ!!?

実際はそこまで使っていなかったんですが、7重ループに10階層くらいifが埋まってましたYO
909仕様書無しさん:2007/06/28(木) 21:50:12
>>907
元が、基本的にエラーを無視してるって話じゃん。
910仕様書無しさん:2007/06/28(木) 22:12:51
>>904
それiretじゃなくてretiじゃねえの?w
911仕様書無しさん:2007/06/28(木) 22:27:58
激しいインデントのために頻繁な横スクロールが必要
912仕様書無しさん:2007/06/28(木) 22:39:16
>>911
激しいインシデントって読んでしまった。w
913仕様書無しさん:2007/06/28(木) 22:41:39
>>911
残念ながらインデントはされていなかった
理由を聞いたら、横スクロールして読みにくくなるからインデントしなかったらしい。
本気でぶっ殺そうかと思った
914仕様書無しさん:2007/06/28(木) 22:59:00
すげえなw
915仕様書無しさん:2007/06/28(木) 23:26:03
>>905
客先で客のソースを爆笑してトラブらないと思ってるお前が怖いわ。
味方にすると恐ろしそうな奴・・・
916仕様書無しさん:2007/06/28(木) 23:28:46
笑う奴は流石にいないだろ
そんなのに関わらなきゃならない自分が泣けてくるだけで
917仕様書無しさん:2007/06/28(木) 23:30:53
会社辞めようと思ったコードじゃ、爆笑しても可笑しくはないんだろう
918仕様書無しさん:2007/06/28(木) 23:33:00
客のものとはいえ、あまりにひどいから会社を辞める覚悟で爆笑か。
919仕様書無しさん:2007/06/28(木) 23:34:49
やめようというようなものでもないけれど
/* テスト */
if (条件1) {
} else if (条件2) {
} else if (条件3) {
こんな感じで条件全部記述

/* ここから本番 */
if (条件1) {
 処理;
}


お試しコードは止めないけど、後で消して欲しかった
基本的に何か問題がある箇所以外は一切修正してはいけないルールに
なっていて消すわけにもいかないし見るたびにどうにも気になる
920仕様書無しさん:2007/06/28(木) 23:39:43
それ、テスト部分を消すと動作が変わったら泣けるよな
921仕様書無しさん:2007/06/28(木) 23:51:54
良くある話です
922仕様書無しさん:2007/06/29(金) 00:20:55
>>910
君が使っているCPUは8051とかZ810なのかもしれないが、
x86のニーモニックはiretなんだぜ?
923919:2007/06/29(金) 00:23:21
やはりこれぐらいならよくあるのか…

どうやらテスト部分で条件1しかこないことを確信したらしく
本番のとこでは条件1の場合だけ処理して残りは全部無視
してるんだけど、もし他の条件になった場合には異常終了
するあたりがかなり素敵だと思った。
924仕様書無しさん:2007/06/29(金) 00:58:40
IRETはフラグをスタックから戻して、割り込み復帰する(フラグは呼び出し前の状態に戻される)から、その前にフラグをセットしても無意味だな
925仕様書無しさん:2007/06/29(金) 08:42:34
class Hoge {
public:
  Hoge mhoge
}
てのがあって、


Hoge huga = 略
if (huga.mhoge) {
} else if (huga.mhoge.mhoge) {
} else if (huga.mhoge.mhoge.mhoge) {
・・・

てのが、いっぱいあったとき。
で、処理内容も同じとき・・・

再帰してくれよ・・・。
926仕様書無しさん:2007/06/29(金) 12:09:46
>>899
その昔は
EI
RETI
だったので、それをそのままx86に移植した。
927仕様書無しさん:2007/06/29(金) 16:45:46
Z80か

8086でも
STI
IRET
じゃなかったっけか
928仕様書無しさん:2007/06/30(土) 00:45:47
>>908
まぁ避けられないなら何重ループでも構わんが
(ある程度でメソッドに切り出せ、ってのはあるが…)

アルゴリズムのオーダーの概念も考えずに、無闇に多重ループする馬鹿が多すぎ。
Javaなんて特に標準ライブラリが充実してる環境なら、気の利いたアルゴリズム
使ったって、そんなに複雑なコードにはならんのに。

入社試験で離散数学の試験くらいやってくれ…。
929仕様書無しさん:2007/06/30(土) 00:49:53
たとえばどんな?
930仕様書無しさん:2007/06/30(土) 13:55:52
DBからテーブルAをごっそり
同DBからテーブルBをごっそり
for で上の2つを join 処理。

もうね、なんのためのDBなのかと、SQLなのかと ⊂⌒~⊃_Д_)⊃
931仕様書無しさん:2007/06/30(土) 16:36:03
きっとDBサーバのメモリーが貧相だから
しかたなく代わりに処理してるんだよ
932仕様書無しさん:2007/07/01(日) 02:32:06
if (code.equals(Hoge.FOO)) {
  return 0;
}
if (code.equals(Hoge.BOO)) {
  return 1;
}
if (code.equals(Hoge.POO)) {
  return 2;
}

実際には7段くらいのネストで、30個ぐらい続いてた。
933仕様書無しさん:2007/07/01(日) 05:15:17
まぁ他に書きよう無いんじゃないか?
934仕様書無しさん:2007/07/01(日) 07:53:50
書きようはないが、ちと設計を疑うな。
935仕様書無しさん:2007/07/01(日) 12:17:43
英語嫌いの社内SEがいて
trueとfalseのことを真と偽で説明したら
真と偽って何だよ?
と聞かれた。
その時の俺の顔には漫符が3種ぐらい付いてたと思う。
936仕様書無しさん:2007/07/01(日) 12:30:24
スレタイすら読めないお前も同類だよ
937仕様書無しさん:2007/07/02(月) 00:08:20
ttp://d.hatena.ne.jp/y_aoi/20070701#1183263172

ソースじゃないがヤレヤレ・・・な感じ
938仕様書無しさん:2007/07/02(月) 00:13:28
なんでこのスレで話すわけ?
適切なスレあるだろ。
心から馬鹿だな。

ついでだから書くが「間に合うかどうか」と「要望通りかどうか」は全くの別問題。
その辺の話を詰めてない時点でどっちも馬鹿。
939仕様書無しさん:2007/07/02(月) 00:17:22
なんかアホくさい日記だなと思ってたら、こいついつかのキチガイじゃねーか
お前はとっととプログラマを辞めろと言うに
バカのくせに続けてるからこういう問題起こすんだよな
周りに迷惑かかるからとっとと辞めろよ
940仕様書無しさん:2007/07/02(月) 01:24:33
私が書いたコードより酷いコードを見た事がありません><
941仕様書無しさん:2007/07/02(月) 03:13:10
俺の書いた最悪のコード見せたろか。目がつぶれるかもしれんぞ。
942仕様書無しさん:2007/07/02(月) 09:56:29
目が!目がああぁぁぁぁ!!!
943仕様書無しさん:2007/07/02(月) 10:38:26
ふはは、見ろ!コードがゴミのようだ!
944仕様書無しさん:2007/07/02(月) 12:36:16
SE、君のアホづらには、心底うんざりさせられる
945仕様書無しさん:2007/07/02(月) 14:43:54
↑SEを「営業」に変えて、言ってみてぇえぇぇえぇぇぇ
946仕様書無しさん:2007/07/03(火) 09:44:10
辞めようと思ったほどじゃないけどげんなりしたソース、ってのはここでもいいのかな?
947仕様書無しさん:2007/07/03(火) 11:34:00
検索したらこんなスレがあったけど、さびれてるからこっちでもいいかもね。

勘弁してくれよ!糞ソーを引き継ぎソースを晒すスレ
http://pc11.2ch.net/test/read.cgi/prog/1107795134/l50
948仕様書無しさん:2007/07/04(水) 00:55:26
'path = dir & filename
'↓Stringの連結は遅いので改善
path = new StringBuilder(dir).Append(filename).ToString()
949仕様書無しさん:2007/07/04(水) 01:06:11
StringBuilderの甘い罠
950仕様書無しさん:2007/07/04(水) 08:15:03
たぶん948は949みたいな反応が返ってくるのを期待して、むしろそっちを笑おうと
思ってるんだと思うよw

突っ込みどころはむしろ別のところにあるだろ。
いやまあ、948自身も実は天然って可能性もあるが。
951仕様書無しさん:2007/07/04(水) 12:00:23
相変わらずVBばっかだな。
952仕様書無しさん:2007/07/04(水) 16:02:53
/*   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じゃなければ軽いんじゃないの?
954仕様書無しさん:2007/07/04(水) 17:11:38
うんにゃ、strxxxだけで入力uart4800bpsに間に合わなかったの(入力ringが1周りしちゃう)
955仕様書無しさん:2007/07/04(水) 20:53:27
>>948-950
パスの連結にはSystem.IO.Path#Combineを使えって話かい?
956仕様書無しさん:2007/07/04(水) 23:30:38
超絶亀レス&スレ違い、かつ流れぶった切りで申し訳ないが、>>370辺りで話題になってる変数名のプレフィックスについて。

「変数の型を変える時に名前まで変えるのがメンドイ」ってあるけど、
型を変えた場合、それによる影響を検討する際に、チェックを兼ねて1箇所づつ名前変えていったりとかしないの?俺だけ?
(本来は詳細設計書上で確認できるべきなんだろうけど・・・。)
957仕様書無しさん:2007/07/04(水) 23:37:50
リファクタリングで単に型名だけ変えたりすることもあるし一概には言えない・・・
958仕様書無しさん:2007/07/04(水) 23:38:03
一括でやらんと変更し忘れで
959仕様書無しさん:2007/07/05(木) 01:16:28
・200行以上のループがあるとき。
・1関数が1000行とか超えちゃってる時。
・1ファイルが2000行とか超えちゃってるとき。
・インデントがあってなくて、しかもタブとスペースがごっちゃに使われてるとき。
・5重以上のネストを見たとき。
・なんちゃってハンガリアン記法とか使われてるとき。
・バグフィックスのコメントがソースのいたるところにご丁寧に残してあるとき。
960仕様書無しさん:2007/07/05(木) 01:25:48
これ全部ANDだったら酷い話だが、ORだったら辞めようと思わない会社なんてないんじゃね。
961仕様書無しさん:2007/07/05(木) 01:53:15
>>960
得てしてこういう条件はandのときが多い。
962仕様書無しさん:2007/07/05(木) 02:32:15
うちの会社はこんなもんだ

・1000行以上のループがある
・1関数が3000行とか超えちゃってる
・1ファイルが30000行とか超えちゃってる
・5重以上のネストを見た
・なんちゃってハンガリアン記法とか使われてる
・バグフィックスのコメントがソースのいたるところにご丁寧に残してあり、しかも間違っている。
963仕様書無しさん
そんなコード腐るほどあるな。。。
プラグラムのイロハも知らない時から仕事やらせりゃそんなもんだろ。

俺も殺したくなったことあるよ。

ま。。。糞コードでも理解して修正できる能力も必要ってことで。
そういうコードを糞野郎がいじりるとさらに大変なことになってくるけどな。