1 名前:仕様書無しさん mailto:sage [2007/04/02(月) 12:45:06 ] この会社辞めようと思ったソースコード。 プログラマとして幻滅するソースコード。 プログラマを悩ませるソースコード。 をつらつらと綴っていって頂戴。 ちなみにここは質問スレじゃないので 技術的な質問がしたいならム板 pc11.2ch.net/tech/ に逝って。 前スレ この会社辞めようと思ったソースコード#15 pc11.2ch.net/test/read.cgi/prog/1167117526/
24 名前:仕様書無しさん mailto:sage [2007/04/07(土) 23:19:42 ] 修正履歴を必ず残させるコーディングルールと サブルーチン使えば1行で済む処理が延々とコピペされたコード リファクタリングという言葉に何か恨みでもあるんだろうか。
25 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/04/19(木) 23:43:16 ] いや「ぜったい消せ」のほうがマシだよ。
30 名前:仕様書無しさん mailto:sage [2007/04/20(金) 00:52:17 ] まったくだ
31 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/04/20(金) 13:04:25 ] >>31 ソースコードにその処理の意味合いを持たせる為だと思う
33 名前:仕様書無しさん mailto:sage [2007/04/20(金) 13:53:20 ] >>31 は b = 条件; a.set1(b); a.set2(b); のように記述しないのは何故? っていってるんだよな? そして>>32 の言ってることが分からん。
34 名前:仕様書無しさん mailto:sage [2007/04/20(金) 14:11:21 ] >>33 あれかな、 elseをelse ifにして拡張可能とか。
35 名前:仕様書無しさん mailto:sage [2007/04/20(金) 14:35:35 ] >>31 そりゃ、「条件」が「式」だと知らずに if (ここには条件しか書けない) b = ここには真偽値のリテラルしか書けない と思い込んでる典型的な阿呆が書いたからだろう。 そして俺も >>32 の言ってることがわからん。
36 名前:仕様書無しさん mailto:sage [2007/04/20(金) 15:31:47 ] 知らないだけで阿呆にされちゃカナワンなー
37 名前:仕様書無しさん mailto:sage [2007/04/20(金) 23:07:56 ] Option Explicitなし if 謎の宣言なし変数>0 and hoge_index=1 Then こんなんばっか
38 名前:仕様書無しさん mailto:sage [2007/04/20(金) 23:47:42 ] option explicit って入門書にも必ず出てるのにね
39 名前:仕様書無しさん mailto:sage [2007/04/21(土) 03:49:33 ] >>36 >>35 のいう通りだったとして、 ”冗長な(冗長すぎる)記述を、なんとかしようという気構えの無い奴” である可能性が95%以上とみる。 そういうやつは、すごく無知なのに知っている知識だけでソース記述しようとするんだよね。。 つまり阿呆で十分だと思うんだ。
40 名前:32 mailto:sage [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 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/04/21(土) 10:17:07 ] 視点の高さがまるで違うんだな。 短いコードを書けばいいと思ってるような奴はCOBOLでもやってろって話
44 名前:仕様書無しさん mailto:sage [2007/04/21(土) 10:18:26 ] >>40 変数名がbというのは反対だが(ファイルの使用目的とそれの存在を示す意味のある名前にするべき)、俺は変数に入れてあるほうが読みやすいと感じるな。 無駄なブロックやネストはできるかぎり無いほうが読みやすいと思う。
45 名前:仕様書無しさん [2007/04/21(土) 10:19:21 ] 沖縄県の方へ(命に関わる注意事項です) 沖縄県での選挙ですが、どうか民主党だけは避けてください。県民の生命に関わる可能性があります。 民主党の最大の公約は一国二制度(※)ですが、一度「一国二制度 沖縄 三千万」等で検索をお願いします。 この際、民主党のHPで調べても良いです。以下の注釈↓と矛盾することは書いてないはずですから… ※一国二制度 簡単に言えば沖縄を中国と日本の共有物にし、そこに3000万人の中国人を入植させます。 (つまり沖縄人口の 96% を中国人にして、実質、沖縄を中国人の居住地とします。) さらに「自主」の名の下、沖縄で有事が起きても自衛隊は干渉できません。 3000万人の中国人が、少数派となった130万人の日本人に何をしても、です。 そして反日教育を受けた中国人の反日感情の強さは、ほとんどの日本人の理解を超えるものです。 今回の選挙で民主党が勝った場合、「自主」「発展」を連呼しつつ段階的に進めていくことになります。 自主と言っても、自主を認めるのが「住人の96%が中国人となった」後だということに気をつけてください。 発展と言っても、新沖縄の少数派となった「少数民族日本人」の発展ではないことに気をつけてください。
46 名前:仕様書無しさん mailto:sage [2007/04/21(土) 15:37:30 ] >>40 そりゃあ>40みたいな前提条件を勝手に組み込めばそういう解釈も可能だが シンプルな>31だけを見せられたら>33のような反応してしまうのが普通だろ。 ここで>40とは正反対の前提条件があったとして、>31のような書き方をされたら ありもしないニュアンスを醸しだしてかえって迷惑。
47 名前:仕様書無しさん mailto:sage [2007/04/21(土) 17:54:27 ] >>41 VBって暗黙の型変換が意味も無く強力過ぎ たしかVB5のときに型変換のルールが微妙に変わった様な飢餓するが 今となってはどうでもいい事だ
48 名前:仕様書無しさん mailto:sage [2007/04/21(土) 19:08:06 ] char* buf = new char[sizeof(Hoge)]; Hoge* hoge = (Hoge) buf; . . . delete[] buf; わかってねぇ〜〜〜〜〜。
49 名前:仕様書無しさん mailto:sage [2007/04/21(土) 19:27:18 ] なんかまずいの? 馬鹿にしたかったら馬鹿にしていいけど、その後でちゃんと何が分かってないのか説明してね。
50 名前:仕様書無しさん mailto:sage [2007/04/21(土) 19:32:28 ] キャストがおかしいってことか。 仮に typedef void *Hoge; だとしたらこれでOKって、いや違うC++だとアウトだ。 あれ?
51 名前:31 mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/04/21(土) 20:34:41 ] パケットのデータを取り出すのによく>>48 みたいなキャストするけどいかんのかね? ま、確保したばかりの変数をキャストするのは珍しいと思うけどさ
53 名前:仕様書無しさん mailto:sage [2007/04/21(土) 21:27:33 ] >>52 普通は Hoge* hoge = new Hoge; だわな。 よくCから中途半端にC++へ移行した人がやってるのを見かける。 どうせnew=malloc程度に理解してんだろうね。
54 名前:仕様書無しさん mailto:sage [2007/04/21(土) 23:49:33 ] >>49 説明するまでもないだろ。
55 名前:仕様書無しさん mailto:sage [2007/04/22(日) 01:05:47 ] キャストは基本DQNでございます。 memcpyとか大好きなDQNがごろごろ。 大人しくCでもいじってろ。
56 名前:仕様書無しさん mailto:sage [2007/04/22(日) 01:30:29 ] 先日見たJavaコード long hoge = 1; : Long page = Long.valueOf(String.toString(hoge)); 文字列にする意味ねぇ・・・
57 名前:仕様書無しさん mailto:sage [2007/04/22(日) 14:58:11 ] >>56 "valueOfがイイ、使え" とか言われた人間がそこで思考停止するとそうなるな...
58 名前:仕様書無しさん mailto:sage [2007/04/22(日) 16:21:19 ] >>56-57 もっと深刻な「コボラ上がり」だったんじゃないかな。 やつらは、数値="0"〜"9"の並び(=ゾーン形式)っていう観念から 離れらんないから。
59 名前:仕様書無しさん mailto:sage [2007/04/22(日) 23:10:42 ] >>48 も基本がなってない。 (Hoge)じゃなく(Hoge *)だろ。
60 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/04/23(月) 15:03:51 ] ソースコードじゃないんだけど。 DBのDDLをバージョン管理システムに入れてまして。 外注さんが直接DBをいじっちゃったので、 リポジトリのDDLに変更を反映してくれって頼んだら。 hoge.sql(手付かず) hoge_日付.sql(新規) ってファイルがリポジトリにあって 面白かったです。
62 名前:仕様書無しさん mailto:sage [2007/04/23(月) 21:40:52 ] 最初、DLLと読んでしまったので、理解するのに時間がかかってしまった。 バージョン管理システムを、読み書きに手順が必要なファイルサーバだと 思ってる人、確かにいますね。
63 名前:仕様書無しさん mailto:sage [2007/04/23(月) 21:58:34 ] >バージョン管理システムを、読み書きに手順が必要なファイルサーバだと >思ってる人、確かにいますね。 今のPRJリーダのことかーーーー CVSなのになぜか hoge hoge_2 hoge_3 とディレクトリを切っている。 旧ソースを全てコメントとして残したり、 日付と変更者をコメントに書いて変更箇所をサンドイッチしたり。 ストレージとしてしか使っていないよ・・・orz
64 名前:仕様書無しさん mailto:sage [2007/04/29(日) 14:33:46 ] 変更者が変質者に見えた・・・俺相当疲れてるな・・・
65 名前:仕様書無しさん [2007/04/30(月) 01:15:17 ] IF IsNumeric(Cint(value)) Then End If orz ...
66 名前:仕様書無しさん mailto:sage [2007/05/01(火) 18:01:28 ] 元気出せ。
67 名前:仕様書無しさん mailto:sage [2007/05/05(土) 15:38:53 ] VBの類は、暗黙の型変換を禁止するオプションがほしいよぬ
68 名前:仕様書無しさん mailto:sage [2007/05/05(土) 16:36:40 ] >>67 vb.net にはあるぞ
69 名前:仕様書無しさん [2007/05/06(日) 14:05:22 ] 俺の会社ポインタ型は全部void *って全社共通で決まってるから VBのキャストぐらいでは混乱しないよ。
70 名前:仕様書無しさん mailto:sage [2007/05/06(日) 14:14:37 ] 常に参照先の型について意識させることで社員の意識を高めようということか! ごめん無理
71 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/07(月) 21:37:54 ] 組み込みとか
80 名前:仕様書無しさん [2007/05/08(火) 10:05:32 ] kwsk
81 名前:仕様書無しさん [2007/05/08(火) 14:28:58 ] ソースじゃないんだけど あるSEがUML書きましたと言って提出してきた設計書が、 単なるフローチャートだったとき しかもパーツの意味を間違えまくっているとき
82 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/08(火) 23:39:21 ] そうおもってさ。おぷそのつーるでグラフ化してみたわけよ、糞ソフト。 花火が見られた。 とりあえず生成結果を消した。
88 名前:仕様書無しさん mailto:sage [2007/05/09(水) 09:23:11 ] Happy99とは懐かしいな。
89 名前:仕様書無しさん [2007/05/09(水) 10:07:23 ] しあわせ99?
90 名前:仕様書無しさん mailto:sage [2007/05/09(水) 10:14:18 ] ウイルスだったよな?確か
91 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/09(水) 22:58:11 ] 時々居るなぁ、Boolean使わない奴。
95 名前:仕様書無しさん mailto:sage [2007/05/09(水) 23:15:01 ] ポインタをintにキャストする香具師は、 LP64,LLP64環境で死亡で御座います
96 名前:仕様書無しさん mailto:sage [2007/05/09(水) 23:26:18 ] uintptr_tかchar*でないとマズいね。 ところで~(ALIGNSIZE-1)ってそのままで大丈夫?
97 名前:仕様書無しさん mailto:sage [2007/05/09(水) 23:36:30 ] ごめん、大丈夫そう。
98 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/10(木) 11:00:05 ] >>100 はあ?
102 名前:仕様書無しさん [2007/05/10(木) 11:49:46 ] 全然privateじゃないってこと
103 名前:仕様書無しさん mailto:sage [2007/05/10(木) 12:24:19 ] カプセル化の意味も判らないんなら口挟まない方がいいんじゃね?
104 名前:仕様書無しさん mailto:sage [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 と書かれてないか調べたか? w
107 名前:仕様書無しさん mailto:sage [2007/05/10(木) 19:19:40 ] 嫌な職場だなぁ
108 名前:仕様書無しさん mailto:sage [2007/05/10(木) 22:26:52 ] まさに冷戦。 誰が核のボタンを押すのか、押せるのか。 いやまて核は何なのか。
109 名前:仕様書無しさん mailto:sage [2007/05/10(木) 23:18:03 ] #define FIRE FILE なんての見て鬱になってたところだが、 ここ見てたらなんだか元気が出てきた。ウチはまだ大丈夫だ!
110 名前:仕様書無しさん mailto:sage [2007/05/10(木) 23:48:01 ] >>106 オワットルwww
111 名前:仕様書無しさん mailto:sage [2007/05/11(金) 00:48:52 ] >>109 知らぬ間に #define FILE FIRE になっているかもしれんぞ。
112 名前:仕様書無しさん mailto:sage [2007/05/11(金) 01:38:14 ] 大丈夫。 展開コードを参照すればw
113 名前:仕様書無しさん [2007/05/11(金) 10:34:47 ] 1つのプロジェクト内にファイルが1800個あったから、一体何かと思ったら 履歴を全部別ファイルにして残していて、わざわざコンパイルしない設定対象に1780個ぐらい加えているという・・・ バージョン管理ソフト使っていてこれかよ。出向先なので辞めるわけにはいかない、 明日から通勤時間に3年程かけようかとか本気で思った
114 名前:仕様書無しさん mailto:sage [2007/05/12(土) 01:22:44 ] >>111 sonyのバッテリーが発火した原因はそれか。
115 名前:仕様書無しさん mailto:sage [2007/05/13(日) 07:16:31 ] やめよう思うほどじゃないが よく見るキモチワルイコード if (a == 1) { } else { なんかのしょり なんかのしょり }
116 名前:仕様書無しさん mailto:sage [2007/05/13(日) 08:38:20 ] >>115 俺、よくこういうコード書きかけてしまう… 具体的にはこんなんですが。 if (a == 1) { /* 〜ということやりたいけど後で考える */ } else { なんかのしょり なんかのしょり } (a == 1) の時の処理考えなくてよければ、こんなんかな。 if (a != 1) { なんかのしょり なんかのしょり }
117 名前:仕様書無しさん mailto:sage [2007/05/13(日) 14:21:06 ] >>116 コーディング中には俺もよくやる。 問題は納品後のソースにそれが残ってることだと思います。 //TODO:この機能いらなくね?? とか //TODO:うんこしたい とか //TODO:仕様はやくきめろやぼけ!!殺すぞ!! とか 他人にはとても見せられないようなコメント 入れといて実装漏れ、修正漏れは絶対起こさないようにすべき このコメントを納品した後のソースで、見たらその人は この会社やめようって思うんだろうなー でも、顧客の悪口は洒落にならないから書かないぜ!
118 名前:仕様書無しさん mailto:sage [2007/05/13(日) 14:26:10 ] んなコメント入れんなよ
119 名前:仕様書無しさん mailto:sage [2007/05/13(日) 17:13:43 ] 普通、if(a)って書かね?
120 名前:仕様書無しさん mailto:sage [2007/05/13(日) 17:20:56 ] >119 出た〜〜〜っ!
121 名前:仕様書無しさん [2007/05/13(日) 17:41:28 ] >>119 それキモい。 aはあくまでデータであり、真偽をあらわす値ではない。
122 名前:仕様書無しさん mailto:sage [2007/05/13(日) 17:44:10 ] ところでいつ a が boolean になったんだ?
123 名前:仕様書無しさん mailto:sage [2007/05/13(日) 17:44:34 ] C#とかだとコンパイルも出来ない。
124 名前:仕様書無しさん mailto:sage [2007/05/13(日) 17:47:02 ] ifは0かそうじゃないかだけしか見ないんだから>>119 で何の問題もないだろ C#はシラネ
125 名前:仕様書無しさん mailto:sage [2007/05/13(日) 17:51:42 ] ifは0かそうじゃないかだけしか見ないんだから ifは0かそうじゃないかだけしか見ないんだから ifは0かそうじゃないかだけしか見ないんだから ifは0かそうじゃないかだけしか見ないんだから ifは0かそうじゃないかだけしか見ないんだから〜 お前とは組みたくない。
126 名前:仕様書無しさん mailto:sage [2007/05/13(日) 17:56:10 ] 組込みマイコンのコンパイラでは常識的手法。 if(a)なら JNZ命令一行ですむ。
127 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/13(日) 18:17:16 ] で、aの型は・・・?
130 名前:仕様書無しさん mailto:sage [2007/05/13(日) 18:19:03 ] お前ら、if (isdigit(c) == 1)って書くの?
131 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/13(日) 18:27:44 ] >>128 int型でもブール変数として使う場合は むしろ、a == 1 以外のケースでも真と判定されなきゃまずいと思うけど
134 名前:仕様書無しさん [2007/05/13(日) 18:32:31 ] if(a)って書くとバグの温床になるからやめろ 等号式書いても、今のコンパイラなら80年代と違って等価のコード出す。 今、最適化意識して各のはアルゴリズムの性能と無駄なシーケンス省くことだけ。 きもいくて古い書き方は捨てろ。恥だ
135 名前:仕様書無しさん mailto:sage [2007/05/13(日) 18:38:06 ] >>134 >if(a)って書くとバグの温床になるからやめろ まぁif((hFile = CreateFile()))とかやってハマってた奴とかいたし、気持ちはわかるw
136 名前:仕様書無しさん [2007/05/13(日) 18:38:38 ] isdigit www
137 名前:仕様書無しさん mailto:sage [2007/05/13(日) 18:38:42 ] だーかーらー前提としてaの型を明らかにして話を進めろ
138 名前:仕様書無しさん mailto:sage [2007/05/13(日) 18:47:19 ] >135 じつはhFileの実体がスマートハンドルで、 operator boolみたいなのが定義されているとか
139 名前:仕様書無しさん mailto:sage [2007/05/13(日) 18:51:44 ] >137 新人はだまってROMしてなさい!
140 名前:仕様書無しさん [2007/05/13(日) 18:55:15 ] >>137 ・aがブールを意味する値なら if (a) でおk ・そうでなければ比較の意図を明示的に表明すべし でFA
141 名前:仕様書無しさん mailto:sage [2007/05/13(日) 19:04:34 ] >140 上の連中それをごっちゃにして噛み合わない議論してねぇ?
142 名前:仕様書無しさん mailto:sage [2007/05/13(日) 19:08:37 ] >>134 むしろ、バグの温床になるのは if (a==0) とかの方なんだがな・・・ typo で if (a=0) になってしまうから。
143 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/13(日) 19:34:08 ] >>144 読んで ふと思ったんだが、 fj って今でもあるの?
146 名前:仕様書無しさん mailto:sage [2007/05/13(日) 19:35:09 ] 確かにその書き方なら間違いが防げるけど、何故か普及してないな。
147 名前:仕様書無しさん mailto:sage [2007/05/13(日) 19:36:49 ] if( NULL == a) と書くのはお断りだ
148 名前:仕様書無しさん mailto:sage [2007/05/13(日) 19:38:54 ] >>146 昔から議論はあるけど、警告が出るからそんなヘンな書き方をすることは無いってことで落ち着いてる。
149 名前:仕様書無しさん mailto:sage [2007/05/13(日) 19:40:09 ] >>144 きもいくて古い書き方は捨てろ。恥だ
150 名前:仕様書無しさん mailto:sage [2007/05/13(日) 20:18:41 ] if(a) が一番美しい。
151 名前:仕様書無しさん mailto:sage [2007/05/13(日) 20:25:30 ] >>150 >>121
152 名前:仕様書無しさん mailto:sage [2007/05/13(日) 20:31:36 ] >151 >127
153 名前:仕様書無しさん mailto:sage [2007/05/13(日) 20:36:17 ] プログラムってのはデータと命令しかないわけよ。 そのデータが真偽値であるとか整数であるとかあるいは文字列であるとかの意味付けは 言語処理系上でのみ行われている文脈上のものでしかないの。 文法的に許されているなら>>150 を支持する。実際、美しい。 キモイとか許せないと思うなら if(a) という記述を許さない言語を使えば良いでしょ。
154 名前:仕様書無しさん mailto:sage [2007/05/13(日) 20:37:43 ] 無限ループって怖くね?w
155 名前:仕様書無しさん mailto:sage [2007/05/13(日) 20:38:51 ] 最初の書き込みで、aに入ってるのがbool値(0かそれ以外)か、ただの数値(たとえば0〜100とか)とか何も 書いてないのに、いきなり 「if (a) と書く」とか言うのは変だって言ってるんだろ。
156 名前:仕様書無しさん [2007/05/13(日) 20:45:37 ] 個人的に if(a) で書ける状況でもこういう書き方はしないなぁ。 たまたま文法的に成立するってだけだから。 古い書き方だと思う。 今はベタに、ちゃんと==使わないとダメだと思う。
157 名前:仕様書無しさん mailto:sage [2007/05/13(日) 20:45:46 ] ねえ、今は False =0, True = 1 であたりまえなの? 昔はそれぞれ 0, 0xff って実装もありだったと思うんで、 True のつもりで a == 1 なんて怖くて書けない。 せめて a == True とするのが、他人が読む時も精神衛生的にいいんジャマイカ?
158 名前:仕様書無しさん mailto:sage [2007/05/13(日) 20:46:32 ] >>155 >「if (a) と書く」とか言うのは変だって言ってるんだろ。 別に。 また、プログラムの読み手にとっても、 aに入ってるのがbool値か、ただの数値か なんて考える必要はない。 a の評価値が 0 かそれ以外かさえ分かればよい。 こんな単純な話はない。
159 名前:仕様書無しさん mailto:sage [2007/05/13(日) 20:49:42 ] >>158 でも, bool値以外のデータだったら、 if (a == 1) を if (a) にしたら、動作が違ってくるだろ?
160 名前:仕様書無しさん mailto:sage [2007/05/13(日) 20:50:14 ] a == 1 の比較だろ a = 0 or 1 ならともかく a = 2 のときは? a = 100 のときは?
161 名前:仕様書無しさん mailto:sage [2007/05/13(日) 20:50:16 ] >>158 その場合、if(a) は発端>>115 の if (a==1) と同一ではない。 発端の if (a==1) はあなたの「単純な話」にあてはまらない。 元の話わかってる?
162 名前:仕様書無しさん mailto:sage [2007/05/13(日) 20:52:26 ] aには、0か1が入ってるとか、 1,2,3のどれかが入ってるとか、なんら前提が示されてないのに、 if (a == 1) を if(a) と書き直したらダメだろ。
163 名前:仕様書無しさん mailto:sage [2007/05/13(日) 20:53:39 ] 凡庸なプログラマってこうした思い込みしてコーディングしてんのかな…
164 名前:仕様書無しさん mailto:sage [2007/05/13(日) 20:54:14 ] なんかトンデモねぇ馬鹿が一匹迷い込んでないか 俺コイツと一緒に仕事すんのはマジで嫌 想定外の修正されてぶち壊されそう
165 名前:仕様書無しさん mailto:sage [2007/05/13(日) 20:54:56 ] 初心者の俺にはよく分からんのだが aの型について触れずに論議が進められるのは何故なの?
166 名前:仕様書無しさん mailto:sage [2007/05/13(日) 20:55:46 ] >165 何度か指摘してるんだが何故かまともに取り合ってくれないんだ(´・ω・`)
167 名前:仕様書無しさん mailto:sage [2007/05/13(日) 20:56:02 ] aには、0か1が入ってるとか、 1,2,3のどれかが入ってるとか、なんら前提が示されてないのに、 if(a)をif (a == 1) と書き直したらダメだろ。
168 名前:仕様書無しさん mailto:sage [2007/05/13(日) 20:57:42 ] >>167 >if(a)をif (a == 1) と書き直したらダメだろ。 それは誰もしてない。
169 名前:仕様書無しさん mailto:sage [2007/05/13(日) 20:59:43 ] >>165 少なくともCにおいては、if()の中身は式であって、その型は無関係だから。
170 名前:仕様書無しさん mailto:sage [2007/05/13(日) 21:01:13 ] >165 >166 >139
171 名前:仕様書無しさん mailto:sage [2007/05/13(日) 21:02:10 ] >>157 >せめて a == True とするのが、他人が読む時も精神衛生的にいいんジャマイカ? bool値のある言語でそれをやったら、ちょっとヘタクソっぽい。 Cだと、 #define TRUE 0 #define FALSE -1 とか、ありえるので、わからなくもない。
172 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/13(日) 21:05:35 ] この人なんで火病ってんの?
175 名前:仕様書無しさん mailto:sage [2007/05/13(日) 21:06:28 ] でさー 115 がいつ C って決まったの?
176 名前:仕様書無しさん mailto:sage [2007/05/13(日) 21:08:32 ] >>175 暗黙の前提。ああいう構文の言語は全部がCから派生しているからね。
177 名前:仕様書無しさん mailto:sage [2007/05/13(日) 21:09:17 ] まあ細かいことはプログラム書く人の自由ということで、115の場合はひとつの例として、 if aが1のとき{何もしない} else {何かの処理}がキモチワルイコードと言っているだけだ。
178 名前:仕様書無しさん mailto:sage [2007/05/13(日) 21:14:59 ] じゃあここは間とって三項演算子で書こうぜ
179 名前:仕様書無しさん mailto:sage [2007/05/13(日) 21:15:01 ] >>115 の主張は if (a == 1) { /* 〜ということやりたいけど後で考える */ } else { で、「/* 〜ということやりたいけど後で考える */ を書くのが嫌だ」って話であって、 今の話題は >>119 が言う所の、 「if 文の括弧の中では、明示的に論理式を書く必要がない」か否か って話だろ?
180 名前:仕様書無しさん mailto:sage [2007/05/13(日) 21:16:07 ] >暗黙の前提。 こういう自分勝手な解釈をするヤツが一番手におえない
181 名前:仕様書無しさん mailto:sage [2007/05/13(日) 21:19:37 ] >>180 >>115 ≠ >>176 というのも、暗黙の前提だな。
182 名前:仕様書無しさん mailto:sage [2007/05/13(日) 21:23:04 ] それも勝手な解釈だな その場合は前提を提示していないという意味で自分勝手な以下同文
183 名前:仕様書無しさん mailto:sage [2007/05/13(日) 21:23:42 ] >>179 俺が > /* 〜ということやりたいけど後で考える */ を追加した >>116 だけど、>>115 はそんなこと主張してないぞ。 >>115 の if (a == 1) {} else { ... } の解釈はいろいろありえるが、俺は 「if (a == 1) の時何もやらない」だと解釈した。 俺は別なつもりで同じようなコードを書いてしまうとコメントしたつもりだったんだが、 俺が余計なこと書いて議論を混乱させたのか? すまんかった。
184 名前:119 mailto:sage [2007/05/13(日) 21:28:36 ] 正直すまんかった。 俺が勝手に>>115 のaをブール値を表現する変数だと勘違いして>>119 を書いた。 でも、よく考えたら>>115 は明示的にa == 1って書いてるんでブール値ではないわな。 ブール値なら少なくともa == TRUEとか書かなきゃいかんはずだし。 まぁ、俺が言うのもなんだが>>140->>141 でFAで
185 名前:けーつえーき mailto:sage [2007/05/13(日) 21:58:00 ] >>184 その辺って熟練のPGでも考え方に違いが出てくるので PLの考えに合わせるのが無難と思う。 そういえば、MSの環境でBOOLって型があって #define TRUE (1) #define FALSE (0) と定義されてるんだけど APIで返す値に1以外の0じゃない値が返るものがあったりするねw
186 名前:仕様書無しさん mailto:sage [2007/05/13(日) 22:10:58 ] >>185 Windows APIのBOOL型の戻り値は、だいたい「成功すると0以外の値を返す」と ドキュメントに記されているわけで、特定の定数TRUEを返すとは書かれていないんで if (HogeHoge() == TRUE) は間違い。普通はこういう書き方しないだろうけど。 ところでその#defineの括弧は不要なんじゃ...
187 名前:仕様書無しさん mailto:sage [2007/05/13(日) 22:18:46 ] どころか、GetMessageみたいな3値を返すBOOLもある
188 名前:仕様書無しさん mailto:sage [2007/05/13(日) 22:21:39 ] > ところでその#defineの括弧は不要なんじゃ... まあ括弧でくくるクセをつけてあるのは良いことだと思う。
189 名前:仕様書無しさん mailto:sage [2007/05/13(日) 22:26:24 ] おう。そういう例があるから だいたい とさりげなく断っておいた。 俺はそれに嵌ったクチだし。 (ウィンドウの生成に失敗しているのにGetMessageして-1が返って無限ループorz)
190 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/14(月) 08:26:50 ] >>191 素人とプロの違いは技量の違いではない。 「それが生活基盤であるか否か」だけである。 だからいくら素人に見えても実態はプロである事は多い。
194 名前:仕様書無しさん [2007/05/14(月) 08:58:01 ] >>193 てことは>>191 もプロになるんだろうな。
195 名前:仕様書無しさん mailto:sage [2007/05/14(月) 11:30:47 ] とりあえず最悪の事態を考えてaはValiant型を想定しておくか
196 名前:仕様書無しさん mailto:sage [2007/05/14(月) 11:44:27 ] >>195 ちょっwwwww SUGEEEEEEEEE そんな先のことまで想定してコーディングするとはwww 俺絶対入社するわ 全部Variantで書いとくんで保守たのんますwww
197 名前:仕様書無しさん [2007/05/14(月) 12:29:41 ] なんかスレが延びているとおもったら、またよくわからん話題で盛り上がってるのか えーっと ぬるぽ
198 名前:仕様書無しさん mailto:sage [2007/05/14(月) 12:35:31 ] がっ
199 名前:仕様書無しさん mailto:sage [2007/05/14(月) 16:51:48 ] // ここからそこまで何をしているのか不明 そこって何処よ…('A`)
200 名前:仕様書無しさん mailto:sage [2007/05/14(月) 17:52:51 ] ' SOKOってラベルふってあんだろ
201 名前:仕様書無しさん mailto:sage [2007/05/14(月) 17:56:16 ] 底でしょ
202 名前:仕様書無しさん mailto:sage [2007/05/14(月) 17:58:54 ] プロシージャ内と予測してみる
203 名前:仕様書無しさん [2007/05/14(月) 19:31:37 ] ここってCの人が多いみたいね。 じゃあ、vb系を代表して: Dim a, b As Integer Cとは違います。多分正しくありませんよ〜
204 名前:仕様書無しさん mailto:sage [2007/05/14(月) 19:34:04 ] >>203 普通にそう書いてる奴多いな 俺はメンテの時に困るから書いてないけど
205 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/14(月) 20:01:03 ] >>209 セル1つ1つに値を入れる奴はヘタレ。
213 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/14(月) 20:41:35 ] 「VB.NET 変数宣言」でぐぐれかす
216 名前:仕様書無しさん [2007/05/14(月) 21:03:36 ] ホントだ。知らんかった。
217 名前:仕様書無しさん mailto:sage [2007/05/14(月) 21:21:01 ] Dimってさ、もともとDimensionの略で、配列の次元を宣言するための ものだったのにどーしてVBは一般の変数宣言に使うようになっちゃった んだろう。
218 名前:仕様書無しさん mailto:sage [2007/05/14(月) 21:30:23 ] RubyとかLispとか動的型付けの言語でもコードが書かれてるんだから、 Variantでもいいじゃないか。
219 名前:仕様書無しさん mailto:sage [2007/05/14(月) 21:31:21 ] >>218 底辺乙
220 名前:仕様書無しさん [2007/05/14(月) 21:55:27 ] そもそもoption explicitにしない奴もいるわな。 いいんじゃない?最近のPCは性能がいいから。
221 名前:仕様書無しさん mailto:sage [2007/05/14(月) 22:00:50 ] >195 Variant
222 名前:仕様書無しさん mailto:sage [2007/05/14(月) 23:14:36 ] >220 ハードウェアの進化には楽天的であれ ソフトウェアの進化には悲観的であれ エンジニアの技術力の進化には絶望的であれ # 上の2つは201の鉄則より
223 名前:仕様書無しさん mailto:sage [2007/05/14(月) 23:59:36 ] pc11.2ch.net/test/read.cgi/prog/1129522233/711
224 名前:仕様書無しさん [2007/05/15(火) 10:31:23 ] 昨日を today-1 と書くか dateadd("d",-1,today) と書くか
225 名前:仕様書無しさん mailto:sage [2007/05/15(火) 10:56:39 ] 普通下だと思ってた俺はどうなのよ?
226 名前:仕様書無しさん [2007/05/15(火) 10:59:04 ] 反省しろ
227 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/15(火) 13:35:50 ] >206 その解釈は微妙。(VB(A)でもCでも) どちらも、0が偽でそれ以外が真。 ただし、比較式などが返す値が、Cでは1、VB系は-1てこと。 >206自身はわかってるならそれはいいんだけど、 わかってない人が>206みたいな記述を読むと勘違いしたりする('A`)
234 名前:229 [2007/05/15(火) 16:09:20 ] >>231 ああ、.NETからの間違いだったかも すまそ、ちょっとunicode変換されてくるは
235 名前:仕様書無しさん mailto:sage [2007/05/15(火) 22:23:41 ] >>228 そんなの書けたか?
236 名前:仕様書無しさん mailto:sage [2007/05/15(火) 22:37:00 ] >>235 今ちょっと試してみたけど、Excel VBA で Date 型だと書けてしまうな。気持ち悪い。 整数が日付、小数点以下が時刻ってことか… 俺はDateAddの方がどんな変数を操作してるかわかりやすいので安心できる。
237 名前:仕様書無しさん mailto:sage [2007/05/16(水) 00:22:54 ] 真値を数値として扱うと-1になることを利用した演算式が 昔のBASICにゃたんまりあってのう…… a = a + (h > 3) * 1 とか
238 名前:仕様書無しさん mailto:sage [2007/05/16(水) 00:44:08 ] Oracle とかもDate型は数値扱いだろ よくあるよくある
239 名前:仕様書無しさん mailto:sage [2007/05/16(水) 07:10:34 ] >>237 むしろ条件式を使うことがコード量を節約する手法の一つだったのさ。
240 名前:仕様書無しさん mailto:sage [2007/05/16(水) 09:46:11 ] >>237 の動作ってどうなるんだ? こんな書き方しらねぇ・・・・ (h > 3) この部分の解釈
241 名前:仕様書無しさん mailto:sage [2007/05/16(水) 10:15:20 ] >>240 真なら -1 で偽なら 0 になる。 つまり C で書きなおせば if (h > 3) a += 1; ってこと。 この例だとコード量節約にもならないような。
242 名前:仕様書無しさん mailto:sage [2007/05/16(水) 10:35:26 ] BASICならIF文使うと遅いからじゃね?
243 名前:仕様書無しさん mailto:sage [2007/05/16(水) 10:41:02 ] サンクス なるほど そういう解釈になるのか! しかし・・・可読性が落ちるな(;´Д`) 昔は遅かったからその辺のテクなんだろうなぁ・・・
244 名前:仕様書無しさん mailto:sage [2007/05/16(水) 12:02:18 ] 最近のCPUで当時のBASICコードが動かせるとすると ループで時間稼いだりしてた部分が瞬時に終わったり 笑える動作になるんだろうな
245 名前:仕様書無しさん mailto:sage [2007/05/16(水) 12:03:41 ] >>238 は何を言ってるんだ…?
246 名前:仕様書無しさん mailto:sage [2007/05/16(水) 12:06:52 ] >>244 ウチは実際にそれで問題が出てたwwww
247 名前:仕様書無しさん mailto:sage [2007/05/16(水) 12:47:25 ] >>244 昔でもあったぞ。 ゲームでPC-9801VM(V30)でスピード最適化したシューティングゲームを PC-9801RA(i386)で動作させてみたらレーシングゲームになった、とか
248 名前:仕様書無しさん mailto:sage [2007/05/16(水) 13:30:20 ] MSXturboRの通常モード(8ビットモード)で普通に出来たゲームが 高速モード(16ビットモード)では早すぎてゲームにならなかったり。
249 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/16(水) 20:39:53 ] 俺は同じ書き方やって言語で動作が違うような書き方はしないように心がけてる
251 名前:仕様書無しさん mailto:sage [2007/05/16(水) 20:44:09 ] じゃあ、Cで短絡評価は使わないってこと?
252 名前:仕様書無しさん mailto:sage [2007/05/16(水) 20:50:09 ] >>251 C・C++は別格
253 名前:仕様書無しさん mailto:sage [2007/05/16(水) 20:51:54 ] >>251 短絡的な発想だな
254 名前:仕様書無しさん mailto:sage [2007/05/16(水) 20:57:30 ] >>253 だれがうまいこと言えとwww
255 名前:仕様書無しさん mailto:sage [2007/05/17(木) 11:43:10 ] >>250 言語が変わったら、同じ書き方は出来ないと思うんだが。
256 名前:仕様書無しさん mailto:sage [2007/05/17(木) 12:56:49 ] >>255 なにその柔軟すぎる発想 お前PGとかこの業界やめたほうがいいよ それとも釣りですか?
257 名前:仕様書無しさん mailto:sage [2007/05/17(木) 14:00:51 ] >>256 「同じ言語で、同じ書き方をして、違う動作をするような書き方」 であれば、しないのが当たり前。素人じゃあるまいし。
258 名前:仕様書無しさん [2007/05/17(木) 14:17:15 ] >>257 日本語嫁よwwwwww
259 名前:仕様書無しさん mailto:sage [2007/05/17(木) 14:53:11 ] おいおい COBOLでかちゅーしゃ作れねーだろ
260 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/17(木) 17:02:51 ] ━━ a. 勇敢な. ひょっとして: variant valiantly Valerian
264 名前:仕様書無しさん mailto:sage [2007/05/17(木) 17:58:31 ] 今年入社した会社のコード if(《BOOL型変数》!= TRUE) { }else { 処理; } もっと簡潔に書いてくれ・・・
265 名前:仕様書無しさん mailto:sage [2007/05/17(木) 18:14:47 ] BOOLというのが実は独自定義の真偽値型で、 TRUE==0でそれ以外がFALSEだとか?
266 名前:仕様書無しさん mailto:sage [2007/05/17(木) 18:15:54 ] >>264 既出のものかと思いきや応用編か……。
267 名前:仕様書無しさん mailto:sage [2007/05/17(木) 18:48:13 ] >>265 それにしたってブロックからっぽにするんだったら 条件ひっくりかえしてelse削除でしょう。
268 名前:仕様書無しさん mailto:sage [2007/05/17(木) 18:52:06 ] >>267 ご指摘の通りだけど。else部分は省略禁止という規約も実在するしw
269 名前:仕様書無しさん mailto:sage [2007/05/17(木) 19:07:26 ] いや、条件に一致した場合の処理も後で書き加える可能性があるとか。 コメント残せよって話だけど。
270 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/17(木) 22:03:48 ] 真偽定数と比較する奴ウザイ。
272 名前:仕様書無しさん mailto:sage [2007/05/17(木) 22:30:17 ] おれ明示的に描くようにしてるわ
273 名前:仕様書無しさん mailto:sage [2007/05/17(木) 22:50:57 ] 真偽値と比較するのならなぜその結果をさらに真偽値と比較しないのか。 そしてその結果をさらに……
274 名前:仕様書無しさん mailto:sage [2007/05/18(金) 00:13:13 ] >>270 こういう、似たような処理をひたすら羅列して、ウォーリーを探せみたいな ソース書いてる人って、どんな気持ちで書いてるんだろう?
275 名前:仕様書無しさん mailto:sage [2007/05/18(金) 00:14:06 ] あーめんどくせー
276 名前:仕様書無しさん mailto:sage [2007/05/18(金) 01:57:47 ] >275 きっと本気でそう思ってるんだろうなぁ…… 恐らく「コピペでガンガンコードが書けて俺様ってば超Cool!!」とは思ってない気がする
277 名前:仕様書無しさん mailto:sage [2007/05/18(金) 07:36:40 ] コピペでコード書くのは全くCoolでない件
278 名前:仕様書無しさん mailto:sage [2007/05/18(金) 08:12:42 ] >>277 おまけにバグまでコピッてるのを見ると殴り殺したくなる。 こういう時はgrepするとワラワラと湧いてくるんだよな。orz
279 名前:仕様書無しさん mailto:sage [2007/05/18(金) 09:16:43 ] >>276 しかしどこぞの馬鹿に言わせると 馬鹿でも理解できるため良質なコードということになる。 良質なコードを生み出すことが超Coolでないわけなかろう。
280 名前:仕様書無しさん mailto:sage [2007/05/18(金) 09:26:30 ] 正しくは「馬鹿だけ」が最小コストで理解できるコードだろ
281 名前:仕様書無しさん mailto:sage [2007/05/18(金) 09:31:22 ] >280 何か問題でも?
282 名前:仕様書無しさん mailto:sage [2007/05/18(金) 09:41:40 ] >>281 一般人には理解できないコードなのだが。
283 名前:仕様書無しさん mailto:sage [2007/05/18(金) 09:46:16 ] 自分が一般人に含まれると勘違いしているのはイタさ倍増
284 名前:仕様書無しさん mailto:sage [2007/05/18(金) 10:26:37 ] 多分、板住民同士でレビューしたら自称一般人だらけだろうなw 自分の知識が普通とか一般だと思うのは非常に危険だぞ。
285 名前:仕様書無しさん [2007/05/18(金) 11:19:51 ] >>274 ステップ単価だったりして。 ステップ単価の文化に浸った人はコピペ多いよなぁ。
286 名前:仕様書無しさん mailto:sage [2007/05/18(金) 17:23:52 ] 人月の狼
287 名前:仕様書無しさん [2007/05/18(金) 17:25:39 ] ほら吹き狼
288 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [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
290 名前:288 mailto:sage [2007/05/18(金) 20:11:38 ] >>289 ナルホド、これなら1行で消せますね。 他のコードで同じ書き方してました。 If 条件式でやるのはためらいますが。
291 名前:仕様書無しさん mailto:sage [2007/05/18(金) 20:52:54 ] hogeとかmageをセットしてるコードのほうが気になる。
292 名前:仕様書無しさん mailto:sage [2007/05/18(金) 23:47:38 ] 自分はVB(でしょ?)知らないんだけど bFlag = bHoge Or bMoge Or bNuge Or bHage Or ... とは書けないの?
293 名前:仕様書無しさん mailto:sage [2007/05/19(土) 00:04:03 ] そこまで分岐するならビット演算とかどうよ?
294 名前:仕様書無しさん mailto:sage [2007/05/19(土) 01:06:41 ] VBScript環境やまして.netはよー知らんが、レガシVBとかVBAでは s = "hogehoge" _ '& "piyopiyo" _ & "fugafuga" は文法エラーということを忘れてる人はおらんか。 いや忘れていいなら忘れてしまいたい貴方♪だが。 >292 書けるお。
295 名前:仕様書無しさん mailto:sage [2007/05/19(土) 02:05:39 ] >>288 cb.checked = cb.checked Or ( Not ( _ bHoge _ Or bHage _ Or bHuge _ : ) )
296 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/19(土) 02:49:14 ] >>296 俺も怖い。組み込みは鬼門と考えるようにする。
298 名前:仕様書無しさん mailto:sage [2007/05/19(土) 02:56:53 ] >>296 スマン。 2つ目のやつの問題点を教えてくれ。 これよくあったよ・・・@携帯電話の網の中の人
299 名前:仕様書無しさん mailto:sage [2007/05/19(土) 03:10:34 ] というか普通のfreeも大雑把に見ると>>296 の二つ目みたいなもんだ。
300 名前:仕様書無しさん [2007/05/19(土) 03:15:26 ] せめて (uintptr_t)pstData - (unsigned)(&(((Memory*)0)->データ)); にできないかねぇ。
301 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/19(土) 03:29:37 ] >>300 うは・・・。 構造体のアライメントを運用で気ぃつけるとかはあったけど、 そういう発想は無かったな・・・。 さんきぅ。参考になります。
303 名前:仕様書無しさん mailto:sage [2007/05/19(土) 08:47:17 ] >>296 value = array[-2]; これの動作は未定義なのでは?
304 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/19(土) 09:11:22 ] >>304 上はよく見る。 下もよく見・・・るわけねえええええ
306 名前:仕様書無しさん mailto:sage [2007/05/19(土) 09:13:56 ] >>304 上は各処理の後にbreak;はあるの? あったらただの馬鹿だな。
307 名前:仕様書無しさん mailto:sage [2007/05/19(土) 09:14:24 ] >>304 Fの仕事の後では全然なんでもないと感じる。 やつら車輪の再発明大好きで、標準関数同等品の再開発はもちろん、 それを作ったのが同じF内でも課が違えば、自分ところで再開発するからな。 一つのシステムに同じ機能が何箇所も独立してコーディングされてて、 成績上位者が軒並み逃げるのも判る気がする、と思った。
308 名前:仕様書無しさん mailto:sage [2007/05/19(土) 09:33:28 ] >306 >上は各処理の後にbreak;はあるの? 実はある…orz 完璧、思いつきで組んでみた的な無駄なロジックいっぱい。 一つの関数内でローカル変数を初めはインデックスカウンタ、 下の方では値の交換のための受け皿に使ってたりもするし。
309 名前:仕様書無しさん mailto:sage [2007/05/19(土) 09:57:15 ] >>308 >一つの関数内でローカル変数を初めはインデックスカウンタ、 >下の方では値の交換のための受け皿に使ってたりもするし。 この誘惑に駆られちゃうことがあるな… 新しい目的のローカル変数が欲しいんだけど、既にいくつものローカル変数があって 新しく宣言するのは気が引ける時とか。 「おやこの変数この処理の後は使ってないや、使っちゃえ」って感じで。 保守を優先するなら、目的が違えば新しく宣言すべき?(規約にもよるだろうけど、一般論として)
310 名前:仕様書無しさん mailto:sage [2007/05/19(土) 10:28:46 ] >>309 > 保守を優先するなら、目的が違えば新しく宣言すべき?(規約にもよるだろうけど、一般論として) 当然だ。 ローカル変数多すぎってのは、リファクタリングの必要がある可能性があるよ。
311 名前:仕様書無しさん mailto:sage [2007/05/19(土) 11:06:29 ] クソみたいなソースをリファインするのは我慢できるが、 クソみたいなソースと付き合うのは苦痛だな。
312 名前:仕様書無しさん mailto:sage [2007/05/19(土) 11:34:09 ] >>309 確認したいが。 その関数内のローカル変数の現在の個数はいくつか? (一般論を知りたいか?w)
313 名前:仕様書無しさん mailto:sage [2007/05/19(土) 11:53:02 ] >>309 ジジイみたいに関数の先頭でどっさり宣言するからだろ。 スコープ絞って宣言すれば、ほとんどそんなことにはならん。
314 名前:仕様書無しさん mailto:sage [2007/05/19(土) 12:23:41 ] >296 freeってそんなもんでしょ。組み込みじゃなくても GNU libcのmalloc/freeはもっとスゴイ、という話を聞くけど。
315 名前:仕様書無しさん mailto:sage [2007/05/19(土) 12:34:29 ] >>312 10個かな。 2次元矩形の現在の開始〜終了座標と更新前の同座標を保持する必要があって、 元データの構造体1個と、それぞれ単独変数に追い出した4個×2で9個。 それに、問題の変数1個。他にもあったかも。 単独変数に追い出した4個×2はなくてもいいと思うんだけど、それないとコード追いにくいって メンバがいるもんで、残してる。 リファクタリングの精神忘れてました。ありがと。見直してみる。
316 名前:仕様書無しさん mailto:sage [2007/05/19(土) 12:45:31 ] >>314 組み込みじゃなければmalloc/freeを使えば良いわけで。
317 名前:仕様書無しさん mailto:sage [2007/05/19(土) 12:55:01 ] そういや昔居た会社での事。 引数の数が8個9個が当たり前で、うち6個はどの関数でもやり取りされてるから、 「構造体にまとめませんか?」って提案したら、「難しくなるから駄目」って却下。 やたら構造体とかポインタだとかに拒絶反応のあるところだった。
318 名前:仕様書無しさん mailto:sage [2007/05/19(土) 13:03:11 ] >>306 >>304 の上の処理はbreakが あるかないかよりもswitchの後に続く処理が あるかないかが重要なんでは?
319 名前:仕様書無しさん mailto:sage [2007/05/19(土) 13:05:28 ] >>296 malloc/free周りは基本はそんなかんじでしょ。 俺も自作したとき、似たようなコード書いた。
320 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/19(土) 13:52:56 ] >320 必要な時にブロックを生成して、なかで int iを幾らでも定義すりゃいいじゃん。
323 名前:仕様書無しさん mailto:sage [2007/05/19(土) 13:58:09 ] >>309 グローバル変数として宣言すれば、宣言は1回で済むぞ。 同じものを幾らでも使いまわせる。 これは便利。覚えておけ。
324 名前:仕様書無しさん mailto:sage [2007/05/19(土) 14:53:47 ] 後輩がそのパターンをやてってくれて頭抱えてるんだが。 学歴あってもセンスないやつはダメだ('A`)
325 名前:仕様書無しさん mailto:sage [2007/05/19(土) 14:57:01 ] >>323 そういう時は、自分で同じパターンの 読みにくいコードを書いてやって、 後輩に読ませれてみればよい。
326 名前:仕様書無しさん mailto:sage [2007/05/19(土) 15:04:14 ] 本人はそれがわかりやすいと思って書いてるんだから 意図が理解できるはずもない
327 名前:仕様書無しさん mailto:sage [2007/05/19(土) 15:09:48 ] 仮に>>324 みたいな事をやって、 そいつがそのソースを即理解できたのなら、 文句ないんじゃねえの? だって本当に分かり易かったんだろ?
328 名前:仕様書無しさん mailto:sage [2007/05/19(土) 15:12:24 ] とりあえずLispとかPrologとかマイナー系言語で書いて 「俺には判りやすいんだからいいだろ」といっとけ
329 名前:仕様書無しさん mailto:sage [2007/05/19(土) 15:29:50 ] >>327 自分が見て分かり易いかどうかより、 他人が見て分かり易いかどうかの方が重要なんじゃないか?
330 名前:仕様書無しさん mailto:sage [2007/05/19(土) 15:32:20 ] 「俺はいつも"他人が見て分かり易いコード"を書くように努めている」 という奴に限って糞コードを書く件について、どう思う?
331 名前:仕様書無しさん mailto:sage [2007/05/19(土) 16:10:17 ] >330 そこの会社のわかりやすいコードのレベル=クソコードなだけ。 書いているうちにそれしかかけなくなる罠
332 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/19(土) 16:33:59 ] >>323 遠慮しときます。 ウッカリ、ある関数で使った後にもかかわらず別の関数で以前の値を保持しているつもりで 使おうとする実装をやってしまって、デバッグで痛い目にあったことがある。
334 名前:仕様書無しさん mailto:sage [2007/05/19(土) 16:41:27 ] >>332 大昔のFOTRANでI,J,K,L,M,Nで始まる変数は宣言なしで整数型になったから
335 名前:仕様書無しさん mailto:sage [2007/05/19(土) 16:53:02 ] >>334 とてもためになりました、ありがとうございます。 会社に入ってから勉強した文系プログラマなのでこうした基礎教養がないです。
336 名前:仕様書無しさん mailto:sage [2007/05/19(土) 17:13:00 ] N M Σ Σ Aij i=0 j=0 こっちの法の使い方がもとだとおもうけどねー
337 名前:仕様書無しさん mailto:sage [2007/05/19(土) 17:19:11 ] 元来FORTRAN(FORmula TRANslation)ってのは数式の処理目的だから当然だな
338 名前:仕様書無しさん mailto:sage [2007/05/19(土) 17:25:33 ] 飛び飛びって初めて見たな。 それはそれで激しく嫌だ。
339 名前:仕様書無しさん mailto:sage [2007/05/19(土) 17:28:06 ] >>336 そして数式でiから始まる文字を使うのはiがindex(添え字)の頭文字だからだろうか。 iterationのiだと主張してる人もいたが数学に元を辿ると違いそうだなぁ。
340 名前:仕様書無しさん mailto:sage [2007/05/19(土) 17:32:41 ] 元FORTRAN屋なんて自分以外には何人生き残ってるか知らんが、 いまだにi〜nで始まる変数名を見ると「整数型」と思ってしまう。 たぶん、一生治らんなw
341 名前:仕様書無しさん mailto:sage [2007/05/19(土) 17:44:36 ] index j k length m number 一文字変数ならi〜nは整数だと感じる
342 名前:仕様書無しさん mailto:sage [2007/05/19(土) 18:26:05 ] それは普通だろ。 むしろ、「倍精度実数型」や「文字列型」とか定数のiを作るほうがどうかしてる。 何でうちの会社はこういうのがいるんだろう…。難読化か?
343 名前:仕様書無しさん mailto:sage [2007/05/19(土) 18:33:01 ] 逆にaやbが整数だと気持悪い
344 名前:仕様書無しさん mailto:sage [2007/05/19(土) 21:20:44 ] >>338 漏れもすっきりしてるわけでありません。 i と j を打ち間違えてチェックに時間をとられたり、i I と l の区別に一瞬 ためらうことがあるので、そういうところで時間ロスしたくないと思って、 ぱっと見ても視認しやすい文字だけ使うようになりました。 皆さんはそういうことないですか? 漏れが下手なんでしょうね。
345 名前:仕様書無しさん mailto:sage [2007/05/19(土) 21:58:25 ] >>344 そーゆー時はフォントを書き換えると良いよ
346 名前:仕様書無しさん mailto:sage [2007/05/19(土) 21:59:34 ] >>344 うちのコーディング規約では、そもそも1文字の変数名が禁止。 それと意味の無い変数名も禁止。 例えば表を処理する二元配列のループ回すカウンタとかなら、 int nCntRaw,nCntCol; とかになるかな。
347 名前:仕様書無しさん mailto:sage [2007/05/19(土) 22:13:21 ] >>345 そういう意見出ると思ってました。 開発環境が固定されてなくて、設定を持ち歩いたり、いちいちフォントを設定しなおすのが 面倒なんです。 使える開発環境のデフォルトの設定ですぐ読めるコードを優先してます。 >>346 普段は漏れもそうです。一文字変数は、ループカウンタのような限定された状況だけですね。 こんな感じ。 for ( i = nStartRow; i <= nEndRow; i++ ) { for ( k = nStartCol; k <= nEndCol; k++ ) {
348 名前:仕様書無しさん mailto:sage [2007/05/19(土) 22:17:07 ] 寿命の短かったり重要でない、変数名が短いほうがいい。 ソースがうるさくなる。
349 名前:仕様書無しさん mailto:sage [2007/05/19(土) 22:19:17 ] >意味の無い変数名 だったら nXXXXって意味ないからやめろ int CntRaw,CntCol; でおけ
350 名前:仕様書無しさん [2007/05/19(土) 22:21:05 ] int CR, CCでいいじゃん
351 名前:仕様書無しさん mailto:sage [2007/05/19(土) 22:24:06 ] >>349 あー、説明不足で申し訳ナス。 メインC言語なんだが、「決まったプリフィクス」をつけることになってんだ。 癖でつけてしもた。 例えばこんなのが変数の先頭に付く int → n char → c void * → p int * → pn 構造体 → st 列挙型 → e グローバル変数 g_
352 名前:仕様書無しさん mailto:sage [2007/05/19(土) 22:28:17 ] ハンガリアンはいまどき、はやらないな。
353 名前:仕様書無しさん [2007/05/19(土) 22:30:05 ] >>351 つか、M$すら使わなくなったDQN記法をなぜ採用する? おまえの会社頭おかしくね?
354 名前:仕様書無しさん mailto:sage [2007/05/19(土) 22:35:42 ] >>353 さぁ?そうなってる背景は知らんし、今んトコ困って無い。 良かったらどこがDQNなのか教えて貰えんか?
355 名前:仕様書無しさん mailto:sage [2007/05/19(土) 22:45:41 ] 一文字変数禁止なんてルールきめたやつって、コードを読み書きした経験がろくにないんだろうな。
356 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/19(土) 22:55:28 ] うちの会社にもいまだにハンガリアンしてるやつがいて ワロタ
358 名前:仕様書無しさん mailto:sage [2007/05/19(土) 22:59:08 ] 現在進行中の糞プロジェクトなんか、コーディング規約がめちゃハンガリアン でかけりゃでかいほどハンガリアン率が高いと思う
359 名前:仕様書無しさん [2007/05/19(土) 23:05:14 ] 俺できるよねって感じで売り込んでるじじぃPGなんかは ハンガリアン率が高い。
360 名前:仕様書無しさん mailto:sage [2007/05/19(土) 23:07:36 ] JavaとかUnix系とかはハンガリアン使わないんじゃないの?
361 名前:仕様書無しさん mailto:sage [2007/05/19(土) 23:08:03 ] int cntRaw,cntCol; 俺はこうかな。
362 名前:仕様書無しさん mailto:sage [2007/05/19(土) 23:08:49 ] つかRawって何だ。Rowだよな。
363 名前:仕様書無しさん mailto:sage [2007/05/19(土) 23:40:25 ] >>356 を読んでみたが、デメリットが良く分からんかった。 個人的には変数名でデータの型がわかるだけで大分便利なんだが。 慣れてしまったら煩わしくも無いし。 慣れるまでに掛かるコストがメリットと釣りあわない(or無い)ので ハンガリアンなコーディング規約はクソだ、ということか?
364 名前:仕様書無しさん mailto:sage [2007/05/19(土) 23:47:00 ] >>362 冷凍と生のカウンタなんだろ
365 名前:仕様書無しさん mailto:sage [2007/05/19(土) 23:51:15 ] >>363 型情報は名前にのせるほど重要じゃないってことだろ。
366 名前:仕様書無しさん mailto:sage [2007/05/20(日) 00:07:38 ] >>362 フツーに間違えた・・・。 よく間違える。 >>365 JAVAとかRubyとかはさておき、C言語じゃ大事だと思ってたんだが、 世間的にはそういう認識なんか・・・。 勉強になりました。
367 名前:仕様書無しさん mailto:sage [2007/05/20(日) 00:12:50 ] MSも捨てた記法だし
368 名前:仕様書無しさん mailto:sage [2007/05/20(日) 00:18:39 ] MSはC言語自体捨ててる
369 名前:仕様書無しさん mailto:sage [2007/05/20(日) 00:29:43 ] >>360 それが未だに使われてるから困る 死ねばいいと思う
370 名前:仕様書無しさん mailto:sage [2007/05/20(日) 00:33:01 ] >>366 型情報を変数名に入れると、 型が変わる度に名前が変わる事になる。 そんなのおかしい、不自然だと思わないか? 例えば、「身長」がmm単位からcm単位に仕様変更され、 型が整数型から浮動小数点数になっても、身長は身長だろ?
371 名前:仕様書無しさん mailto:sage [2007/05/20(日) 00:33:53 ] >>362 cunt rawの略。つまり生まんこってことだ。 >>363 変数の型を変えたい時に面倒なんだよ。 あと、型情報が重要じゃないわけではない。 変数の宣言箇所を見るのが面倒くさくなるほど ソースをでかくする設計をまず見直せって事でしょ。 プリフィクスなんていらん。
372 名前:仕様書無しさん mailto:sage [2007/05/20(日) 01:03:05 ] 読み返してみたけど。 プレフィックスをつけるべきだ という発言は誰もしていないね
373 名前:仕様書無しさん mailto:sage [2007/05/20(日) 01:10:10 ] >>363 変数名って適当な長さがあるでしょ。 その中に重要な情報を載せていくと型名を載せる余地が無くなるわけだ。 型名は探せばわかるが、変数名に載せないとわからない情報がある。 あとは、機械的にチェックするツールが無きゃ信用できないから意味が無いと思う。
374 名前:仕様書無しさん mailto:sage [2007/05/20(日) 01:11:44 ] >>372 皆>>354 の質問に答えてるだけ
375 名前:仕様書無しさん mailto:sage [2007/05/20(日) 02:09:24 ] if(i==0){ foo(); }else{ //空文 }
376 名前:仕様書無しさん mailto:sage [2007/05/20(日) 02:18:26 ] 規約でelse省略不可だったんじゃないの
377 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/20(日) 07:10:11 ] Javaでハンガリアンやりたがる奴は頃してもいいよね。
381 名前:仕様書無しさん mailto:sage [2007/05/20(日) 07:23:06 ] >>370 型が変わると変数名も変えないといけないってのはハンガリアン否定論としてよく聞くけど、 実際問題、型を変える頻度ってどれくらいあるもの? 変えるのだって、「拡張する必要があって止むを得ず」ならともかく、「使い方を間違ってたから 変更」みたいなのなら、それは設計をちゃんとやってないただのバカだと思う。 変数名の他の部分で、以前の型に依存した処理をやってて、バグを招く可能性がある。 それに、「変数名の型を変える」だけなら、今はエディタやIDEがマシになってるんだから、 一括置換ですむのでは? >>356 のリンク先で議論されている「チェックのしやすさ」の点で、システムハンガリアンも 有効活用できると思うんだけどな。こだわりすぎるとよくないけど。
382 名前:仕様書無しさん mailto:sage [2007/05/20(日) 10:15:33 ] 変数名を変えられるエディタなら、 変数の型もでてくるんでねーの。 #ま、クラス・構造体に対して、システムハンガリアンは #大抵のところ無力だから、どーでもいいけど
383 名前:仕様書無しさん mailto:sage [2007/05/20(日) 12:51:14 ] >>380 Yes
384 名前:仕様書無しさん mailto:sage [2007/05/20(日) 12:54:09 ] ハンガリアン使ってるのはうざいなぁ… 醜くて仕方がない
385 名前:370 mailto:sage [2007/05/20(日) 13:01:44 ] >>381 頻度とかは無関係。 別に同じシステム内に限った話じゃなく、 全く別のシステムでも、同じ物を表す変数の名前を付ける場合でもいい。 同じ物を示すなら、当然同じ名前を付けるだろ? 名前に表現方法を入れるのは不自然だと言ってるんだよ。 身長の例でいくと、 単位がmmでもcmでもインチでも尺でも、身長は身長だ。 混在して使う必要がないなら、名前に表現方法など不要だろ?
386 名前:仕様書無しさん [2007/05/20(日) 13:33:41 ] >>385 単位がmm、cm → 基本型 身長 → クラス わざと混同してるのか?
387 名前:仕様書無しさん mailto:sage [2007/05/20(日) 14:16:48 ] >ハンガリアン どーでも良いが、そろそろ大分スレ違いじゃまいか?
388 名前:仕様書無しさん mailto:sage [2007/05/20(日) 15:06:41 ] 相変わらずヴァカだなM$
389 名前:仕様書無しさん mailto:sage [2007/05/20(日) 15:47:53 ] だから素人に文献書かせるとろくなことにならない
390 名前:仕様書無しさん mailto:sage [2007/05/20(日) 15:51:12 ] 自分が今書いてるところの変数の型も覚えてられないような奴とか、 覚えてられなくなるような無駄に長い処理書くような奴は プログラム書く資格ねぇよ。 こう言うと「他人が書いたのを解析するときにいいじゃないか」とか出てくるが、 「そのハンガリアンで書かれてる型が実際の型と一致してること」はまったく保証されないんだが? >>381 頻度は確かに低い。低いが、無いわけじゃないだろ? それに、型に依存した処理をやってて型変更時バグるってのは、「変更時にチェックしたか」が問題であって、 変数名をハンガリアンで書いてようが書いてまいが同じこと。
391 名前:仕様書無しさん mailto:sage [2007/05/20(日) 16:51:49 ] ハンガリアンは その変数が出てくるたびに いちいち/*コメント*/つけるようなもんだ。
392 名前:仕様書無しさん mailto:sage [2007/05/20(日) 16:58:58 ] 宣言部分を検索すれば済む話だよね
393 名前:仕様書無しさん mailto:sage [2007/05/20(日) 17:12:54 ] 検索するようでは駄目だ。 もう関数(メソッド)の長さの話になってしまうが。
394 名前:仕様書無しさん mailto:sage [2007/05/20(日) 18:23:13 ] っつーかIDE使ってれば変数の型なんぞすぐに知ることができるだろうに いったいいつの時代の開発環境なんでつか?
395 名前:仕様書無しさん mailto:sage [2007/05/20(日) 18:32:51 ] viつこーてます
396 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/20(日) 21:57:44 ] いや、だからハンガリアンがコーディング規約に無い以上、使ってもらっては困るんだがw >型変更した時に変数名を変えれば、それによる挙動のチェックを >モレが出ないようにフレームワーク化出来る。 あほか?これのどこがハンガリアンに関連すんだ?テストフレームワークとかコンパイラの仕事だろが よけいな仕事をやっておいて自己満足してんじゃねえぞ
400 名前:仕様書無しさん mailto:sage [2007/05/20(日) 22:02:40 ] このスレは基地外が多いですね
401 名前:仕様書無しさん mailto:sage [2007/05/20(日) 22:07:41 ] >>399 コーディング規約にハンガリアンを入れるのを否定してるんじゃないの? >あほか?これのどこがハンガリアンに関連すんだ?テストフレームワークとかコンパイラの仕事だろが 型変える→宣言箇所の変数名を変える →変数を使ってるところをチェックしたら、使用箇所の変数名を変える という風にルール化すると、未チェック部分があったらコンパイルが通らない
402 名前:仕様書無しさん mailto:sage [2007/05/20(日) 22:22:48 ] すべてを置換
403 名前:仕様書無しさん mailto:sage [2007/05/20(日) 22:25:42 ] 面倒だから、みんなboost::anyにしようぜ。それでハンガリアンも問題無し。
404 名前:仕様書無しさん mailto:sage [2007/05/20(日) 22:29:26 ] わかった。 荒れる元ってだけでも ハンガリアンは使わない方が吉、と。 論争する時間がもったいないわい。
405 名前:仕様書無しさん mailto:sage [2007/05/20(日) 22:34:29 ] ええー、組み込みならシステムシステムハンガリアンは結構有効だよぉ
406 名前:仕様書無しさん mailto:sage [2007/05/20(日) 22:37:43 ] Win16でFARポインタとNEARポインタを区別したいときには良かったけど 組み込みだとなにがいいのさ。
407 名前:仕様書無しさん mailto:sage [2007/05/20(日) 22:44:41 ] Microsoftはついには人々に言い始めたのだ。「ハンガリアン記法は推奨しない」。
408 名前:仕様書無しさん mailto:sage [2007/05/20(日) 22:53:52 ] ポインタのアラインとか、データ範囲(-0x80~0x7F)とか。 リソース少ないとなんでもかんでもlongにはできん。
409 名前:仕様書無しさん mailto:sage [2007/05/20(日) 23:34:36 ] : : int i = 0; array[i] = i++; 今までよく動いてたと思う。危なっかしいったら。
410 名前:仕様書無しさん mailto:sage [2007/05/20(日) 23:45:08 ] なんかようわからんけど、変数名の頭にintとかfloatとか付けるのは それが的確な名前ならそれでもいいという考え。 ハンガリアンが愚かなのはint型だからintってprefixを付ければ良い とかいう思考停止故だと思ってる。
411 名前:仕様書無しさん mailto:sage [2007/05/20(日) 23:56:50 ] ポインタの p とかはあった方がいいなーと思うことが多いな それより vector が困る。 std::vector<HOGE> hogeVec; HOGE hoge; hogeVec.push_back(hoge); Vec とかつけるのあまり好きでないんだが、他にいい案が浮かばない
412 名前:仕様書無しさん mailto:sage [2007/05/21(月) 00:05:03 ] それあとでやっぱりdequeにしよう、とかいったときどーするの?
413 名前:仕様書無しさん mailto:sage [2007/05/21(月) 00:07:05 ] >>411 うん、だから困ってるんだよ 変えるべきは下の HOGE hoge; なのかもしれないけど、いい案が浮かばないの
414 名前:仕様書無しさん mailto:sage [2007/05/21(月) 00:15:38 ] 名前の変更なんか、IDEのリファクタリングで一発じゃん。 hogeVecはいかがなものかとは思うが。
415 名前:仕様書無しさん mailto:sage [2007/05/21(月) 00:29:39 ] ハンガリー人はテンプレートパラメータにどんな プリフィックスをつけるの?
416 名前:仕様書無しさん mailto:sage [2007/05/21(月) 00:54:41 ] >411 月並みだがVecを何の目的で使うかジャマイカ ListでもBagでもCollectionでもお好きなのをだうぞ
417 名前:仕様書無しさん mailto:クラスならクラス名、構造体なら構造体タグ名にすべき [2007/05/21(月) 01:34:11 ] ハンガリアン、ハンガリアンとか言うヤシに限って、 クラスのプリフィックスがclsだったり、構造体のプリフィックスがstrとかだったりする。 ハンガリアンの意味、利点を履き違えてるとしか思えない。 そこが、ハンガリアンが愚かである所以だと思われ。
418 名前:仕様書無しさん mailto:sage [2007/05/21(月) 01:36:11 ] >>414 それいったら型が何かなんて IDEなら一発ジャン。 いいっこなしよ。
419 名前:仕様書無しさん mailto:sage [2007/05/21(月) 01:59:42 ] >>417 strはstringとかぶるぞ。
420 名前:仕様書無しさん mailto:sage [2007/05/21(月) 02:10:00 ] 自分はその 「IDEが無ければ開発作業自体が出来ないPGを多量生産するような考え方」 は承服しない。
421 名前:仕様書無しさん mailto:sage [2007/05/21(月) 02:12:34 ] >>420 テキストエディターが神 の派閥なわけ????
422 名前:仕様書無しさん mailto:sage [2007/05/21(月) 02:21:36 ] >>421 そんなものに派閥なんかあるか!w エディタが使われていないころから仕事をしているPGさ。
423 名前:仕様書無しさん mailto:sage [2007/05/21(月) 02:28:19 ] >>422 「emacsは最高のIDE」という派閥がある
424 名前:仕様書無しさん mailto:sage [2007/05/21(月) 02:31:00 ] >>422 あ・・・あれか?? ベタでCやベーシック書いてた時代なのか?? MSX世代の予感・・・・
425 名前:仕様書無しさん mailto:sage [2007/05/21(月) 02:40:13 ] テキストエディタが神とは言わんが、 現局に行ってviしか無い環境でソース弄くるというのはある・・・ #もちろんデスマ中
426 名前:仕様書無しさん mailto:sage [2007/05/21(月) 02:41:12 ] >>425 おまwww こんなところ書き込んでる場合じゃねええええ
427 名前:仕様書無しさん mailto:sage [2007/05/21(月) 08:22:04 ] >>424 BASICにはエディタが組み込まれてたがな(俗にカーソルエディタと呼ばれてた) エディタなしっつーとパンチカードの時代になるな
428 名前:仕様書無しさん mailto:sage [2007/05/21(月) 08:33:23 ] コーディング用紙に書いてパンチャーに渡す そんな時代もあ〜ったねと〜♪
429 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/21(月) 10:31:15 ] 昔から一行おき/二行おきに書く人はいたけどねw
431 名前:仕様書無しさん [2007/05/21(月) 10:46:14 ] コメント行を機械的に取り除いた跡かもしれない。 …UpdateWindowに何行コメント書いてたんだyp!
432 名前:仕様書無しさん mailto:sage [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 名前:仕様書無しさん mailto:sage [2007/05/21(月) 10:58:58 ] あ、>432の一番下のElseは無しね。
434 名前:仕様書無しさん [2007/05/21(月) 12:38:48 ] >>432 とても見やすいコードダネ
435 名前:仕様書無しさん mailto:sage [2007/05/21(月) 13:56:54 ] >>427 >パンチカードの時代になるな 紙テープもお忘れなく。 ソースの修正ツールはハサミとノリだ。
436 名前:仕様書無しさん mailto:sage [2007/05/21(月) 14:06:17 ] >>435 磁気テープもお忘れなく。 修正ツールはユーティリティ起動とそれに対するバッチスクリプトを含むJCLだ。
437 名前:仕様書無しさん mailto:sage [2007/05/21(月) 14:26:36 ] 宇宙戦艦ヤマトの記憶媒体は磁気テープだぞ!
438 名前:仕様書無しさん mailto:sage [2007/05/21(月) 14:39:23 ] jspとjavascriptでコードが汚いのは最悪だ、、、
439 名前:仕様書無しさん mailto:sage [2007/05/21(月) 16:58:08 ] 紙テープを目視で読んで東京湾に出現した怪獣を特定する。
440 名前:仕様書無しさん mailto:sage [2007/05/21(月) 20:06:28 ] JSPとかJavaScriptが汚いのはもうしょうがないよ。 あれはそういう人力で何とかしましょう、っていうアーキテクチャだと思う。 さっさと諦めて他人に押し付けた方がいい。