ぱっと見て「ヘタだなぁ」と思うコード その5

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
禁止ネタ(超既出)
・長い関数
・深いネスト
・グローバル変数
・goto
・memset
・malloc - free
・局所ブロック
・サンプルコードのtypo
・記述スタイル
・関数・変数名

過去スレ
その4: http://pc8.2ch.net/test/read.cgi/tech/1153312202/
その3: http://pc8.2ch.net/test/read.cgi/tech/1149986051/
その2: http://pc8.2ch.net/test/read.cgi/tech/1142741989/
初代 : http://pc8.2ch.net/test/read.cgi/tech/1141867015/
2デフォルトの名無しさん:2006/08/12(土) 02:00:16
まだやんの?
31:2006/08/12(土) 02:01:37
Cネタはもう枯渇気味なので、他言語ネタ求む。
4デフォルトの名無しさん:2006/08/12(土) 02:27:23
Perlとか、上手い下手以前に手馴れた奴が書いたコードは解読不能
5デフォルトの名無しさん:2006/08/12(土) 02:38:17
某スレより。
perl -e 'print $_[int(rand(@_ = <>))]' hoge.txt
たったこれだけで、吐き気がする。
6デフォルトの名無しさん:2006/08/12(土) 02:39:42
AAにしか見えないなw
71:2006/08/12(土) 02:45:27
Perlの解読不能ネタはさんざん既出なんですが・・・

このスレ的には新しいので、どうぞお続けください。
8デフォルトの名無しさん:2006/08/12(土) 02:53:35
そうさせていただきます
9デフォルトの名無しさん:2006/08/12(土) 03:09:29
perlのrandってsrandしないでいいんだなぁ
10デフォルトの名無しさん:2006/08/12(土) 04:18:23
java で

// double-checked locking を使う

とか自信満々にコメントされたエセ singleton に遭遇した時。
11デフォルトの名無しさん:2006/08/12(土) 06:48:16
>>10
というか、そもそもdouble-checked lockingってJavaで上手く動かないから論外だよな。
http://www-06.ibm.com/jp/developerworks/java/020726/j_j-dcl.html
12デフォルトの名無しさん:2006/08/12(土) 07:30:30
前スレとはうって変わって、為になりそうな予感
13デフォルトの名無しさん:2006/08/12(土) 07:59:14
>>5
どうみても上手い下手の問題ではないので却下。
sedやawkで修行してくればPerlは天国に見えるよ
14デフォルトの名無しさん:2006/08/12(土) 08:15:37
VC++ で ExcelのタイプライブラリのC++ヘッダファイルを自動生成したら、ロクにビルドを通らないシロモノだった件。
15デフォルトの名無しさん:2006/08/12(土) 09:47:10
>>5
それ、intは無くてもいいな。
perl -e 'print $_[rand(@_=<>)]' hoge.txt

まあ、「不必要なものが付いてる」と、「可読性を考えずに削る」、
どちらが『ぱっと見ヘタ』かは判らないけど。
16デフォルトの名無しさん:2006/08/12(土) 10:43:24 BE:49923252-2BP(200)
>>1 基本的なネタを延々とやることにこのスレの意義があるのに。。。
17デフォルトの名無しさん:2006/08/12(土) 11:31:37
>>14
それは、バグとか仕様不良の類なので、スレ違い。
18デフォルトの名無しさん:2006/08/12(土) 12:02:45
>>11
ぱっとみてアホレスですな。

10はdouble-checked lockingはダメ解法と踏まえた上でレスしてるのは明白なんだから
お前の「というか」とか意味不明すぎる。

何が"というか"だよ。
知識披露厨乙。
19デフォルトの名無しさん:2006/08/12(土) 12:06:03
> ・局所ブロック
局所ブロックって、if とか for とか while なしで、{ } でブロック作るやつのこと?
20まあ、釣られた俺もなぁ〜。(w:2006/08/12(土) 13:20:30
お前が >>10 でないなら、「明白」なんてことは言えない。

お前が >>10 なら、double-checked locking はヘタとか言う
以前の話でスレ違い。

どちらにせよ、>>18 のレスは「ヘタな煽り」にしか見えない。
21デフォルトの名無しさん:2006/08/12(土) 13:22:07
結論:オレサマイガイ ミンナ ヘタクソ
22デフォルトの名無しさん:2006/08/12(土) 13:25:19
>>20
明白だってこともわからんアホですか。
しかもスレ違いと思ったけどレスしましたってアホですか。

ホントお前アホだなぁ…。
23デフォルトの名無しさん:2006/08/12(土) 14:22:39
明日でも昨日でもいいじゃんかよ!
24デフォルトの名無しさん:2006/08/12(土) 14:46:53
>>22
ププッ、顔真っ赤だぞ オ・マ・エ (w
25デフォルトの名無しさん:2006/08/12(土) 14:52:06
ここはいいモヒカン族の養殖場ですね
26デフォルトの名無しさん:2006/08/12(土) 15:55:13
>>24
アホの典型的負け犬の遠吠えレス乙
言い返せなくなるとソレだよな。
27デフォルトの名無しさん:2006/08/12(土) 16:18:06
int Gethoge {
  if(hoge=TRUE){return 1;}
  return 0;
}
28デフォルトの名無しさん:2006/08/12(土) 18:01:15
変数宣言時にとりあえずnewしてるのは嫌いだ。
29デフォルトの名無しさん:2006/08/12(土) 18:04:56 BE:359446098-2BP(201)
ふつー宣言と同時にnew
30デフォルトの名無しさん:2006/08/12(土) 18:09:15
BEのキチガイがまたいるな・・・
31デフォルトの名無しさん:2006/08/12(土) 18:18:21
JavaやC++で関数定義の頭に宣言が固まってるコードは頭が悪いと思う。
32デフォルトの名無しさん:2006/08/12(土) 18:31:46
> 28
> 31
使う箇所で宣言すりゃ普通その場でnewじゃね?
33デフォルトの名無しさん:2006/08/12(土) 18:36:36
>>14
Officeのタイプライブラリなどを同時にインポートすればよいだけ。

ただたしかに、
「"xxx.h"をインクルードする前に"yyy.h"をインクルードする必要があります」
ということとと同じことだから、下手といえば下手。
34デフォルトの名無しさん:2006/08/12(土) 18:41:49 BE:359446289-2BP(201)
>>31
>>32
そうだよな。
使う直前に宣言して、その場でnew。

関数の先頭でまとめて宣言してるのが行儀いいって思ってるアホとかたまに見るな。
35デフォルトの名無しさん:2006/08/12(土) 19:09:14
>>26
何を言い返す必要があるんだろう…。

どうやら、>>11>>10 の唯一の自慢に触れてしまったみたいだな。(w

>>34
> 関数の先頭でまとめて宣言してるのが行儀いいって思ってるアホとか
> たまに見るな。

昔の流儀が抜けないだけだろ。
36デフォルトの名無しさん:2006/08/12(土) 19:11:18
今でも入門書にK&R勧めてるのを見かけたりするもんなー
正直、正気を疑うところだが
37デフォルトの名無しさん:2006/08/12(土) 19:14:51
>>32
気になるのは
Child c = new Child();
c = parents.getChild();
というような記述。
38デフォルトの名無しさん:2006/08/12(土) 19:21:33
使いまわしの話か?
39デフォルトの名無しさん:2006/08/12(土) 19:31:38
想像だけど。

使い回してるんじゃなくて、宣言時にアサインしたnew Child()は結局使っても
いないんだろう。ところが、ブロック開始時に宣言する習慣が抜けず、なおかつ
宣言したらその場で初期化すべし、という金科玉条を守るために使いもしないオ
ブジェクトを割り当ててる。
40デフォルトの名無しさん:2006/08/12(土) 19:34:24
それは下手どころか間違ってんじゃねーか
初学者とかならさておき、そんなコードを恒常的に書く奴いんのか?
41デフォルトの名無しさん:2006/08/12(土) 19:54:46
CやPascalみたいに使う変数が固まってくれてる方が個人的には読みやすい

Option Explicitがついてない上に、include先のグローバル変数、
それも「strPath」みたいなごく普通の名前のグルーバル変数が
縦横無尽に飛び交っている。そんなVBSが今まで読んだ中でも最凶のコード
42デフォルトの名無しさん:2006/08/12(土) 20:02:40 BE:174730875-2BP(201)
>>41
>CやPascalみたいに使う変数が固まってくれてる方が個人的には読みやすい 

COBOLみたいに、プログラムの先頭で全部宣言してあれば最強ってことか。
43デフォルトの名無しさん:2006/08/12(土) 20:02:44
>>40
間違ってるかどうかはともかく、問題が起きるとは限らないんだな。
だからブロック開始部分に限らず結構見かけるね。
44デフォルトの名無しさん:2006/08/12(土) 20:20:04
金科玉条を守るためなら
とりあえず null で初期化すれば良いような。
45デフォルトの名無しさん:2006/08/12(土) 20:21:42
最近どこかの質問スレで見かけたよ。
Class1 class1 = new Class1();
class1 = oldclass1;

Class1 class1 = oldclass1;
って何か違うんですか、どっち使うべきですか、って感じだった
46デフォルトの名無しさん:2006/08/12(土) 20:27:54
>>35
何にも言い返す必要が無い癖に

> ププッ、顔真っ赤だぞ オ・マ・エ (w

とレスしたのか?
口を開けば矛盾が出るな。どこまでアホなの?
47デフォルトの名無しさん:2006/08/12(土) 20:28:18
Class1のコンストラクタにある副作用が
必要なら上、そうでなければ下。
48デフォルトの名無しさん:2006/08/12(土) 20:35:46
>>47
そんな副作用が必要だったらそれはそれで下手だ
49デフォルトの名無しさん:2006/08/12(土) 20:39:12
18,22,24,26,35,46 をスルー。
キーワードはアホと行末の(wです。
50デフォルトの名無しさん:2006/08/12(土) 21:43:55
>>44
それにすら気づかないから、下手なコードなんだろう。
51デフォルトの名無しさん:2006/08/12(土) 22:51:50
>>46
どこが矛盾してるんだろうか…。

>>22 があまりにも必死に見えただけなんだけど。

もしかして日本語もあまり得意じゃないのかな? (w
52デフォルトの名無しさん:2006/08/12(土) 23:16:19
もうすぐお盆なんだからそんなことで煽りあってると
ご先祖様に叱られるぞ
53デフォルトの名無しさん:2006/08/12(土) 23:17:31
腹抱えて笑ってるだろうな無様さを
54デフォルトの名無しさん:2006/08/13(日) 00:39:17
>>11
そういう趣旨だろ、>>10は。
55デフォルトの名無しさん:2006/08/13(日) 00:41:55
>>48
それこそ、下手というより間違ってるな、だな。
56デフォルトの名無しさん:2006/08/13(日) 01:07:45
>>45
つ *
57デフォルトの名無しさん:2006/08/13(日) 01:12:57
いや、君の肛門さしだされても……
58デフォルトの名無しさん:2006/08/13(日) 08:55:32
僕の肛門も無限ループしそうです
59デフォルトの名無しさん:2006/08/14(月) 09:05:58
printf(hogestring);

こういうコードを見た時。脱力する
60デフォルトの名無しさん:2006/08/14(月) 10:25:00
>>59
勝手に脱力してろ、アホ
61デフォルトの名無しさん:2006/08/14(月) 10:39:19
俺は脱毛した。
62デフォルトの名無しさん:2006/08/14(月) 10:40:10
数日前、auの端末でそれ系のバグがあって話題になってたね。
63デフォルトの名無しさん:2006/08/17(木) 11:39:26
単発コメントはゴミ以下。プログラム全体を奏でる壮大なシンフォニーであってほしい。
64デフォルトの名無しさん:2006/08/17(木) 12:40:14
do_something(foo);
do_something(foo); // 何故か二回呼ばないと駄目
65デフォルトの名無しさん:2006/08/17(木) 16:41:55
int kesuna[4000];
↑このkesunaは何処からも参照されてないのに
消したら本当に実行時エラーが発生して噴いた。
そんなヘタなコード。(実話)
何でだ?
66デフォルトの名無しさん:2006/08/17(木) 16:51:06
おそらく、ローカルに作った配列で範囲はみ出してスタック書きつぶしてるんだろ。
kesunaがあるとそこを書きつぶすので実害にならない。
67デフォルトの名無しさん:2006/08/17(木) 16:55:39
なるほど〜
68デフォルトの名無しさん:2006/08/17(木) 16:59:31
感心している場合じゃないぞw
こわいコードだな。
69デフォルトの名無しさん:2006/08/17(木) 17:01:38
>>65
それってあれだよね。
VCとかだったらデバッガモードでは動いてたけど
リリースモードにしたら動かなくなったみたいなパターンだね。
70デフォルトの名無しさん:2006/08/17(木) 17:44:27 BE:99846645-2BP(201)
決まったタイミングで実行時エラーが出るなら、潰しやすいバグだと思うが。
71デフォルトの名無しさん:2006/08/17(木) 17:55:42
下手とバグは分けましょう。
72デフォルトの名無しさん:2006/08/17(木) 18:33:28
retrun answer + 1;   // なぜか1少ないので1足して戻す
73デフォルトの名無しさん:2006/08/17(木) 18:35:45
// 100未満のときに、なぜか1少ないということがわかったので、そのときだけ1足して戻す
if (answer < 100) {
  return answer + 1;
} else {
  return answer;
}
74デフォルトの名無しさん:2006/08/17(木) 18:37:23
// 100〜1000のときだけ、正しい値になることがわかったので、
// それ以外は1足してもどす
if (answer >= 100 && answer <= 1000) {
  return answer;
} else {
  return answer + 1;
}
75デフォルトの名無しさん:2006/08/17(木) 18:37:58
// テストの結果、10,000以上のときも・・・

泥縄
76デフォルトの名無しさん:2006/08/17(木) 18:43:11
>>72
あるある。
77デフォルトの名無しさん:2006/08/17(木) 18:44:55
// free(p);   // ここでfreeすると何故だか落ちるのでコメントアウト
78デフォルトの名無しさん:2006/08/17(木) 18:46:03
「なぜか」「なぜだか」がキーワードですなw
79デフォルトの名無しさん:2006/08/17(木) 21:38:38
80デフォルトの名無しさん:2006/08/17(木) 21:51:07
いや、バグ対処の仕方が激しく間違ってるんだろ。
81デフォルトの名無しさん:2006/08/17(木) 22:29:37
ヘタなデバッグのやり方を披露するスレじゃないだろ。
82デフォルトの名無しさん:2006/08/17(木) 22:31:16
ネタ切れなんだから、なんでもいいじゃn
83デフォルトの名無しさん:2006/08/17(木) 23:45:29
普通に考えたら、上手に書けてんのにバグってるなんて珍妙な事態は無いはずだしなー。
そう思うと結構難しいな、このスレ。
84デフォルトの名無しさん:2006/08/17(木) 23:56:27 BE:209677076-2BP(201)
ネットでちょっと探したら、ゴロゴロころがってるけど。 > へたなコード
85デフォルトの名無しさん:2006/08/17(木) 23:59:08
じゃ見つけて貼ってくれよ
86デフォルトの名無しさん:2006/08/17(木) 23:59:35 BE:124808055-2BP(201)
こんなのとか。

http://www.tcp-ip.or.jp/~ikken/cpp/txt/r10.C.txt

>/* [参考] 推奨する方法
>class Foo {           
>    int i ;                   
>...
>    const int& get2() { return i ; }    リタ−ンで返す場合
87デフォルトの名無しさん:2006/08/18(金) 00:02:45
>>86
どこがどう下手なのか書きましょう。
88デフォルトの名無しさん:2006/08/18(金) 00:04:44 BE:89862236-2BP(201)
>>87
ぱっとみて分かるようになりましょう。
89デフォルトの名無しさん:2006/08/18(金) 00:06:07
>>86
最初につっこむのはむしろここじゃね?
>#include<iostream.h>
>....
>void main()
90デフォルトの名無しさん:2006/08/18(金) 00:07:29
>>86
つか、そのサイト、古いしむちゃくちゃなので、いまさら感がある
91デフォルトの名無しさん:2006/08/18(金) 00:08:08
関係ないが/* */うぜー
92デフォルトの名無しさん:2006/08/18(金) 00:15:25
>>88
ぱっとみても分かりません。説明してください。
93デフォルトの名無しさん:2006/08/18(金) 00:26:30
突込みどころがいろいろあるだけに、まずどこに対して突っ込むのが正解かわからないな。
94デフォルトの名無しさん:2006/08/18(金) 00:28:38
intの参照を返すって辺りか
95デフォルトの名無しさん:2006/08/18(金) 00:34:53
constの参照返しといて自分がconst関数じゃないあたりとかもか
96デフォルトの名無しさん:2006/08/18(金) 00:47:05 BE:89862236-2BP(201)
>>94
あと、クラス内部への参照を外に渡してるってのも。
97デフォルトの名無しさん:2006/08/18(金) 00:52:25
>クラス内部への参照を外に渡してる

いつでも許される類のもんじゃ無いにせよ、それ自体は別に有りだろ。
一応const憑いてるしな。
98デフォルトの名無しさん:2006/08/18(金) 03:39:11
このサイト、1999年だか2000年だかに作られた古いページだから。
当時このページ見つけたとき、その時でもなんじゃこりゃ感はあったw

内容が書き換わってるのか書き換わってないのか知らないけど、
一番の「下手」は、作成日時と更新日時を各ページに載せてないとこだな。
99デフォルトの名無しさん:2006/08/18(金) 03:46:13
思ってたより新しいな。
100デフォルトの名無しさん:2006/08/18(金) 10:19:15 BE:49923825-2BP(201)
〉97
いや、ほとんどの場合、無しだろ。
const付きでも。
101デフォルトの名無しさん:2006/08/18(金) 10:29:11
>>100
ほとんどの場合ということは、例外もあるということですよね。
どのような例外ケースがあるのでしょうか?
102デフォルトの名無しさん:2006/08/18(金) 10:43:55
古いサイトは古いままのが多いよな
103デフォルトの名無しさん:2006/08/18(金) 14:18:43
昔のサイトは古いよな〜
びっくりだぜ
それに比べて最近のは先進的だね。
サイコー
104デフォルトの名無しさん:2006/08/18(金) 21:10:12 BE:279569287-2BP(201)
http://www.nmn.jp/~hidai/c/#s3
これなんか10年も前だな。
105デフォルトの名無しさん:2006/08/18(金) 21:43:45
>>104
どこがどう下手なのか書きましょう。
106デフォルトの名無しさん:2006/08/18(金) 21:49:06
誰も下手だとは言ってないだろ。
107デフォルトの名無しさん:2006/08/18(金) 21:51:33
>>106
リンク先読むとこだったじゃないか、ボケ
108デフォルトの名無しさん:2006/08/18(金) 22:22:24 BE:199692858-2BP(201)
http://next1.cc.it-hiroshima.ac.jp/c/introC.htm

サンプルのインデントがメチャクチャ。
なんでかなと思ってソースを見てみたら、wordで出力したhtmlだった。
109デフォルトの名無しさん:2006/08/18(金) 22:32:22
どんどん下手なコードから遠ざかっていくなぁ
110デフォルトの名無しさん:2006/08/18(金) 22:39:55
宗教論争は盛り上がるんだけど
非難一辺倒なコードはヘタ以前に
致命的な間違い犯してる場合が殆どやしねえ。
111デフォルトの名無しさん:2006/08/18(金) 22:41:19 BE:314515679-2BP(201)
じゃ、109が酒の肴になるようなヘタなコードを披露するってことで。
112デフォルトの名無しさん:2006/08/18(金) 22:42:14
いや俺酒飲まないし
113デフォルトの名無しさん:2006/08/18(金) 22:50:06
昔書いたソース見てくるよ。
114デフォルトの名無しさん:2006/08/18(金) 23:09:10
//test = hoge1(hage〜moge);
//test = hoge2(moge〜hage);
test = hoge3(hage〜hage);
//test = hoge4(moge〜moge);



コメントアウトが残ってる事自体は別として
何が悪くて何がしたくて何が良くてhoge3を残したのか
hoge1~4の先を全部読むまで全くわからんし
そうじゃなくても可読性低下させるだけの古い
糞コードを糞しつこく糞こびり付かせてると吐き気がする。

しかも古いコードはコメントアウトして残しておくようにとか指示する糞野郎の下だと
糞がぼとぼと降り注ぐ中で自分も糞を生産するという地獄絵図だよな
115デフォルトの名無しさん:2006/08/18(金) 23:27:35
古いコード・・歳を取ってしまった自分
残しておけ・・俺を捨てないでくれ

というメタファーに気がつけ。


まぁそれはともかく。
マジックナンバー満載の素敵コードのおかげで
徹夜のデバッグを余儀なくされると殺意沸くよね。
ヘタとか以前に死ねと思うコード。
116113:2006/08/18(金) 23:33:19
さらーっと眺めてきた。
下手は下手だけど、思ったほど酷くない気がした。もっと下手なのみたことあるし。

いろんな文字列定数がハードコーディングされてて、後から弄りづらそう(VB)。
「エラー '55' 対策」 とかコメント書いてるけど、何のエラーなのか分からん(VB)。
まるっきり手続き型言語みたいな書きかた(VB)。
ほとんどグローバル変数(Perl)。
探せばライブラリがいくらでもありそうなのを、頑張って車輪の再開発してる(Perl)。
GUIの処理が随分奥深いとこまで食い込んでる(Delphi)。
ビットフィールドの解析を配列読み込んで1byteずつしこしこ処理してる(Delphi)。
一行に纏めすぎ。if pbuf = nil then begin BlockRead(fh, buf, 512, AmtTransferred); pbuf := @buf; end;
200行くらいの、ほとんど同じ処理の関数が3つもある(計画性なく拡張したせいなのだが)。
117デフォルトの名無しさん:2006/08/19(土) 00:15:48
>>115
殺人コードだな
118デフォルトの名無しさん:2006/08/21(月) 21:55:00
某スレで汚いといわれたんで修正したんですが、まだ自身がないのでみてください。
ttp://up2.viploader.net/mini/src/viploader62689.zip
119デフォルトの名無しさん:2006/08/21(月) 22:22:01
過疎板で回転の速いうpろだにあげちゃだめって何度も言ったのに…。
120デフォルトの名無しさん:2006/08/21(月) 22:28:41
>>118
気になったところ。

using namespace std; <-思わぬところで衝突するかも
if文             <-必ず括弧を付けよう
fin.close();         <-勝手にやってくれるから書くだけ無駄
121デフォルトの名無しさん:2006/08/21(月) 22:40:40
>>118
クラス名や変数名を見ても目的がわかりづらい。aとかbとか使うな。
何も書かれていないmain.hやgetメソッドの存在意義がわからん。
ヘッダが無いと動かないってわけでもないし
set書いたらgetも書かなきゃいけないというわけでもない。
122デフォルトの名無しさん:2006/08/21(月) 23:12:53 BE:19969722-2BP(201)
>>118

>if(b)
>   b = 0;
>else
>   b = 1;

boolにはtrueとfalseを入れればいいじゃん。
値の反転はこうで。
b = !b;

123デフォルトの名無しさん:2006/08/22(火) 00:30:27
>>118
重要なのにコメント化
124デフォルトの名無しさん:2006/08/22(火) 00:32:04
> bool b(0);

boolにもコンストラクタってあったの? 知らなかった...
いつも
bool b = false;
と書いてました。

125デフォルトの名無しさん:2006/08/22(火) 00:58:35
bool(0)は関数形式のキャスト演算子では?
126デフォルトの名無しさん:2006/08/22(火) 01:18:13
>>124
C++では、そのように組み込み型のオブジェクトもコンストラクタ引数を指定するのと同じ構文で初期化できる。
127デフォルトの名無しさん:2006/08/22(火) 01:23:30
見たことないの関数やらクラスがあるが必要もなさそう
C言語の関数?それとも昔の表記方法?wは全部不要じゃん?
wstring
wifstream
wcout
imbue
locale
128デフォルトの名無しさん:2006/08/22(火) 01:24:05
locale("japanese")よりlocale("")の方が良いと思う。
あと0x0D, 0x0Aではなく'\r', '\n'にしろ。(それでは良くない環境ならせめて'\x0a', '\x0d')
129デフォルトの名無しさん:2006/08/22(火) 01:25:42
ここで指摘の多い様な、ぱっと見の下手なコードって
C++に集中してる気がするのは気のせいか?

適当に書いても適当に通っちまったり、オペレーターオーバーロードとかで
出鱈目やってもコンパイラ的には全然OKだったり、無法がまかり通るからなのかな…
130デフォルトの名無しさん:2006/08/22(火) 01:48:28
Hoge::Hoge()
{
 this->isFuga = true;
}

よりも

Hoge:Hoge()
: this->isFuga(true)
{
}

が望ましい。
131デフォルトの名無しさん:2006/08/22(火) 02:02:27
なんで?プリミティブななんとかが関係有る?
132デフォルトの名無しさん:2006/08/22(火) 02:05:00
それ以前に何故にthisを明記するか。
voidは省略してやがる癖に。
133デフォルトの名無しさん:2006/08/22(火) 02:07:57
>>131
コンストラクタ本体での設定は、初期化じゃなくて代入になる。
constメンバとか、参照メンバはこの方法じゃないと初期化できない。
134デフォルトの名無しさん:2006/08/22(火) 02:14:04
>>133
まあ、普通に常識ではあるよな。
正直なところ基本型についてはどっちでやってもええやんとは思うが。
二重コンストラクタとか用意した方が取り回しの便利なクラスとかだと、
わざわざ無駄になる初期化部分を書くのが面倒ちい。

class Hage
{
int hige;
public:
Hage() { init(); }
void init() { hage = 0; }
};

とか。
135デフォルトの名無しさん:2006/08/22(火) 05:08:27
>>129
コードがキレイかどうかを気にするのがC++プログラマに多いからじゃね?
136118:2006/08/22(火) 08:53:29
>>120
わかりました、そうします。

>>121
まだちょっと実装不足です。

>>122
それがありました・・・orz

>>123
あれは実験コードで・・・今のもだけど

>>125
できるらしいです、Effective c++より

>>127
stringをマルチバイトでgetコマンドすると一バイトずつ読みバケるんで、
自分で処理するのにも自信ないのでc++のマルチバイト処理関数使ってます。
ちゃんと解説してる本やサイトなくてつらかった・・・

>>128
そういう方法で処理します。(enumハックでするとどうなるんだろう)

次にテンプレート化して提出します。え、そういうスレじゃない?
137デフォルトの名無しさん:2006/08/22(火) 11:30:10
Effective C++なんて読むレベルの奴がこんな指摘されるはず無いのだが
138デフォルトの名無しさん:2006/08/22(火) 14:24:07
うーん、いや実際に読んでるよ。読むだけ
139デフォルトの名無しさん:2006/08/23(水) 01:36:00
MoreEffectiveもデザパタも読んでモヒカン入門した俺の頭のテカリ具合を見てくれ。
こいつをどう思う?
140デフォルトの名無しさん:2006/08/23(水) 02:36:46
すごく…氏ね…
141デフォルトの名無しさん:2006/08/23(水) 07:19:15
TYPOしたままやけくそで全部そのままTYPO名使ってるコード。
つーか置換しろよ…
142デフォルトの名無しさん:2006/08/23(水) 08:54:23
検索する時困るんだよな。
確か stopFlag だったよなーと思って探しても見つからず途方にくれる。
実は stopFlug でした、とか。そりゃみつからねーや。
143デフォルトの名無しさん:2006/08/23(水) 10:49:14
普通は見つからなかったらtypoだと思い"stop"で検索かける。
144デフォルトの名無しさん:2006/08/23(水) 13:12:29
stapFlugだったりとか。

ちょっと長めの名前だと、補完使ったりコピペするので、
TYPOにしばらく気づかないことが多いな。
145デフォルトの名無しさん:2006/08/23(水) 13:23:18
気付いたときには手遅れだったり。
146デフォルトの名無しさん:2006/08/23(水) 13:25:49
typoはtypeのtypoだ、とまことしやかに説明している人がいた。
147デフォルトの名無しさん:2006/08/23(水) 13:34:16
これまたリカーシブですね
148デフォルトの名無しさん:2006/08/23(水) 20:46:08
一応クラスでは作り終わった?評価よろしくお願いいたします

ttp://maidx.net/public_html/url.cgi?url=http://web.maidx.net/up/maru_077.zip&a=0
149デフォルトの名無しさん:2006/08/23(水) 20:46:52
typoってどーゆーいみ?
150デフォルトの名無しさん:2006/08/23(水) 20:52:07 BE:59908526-2BP(201)
昔fj見てたとき、なんでふつーに日本語で書かないんだろって思ってたよ > typo
151デフォルトの名無しさん:2006/08/23(水) 21:15:11
typographical error
152デフォルトの名無しさん:2006/08/23(水) 21:17:06
>>148

・識別子が全部小文字で非常に見づらい。
単語の区切りが明確になるようにアンダーバーを入れれ。
ローカル変数も然り。

・getdateinputinfってのが何なのかさっぱりわからんけど適切な命名ではないと思う。

・getstreamopenでなくてis_stream_open。
名前だけ見ると別の意味になる。

・コメントがなさすぎ。命名の微妙さとあいまって何をやってるコードなのかさっぱりわからん。
153デフォルトの名無しさん:2006/08/23(水) 21:28:33
>>148
Error #503
Service Unavailable
BoostWeb BW4.2.16.1 Feb 24 2003 at bw03
154デフォルトの名無しさん:2006/08/23(水) 22:50:17 BE:404376899-2BP(201)
>>148
>if(b){
>   value += a;
>}else{
>   value += a;
>}

これはバグ?
155デフォルトの名無しさん:2006/08/24(木) 12:28:27
>>152
クラス名・変数名に迷ったら書き込むスレ。Part8
http://pc8.2ch.net/test/read.cgi/tech/1154448184/
ちょっと、行っています

>>153
即行消されたのか・・・

>>154
消し忘れです

一応やってみました
ttp://up2.viploader.net/mini/src/viploader63439.zip
バグありでファイルを開いてインプットした後
閉じてもう一回読んだときファイルストリームができない・・・なぜ?
156デフォルトの名無しさん:2006/08/25(金) 01:10:43
>ファイルをとじらせるバグってる
日本語でOK。
157デフォルトの名無しさん:2006/08/28(月) 01:53:12
開発で見かけた、T芝のコード。
関数の途中で数箇所return的な処理をする代わりにgoto使ってる。

void xxx()
{
:
if( ... )
{
goto END;
}

switdh( ... )
{
case xxx:
goto END;
:
}

END:
return;
}

・・・こういう目的限定なら使ってもいいのか?俺は使わないが。
158デフォルトの名無しさん:2006/08/28(月) 02:09:36
その例なら 普通に return した方が良い。

ただ、エラー処理が混じる場合は
goto を使った方がエレガントに書けるので
積極的に使えば良いという人も少なからずいる。
(goto排除原理主義者はこれを認めない。)
159デフォルトの名無しさん:2006/08/28(月) 03:26:26
別に下手でも何でもないような。
まあ、行数多い中でやってるなら、分けろよとは思うかもしれないけど。

goto排他原理主義者って、なんであんなに頑ななんだろうね。
どう見ても使った方がいいだろって状況でも
grepかけて突きつけてきたりするもんなー。

多重ループん中から抜ける時とか、同じ条件のifだだ並べにしてる方が
三億倍はキモいと思うんだが、何がそこまで彼らの憎しみを駆り立てるのか。
160デフォルトの名無しさん:2006/08/28(月) 04:27:43
なんでも極端にやるのはダメだよねぇ…
以前“短い関数”原理主義者を見かけたよ。
3行関数を大量生産したらかえって読みにくい。
161デフォルトの名無しさん:2006/08/28(月) 05:52:50
C言語ならありかもしれないな。

C++では例外やアルゴリズムやオーバーロードがあるから
gotoは完全にいらない子だけどね。
162デフォルトの名無しさん:2006/08/28(月) 06:42:02
アルゴリズムもオーバーロードも関係ないと思われ。
例外は確かにあるが、多重ループから抜けるのなんかに使ってたら、それこそヘタなコードだろ。
場合によっちゃJavaでだってバカにされるわ。

C++の例外は、そもそもデストラクション絡みの負荷がデカすぎて
使用を呑めない場合すらあるしなー。
Cで許されるのと同程度の使い方なら、C++で使ってたって何の問題もないと思うんだが。
163デフォルトの名無しさん:2006/08/28(月) 07:09:16
アルゴリズム類の適用で多重ループ自体の出番を減らせられるのは分かるが、
なんでもかんでもそれで書いてたら、それはそれで馬鹿なコードだな

case文のラベル名指しで飛んでるようなコードは流石に有害指定してもいいとは思うが、
ぱっと見すぐわかる範囲で簡潔に使われてる程度で目くじら立てるのは…
164デフォルトの名無しさん:2006/08/28(月) 13:10:51
よくあるのは、
:
:
return TRUE;
/* ↑ここまで正常系処理 */
error:
if (hoge) { hogeのリソースを解放; }
if (fuga) { fugaのリソースを解放; }
return ERROR;

みたいなやつ。hoge/fuga/...は一連の処理の最初にNULLで初期化しておく。

途中で処理が失敗したとき、どのリソースが割り当てずみかを気にせず、
末尾に飛べばいい。
165デフォルトの名無しさん:2006/08/28(月) 13:11:41
TRUE/ERRORってのは変な組み合わせだな。てきとーに読み替えplz
166デフォルトの名無しさん:2006/08/28(月) 14:16:05
>C++では例外やアルゴリズムやオーバーロードがあるから
なぜここにアルゴリズムが混じりますか??
167デフォルトの名無しさん:2006/08/28(月) 14:35:00
>>160
> 以前“短い関数”原理主義者を見かけたよ。

Kent Beckのことですね。
168デフォルトの名無しさん:2006/08/28(月) 14:47:44
>>164

正常系のリソース解放を一緒にすると下のようになるんだろうが、なんか微妙
なようなそうでないような。

result = SUCCESS;
goto end;
/* ↑ここまで正常系処理 */
error:
result = FAILURE;

end:
if (...)
if (...)
return result;
169デフォルトの名無しさん:2006/08/28(月) 20:30:04
>>162
なんでそんな例外を忌み嫌うのかよくわからん。

頭固いんじゃないの?
170デフォルトの名無しさん:2006/08/28(月) 23:10:24
>>162
> C++の例外は、そもそもデストラクション絡みの負荷がデカすぎて
必要なことをしているだけじゃないの?
例外を使わなくたって、デストラクタを呼ぶ必要がなくなるわけじゃないでしょ?

正常系の場合に(結果的に)無駄となることをする場合もあるけど、
例外を使うことによるメリットを考えれば普通は我慢できるはずだけど。
171デフォルトの名無しさん:2006/08/28(月) 23:10:48
>>169
え?多重ループから抜け出すのに例外使うの?

下手だなー。
172デフォルトの名無しさん:2006/08/28(月) 23:54:37
>>170
C++の例外処理は相当重たい処理だよ。
だからこそ例外を使わないというコンパイルオプションがあるくらいなのに。
173デフォルトの名無しさん:2006/08/29(火) 00:26:04
>>168
頻出なイディオムなのに簡潔に書けないもんだから
C++やその他の言語で try-catch が生まれたって流れなんでしょうね。
たまに C++ で書く時は finally 使えなくてムズムズする。
きちんとデストラクタ書けって話なんだけど。
174デフォルトの名無しさん:2006/08/29(火) 01:03:40
>>167
Kent Beckに限らず、Smalltalkerはn行を超えるメソッド(関数)が
ポコポコ出来るなんて信じられない、という発言を真顔でするね。
175デフォルトの名無しさん:2006/08/29(火) 03:48:20
多重ループじゃなくてイテレーションなら一発で抜けられるのにな
176デフォルトの名無しさん:2006/08/29(火) 04:57:44
goto信者が暴れていたようだな。
そんなに早さを求めたいのならC++なんて使うな。
177デフォルトの名無しさん:2006/08/29(火) 05:05:42
C++ではデストラクタ以外にリソース解放コードを書いてはいけない
よってgotoはいらない
逆にスコープアウト時の処理が書けないレガシーな言語には必要。
Javaはgotoがないのでご覧のとおり悲惨なことになっている
178デフォルトの名無しさん:2006/08/29(火) 08:51:11
ループを脱けるために例外を使うなんて、意味論的にも変だっつーの。

ところで、
LABEL:
 for(〜) {
  for(〜) {
   if (〜) break LABEL;
  }
 }

で、外側のforまで一気に break してくれる構文のある言語があったような木がするんだけど、なんだっけ?
179デフォルトの名無しさん:2006/08/29(火) 10:01:15
ラベル付きbreakはJavaにはあるな。C♯は goto ラベルか。
Perlだとbreakじゃなくてlastだが、これもラベルがつけられる。

Rubyだと
catch(:identifier) do
throw :identifier
end
と書く。 # これは例外処理ではない。
180デフォルトの名無しさん:2006/08/29(火) 10:02:43
D言語の言語仕様にはあったが実際どう動くかわからない
181デフォルトの名無しさん:2006/08/29(火) 17:12:25
>>177
関数内のある処理のために確保した一時メモリ領域とかもデストラクタで解放するの?
C♯のfinally構文に慣れたせいかいまいち理解できない。
具体的にどう書くの?

182デフォルトの名無しさん:2006/08/29(火) 18:00:12
>>181
つ std::auto_ptr
auto_ptrは腐ってるという意見もあるようだが。
183デフォルトの名無しさん:2006/08/29(火) 18:10:39
phpは break n; でn段のネストから抜ける
184デフォルトの名無しさん:2006/08/29(火) 18:20:49
「n段」ってのがPHPらしい仕様だよな
185デフォルトの名無しさん:2006/08/29(火) 18:44:12
>>182
ほへー。
それを徹底するくらいなら例外かgotoで終了処理したほうがよほどスマートだと思うんだけどな・・・
186デフォルトの名無しさん:2006/08/29(火) 19:48:14
>>182
auto_ptrはauto変数としてのみ使うもんだと思ってる。
移動コピーはcreate関数なんかに効率を落とさず対応するためのもので、
基本的にはコピーしない、と。

>>185
struct file {
FILE *f;
file(const char *path) { f = fopen(path, "r+"); }
~file() { fclose(f); }
};
int main()
{
file f("foo.txt");
// 何かする

} // close
187デフォルトの名無しさん:2006/08/30(水) 01:08:06
標準では未だにauto_arrayって入ってないんだっけ。
いや、自分で書いても一瞬だけどさ…。
188デフォルトの名無しさん:2006/08/30(水) 11:14:53
>>181
つ[More Effective C++]
189デフォルトの名無しさん:2006/08/30(水) 21:01:50
>>181
C#使いなら、System.IDispose.Disposeに書くようなことをC++ではデストラクタに書くと言えば通じるだろうか。
ただしusingに相当するものはなく、自動変数ならスコープを抜けるときに呼ばれるという感じ。
190デフォルトの名無しさん:2006/08/30(水) 21:03:20
すまん、IDisposableだったな。

>>186
auto_ptrを自動変数として使うだけなら、scoped_ptrでいいだろと思う俺。
今はまだBoostだから使用に抵抗を感じるのかもしれないけどね。
191デフォルトの名無しさん:2006/08/30(水) 22:13:15
boost馬鹿は死んでいいよ
192デフォルトの名無しさん:2006/08/30(水) 23:53:53
おまいが死んだら一番じゃん
193デフォルトの名無しさん:2006/08/31(木) 00:30:09
try{

}
catch(Exception e){
 if(e instanceof HogeException){...}
}

もうね、アホカと。馬鹿かと。
194デフォルトの名無しさん:2006/08/31(木) 00:36:44
・飛んでくる例外の共通の親はException。
・各例外を捕まえたときの処理は同じだが結構分量アリ。
・捕まえずに上にそのまま通す例外もある
みたいな条件が重なったときは結構困るな。
195デフォルトの名無しさん:2006/08/31(木) 00:42:10
どういう場合にそういう状況に陥る?
設計しなおすと結構シンプルになったりしそうなんだが。
196デフォルトの名無しさん:2006/08/31(木) 00:45:16
・飛んでくる例外の共通の親はException。 →当たり前。
・各例外を捕まえたときの処理は同じだが結構分量アリ。 →メソッド化しろボケ。
・捕まえずに上にそのまま通す例外もある →catchしてthrowするか、何もするな。

どこがどう困るんじゃと。
197デフォルトの名無しさん:2006/08/31(木) 00:48:57
>>196
こいつ下手そう
198デフォルトの名無しさん:2006/08/31(木) 01:05:51
そうでもないよ
199デフォルトの名無しさん:2006/08/31(木) 01:12:26
>>197
こう書いたらエエヤンっていってるだけなんだけど、だめ?

void exampleFunction()throws BarException{
 try{
  //FooException,BarException,BazExceptionが発生する可能性あり
 }
 catch(FooException e1){
  handleException();
 }
 catch(BarException e2){
  throw e2;
 }
 catch(BazException e3){
  handleException();
 }
}
200デフォルトの名無しさん:2006/08/31(木) 01:24:53
>>196
Exceptionまでさかのぼらないと共通の親クラスが見つからない、
だから、まとめて捕まえるならExceptionで捕まえるか、
別々に書くかしないといけない、ということだね。
201181:2006/08/31(木) 05:10:40
>>189
いや、C++も昔やってたからその辺のことはわかってるよ。
ただ一時メモリ領域もデストラクタで解放するっていうことに違和感を覚えただけ。
202デフォルトの名無しさん:2006/08/31(木) 10:34:47
BarException をcatchする意味がないじゃん。

handleException() は、handleException(e1) とかで多胎にするよーな?
203デフォルトの名無しさん:2006/08/31(木) 13:59:45
>>201
>一時メモリ領域
一瞬、スタック領域に取られたメモリの事かとおもた
じゃなかったら一時的かどうかはコンパイラには解らないから
204181:2006/08/31(木) 15:12:31
スタック領域だったらそもそも解放とか気にする必要がないのではw
まあとりあえず自分の話題については>>182で一応の解決を見たのでこれ以上の問答は無用です。
205デフォルトの名無しさん:2006/08/31(木) 21:21:42
例外も仕様の内だと思うんだけど。
なんでtry-catchなんて使うんだろうね。

ifとtryのどっちを使うのか明確にわけてあるプロジェクトにあたったことないな。
206デフォルトの名無しさん:2006/08/31(木) 22:14:56
>>205
こいつ下手そう
207デフォルトの名無しさん:2006/08/31(木) 22:39:56
>>206
おお!trycatchの適切な利用方法を説明してみてくれ。
なんかパっとしねぇの多いんだ。
208デフォルトの名無しさん:2006/08/31(木) 23:30:19
>>202
rethrow する前にログったり BarException 固有の処理するけど
紙面の都合で省かれてるんだと思うことにしよう。

> 多胎
派生例外クラスにありとあらゆるケースの例外処理が書かれて
かえって可読性が下がる気がしなくもない。
209デフォルトの名無しさん:2006/09/01(金) 00:23:55
当然のことだが、例外クラスはそれを使うクラスのことは知らない。
まさか、1クラスにつき1例外作るとか言うんじゃないだろうな。
210デフォルトの名無しさん:2006/09/01(金) 00:34:41
そう。だから例外処理で多態は困難に感じる。
211デフォルトの名無しさん:2006/09/01(金) 00:40:22
ここで「こいつ下手そう」発言君↓
212デフォルトの名無しさん:2006/09/01(金) 00:42:04
>>211
こいつ下手そう
213デフォルトの名無しさん:2006/09/01(金) 00:45:06
>>207
try {
resA->open(); // res: resource
resB->open();
resA->hoge();
resB->fuga();
resB->close();
resA->close();
}
catch () {
}
214デフォルトの名無しさん:2006/09/01(金) 00:48:58
んなーこたーない
215213:2006/09/01(金) 00:52:06
>>214
ん、俺?
俺いつもこうやってるよ。俺下手なのか?
216デフォルトの名無しさん:2006/09/01(金) 00:52:40
ここでもやっぱり「こいつ下手そう」発言君↓
217デフォルトの名無しさん:2006/09/01(金) 00:53:34
どう考えても213はおかしいだろ
218デフォルトの名無しさん:2006/09/01(金) 00:53:42
>>213
見るからに例外安全じゃないコードだな。
close前に例外飛んだらout

もしRAIIだから大丈夫だとしたら逆にcloseを明示的に書いているのがダサい。
219213:2006/09/01(金) 00:54:12
>>217
どこが?
220213:2006/09/01(金) 00:55:14
>>218
あー、俺やっぱり下手だわ。
意味さっぱりわかんね。
221デフォルトの名無しさん:2006/09/01(金) 00:56:35
>>218
エラーコードでいちいちエラーチェックするより、例外使ったほうがいいという例じゃないの?
222デフォルトの名無しさん:2006/09/01(金) 01:00:20
>208-210
派生例外クラスじゃなくて、handleException を多態にするという意味では?

void handleException ( Exception& e ); // 共通の処理
void handleException ( BarException& e ); // BarExceptionだけの処理

try{
 //FooException,BarException,BazExceptionが発生する可能性あり
}
catch( Exception e ){
 handleException( e );
}
223デフォルトの名無しさん:2006/09/01(金) 01:07:01
>>221
エラーチェックの話なら,
例外版は適切にRAIIとかfinally相当でリソースの後始末をするべき。
これだと例外を使うとリソースをリークするという話にしか見えん。

まともに例外を扱えないやつが例外を書くと危険極まりない。
下手糞の例外は下手糞のgotoよりはるかに凶悪
224デフォルトの名無しさん:2006/09/01(金) 01:07:31
>>220-221
resA の open に成功して、resB の open に成功した場合、
resA のリソースが開放されないので例外安全にならない。
スコープ抜けたら勝手に開放される(RAII)のであれば
わざわざ close 呼んでるのが冗長。
225デフォルトの名無しさん:2006/09/01(金) 01:11:43
>下手糞の例外は下手糞のgotoよりはるかに凶悪

まったくもってごもっとも。
つーか正直なところどんだけやってもC++の例外を使いこなす自信が持てん。
226デフォルトの名無しさん:2006/09/01(金) 01:11:45
>>224
たぶん主張内容から推察するに
× resBのopenに成功
○ resBのopenに失敗
だな。
主張内容は完全に同意。
227デフォルトの名無しさん:2006/09/01(金) 01:16:58
>>222
実際にやってみたか?引数のオーバロードは多態ではないから
e が BarException でも共通の処理のほうに飛ぶんだが。
228デフォルトの名無しさん:2006/09/01(金) 01:17:16
>>222
オブジェクト自身が振る舞いを知ってる場合が多態で
入り口(呼び出し側)でオーバーロード用意して
振り分けしちゃうのは多態とは言わないと思ってました。
実際のところどうなんでしょう?

>>226
ご指摘の通り。しかも223氏が本質的な発言先にしちゃってるし。
もう俺寝た方が良さそう。
229デフォルトの名無しさん:2006/09/01(金) 01:23:53
>>228
お休み、よい夢をー。
230213:2006/09/01(金) 03:26:07
あー、それは当然catch内でやる。213はtry{}の例。
231デフォルトの名無しさん:2006/09/01(金) 03:41:27
catch内でリソースの開放処理をするのも上手くない。
その時点でcloseなどの解体処理が正常時と異常時の二箇所に分散するということが確定するから。
エラー処理を一箇所でやるための例外でその処理が分散したら本末転倒。
そんなんするならgotoでエラー処理するほうが開放処理が一箇所にまとまる分マシとさえ言える。

結局資源開放するならC++ならRAIIが定石(他言語ならfinally)
232231:2006/09/01(金) 03:54:18
あと、resB->open()時に発生した例外と
hoge(),huga()で発生した例外で開放するリソースが変わるからさらに面倒だな。
open時だとresAのみ、それ以外だとresA,resBを開放する必要がある。
こんなのを手動で開放処理書いてたら俺は間違いなくどこかでミスる自信がある。
233デフォルトの名無しさん:2006/09/01(金) 03:58:32
> 間違いなくどこかでミスる自信がある
うん、間違いなくミスってるよw
resA->open()時に例外が発生する事象を見逃してる。
このケースだと資源の解放はいらない。
234231:2006/09/01(金) 04:02:32
うへぇ、本当だ。やっぱりミスってたかー...
うーん、こういう解体処理はRAIIに任せなきゃ駄目だなマジで
235デフォルトの名無しさん:2006/09/01(金) 04:03:46
つまり例外は使うなってことでFA?
236デフォルトの名無しさん:2006/09/01(金) 04:05:09
>>231
例外が有効な例を教えてくれ
237デフォルトの名無しさん:2006/09/01(金) 04:07:57
238231:2006/09/01(金) 04:12:41
>>236 >>213のケースをRAIIで書くと有効な例になるんじゃね?
try {
    Resource resA(a->getResource());
    Resource resB(b->getResource()); 
    resA->hoge();
    resB->fuga();
}catch(){
  /* エラー処理を記述 */
}

どこにも開放処理はいらないし俺がミスる心配もない
239デフォルトの名無しさん:2006/09/01(金) 06:58:19
ミスる心配が無いって気分いいよな
240デフォルトの名無しさん:2006/09/01(金) 07:11:51
>>238
それだと、resA, resBに特化したエラー処理が書けないよ
241デフォルトの名無しさん:2006/09/01(金) 07:57:56
COMでIDispatchとか使わされる状態だと例外ないとやってらんね
242デフォルトの名無しさん:2006/09/01(金) 08:53:43
エラー処理は ResA.hoge()、ResB.hoge() の返り値を
switch-case なり if なりで判定して行う。
エラー処理と例外処理は別のものだよ。
243デフォルトの名無しさん:2006/09/01(金) 10:41:22
>227
まぁ、>222のとおりだとそうなるけど。

catch(BarException e) を同様に作ってやればいいだけの話。

try{
 //throws FooException,BarException,BazException
}
catch( BarException be ){
 handleException( be );
}
catch( Exception e ){
 handleException( e );
}
244デフォルトの名無しさん:2006/09/01(金) 11:37:27
以降、例外関連はこっちで。

例外処理
http://pc8.2ch.net/test/read.cgi/tech/1142667446/
245デフォルトの名無しさん:2006/09/01(金) 13:07:27
これJavaの話?
246デフォルトの名無しさん:2006/09/01(金) 22:39:05
>>240
try {
  Resource resA(a->getResource());
  Resource resB(b->getResource());
  try {
    resA->hoge();
  } catch(){
    // resA に特化したエラー処理
    // 処理を途中で止めるなら throw
  }
  try {
    resB->fuga();
  } catch(){
    // resB に特化したエラー処理
  }
}catch(){
/* エラー処理を記述 */
}

>>242
> エラー処理と例外処理は別のものだよ。

はぁ?
247デフォルトの名無しさん:2006/09/01(金) 23:11:38
はぁ?
248デフォルトの名無しさん:2006/09/02(土) 01:35:16
エラー処理と例外処理は別のものだろ。
それは間違いない。例外=エラーじゃない。
ファイルストリームの中でバッファ溢れを検知して例外投げて
捕まえた奴がフラッシュしてバッファ空にして処理続行、
別に変わった使い方じゃないし、どこにもエラーは無い。
249デフォルトの名無しさん:2006/09/02(土) 05:35:40
はじめてtry-cacheがあって本当に良かったと思ったのはつい最近。
javascriptでregexpを評価する時に
食わせる正規表現が不完全な時に出るエラーメッセージをcacheして潰した時。

つーのも、無計画に追加していった自分用リンク集がいい加減肥大化して
目的のもの見つけるのが面倒くさくなってきたんで
regexpインクリメンタルサーチを搭載してみたんだけど
入力途中の、正しい正規表現かどうかかわからん文字列を
本当に正規表現として正しいのかどうか調べてから食わせるより
とりあえず食わせてみた後にエラー潰したほうが遥かに楽だったという話
250デフォルトの名無しさん:2006/09/02(土) 06:39:17
>>249敢えて何も言うまい(´・ω・`)
251デフォルトの名無しさん:2006/09/02(土) 10:38:15
>>249
2回間違えるあたり単なるスペルミスではなさそうだな。
252デフォルトの名無しさん:2006/09/02(土) 12:53:01
キャッシュ?
253デフォルトの名無しさん:2006/09/02(土) 13:26:45
「おまえらのコードは俺が理解できないから汚い。俺のコードは俺が理解しやすいから美しい。」
もう結論出てますよ。いつまで無意味な論争やっているんですか?
254デフォルトの名無しさん:2006/09/02(土) 14:18:02
>ぱっと見て「ヘタだなぁ」と思うコード
>>248
255デフォルトの名無しさん:2006/09/02(土) 14:50:25
>>249
正しい正規表現かどうか調べるのと
正規表現をビルドしてみるのとコスト変わらないのかな

文字列が正しい正規表現かどうか調べるメソッドが存在する処理系ってある?
256デフォルトの名無しさん:2006/09/02(土) 17:16:03
正規表現オブジェクト内部で
処理する前に正しいかどうか調べてんじゃない?
バッファオーバーフローとかしたら致命的だし
ホットなループ内でエラーチェックするのはコストが高すぎる
257デフォルトの名無しさん:2006/09/02(土) 20:33:26
ふつーの正規表現ライブラリなら構文食わせた段階でコンパイルされる。

まあたとえば空文字列にマッチしてしまうような正規表現はエラーではないが、
そういう用途には向いていないので実際のデータを食わせる前に判定した方がいいけどな
258デフォルトの名無しさん:2006/09/02(土) 20:46:47
> 文字列が正しい正規表現かどうか調べるメソッドが存在する処理系ってある?

文字列が正規表現として正しいかを判定する正規表現を書けばいいんじゃないか?
259デフォルトの名無しさん:2006/09/02(土) 21:40:27
正規表現ライブラリ内でパターンをコンパイルする時に
構文解析やってるはずなのに
その結果を返すメソッドが用意されてないからって
わざわざ自作するのは人間のコストが高すぎる。
とりあえずコンパイルして例外キャッチしてで十分に思う。
使用できる表現を限定する必要があるなら
頑張って自作するっきゃないだろうけど。
260デフォルトの名無しさん:2006/09/03(日) 01:23:00
>>249が「例外があって良かった」の例になっていない件について

は、もう突っ込み入ってるのか
261デフォルトの名無しさん:2006/09/03(日) 01:34:44
例外が便利なのは
・複雑なエラー状態を統一的に扱える
・複雑な呼び出し構造や一時変数の破棄をを自動的に処理できる
の2点なんだけど、
後者はデストラクタがきっちり定義された型の変数だけでコードを書いてないとあまり意味がない。
前者は誰がどう見ても便利。固定した構文があるだけでもぜんぜん違う。


まあ今時の言語なら実行時エラーを捕獲する機構は必須だわな。
プログラムが自分や他のモジュールについてのメタ情報を扱うのが最近の流行だ。
262デフォルトの名無しさん:2006/09/03(日) 02:41:23
javascript のクロスブラウザ対応コードとかだと
最初にバージョン等で依存するメソッドなりプロパティなり参照させて
そいつをcatchして「これはECMA1.1だ。あっちはJScriptだな」
とかやっててため息が出る。
コード書いた奴のせいではないけど。
263デフォルトの名無しさん:2006/09/03(日) 03:30:47
それは確かに
(スクリプトホストの実装が)ヘタだなぁ
264デフォルトの名無しさん:2006/09/03(日) 08:59:17
>>261
> 例外が便利なのは

・正常系の処理が素直に書ける

ことに尽きると思う。

例外がないと、エラーチェックだらけで処理が追いにくい。

>>262
ため息をつくほどのことか? >>261 が言うように処理系がメタ情報を
提供するのが最近の流行だろうけど、ちょっと古い実装系だと提供す
る関数自体が未実装だったりするので過渡期のテクとしてはやむをえ
ないと思うよ。
265デフォルトの名無しさん:2006/09/03(日) 09:08:29
>>264
それってメリットかなぁ・・・
俺はエラーの分岐もプログラムのうちだと思うけど。
そもそも正常系とわける意味がわからない。
エラー処理だって仕様の一部だよ。
あるべき場所になくて実は例外で飛んでるってのはかなり追いにくい。
266デフォルトの名無しさん:2006/09/03(日) 10:11:14
>>265
それじゃ、試しにログ出力関数を作ってみてくれ。
仕様としては、指定された名前のファイルがあれば追記でなければ新規作成。
行の内容はタイムスタンプと指定された文字列。文字列中の非可読文字は適切に処理するってことで。
それを例外を使わずに書いたものと使って書いたものを用意すれば、
どっちが読みやすい(「追いやすい」か)とか議論もできるだろう。
267デフォルトの名無しさん:2006/09/03(日) 10:40:55
>>266
>仕様としては、指定された名前のファイルがあれば追記でなければ新規作成。
>行の内容はタイムスタンプと指定された文字列。文字列中の非可読文字は適切に処理するってことで。
っていう関数(例えばwriteLog関数)を作って

re = hoge.init();
if(re != S_OK){
  writeLog("初期化失敗");
  return; //処理によってreturnするもよし、続行するもよし
}

re = hogest.init();
if(re != S_OK){
  writeLog("オプション無し");
}

って話じゃないの?
別に関数の中で色々とやることにメリットを感じないんだけど?
だってエラーがでた箇所みつけにくいじゃん。

ところで
>指定された名前のファイルがあれば追記でなければ新規作成
これってfopenを'a'で開くだけじゃんw

お前が何をいわんとするのかさっぱりわからない。
268デフォルトの名無しさん:2006/09/03(日) 10:41:28
俺もため息が出るよ。
醜くてもやむをえずそれを書いた人の心中察するあまり…
269デフォルトの名無しさん:2006/09/03(日) 10:48:59
で、>>267

try{

  hoge.init();
  hogest.init();
  ・
  ・
  ・
}

って書くと

catch()
catch()
catch()




って書かなきゃいけないじゃん。
俺、これをやるぐらいなら>>267のほうが100倍ぐらいいいと思うんだけど。
エラーが起きたらエラーが起きたその箇所にその内容が書いてあるほうがいいと思うんだけどなぁ。
270デフォルトの名無しさん:2006/09/03(日) 11:21:30
>>267
>これってfopenを'a'で開くだけじゃんw
あ、いけね、「新規作成して1行ファイル内容を出力」の肝腎な後半を忘れてた。

で、漏れはそのwriteLog()相当の中身の話をしたかったんだがなぁ。
それはさておき、>269のcatch()の連続は何?
271デフォルトの名無しさん:2006/09/03(日) 11:24:21
C++でinitというメンバ関数名を見るたびに嫌気が差す。
コンストラクタでええやん。

コンストラクタがあるのに何がかなしゅうて一々ケッタイな初期化せにゃあかんねん。

>>270
たぶん、例外要因全部別々にcatchしてる例外初心者でしょ。
俺ならstd::exception.whatで終わらせるけど。
272デフォルトの名無しさん:2006/09/03(日) 11:35:26
>>270
>あ、いけね、「新規作成して1行ファイル内容を出力」の肝腎な後半を忘れてた。
日本語でおk

>で、漏れはそのwriteLog()相当の中身の話をしたかったんだがなぁ。
こんなのtrycatchに関係あるの?わからない。

>>271
>C++でinitというメンバ関数名を見るたびに嫌気が差す。
だってMFCからいってコンストラクタじゃウィンドウできてねーし。
継承して作ったら何もしようが無い。

>std::exception.what
なにそれ?資料少なすぎてマイナーなんじゃね?
なんかよくなるの?
基本的に処理とエラー内容はできるだけ離したくないんだけど?
俺のニーズにはあってるのかな?
273デフォルトの名無しさん:2006/09/03(日) 11:39:47
>>272
標準ライブラリをマイナーと言われても困る。
>>270
俺は例外信者だけどこれ位の規模だと例外非使用でも大差ないと思う。
マルチバイト文字とかその辺まで凝るとまた話が違うかも知れんけど。
void writeLog(const char*filename,const char*logmsg){
    char buf[64],c;
    FILE*fp = fopen(filename,"a");
    if(fp){
        time_t tm = time(NULL);
        strftime(buf,64,"%H:%M:%S | ",localtime(&tm));
        fputs(buf,fp);
        while((c=*logmsg++)!='\0')
            fputc(isprint(c)?c:'.',fp);
        fputc('\n',fp);
        fclose(fp);
    }
}
274デフォルトの名無しさん:2006/09/03(日) 11:41:23
>>273
だって全然検索ヒットしないよ。
入れてみたものの誰も使ってないんじゃない?
C言語のunionみたいさ。
275デフォルトの名無しさん:2006/09/03(日) 11:43:14
>>271
コンストラクタでエラーが起きたときに
それを通知するには例外を使うのが普通だろうけど
そのリソースに代替物があって、初期化の失敗が
致命的なエラーにならないときには
例外ではなく戻り値で通知して欲しい、とか

まあ、オブジェクトが正常かどうかを
問い合わせる関数を追加すればいいのだろうけど。
276デフォルトの名無しさん:2006/09/03(日) 11:46:23
http://www.google.co.jp/search?q=std+exception+what
std exception what の検索結果 約 4,800,000 件中 1 - 10 件目 (0.15 秒)
277デフォルトの名無しさん:2006/09/03(日) 11:53:22
>>274
Cでunion使わないってありえねー。
C++だと継承でほぼ代用できるから利用価値が低下するけど。
>>275
その場合なら自分も例外処理にするよりも普通は成否を返すでしょうね。
C++のiostreamもそのパターンの場合は例外を投げないですしね。
例外を使う場合はむしろメモリ不足とかの代替とか無理な状況に使うほうが多いですし。
278デフォルトの名無しさん:2006/09/03(日) 11:53:56
>>276
おお、検索の仕方が悪かっただけか。すまん。
でも、やっぱり、

catch()
catch()
catch()

って書くみたいなんだけど?
279デフォルトの名無しさん:2006/09/03(日) 11:58:19
>>273
fputs(), fputc(), fclose()のエラー処理も入れてくれ。

>>272
「新規作成して1行目にファイル内容の概略を出力」でいい?
要は、ファイル名がerror.logなら"; error.log"と書いておくとかそんな感じで。
#この件は説明不足が続いて失礼。

>>276
それは余りに無意味な検索の仕方だ。3つの単語を別々に検索してしまうジャマイカ。
280デフォルトの名無しさん:2006/09/03(日) 12:04:37
>>278
int main()
{
    try
    {
        // ...
    }
    catch(const std::exception& e)
    {
        std::cerr << e.what() << std::endl;
        return 1;
    }
}
そしてこのほかには殆ど完全にと言ってよいほどtry/catchが出てこないプログラム。
281デフォルトの名無しさん:2006/09/03(日) 12:11:00
というか例外って使いこなせば使いこなすほど
try catchをほとんど書かなくなるんだよな(C++では)
282デフォルトの名無しさん:2006/09/03(日) 12:14:00
処理を中断してログ吐いて終了するくらいしか手がないときにしか
例外って使わないしねぇ…
283デフォルトの名無しさん:2006/09/03(日) 12:39:58
非チェック例外以外にチェック例外も用意したJavaですら
最近は「例外は基本的に実行時例外だけにしとけ。
どうにもならんような状態を知らせるか、
プログラミングミスを検出する目的で使え。」な流れだよね。
284デフォルトの名無しさん:2006/09/03(日) 12:45:01
>>277
> Cでunion使わないってありえねー。
> C++だと継承でほぼ代用できるから利用価値が低下するけど。

kwsk
285デフォルトの名無しさん:2006/09/03(日) 13:30:24
プログラムにバグがあるときでも何とかごまかすために使ってる>>例外
286デフォルトの名無しさん:2006/09/03(日) 15:03:27
継承で利用価値が低下するってのは、俺にもよくわからんな。
struct RGBA
{
union
{
struct
{
unsigned char r, g, b, a;
};
unsigned char rgba[4];
};

みたいなのを、
class RGBA
{
unsigned int rgba;
public:
void set(unsigned char r, unsigned char g, unsigned char b, unsigned char a);
void set(unsigned int rgba);

}

みたいに書くからって話かな?
287デフォルトの名無しさん:2006/09/03(日) 15:13:10
union と継承の関係もよくわからんが、
>>296 のプログラムと継承の関係はもっとよくわからん。
288デフォルトの名無しさん:2006/09/03(日) 15:23:20
>>287
・>286のclass RGBAはunionを使っていない。
・struct RGBAを含む構造体は内包で実現することになるが、
class RGBAを含む構造体は継承で実現できる。
#が、意味は微妙。
289デフォルトの名無しさん:2006/09/03(日) 15:42:01
277がC++だと継承で代用できるといったのはこういう例だと思う。
struct Hoge
{
    enum type_t {Foo, Bar, Piyo} type;
    union
    {
        struct foo_t {/* ... */} foo;
        struct bar_t {/* ... */} bar;
        struct piyo_t {/* ... */} piyo;
    };
};
typeによってunionのどのメンバにアクセスできるかが決まるというもの。
290デフォルトの名無しさん:2006/09/03(日) 19:02:36
そんなもんCでもできるし、継承関係ないけど…。

ひょっとして釣り?
291デフォルトの名無しさん:2006/09/03(日) 19:24:48
いや、289のようにCでは共用体でやっていたのを、C++では継承で代用…ってことなんではないかと。
自分の勘違いだったら申し訳ないが、自分は290の読解力こそ疑うが…。
292デフォルトの名無しさん:2006/09/03(日) 19:29:06
>>290
ここまで説明せにゃならんのか。
void HogeHoge(Hoge* hoge)
{
    switch (hoge->type)
    {
    case Foo: /* fooの処理 */ break;
    case Bar: /* barの処理 */ break;
    case Piyo: /* piyoの処理 */ break;
    }
}
これをOOP風にすると、継承を使いunionを使わないようにすることができる。
class Hoge
{
    virtual void HogeHoge() = 0;
};

class Foo : public Hoge
{
    virtual void HogeHoge() {/* fooの処理 */}
};
//Bar, Piyoも同じ
293デフォルトの名無しさん:2006/09/03(日) 19:50:11
union ってあるビットの塊をいろんなものに解釈するためにあると思うんだが。

Foo, Bar, Piyo が union だった場合、それぞれを Foo は Bar にも Piyo にも見えるけど、
Foo, Bar, Piyo が Hoge の派生だった時に、 Foo を Bar に見ることって無理っぽいんですが。
294デフォルトの名無しさん:2006/09/03(日) 19:51:11
やっぱりUnionと関係ない気がするな。
295デフォルトの名無しさん:2006/09/03(日) 19:57:45
共用体だからって、別のものに解釈させて使わなきゃならないってことはないんで、
292の例は別解釈をさせずに、統一的に扱うために使ってるんではないかと。
WinAPIのSendInputで使うINPUT構造体なんかも292の例と同じ使い方だね。
296デフォルトの名無しさん:2006/09/03(日) 19:57:59
>>293
289/292では、typeに指示された型以外で共用体のメンバにアクセスしてはいけないという仕様。
FooをBarとして見るなどといったことはできない。

Cでは、こういうunionの使い方をされることも全くないわけではない。
297デフォルトの名無しさん:2006/09/03(日) 20:20:49
あるunionの使い方についてはC++の継承で表現できる、なら納得。
298デフォルトの名無しさん:2006/09/03(日) 21:32:28
>>292
なんかすげーヘタな設計を見た気がする...。

> virtual void HogeHoge() {/* fooの処理 */}

とか書いてごまかしてるけど、

union {
 char a;
 int b;
 float c;
} x;

に相当するもの書いてみ。自分がどんな変な設計してるかわかるから。

>>293
ビットレベルの別解釈と、メモリの節約 (=同一の領域をいろんな意味で使う) だろ。

>>295
それは、単にタグをつけてるだけの話。

継承とはまったく関係がない。
299デフォルトの名無しさん:2006/09/03(日) 21:45:52
たとえば、Cでパーサを書くときって、Tokenをunionで実装したりしない?
union Token {
int keyword;
char *identifier;
int intValue;
double doubleValue;
};
これを、C++で書いたら、Tokenクラスを継承して、KeywordTokenとか、NumberTokenとかを
作成するような実装もありうると思うけど。
300デフォルトの名無しさん:2006/09/03(日) 22:16:19
>>299
なるほど、すまんちょっと勘違いしてた >>292

class Base {};

class Char: Base { char a; };
class Int: Base { int b; };
class Float: Base { float c; }

みたいなイメージやね。

まあ、>>297 が正しいと思う。
301デフォルトの名無しさん:2006/09/04(月) 08:31:25
unionでセットしたメンバ変数以外のメンバ変数として解釈するのはANSI-C的にはNG
複数のビット表現として解釈する使い方が〜とかほざくやつは完全に標準違反。
302デフォルトの名無しさん:2006/09/04(月) 14:56:30
だが、それを承知した上で使えば中々便利。
303デフォルトの名無しさん:2006/09/05(火) 02:16:44
ついに1000体突破かよ
アイロボットみたいだな
株ロボもいつか夢を見るようになるのかなぁ
304デフォルトの名無しさん:2006/09/05(火) 03:33:50
>ANSI-C的にはNG
実装依存じゃなかったか?
305デフォルトの名無しさん:2006/09/05(火) 03:56:05
故にNGなんだろなー。
あまりにも典型的すぎるんで、使ってるから下手だとか言う気には到底なれんが。
306デフォルトの名無しさん:2006/09/23(土) 20:57:55
なあおまえら聞いてください。

 #define MINUS_1  -1

これは明らかにうんこたれだ。
んがしかし

 #define MINUS_1  FunnyVariant(L"-1", FV_LONG)

これはおkだよな?

(つД`) つーかもう俺泣きてぇ。
この FunnyVariant をはじめ、DB操作もお金の計算も日付計算も専用のライブラリが用意されてて
↑あんな感じで FunnyVariant クラスに *文字列を* 入れて、数値を生成しなきゃならん。
こうやって、東日本全体を覆うアレのシステムは構築されてんだぜ。。。
307デフォルトの名無しさん:2006/09/23(土) 21:09:20
>>306
>この FunnyVariant をはじめ、DB操作もお金の計算も日付計算も専用のライブラリが用意されてて
超巨大プロジェクトは、そうするのが普通。
308デフォルトの名無しさん:2006/09/24(日) 02:45:21
アカデミックバカ世にはばかる、みたいな。
309デフォルトの名無しさん:2006/09/24(日) 21:27:18
>>307
突込みどころはそこじゃないんじゃないか
310デフォルトの名無しさん:2006/09/24(日) 22:46:23
これって、
FunnyVariant *anyval = new MINUS_1;
って感じで使うの?
311デフォルトの名無しさん:2006/09/25(月) 00:28:37
一時オブジェクトで使うのが一般的なんだと思う。
312デフォルトの名無しさん:2006/09/25(月) 23:10:55
>311
うん、そういう事。

 FunnyVariant yesterday = Calendar::addDay(today, MINUS_1);

みたいな感じでね。

>307
うんまあ、専用ライブラリが存在する事は、悪くはない事だと思う。
アルゴリズムに責任が持てるのは、いい事だよね。
っていうか、なぜ素直に

 FunnyVariant yesterday = Calendar::addDay(today, -1);

と書かせてくれないのかと(つД`)えーんえーん
313デフォルトの名無しさん:2006/09/25(月) 23:45:47
> FunnyVariant yesterday = Calendar::addDay(today, -1);
このコードキモいな
314デフォルトの名無しさん:2006/09/26(火) 00:18:03
まあ、俺が組んだ箇所は金の計算をunsigned intでやってあるけどね。
315デフォルトの名無しさん:2006/09/26(火) 00:23:54
そもそも"FunnyVariant"ってネーミングがアレだな
316デフォルトの名無しさん:2006/09/26(火) 02:06:22
FunnyVariant はコンテキストによって
整数型になったり通貨型になったり日付型になったりするわけ?
なぜそんなにもバリアントにこだわるんだろう。
317デフォルトの名無しさん:2006/09/26(火) 03:53:49
>>314
是非コードの適用箇所を教えてください。
42億ほど用意して突撃させていただきます。
318デフォルトの名無しさん:2006/09/26(火) 09:04:26
>>317
314の使っている環境ではunsigned intは64bit以上あるのでは?
319デフォルトの名無しさん:2006/09/26(火) 09:53:58
>>316
コンテキストによるんじゃなくて、自分で指定してるじゃん。
320デフォルトの名無しさん:2006/09/26(火) 10:53:01
>>318
そんな夢の無いこと言わないでください…
321デフォルトの名無しさん:2006/09/27(水) 11:28:08
1900京円ほど用意して突撃させていただきます。
322デフォルトの名無しさん:2006/09/27(水) 12:21:49
321が1990京円用意するより先に、
そこでのunsigned intのビット数はもっと増えていそう。
323デフォルトの名無しさん:2006/09/27(水) 12:27:39
じゃあ、私は-1円振り込もっと。
324デフォルトの名無しさん:2006/10/01(日) 01:01:34
【スパイウェア】Yahoo Emulator Part5【堀川水樹】
http://pc7.2ch.net/test/read.cgi/software/1156652691/

Yahoo Emulatorホントは使いたいんだろ?
堀川に嫉妬してるんだろ?白状してご覧よwww
どうみてもYahoo Emulator以上のソフト自分で作れない低能が堀川水樹でチンコ立てるスレです
ありがとうございました
325デフォルトの名無しさん:2006/10/01(日) 01:20:07
>>323
そしたら大金持ちだな。
326デフォルトの名無しさん:2006/10/01(日) 21:59:52
借金として処理されるだけな気がする
327デフォルトの名無しさん:2006/10/03(火) 07:49:06
毎日の金利がオーバーフローし続けたりしてな。
328デフォルトの名無しさん:2006/10/04(水) 00:22:37
sage
329デフォルトの名無しさん:2006/10/04(水) 03:09:51
Sub しょりそのいち(ひきすう As Integer)
For かうんた = 0 to 10000 step 200
For かうんたに = 10000 to 0 step -200
(約300行略)
Next かうんたに
Next かうんた
'(゜β゜)/~~
End Sub



Function しょりそのごじゅうに(ひきすう As Long)
(略)
End Function

↑VisualBasic、コメントを除く処理が約1.5万行
入社初日に渡された、売り上げ集計ソフトの逃げた前任者のソースここまでに約1月
動作不安定、仕様を満たせそうに無い、変数宣言殆ど無し
必要なコメントは無く’(笑)とか’(泣)とか不必要なコメントは沢山ある
しかも標準モジュール-日記.basに上司に対する愚痴が山のように書いてある

もちろん最初からから全部書き直しました
書き直し総所要時間(デバック等を含む)約3日
書き直し後のソース約550行

550行のソースを1.5万行で書けるのはある種才能だと思う
330デフォルトの名無しさん:2006/10/04(水) 08:57:36
あらゆる箇所にコメント書く香具師うぜー
本当に必要なコメントが埋もれてしまうがな
331デフォルトの名無しさん:2006/10/04(水) 11:10:01
>330
居るよな、そういうヤツ。
酷い場合、そういうのがコーディングガイドになってたりするところもあるわなぁ('A`)
お互いにプロなんだから、そんな基本的なコメントいらんから、
てか、空気読めよ、みたいなヤツな。

典型的なのが、

int i=0; //変数iを0で初期化する。

こういうのとか、

exit 0; //リターンコード0を返し、処理を終了する

とかな。
332デフォルトの名無しさん:2006/10/04(水) 11:13:34
print $_->[0],"\n" for sort{ $_->[1] }map{[$_,lc$_]} @ARGV;

おまえらはコレにコメント欲しい?なくても読める?
俺はなくても読めるし無いほうが簡潔だと思うけどどうよ?
333デフォルトの名無しさん:2006/10/04(水) 11:18:02
前後の繋がりもあるから一概には言いにくいが、ぱっと見解りにくいと思われ
334デフォルトの名無しさん:2006/10/04(水) 11:25:34
>>332
コメントがどうこう以前にウンコに見える
335デフォルトの名無しさん:2006/10/04(水) 11:31:06
だめなコメント

print $_->[0],"\n" # 要素の最初のデータを表示
  for          # 要素を順に
   sort{ $a->[1] cmp $b->[1] } # 2番目の要素でソート
   map{[$_,lc$_]}  # 要素を元データとそれを小文字化したペアに変換
   @ARGV;      # コマンドライン引数

正しいコメント

# コマンドライン引数をケース非依存をソートして順に表示
print $_->[0],"\n" for sort{ $a->[1] cmp $b->[1] }map{[$_,lc$_]} @ARGV;
336デフォルトの名無しさん:2006/10/04(水) 11:43:50
# ホルホル
print $_->[0],"\n" for sort{ $_->[1] }map{[$_,lc$_]} @ARGV;
337デフォルトの名無しさん:2006/10/04(水) 11:48:47
>>331
いねーよ、そんな奴w
338デフォルトの名無しさん:2006/10/04(水) 11:51:58
じゃあこれはどうよ?

$r=query($conn,"insert into t1(".join(',',sort keys %d).")values(".join(',',map{db_quote($d{$_})}sort keys %d).")");
339デフォルトの名無しさん:2006/10/04(水) 11:54:32
言語仕様そのものがゴミクズ。
340デフォルトの名無しさん:2006/10/04(水) 11:56:09
>>338
これは無理
こんなの一行で書くんじゃねえよ
341デフォルトの名無しさん:2006/10/04(水) 16:51:43
>>338
ぱっと見、フィールド名と値の順番は大丈夫か、ちょっとどきどきする。
342デフォルトの名無しさん:2006/10/04(水) 18:42:26
変数名もドキュメントの一部
343デフォルトの名無しさん:2006/10/04(水) 23:26:04
変数名だけで何をやるのかが分かる
344デフォルトの名無しさん:2006/10/05(木) 01:13:47
末尾の数字だけが違う以外は同名の関数が複数出てくるコード。

private Hoge createHoge(Fuga fuga){
 // なんか処理
}

private Hoge createHoge2(Fuga fuga){
 // createHoge と殆ど同じ処理
}

以下、createHoge6 あたりまで続く。

無印〜6までの使い分け条件・使い分けが必要な理由は
コメントにも仕様書にもどこにも書いてない。

マジックナンバーがそこら中に分散、
一つの関数が300行越えるのはザラ、
等の諸症状も併発する。
345デフォルトの名無しさん:2006/10/05(木) 01:16:02
class名見れば分かるのにメソッドにまでわざわざ長ったらしく書く奴
346デフォルトの名無しさん:2006/10/05(木) 02:58:18
コメント読むとおつむの程度が知れる。

コメント読まれるとおつむの程度が知られてしまう。

だから漏れはコメントを書かない。


これぞ自衛的プログラミングの極意。
347デフォルトの名無しさん:2006/10/05(木) 03:11:14
コード書かなきゃいいんじゃね?
348デフォルトの名無しさん:2006/10/05(木) 07:20:14
それだ!
349デフォルトの名無しさん:2006/10/05(木) 11:18:26
要求だけあって、仕様がない一人案件の場合、
おもむろに作り始めるんだけど、
そういう場合、変数やら関数の意味が
あとからだんだん変わってしまう場合が多いので
あまり真剣に考えても意味がない。
適当にしたほうが良い。

ということを学んだ入社半年目。
350デフォルトの名無しさん:2006/10/05(木) 11:43:32
まーそういう事もままあるが、途中で随時リファクタリングしてる。
IDEが簡単な置き換えしかできないシケたヤツだとダルいけど。
351デフォルトの名無しさん:2006/10/05(木) 11:44:05
>>349
こいつ下手
352デフォルトの名無しさん:2006/10/05(木) 12:19:03
>>349
変数と関数で物事括ってるからマズいんでね?
353デフォルトの名無しさん:2006/10/05(木) 15:17:29
>>349
死刑
354デフォルトの名無しさん:2006/10/07(土) 09:44:47
>>349
意味が変わってきたら、それに応じてリファクタリングかけるべきだな。
いつでも変数の意味は正確な物にしておくほうがベター。
考えても意味がないっていうのは、ちょっと良い考え方ではない。

一人案件でも、仮に趣味のコードでも、このへんは変わらんよ。
数ヶ月後の自分は、今の自分からみたら他人並。
その時に、わかりやすいコードとコメントが意味を持ってくるものだし。
本当に作り捨てで今だけ解ればいいっていうなら、手を抜くのも有りではあるが…
案件なら、作りっぱなしでもう2度とコードみないって訳にもいかなかったりするだろ?
入社半年目なら、今のうちに考え直す方が良いよ。
355デフォルトの名無しさん:2006/10/07(土) 13:02:17
袋叩き
356デフォルトの名無しさん:2006/10/07(土) 14:02:25
変数名考えてる時って、頭の片隅で設計してるんよ。
見通しの悪い設計してるから良い名前が付けられない。
357デフォルトの名無しさん:2006/10/07(土) 14:29:26
あー、プログラムの文脈以外に、識別子に意味もつけられたら便利かもと、唐突におもた
358デフォルトの名無しさん:2006/10/07(土) 16:23:43
boolean型で変数名 flag

これ最強。
359デフォルトの名無しさん:2006/10/07(土) 23:58:23
俺の bool b とどっちが強いかな??
360デフォルトの名無しさん:2006/10/08(日) 00:08:23
5行くらいの関数で使うんならアリだぜ。

20行越えてたら殺す。
361デフォルトの名無しさん:2006/10/08(日) 00:12:51
悪い、40行くらいのコードでも普通に使い倒してる。
二回死んどくから勘弁してくれ。
362デフォルトの名無しさん:2006/10/08(日) 00:31:39
許す。
363デフォルトの名無しさん:2006/10/08(日) 00:54:44
String s = new String();
s = "foobar";
364デフォルトの名無しさん:2006/10/08(日) 00:57:24
void foo() throws Exception { ... }
365デフォルトの名無しさん:2006/10/08(日) 06:28:02
今時、for文でループまわしているのを見たとき
366デフォルトの名無しさん:2006/10/08(日) 07:10:51
>>365 kwsk
367デフォルトの名無しさん:2006/10/08(日) 07:35:18
>>366
eachとかforeach使えってこと。
iteratorでも可
まあ、今時、それらができない言語は時代遅れだと思う
368デフォルトの名無しさん:2006/10/08(日) 07:44:09
階乗の計算をeachやforeachで書ける?
369デフォルトの名無しさん:2006/10/08(日) 08:58:17
>>368
もちろん、書かない。
わざわざ適していない方法で書く必要はない。
そういうときは、適している方法で書く。
例えば、再帰で書く
370デフォルトの名無しさん:2006/10/08(日) 09:15:02
for文でループまわす必要があるのはリストよりはマップ。
キーと値を特定の順序で取り出したい場合は eachやforeachは弱い。
371デフォルトの名無しさん:2006/10/08(日) 09:15:39
若者の都会かぶれが流行ってると聞いちょるがここまで進んでるたぁ、おれぁもうガマンならねぇ!
出直してけぇな>>369さん!
372386:2006/10/08(日) 09:26:45
>>368
そういうのはfold_left系の関数の出番だな。
 ruby
(1..n).inject(1){|x,y|x*y}
 C++
#include<boost/iterator/counting_iterator.hpp>
#include<numeric>
#include<functional>
int fact(int n){
    return std::accumulate(
        boost::make_counting_iterator(1),
        boost::make_counting_iterator(n+1),
        1,std::multiplies<int>());
}
373デフォルトの名無しさん:2006/10/08(日) 09:28:24
>>372
おっと名前欄にほかのスレの数字残ってたな。
その辺はスルーしといてくれ
374デフォルトの名無しさん:2006/10/08(日) 10:01:34
うあ、面倒くさっ!
375デフォルトの名無しさん:2006/10/08(日) 10:04:28
> (1..n).inject(1){|x,y|x*y}
うぉ。こんな風にかけるんだ
376デフォルトの名無しさん:2006/10/08(日) 10:09:03
haskellだと
factorial n = product [1..n]
haskell万歳!

>>372
int fact(int n)
{
 int res = 1;
 for(int i=2;i<=n;++i)
  res *= i;
 return res;
}

と書いたら「ヘタだなぁ」と思われるの?
377372:2006/10/08(日) 10:25:22
思われない思われないw 俺もネタ以外では普通にそうやる。
関数型言語っぽいやりかたはC++ではまだまだ面倒だからね。
378デフォルトの名無しさん:2006/10/08(日) 11:02:23
普通に末尾再帰で書けばいいじゃん。
#include <cstdio>
#include <cstdlib>

template <typename T> inline T factrial(int n, T s = 1)
{
return n > 1 ? factrial(n - 1, s * n) : s;
}

int main(int argc, char ** argv)
{
printf("%d\n", factrial<int>(atoi(argv[argc - 1])));
printf("%.20g\n", factrial<double>(21));
return 0;
}

今時のコンパイラならループに展開するだろ。
379デフォルトの名無しさん:2006/10/08(日) 11:41:00
末尾再帰の最適化って関数型言語限定だと思ってた…
今まで再帰のほとんどをループに直してた僕の努力は一体orz
380デフォルトの名無しさん:2006/10/08(日) 11:52:17
Javaで、
引数、ローカル変数をできる限りfinalにしてない
コードをみると

あ、こいつはダメだ。

と思う。
381デフォルトの名無しさん:2006/10/08(日) 12:17:21
引数までfinal化する必要があるかは程度問題だと思うんだが。
ローカル変数も同じ。

Java使ってまでC++と同じ流儀で徹底しないでもいいだろ。
C++でconstつけない奴は尻が二つに割れるまでチョップの刑だが。
382380:2006/10/08(日) 12:37:24
>381
いや俺はできる限り、あらん限りの方策で
すべてfinal化するべきだと思っている。
383デフォルトの名無しさん:2006/10/08(日) 13:24:59
うむ
384デフォルトの名無しさん:2006/10/08(日) 13:47:24
Delphiで、引数にconstつけて周る俺がきましたぉ
385デフォルトの名無しさん:2006/10/08(日) 13:59:43
なんでconsomeはないの?
386デフォルトの名無しさん:2006/10/08(日) 18:29:22
>>376 378
下手かどうか以前にバグってるぞ
387378:2006/10/08(日) 21:01:10
>>386
どっかバグってた?
#関数名以外でw
388デフォルトの名無しさん:2006/10/08(日) 22:09:01
C++でクラスにする必要のない処理をわざわざクラス化してるとき
389デフォルトの名無しさん:2006/10/08(日) 22:21:19
>>376 ++i  を使ってる時点で俺的にoutなんだが
390デフォルトの名無しさん:2006/10/08(日) 22:23:22
*=ってなんでつかwwwwww
391デフォルトの名無しさん:2006/10/08(日) 22:27:46
>>389-390
素人は帰れ。
392デフォルトの名無しさん:2006/10/08(日) 22:35:47
resはどこで確保されてるか
393デフォルトの名無しさん:2006/10/08(日) 22:37:08
>>389
C++の勉強をしましょう。
>>390
Cの勉強をしましょう。
394デフォルトの名無しさん:2006/10/08(日) 22:37:52
>>392
>390が指摘している行の2行上。
395デフォルトの名無しさん:2006/10/08(日) 22:44:24
はいはい、i++と++iは同じです。
396デフォルトの名無しさん:2006/10/08(日) 22:50:20
>>395
C++の勉強をしましょう。
397デフォルトの名無しさん:2006/10/08(日) 22:56:04
>>396
その話題飽きた
398デフォルトの名無しさん:2006/10/08(日) 23:00:15
勉強しても++iとi++は同じであることがわかるだけだけどな。
399デフォルトの名無しさん:2006/10/08(日) 23:02:50
>>398
C++の勉強をしましょう。
400デフォルトの名無しさん:2006/10/08(日) 23:03:40
先に加算するか後で加算するかの違い
なんて関係ないことがほどんどだよな
401デフォルトの名無しさん:2006/10/08(日) 23:05:07
C++の勉強をしましょう。
402デフォルトの名無しさん:2006/10/08(日) 23:06:31
>>376がC++で書いたとは限らない
403デフォルトの名無しさん:2006/10/08(日) 23:23:53
>>402
C++ですが、なにか?
404デフォルトの名無しさん:2006/10/08(日) 23:29:36
>>401
何が違うのか説明してみろ。
405デフォルトの名無しさん:2006/10/08(日) 23:30:20
この場合は何もかわらんな
406デフォルトの名無しさん:2006/10/08(日) 23:30:37
しょうがないな、正解を言うぞ、
i++; は tmp=i,++i,tmp; という命令、階乗は ((1 + n) * n) / 2 で求まる。

うはっWWWオレ天才WW
407デフォルトの名無しさん:2006/10/08(日) 23:33:43
中学の数学の勉強をしましょう。
408デフォルトの名無しさん:2006/10/08(日) 23:35:01
>>400
i++の式値はi
++iの式値はi+1

前とか後とかじゃない、式値が違うだけだ
409デフォルトの名無しさん:2006/10/08(日) 23:37:01
>>408
で、>>376の文脈で違いはあるのか?
410デフォルトの名無しさん:2006/10/08(日) 23:38:00
>>409は400か?
>>400では>>376に言及してないぞ?
急に文脈を無視して>>376に関連付けられても困る
411デフォルトの名無しさん:2006/10/08(日) 23:39:06
>>410
流れ嫁
412デフォルトの名無しさん:2006/10/08(日) 23:39:31
shine!
413デフォルトの名無しさん:2006/10/08(日) 23:42:05
0!が考慮されてないって意味じゃね?

あと++iとi++は戻り値が違う。
414デフォルトの名無しさん:2006/10/08(日) 23:42:45
>>413
で、>>376の文脈で違いはあるのか?
415デフォルトの名無しさん:2006/10/08(日) 23:43:12
>>414
無いね
それがどうしたの?
416デフォルトの名無しさん:2006/10/08(日) 23:44:30
>>415
別に。
じゃ、この話題終了。
417デフォルトの名無しさん:2006/10/08(日) 23:46:23
ここはぱっと見のコードの質を云々するスレなのだから、充分違うと思うが。
418デフォルトの名無しさん:2006/10/08(日) 23:46:27
ところで int *iってして、*(++i++)はどんなのになるの?
文脈的に考えて
419デフォルトの名無しさん:2006/10/08(日) 23:46:53
何が違うの?
420デフォルトの名無しさん:2006/10/08(日) 23:47:49
>>418
Cを勉強しましょう。
421デフォルトの名無しさん:2006/10/08(日) 23:49:29
>>420
答えられないということですね。
422デフォルトの名無しさん:2006/10/08(日) 23:50:33
夏だなあ
423デフォルトの名無しさん:2006/10/08(日) 23:50:33
「〜しましょう」とか言ってる奴うぜー
424デフォルトの名無しさん:2006/10/08(日) 23:51:25
鹿児島商
425デフォルトの名無しさん:2006/10/08(日) 23:56:18
>>418
「i++が右辺値になり、それに前置++を使用しているのでコンパイルエラー」だと思う。
426デフォルトの名無しさん:2006/10/09(月) 00:07:48
なんかこの話題最近見たきがするなぁ。
427デフォルトの名無しさん:2006/10/09(月) 00:10:16
C++におけるpre/post incrementの知識を披露したいんでしょう。
428デフォルトの名無しさん:2006/10/09(月) 00:10:45
このスレの80%はループでできて略
429デフォルトの名無しさん:2006/10/09(月) 01:31:43
しかし無知が間違いと確信してるとこを指摘して
突っ込まれているところをニヤニヤしてる分には
ループでもいい
430デフォルトの名無しさん:2006/10/09(月) 17:31:25
>>429
あんまり生産的なやり取りじゃないから
見てて気分よくないけどな。
431デフォルトの名無しさん:2006/10/09(月) 17:42:01
馬鹿がうつるってのはあるけどな
432デフォルトの名無しさん:2006/10/10(火) 03:04:39
つまり良くねーんじゃねーか。
433あぼーん:あぼーん
あぼーん
434349:2006/10/11(水) 10:48:49
あぁ、ここに書き込んでたのか。
クラス名・変数名スレに書き込んだつもりだったんだけど
どこいったんだかわからなくなってた。

で、だ、これ、適当にしたほうがっていうのは
名前に関して2時間とか3時間とか1日とか悩んでも
結局変更することになるんだからほどほどにしとけって意味。

# ていうか、俺が悩んでつけた名前って言うのは
後から見るとピントはずれなことが多い。

リファクタリングをしないって意味じゃない。
Cだとリファクタリング大変だけど・・・。
435デフォルトの名無しさん:2006/10/11(水) 16:25:58
もういいって。
436デフォルトの名無しさん:2006/10/11(水) 22:28:55
>>434
>俺が悩んでつけた名前って言うのは
名前で悩む前に設計がそれで適切なのかを考えてはどうか。
どの変数・関数がどんな役割を持つのかハッキリしないから
どんな名前つけて良いかが分からない。
役割がハッキリしてればその役割をそのまま名前に落とせば良い。

命名に詰まる時は、設計見直しのサインだよ。
437デフォルトの名無しさん:2006/10/12(木) 01:49:11
他人が書いたコードを整理していると、しばしばネーミングに困る。
438デフォルトの名無しさん:2006/10/12(木) 02:47:24
>命名に詰まる時は、設計見直しのサインだよ

悩んだ末にすっきり名前が決まると、なんつーかこう、宿便が抜けたような爽快感。
それだけで仕事が終わった様な気持ちになれるな。

いや、冗談抜きで名前が決まった時点で仕事の何割かは完了してるわけなんだけどさ。
439デフォルトの名無しさん:2006/10/14(土) 21:34:09
lpszStrButtyakeBuririant0001->getSTRLFSPACETABCOMMA(index)->getSTRCONTROLSHIFTTAB(index_ind)->getChar(index_chr);
440デフォルトの名無しさん:2006/10/28(土) 15:46:28
うわー。。。
441デフォルトの名無しさん:2006/10/28(土) 18:35:19
malloc 関数で確保してるのに開放は delete 演算子。
2つのメンバ関数間でしか使われてないのでスタック割り当てで十分なはずだが、なぜかメンバ変数。
単体の画面アプリで外から呼ばれるはずもないのに、全てpublic関数。
const の検索結果0件。#DEFINEすら使ってない。何もかもリテラル。
default 句のない switch 文。default が不要な理由などどこにも書いてない。
JOIN すれば一発なのに、単体テーブルアクセスを内部で毎レコード繰り返してるDB参照処理。

どう見ても作り直しです。本当にありがとうございました。
442デフォルトの名無しさん:2006/10/28(土) 18:41:50
つ ラップしちゃえ!
443デフォルトの名無しさん:2006/10/30(月) 04:26:42
malloc(strlen(p)))
444デフォルトの名無しさん:2006/10/31(火) 01:52:02
>>443
それだけ見ても、下手かどうか判断できないが。
例えばfgets()の直後に、改行文字を取り除いた文字列の複写を得たいのなら、妥当じゃないか。
445デフォルトの名無しさん:2006/10/31(火) 13:04:04
>>444
その処理なら strdup でいいと思うが。
446デフォルトの名無しさん:2006/10/31(火) 18:14:51
>>445
strdup がなかったら?
447デフォルトの名無しさん:2006/10/31(火) 18:40:47
↓ strdup無いなんてどんな環境だよ
↓ ○○環境にはないんだよボケ
↓ だったら自分でやりゃいいだろボケ
↓ ○○も知らないくせに下手なコードとか言うなボケ
↓ (グダグダな流れが続く)

という予感
448デフォルトの名無しさん:2006/10/31(火) 19:39:16
>>446
>strdup がなかったら?

malloc(strlen(p)+1) と strcpy だな。
449デフォルトの名無しさん:2006/10/31(火) 19:48:18
>>448
長さ覚えといてmemcpyの方がだいぶ速いことがあるよ。
450デフォルトの名無しさん:2006/11/20(月) 22:02:11
for(;;){
if(judge){
break;
}
〜〜〜
〜〜〜
}
451デフォルトの名無しさん:2006/11/20(月) 22:09:22
>>450
そういうのは終了条件( if(judge){ break; } に相当するトコ)が
複雑になる可能性があるときに書くことあるなぁ。
452デフォルトの名無しさん:2006/11/20(月) 22:13:26
>>451
理解の範囲を越えています。
453デフォルトの名無しさん:2006/11/20(月) 22:21:05
>>443
コンパイルエラーじゃね?
454デフォルトの名無しさん:2006/11/20(月) 22:53:55
>>453
その根拠は?
455デフォルトの名無しさん:2006/11/20(月) 23:53:49
閉じ括弧が1つ多い。
456デフォルトの名無しさん:2006/11/21(火) 01:01:21
セミコロンがない
457デフォルトの名無しさん:2006/11/21(火) 11:19:53
セミコロン
は文の区切りです
458デフォルトの名無しさん:2006/11/21(火) 23:56:48
>450
↓だったら普通。また将来↓にする予定で>450と書くのも分からんではない

for(;;){
 if(条件1){
  break;
 }
 if(条件2){
  break;
 }
 :
 if(条件N){
  break;
 }
 :
}
459デフォルトの名無しさん:2006/11/22(水) 00:14:27
それは普通
for(;;){
if( is_must_to_break( ... ) ) break;
.
.
.
}
と書くだろ
460デフォルトの名無しさん:2006/11/22(水) 00:16:25
>>458
while(is_proceding()) {
 :
}
461デフォルトの名無しさん:2006/11/22(水) 02:34:05
>>459
be動詞+助動詞+to+動詞
についてkwsk
462デフォルトの名無しさん:2006/11/22(水) 02:38:51
All your bases are belong to us.
463デフォルトの名無しさん:2006/11/22(水) 02:45:42
FIXME: bloken English
464デフォルトの名無しさん:2006/11/22(水) 22:49:57
>>461
火星語
465458:2006/11/23(木) 00:11:50
>459,460
あれが一番常識的っつー意味で「普通」なのではなく
あーいう書き方をしてもそれほど変とも言い切れない、
という意味で「普通」です。

まぁかなり限定的だけど…
466デフォルトの名無しさん:2007/01/14(日) 15:04:58
このスレでまたコードの更正やっていいですか?w
467デフォルトの名無しさん:2007/01/14(日) 20:30:42
ok
468デフォルトの名無しさん:2007/01/15(月) 14:01:00
while(*d++ = *s++);
469デフォルトの名無しさん:2007/01/17(水) 02:29:29
>>459
クソワロタ
470450:2007/01/21(日) 18:48:43
#ifndef __HEADER_H__
#define __HEADER_H__

#define VOLTAGE0_STRING "voltage1"
#define VOLTAGE1_STRING "voltage2"
#define VOLTAGE2_STRING "voltage3"

#endif //__HEADER_H__
-------------------------------------

いろいろな意味で勘弁してよ〜
471デフォルトの名無しさん:2007/02/09(金) 06:05:45
#define BASE \
 unko_t **my_unko;\
 int penis_count;\

struct SuperPenis {
 BASE
 ...
}

struct OldCunt {
 BASE
 ...
}

こういうの嫌い。ていうかマクロで変数定義済ませるコードはイヤ。
472デフォルトの名無しさん:2007/02/09(金) 10:19:26
そんなヤツはおらんやろ〜
473デフォルトの名無しさん:2007/02/09(金) 10:39:18
>>471
これは酷い。
474デフォルトの名無しさん:2007/02/09(金) 16:23:19
>>471
うーん。本来
struct Base {
 unko_t **my_unko;
 int penis_count;
}

struct SuperPenis {
 Base base;
 ...
}

struct OldCunt {
 Base base;
 ...
}
であるべきなのを、
その様なベタ書きなデータ設計を強制されるなら
自分もやってしまいそうです
475デフォルトの名無しさん:2007/02/09(金) 16:33:33
やるなよ。
476デフォルトの名無しさん:2007/02/09(金) 17:28:00
ところがこれが VC のコードで DECLARE_BASE とかいう名前だと
さほど違和感が無いあたり、漏れはMSに毒されてるな・・・
477デフォルトの名無しさん:2007/02/10(土) 05:53:40
オプソのライブラリとかでもよく使われてる。>マクロによる一括変数定義
名前空間が特定のライブラリ色に染められるのが不愉快。
こんなだから、再利用性の低いコードばかり生まれるんだよな。

ちなみに、>>471 の方法は、Perlのコードに使われてたのを引っ張ってきた。
478デフォルトの名無しさん:2007/02/10(土) 11:52:37
それにしても例に使ってる変数名と構造体名はどうにかならなかったものか。
479デフォルトの名無しさん:2007/02/11(日) 04:43:32
かたじけない。
480デフォルトの名無しさん:2007/02/11(日) 11:49:31
>>471, >>476
最近の開発で、委譲ベースのMemoryPoolクラスを用意して、

#define MEMORYPOOL_DECLARE(CLS, NUM) ¥
typedef MemoryPool<CLS, NUM>::MyMemPool ¥
static void * operator new(size_t size) {return MyMemPool::alloc(size);} ¥
static void operator delete(void * p, size_t size) {MyMemPool::free(p, size);} ¥

みたいなのを作ったばかり・・・。
481デフォルトの名無しさん:2007/02/11(日) 12:42:49
>>480
マクロを使わずにこんなんじゃ駄目だったの?
俺は多重継承でこういういmixin的な使用方法をわりとするけど。

template<typename CLS,int NUM>struct MemoryPool :{
    ...
    ...
    static void * operator new(size_t size) {return alloc(size);}
    static void operator delete(void * p, size_t size) {free(p, size);}
};
class CLS : public MemoryPool<CLS,100>{
    ...
};
482デフォルトの名無しさん:2007/02/11(日) 13:28:54
>>481
出来ればそうしたかったんだけど、
MemoryPoolクラスの中身を↓な風に作ってて・・・。

template<typename T, size_t NUM>
struct MemoryPool {
unsigned char * buffer_[sizeof(T)];
...
static MemoryPool block_[NUM];
...
};

class Hoge : public MemoryPool<Hoge, 100> {
....
};

ってすると、sizeof(T)が確定しなくて、
コンパイルエラーになってしまう。
作りを大幅に変えずにエラーを回避する方法はないだろか・・・?
483デフォルトの名無しさん:2007/02/11(日) 16:15:41
開発環境は何使ってるんだ?

>>482 の方法で、Visual Studio 2005 Express だと問題なくコンパイルできるぞ。

ただ、

class Hoge: public MemoryPool<Hoge, 100>{

は、当然 Hoge の再定義になるから、

class Hoge1: public MemoryPool<Hoge, 100>{

... とする必要あるけど。

また、うまく動作するかは試してないけどな。
484デフォルトの名無しさん:2007/02/11(日) 17:55:42
>>483
環境はVC++6.0です。

> class Hoge1 : public MemoryPool<Hoge, 100>
これだと新たにクラスを作らないといけないので・・・。
ところでさっきのコードは不正確でした。
実際はこんなかんじです。
Effective C++(だかModern C++ Design)を参考にしています。

template<typename T, size_t NUM>
struct MemoryPool {
union Chunk {
unsigned char buffer_[sizeof(T)];
Chunk * next_;
};
static Chunk block_[NUM];
static bool blockInitialized_;
static Chunk * head_;

static void * alloc(size_t size);
static void free(void * p, size_t size);
};

スレ違いのような気もするけど、自分がヘタレだと云う点では
間違っていないな・・・。
485481:2007/02/11(日) 18:32:39
>>484
んーそういう場合は実体化のタイミングをずらせばOK。
..なんだけどVC6ってこれ大丈夫だっけ。VC6はtemplate絡みのバグ多すぎでイケるか自信ない...

template<typename T>
union Chunk{
    unsigned char buffer_[sizeof(T)]; 
    Chunk * next_; 
};
template<typename T, size_t NUM> 
struct MemoryPool { 
    static Chunk<T>*block(){static Chunk<T>block_[NUM];return block_;}
    static bool blockInitialized_; 
    static Chunk<T>* head_; 
    static void * alloc(size_t size); 
    static void free(void * p, size_t size); 
};
486デフォルトの名無しさん:2007/02/11(日) 20:03:46
>>485
おお。試してみたところ期待通りの結果(継承に置き換え可能)になりました。
(そのままでもOKでしたが、ChunkはMemoryPoolのインナークラスにしました)
なるほど実体化の遅延ですか。勉強になりました。
487デフォルトの名無しさん:2007/02/12(月) 03:29:09
480です。しまった、ちゃんとお礼を云ってなかった。
>>481さん、>>483さん、ありがとうございました。

スレ汚しすみません。
488デフォルトの名無しさん:2007/03/17(土) 20:25:00
chokin = chokin != 0 ? chokin : 0;
489デフォルトの名無しさん:2007/03/17(土) 20:27:06
最適化で消滅しそうだな
490デフォルトの名無しさん:2007/05/10(木) 16:49:30
ム板のその4の次スレ、ここでいいの?
491デフォルトの名無しさん:2007/05/10(木) 16:50:16

×ム
○マ
492デフォルトの名無しさん:2007/05/21(月) 18:57:37
age。
493デフォルトの名無しさん:2007/06/01(金) 00:09:59
今やってるプロジェクト、Cで作っているけど動的なメモリ確保は禁止なんだぜ?
リークの原因になるからだって。
494デフォルトの名無しさん:2007/06/01(金) 00:30:24
>>493
一昔前のゲームプログラムとか(携帯機なら今でも)、組み込みだと当たり前では?
495デフォルトの名無しさん:2007/06/01(金) 01:33:15
どこの「当たり前」だよ
496デフォルトの名無しさん:2007/06/01(金) 01:48:40
そもそも動的に割り当てるほどのメモリが無いというならともかく、
リークするからとmallocを禁止するのは当たり前とは言えないだろうな。
497デフォルトの名無しさん:2007/06/01(金) 08:08:12
mallocがクソな環境もあるんだよ
498デフォルトの名無しさん:2007/06/01(金) 10:02:54
普通に使っていてリークするようなクソmallocがあるのか、
そりゃたいへんだな。
499デフォルトの名無しさん:2007/06/01(金) 12:14:13
リンクオプションで領域確保しておいて、その中で自前で管理するってプロジェクトはあったな。
500デフォルトの名無しさん:2007/06/02(土) 12:22:58
リークするからと言う理由だけじゃなくて、そもそも必ず確保できるわけじゃない
可能性があるから malloc() 禁止のところは組み込みなら普通にある。

misra malloc とかでぐぐってみ。
501デフォルトの名無しさん:2007/06/02(土) 13:26:43
> 確保できるわけじゃない可能性があるから malloc() 禁止のところは組み込みなら普通にある。

そんなことは誰でもしってます
502デフォルトの名無しさん:2007/06/02(土) 13:36:13
> そんなことは誰でもしってます
とりあえず知らない人間はいないことをどうやって証明したのかkwsk
503デフォルトの名無しさん:2007/06/03(日) 03:28:59
マロックさんをわるくいうんじゃない!!
504デフォルトの名無しさん:2007/06/04(月) 11:10:03
>>502
誰もが最初は知らなかった筈ですから、
「誰でも」が「遍く」ではないことは想像できることです。
では「誰でも」とはどういった範囲の人たちを指しているのでしょう?
それは >>500 のみぞ汁。
505>>500:2007/06/04(月) 22:57:36
> 「誰でも」が「遍く」ではないことは想像できることです。

言い訳乙。

少なくとも俺は、唐突に「誰でも」って書かれたら、全世界の人間を想定する。
506デフォルトの名無しさん:2007/06/04(月) 23:02:35
お前が宇宙人を差別することは分かった。
507デフォルトの名無しさん:2007/06/05(火) 06:16:20
自分が悪い時に、素直に間違いを認めず「だけど、〜」って関係ない事象を語って
煙にまこうとする奴を見た時は「ヘタだなぁ」と思うな。

コードじゃないけど。
508デフォルトの名無しさん:2007/06/05(火) 06:53:36
なんか>>504から臭ってこない?
509デフォルトの名無しさん:2007/06/05(火) 09:26:57
組込みやらないやつはsbrkとか自分たちで実装する
環境なんて思いもよらないんだろうな。。。

組込みやらないやつは
void main
を見て
int main
じゃないから下手だ、とか言うんだろうな。
510デフォルトの名無しさん:2007/06/05(火) 10:37:29
組み込みにはOSがないと思い込んでいるなら下手どころじゃないがな。
511デフォルトの名無しさん:2007/06/05(火) 10:59:34
石屋にはなりたくない。へたすりゃ携帯屋だもん。
512504:2007/06/06(水) 11:15:24
>>505
>言い訳乙。
504 ≠ 500 ですよ。間抜けですね。
>全世界の人間を想定する。
素人が知ってるわけがないでしょうに。間抜けですね。
513>>500:2007/06/06(水) 22:33:39
自演乙。
514デフォルトの名無しさん:2007/06/14(木) 20:32:22
変数宣言とか行末コメントを揃えて書いてあるのを見ると、下手だと思ってしまう。
多分、コボラーを連想しちゃうからだと思う。

unsigned int hogehoge1;
int       hogehoge2;
double     hogehoge3;

間違いなくずれていると思うが、変数の開始位置が揃っていると思ってけれ。
515デフォルトの名無しさん:2007/06/14(木) 21:08:51
>>514
これはいまのソースコードがプレーンテキストで記述されていることからくる
問題であって本来テーブル記述できるべきもんだと思うし、俺は揃えてある
ほうが好きだけどなぁ。
516デフォルトの名無しさん:2007/06/14(木) 21:42:22
可読性のために変数を揃えることはある
517デフォルトの名無しさん:2007/06/14(木) 22:07:47
揃えようが揃えまいが可読性は変わらないな、俺の場合。
下手に揃えてあると、修正が面倒くさい。
変数を一個追加するだけなのに、全ての変数宣言を修正する羽目になったりするし。
518>>500:2007/06/14(木) 23:27:27
変数宣言は俺も昔は揃えてたけど、最近はあまり気にしなくなった。

でも、行末コメントは今でも揃えてる。ばらばらだと読み辛いから。
519デフォルトの名無しさん:2007/06/15(金) 01:52:54
このソース評価してやってくれませんか、皆さん。
http://pc11.2ch.net/test/read.cgi/tech/1042032733/625

イマイチ反応がなくて寂しかったので
よろしくお願いしますm(_ _)m。
520デフォルトの名無しさん:2007/06/15(金) 02:07:24
PL/SQL なんだけど、テーブルからデータを取得する関数が
すでに作ってあるから使って、といわれた。

ライブラリを見てみたら、関数は戻り値が整数型でエラーコードを返す。
これはまいい。

引数を見ると、最初に2つくらいがDB検索のキー。
そしてその後ろに、10個近くのデータ出力用の引数がずらりと並んでいた。
デフォルト引数など用意されているはずもなく、
俺が必要なのはそのうちの1つか2つなのに、この関数を使うためには、
まったく必要のないダミーバッファを引数として渡さなければならないという。

そんなもん使う気にもなれず、select 文書きましたよ。where条件だって
その方が自在だしな。
521デフォルトの名無しさん:2007/06/15(金) 07:46:27
>>520
せめてNULLなら無視してくれる仕様だったらよかったのにな
522デフォルトの名無しさん:2007/06/16(土) 18:53:06
そういう仕様を考えるのは、汎用機あがりに多いね。
523デフォルトの名無しさん:2007/06/17(日) 01:06:10
>>520
いまいち状況よくわからんけど、ラッパー書けば済む話じゃないのか?
524デフォルトの名無しさん:2007/06/17(日) 06:20:25
そうだよな。そこでデザインパターンの登場ですよと。
525デフォルトの名無しさん:2007/06/17(日) 19:26:18
ラッパークラスにHeyYoと名付けたら怒られた。
526デフォルトの名無しさん:2007/06/17(日) 21:18:39
ラッパークラス名にhogeって書いたら怒られた
http://www.hoge.org/
527デフォルトの名無しさん:2007/06/18(月) 00:17:01
// 消費税を計算する
price = price + 1.5; // 1.5かける


かけてないじゃん
そんなコメントはいらん
*= 使え
ぼったくりすぎだろ
べた書きすんな。何のために期間管理付きの設定ファイル作ったと思ってんだコノヤロウ


と、コードより指摘事項が長くなるようなレビューを続けること1週間。
コンパイラも静的解析ツールも馬鹿の前には無力。もう疲れた...
528デフォルトの名無しさん:2007/06/18(月) 15:42:29
>>527
もつかれw
なんというか、プログラミング以前の数々の間違いにワロタw
529デフォルトの名無しさん:2007/06/18(月) 18:10:21
デンマークですら消費税25%だぞw
530デフォルトの名無しさん:2007/06/18(月) 21:04:57
ちょwwww

これはぜひとも晒しageなくてはw
531デフォルトの名無しさん:2007/06/18(月) 21:06:07
>>527を「price *= 1.05」に直してきたら「将来消費税率が上がったら税額計算してるとこ全部書き直すの?」と突っ込む。
んで、「#define TAX_RATE 1.05 …」とやってきたら「累進税率になったらどうしよう?」
そして「int tax_in(int price){ return price * TAX_RATE; }」→「品目別税率になるかもしれないね」
ここでキレたり泣き出さなかった新人がようやく使い物になる。
532デフォルトの名無しさん:2007/06/18(月) 21:09:05
>>531
超アホな癖がつくからそんなことを新人にやるな。
533デフォルトの名無しさん:2007/06/18(月) 21:13:16
税率が変わることは可能性が高いから考慮するが、後ろの2つは切り捨てていいだろう。
くだらないことを考えて複雑なコードを書くヤツは下手糞。
534デフォルトの名無しさん:2007/06/18(月) 21:19:32
>>533
禿道
「かもしれない」可能性論で実装するのはアホ
大体、消費税が大きく変わったら、そこで予算取って仕事にするんだから、
今下らない理由で無駄な作業をやらせるのは愚行

>「累進税率になったらどうしよう?」
ならなかったら、この作業分の無駄をどうpayするんだ?
>「品目別税率になるかもしれないね」
ならなかったら、この作業分の無駄をどうpayするんだ?
535デフォルトの名無しさん:2007/06/18(月) 21:24:41
>>534
真の問題はその作業分が無駄になるだけじゃなくソースコードが
肥大化することでメンテナンスコストが増大することだろ。
536デフォルトの名無しさん:2007/06/18(月) 22:02:40
むしろ真の問題は帰りがけに背中を刺されること。
537デフォルトの名無しさん:2007/06/18(月) 22:05:17
むしろそれは最善の解決策
538デフォルトの名無しさん:2007/06/18(月) 22:08:36
とりあえず >>531 みたいな馬鹿がいるとこ就職しちまったヤツには深く同情する。
539デフォルトの名無しさん:2007/06/18(月) 22:19:23
将来の事を考えてバリアント型にしておきましたッ!!
540デフォルトの名無しさん:2007/06/18(月) 22:27:50
お前の将来は何時までたっても泥沼なのかyo
541デフォルトの名無しさん:2007/06/18(月) 22:51:03
> 税額計算してるとこ全部書き直すの?

そもそも、税額計算してるところが複数ある設計に問題があるだろ...。
542デフォルトの名無しさん:2007/06/19(火) 00:20:34
みんな、531をそんなに苛めるなよ。
531は会社で評価されていなくて、新人を苛めるくらいしか仕事が無いんだよ。
本人は、「俺って先を読んで設計できる上級者」とか思っているんだから。
余り苛めると引きこもりになっちゃうぞ。
543デフォルトの名無しさん:2007/06/19(火) 07:13:54
でもリファクタリングがはやって、思考停止するやつが増えたような気もする。
今回の流れみたいな雰囲気で話するやつが多い。
今回はの流れはわかるけど。
極論を話すやつもいるから。単に仕事をするのがいやって理由だったりする。
そのくせ、締め切りまぎわにまでリファクタリングとかって引っ張る。
設計の思考停止を実装でカバーってな風。
544デフォルトの名無しさん:2007/06/19(火) 08:10:33
それなんて俺?
545デフォルトの名無しさん:2007/06/19(火) 15:17:45
> そのくせ、締め切りまぎわにまでリファクタリングとかって引っ張る。
おれおれ
546デフォルトの名無しさん:2007/06/19(火) 21:51:18
>>531みたいに未来の仕様を先回りして実装するのは下手だが
実際に仕様が追加されたとき(>>531の例でいうと累進税率や品目別税率)に
何箇所も直したりプログラムの構造を変えなくちゃいけなくなったりするのも下手
すなわちYAGNI
547デフォルトの名無しさん:2007/06/20(水) 00:13:58
CVSとgrepと正規表現置換ができるエディタがあれば無問題
548527:2007/06/20(水) 01:10:39
>>531
一個だけ補足。
新人じゃないよ。
549デフォルトの名無しさん:2007/06/20(水) 02:16:37
>>548
オチだとしたらできすぎだよw
おつかれ。
550デフォルトの名無しさん:2007/06/20(水) 07:19:46
設計の妥当性の検証って1週間〜1ヶ月くらいはかかると見ておいた方がいいね。
例えば、ふと思いついた設計が、実は糞仕様だったのでその実装をやり直すってよくあるだろ。
まあ、実装してみなければわからん糞さってのもあるけど。
そこを熟成させるために実装を遅らせる効果は大きい。
バージョン管理していても、その糞実装したコストは変わらないわけで。
551デフォルトの名無しさん:2007/06/21(木) 00:52:35
規模も複雑さも書かずに1週間〜1ヶ月と言われてもなぁ。
552デフォルトの名無しさん:2007/09/03(月) 15:47:43
よしあげてやる
553デフォルトの名無しさん:2007/09/04(火) 16:13:00
>>132
>それ以前に何故にthisを明記するか。
this->とやると、入力補完出来るんだよ。
554デフォルトの名無しさん:2007/09/04(火) 19:03:30
this入力しないとメンバも保管できないIDEってwwww
555デフォルトの名無しさん:2007/09/04(火) 19:11:58
if (f.isVisible() == true)

みたいな不要なことをするやつ。

#define SIZE 10
for (int i = 0; i < SIZE; i++)

みたいにして意地でも配列を使う奴。

typedefしまくってるやつ。
556デフォルトの名無しさん:2007/09/04(火) 19:52:53
>>554
井出って、誰だよwwww
557デフォルトの名無しさん:2007/09/04(火) 20:40:53
>ぱっと見て「ヘタだなぁ」と思うコード

俺のコード。
558デフォルトの名無しさん:2007/09/05(水) 00:10:32
まだあったか、このスレ。
そろそろまとめサイトでも作るか。
559デフォルトの名無しさん:2007/09/05(水) 00:22:12
>>556
伝説巨神
560デフォルトの名無しさん:2007/09/05(水) 02:43:55
>>559
イデオンなんてシラネエよ!
ジジイ世代乙。
561デフォルトの名無しさん:2007/09/05(水) 03:56:22
>>9
してないと勝手に1回呼んでくれるからな
562デフォルトの名無しさん:2007/09/05(水) 05:08:34
>>560
よお、グレンダイザー
563デフォルトの名無しさん:2007/09/06(木) 00:22:18
>556
芸人ランナー
564デフォルトの名無しさん:2007/09/06(木) 06:09:23
ぶっちゃけ、このスレみるより
mixiのプログラム関係のコミュを見たほうが
悪いコードの見本には事欠かないような気がする
565デフォルトの名無しさん:2007/09/06(木) 07:45:05
また、ソースうpして添削してもらうかな
566デフォルトの名無しさん:2007/09/07(金) 11:00:21
>>554
だって候補に型やらグローバルオブジェクト出てきて鬱陶しいもの。
567デフォルトの名無しさん:2007/09/14(金) 00:58:46
>>555
> if (f.isVisible() == true)

いたなぁ。
「こっちの方が分かりやすい」とかいいながら
一個だけ!= trueが混じってた時は殺意がわいた。
568デフォルトの名無しさん:2007/09/14(金) 01:11:44
>>555
似てるけどこういうの居た。(VB)bInchikiはBoolean型です。
 If bInchiki <> False Then
でもInteger型の変数でも同じ書き方であちこちに散りばめられていた。
569デフォルトの名無しさん:2007/09/14(金) 09:33:09
>>567
> 「こっちの方が分かりやすい」とかいいながら
> 一個だけ!= trueが混じってた時は殺意がわいた。

ワロタw 無駄なもの書いてバグらせておいて、
まったく世話がない (#^ω^)ピキピキ
570デフォルトの名無しさん:2007/09/14(金) 20:51:57
コードではないが、仕様書を作るときにexelを指定されると、長時間労働を覚悟する。
さらに、印刷時に1ページにおさまるようなフォーマットになっていると、デスマーチを覚悟する。
挿入や削除がやりにくいんじゃ〜
571デフォルトの名無しさん:2007/09/15(土) 08:31:52
>570
それは単にお前さんがExcelについて勉強不足なだけでは。
572デフォルトの名無しさん:2007/09/15(土) 08:52:43
OLの友達でもいれば教えてもらえるようなレベルだろうな、きっと。
573デフォルトの名無しさん:2007/09/15(土) 10:18:40
もうExcelでプログラム書いちゃえよw
574デフォルトの名無しさん:2007/09/15(土) 10:36:53
エクセルで仕様書って、目次はどうしてんの?
575デフォルトの名無しさん:2007/09/15(土) 10:39:23
某社のプロジェクトでは手作りだったなぁ。
576デフォルトの名無しさん:2007/09/15(土) 18:40:51
無知ゆえに意味もなく使いたがったり、逆に頓珍漢な理由で拒絶する。
577デフォルトの名無しさん:2007/09/15(土) 19:30:03
>>574
目次は、ページ番号まで載せるのは辛いので、章番号、節番号までのせて我慢する。
章毎にインデックスシールつける。
578デフォルトの名無しさん:2007/09/15(土) 21:51:31
>>574
うちでは、1シート1ページになるように、様式の枠が用意されている。
ページ番号は、印刷して確認して手作業で振る。
579デフォルトの名無しさん:2007/09/15(土) 23:12:43
texという手はないのか
580デフォルトの名無しさん:2007/09/15(土) 23:34:28
そんな手が使えるくらいなら、ExcelじゃなくてせめてWordを使うだろ。
あれなら一応、目次くらいは作ってくれる。
581デフォルトの名無しさん:2007/09/15(土) 23:47:55
おまえらエクセルをあなどりすぎ、
目次ができない。そんなの簡単にできるよ。

なんてったって、世の中で一番生産性が高いプログラム環境なんだって
582デフォルトの名無しさん:2007/09/16(日) 07:32:45
うちには、ExcelでできたソフトウェアやExcelでできたインストーラがある。
583デフォルトの名無しさん:2007/09/16(日) 07:54:41
> Excelでできたインストーラ

うそだww
584デフォルトの名無しさん:2007/09/16(日) 08:36:20
>>582
なんか燃えやすそうだな
585デフォルトの名無しさん:2007/09/16(日) 10:37:51
昔Excelでファイラー作った事がある
586デフォルトの名無しさん:2007/09/16(日) 11:02:04
Excelでゲーム作ってる人いたな

レトロゲーム、クラシックアーケードゲームを無料ダウンロード!Excelゲーセン 
http://cgi30.plala.or.jp/chikada/vba/acd.shtml
587デフォルトの名無しさん:2007/09/27(木) 20:05:46
下手というかイヤというか。

char *String
588デフォルトの名無しさん:2007/09/28(金) 08:12:07
JAVAで
Iterator itr = fooList.iterator();
while(itr.hasNext())
{

}

forを使えばいいじゃなーい
for(Iterator itr = fooList.iterator(); itr.hasNext();)
{

}

itrのスコープが抑えられる!
589デフォルトの名無しさん:2007/09/28(金) 08:16:02
C++でそういう阿呆なコードは見たことがないのは何故だろう。
590デフォルトの名無しさん:2007/09/28(金) 10:48:10
fooList中の特定の要素を削除するループ書いてみ
591デフォルトの名無しさん:2007/09/28(金) 10:53:30
VB で定数が左
If True = HogeHoge(A, B) Then
Cならまだしも、VB でやっても何の意味もないのに。
けっこう長いリストでちょうど半分くらいがこれだったから萎えた。
指定した行の左右をワンキーで入れ替えるアドイン書いちゃったよ。
592デフォルトの名無しさん:2007/09/28(金) 11:14:09
入れ替えても何の意味もなくね?
593デフォルトの名無しさん:2007/09/28(金) 11:40:41
>>592
コンピュータ使って計算するのも,そろばん使って計算するのも何の違いも泣くね?
594デフォルトの名無しさん:2007/09/28(金) 20:39:31
>>591
Cでも定数を左に書くやつは馬鹿にされてるけどね。
実際にまともなコードも書けないし。
595588:2007/09/28(金) 21:41:10
>589
俺のコードが阿呆?どこら辺がだめなのか教えてくれませんか?

>590
どういう意味?こんなんじゃだめかな。
for (Iterator itr = fooList.iterator(); itr.hasNext();)
{
if ("target".equals(itr.next()))
{
itr.remove();
}
}
596デフォルトの名無しさん:2007/09/28(金) 22:20:25
foreach(it, v) { … }
597デフォルトの名無しさん:2007/09/28(金) 22:35:23
>>593
あるだろアホかお前
598デフォルトの名無しさん:2007/09/29(土) 05:42:41
>>594
天下の目立を愚弄するのですね

規約になってる現場では俺も欝だったけど
599デフォルトの名無しさん:2007/09/29(土) 09:14:02
目立はハード屋としては優秀だがソフトはダメダメだろ
600デフォルトの名無しさん:2007/09/29(土) 09:20:54
600
601デフォルトの名無しさん:2007/09/29(土) 12:51:48
ソフトのことを言ったらNECも富士通もダメダメだよな。
602デフォルトの名無しさん:2007/09/29(土) 16:23:42
>>599
勿論、知ってます

>>601
NECや富士通は目立ほど頭が固くないからまだマシ
目立の意味無く長時間なレビューに付き合わされた日には全治3日程度の欝になります
仕様書を音読するって小学校?
603589:2007/09/29(土) 22:17:50
>>588
前者。つまり、C++ではforを使わずwhileの外でイテレータを定義している例を見たことがない。
604デフォルトの名無しさん:2007/09/30(日) 00:53:07
>603
へー なんでだろ不思議だね。
有名どころのJava本にwhileでの使用例が載ってたのかな。
それともサソじゃばの試験対策本だろうか・・・
605デフォルトの名無しさん:2007/09/30(日) 03:16:00
恥を忍んで尋ねるが
C++ってイテレータでループ回してる間に
要素を削除追加してもokなの?
606デフォルトの名無しさん:2007/09/30(日) 03:21:21
コンテナによる
607デフォルトの名無しさん:2007/10/01(月) 23:49:19
>>602
うひゃぁ。もしかしてあなた戦友かも。
いろんなところで仕事したけど、顧客レビューで数百ページの仕様書を
1行1行音読させられたのはあそこだけだったよ。

顧客レビューに半年かかって、結局目立が顧客に頭下げてリスケ。
608デフォルトの名無しさん:2007/10/01(月) 23:59:01
>>588
5以降で、コレクションがIterableなら、さらに短く
for(final T e : TList) {}
にできるね。
609デフォルトの名無しさん:2007/10/06(土) 20:53:00
仕事サボって2ch見ている奴を見たとき。
610デフォルトの名無しさん:2007/10/06(土) 22:48:15
>>609
スレタイ100回!
611デフォルトの名無しさん:2007/10/08(月) 02:00:23
仕事サボって2ch見るようなコードをぱっと見て
「ヘタだ」とは思わんなァ…

「何コレ…」とは思うだろうけど。
612デフォルトの名無しさん:2007/10/08(月) 02:15:05
二行目で断定して、三行目で推定してるってことは、
二行目は自分の事を弁解したもので、
三行目は他人から見た自分の姿を推定したもの、という解釈で良い?
613デフォルトの名無しさん:2007/10/08(月) 08:50:13
>>611ほど受け答えのできるコードなら
逆に舌を巻くだろうなー
614デフォルトの名無しさん:2007/10/08(月) 11:30:57
つ うずら
615デフォルトの名無しさん:2007/10/15(月) 09:12:32
java.sql.Connection con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement(RESTORE_CHARACTER);
ResultSet rset = statement.executeQuery();
while (rset.next()) {
  _name = rset.getString("name");
  _phone = rset.getString("phone");
  _address = rset.getString("address");
  break;
}
rset.close();
statement.close();

プッ
616デフォルトの名無しさん:2007/10/18(木) 02:27:05
何か問題ある?
617デフォルトの名無しさん:2007/10/18(木) 13:40:58
多分ループせずにrset.last()使えって事かと
618デフォルトの名無しさん:2007/10/18(木) 13:46:16
>>617
どういうことですか?
619デフォルトの名無しさん:2007/10/18(木) 22:32:08
>>618
上のコードだと、ループの最後の値しか残せてないよね?
620デフォルトの名無しさん:2007/10/18(木) 22:33:28
>>619
アホすぎるwwwwwww
621デフォルトの名無しさん:2007/10/18(木) 22:33:34
>java.
bakaっぽい名前空間だな・・・
622デフォルトの名無しさん:2007/10/19(金) 03:34:09
いきなりbreakで抜ける気がするのだが。
623デフォルトの名無しさん:2007/10/19(金) 07:56:30
こういうアホもPGには混ざってるんだから、その辺も考慮してコーディングしろって事だろ。
624デフォルトの名無しさん:2007/10/19(金) 13:21:12
ぱっと見て「ヘタだなぁ」と思うコード その6
http://music8.2ch.net/test/read.cgi/compose/1192767608/

次スレ立てました
625デフォルトの名無しさん:2007/10/19(金) 14:13:11
>>624
おいおまいw 叩かれてるじゃんかw
626デフォルトの名無しさん:2007/10/19(金) 17:53:23
ぱっとみて「ヘタだなぁ」とおもう糞誘導。

板違いバレバレ。
627デフォルトの名無しさん:2007/10/19(金) 18:25:35
いや、そのものなんだが……
628デフォルトの名無しさん:2007/10/20(土) 02:12:55
本当はVBで書いてあったんだけど、VBよく知らんからとりあえずそれっぽく
思い出して書いてみた。 何も知らない新人が作ったとかじゃなくて、一応
それなりの年数勤めてて、周りの評判だと出来る人らしいんだけどね、、、

i=1;
while(1){
 switch(i){
  case 1:
   a[i] = "aaa";
   break;
  case 2:
   a[i] = "bbb";
   break;
  case 3:
   a[i] = "ccc" + foo(i);
   break;
// caseが20件位さらに続く
  default:
    goto HOGE;
 }
 i = i + 1;
}
HOGE:
// 上のループで作った配列の処理とかが続く
629デフォルトの名無しさん:2007/10/20(土) 03:25:20
イベントドリブンを知らないとは・・・
630デフォルトの名無しさん:2007/10/20(土) 04:39:44
>>628
VBだとそんなもんじゃないの
631デフォルトの名無しさん:2007/10/20(土) 08:42:40
>>628
つーか、お前はそれをどう書くべきだと思ったの?
632デフォルトの名無しさん:2007/10/20(土) 09:00:23
>>631
> つーか、お前はそれをどう書くべきだと思ったの?
628じゃないけど
a[1] = "aaa";
a[2] = "bbb";
a[3] = "ccc" + foo(3);
...

一見して、ループにする必要もないし、switchを使う意味もないのは明らかではありませんか。
633デフォルトの名無しさん:2007/10/20(土) 09:03:06
っていうか、どの部分の何が「ヘタ」だと思ったのか書かないと
単に「俺様気に食わないコード」発表会になっちゃってるよ、このスレ。
634デフォルトの名無しさん:2007/10/20(土) 09:07:09
場合によっては、
i = 1;
a[i] = "aaa"; ++i;
a[i] = "bbb"; ++i;
a[i] = "ccc" + foo(3); ++i;

a[i++] = "aaa"; とは書けても、
a[i++] = "ccc" + foo(i); とは書けないとこらがつらいが。
635デフォルトの名無しさん:2007/10/20(土) 09:09:40
巨大なswitch/caseは分割すべしってのは定石の一つだろ
636デフォルトの名無しさん:2007/10/20(土) 09:12:05
定石って、だれが言ってるの?
637デフォルトの名無しさん:2007/10/20(土) 09:12:36
そういうレベルなのかここは・・・
638デフォルトの名無しさん:2007/10/20(土) 09:37:23
巨大なswitchは分割すべしなんてあんまり聞かないなぁ。
639デフォルトの名無しさん:2007/10/20(土) 09:45:21
分割しなければならないほどの巨大なswitchを書かなければならないような
局面がめったにないし、仮にそうなったときにも、分割するのがお作法的に正しいか微妙な気がする。
640デフォルトの名無しさん:2007/10/20(土) 10:13:54
「リファクタリング」にはコードの危険な匂いの一つとしてswitch文
が上げられてるね。
641デフォルトの名無しさん:2007/10/20(土) 10:19:49
>>639
Cで何の工夫もなしでウィンドウプロシジャ書けば、すぐそのようなシロモノに
お目にかかることになるよ
642628:2007/10/20(土) 10:20:48
>>631
↓みたいのでよくね?

hoge[] = {"aaa","bbb",...} ;
for(i=1,i<hoge.length;i++){
 a[i] = hoge[i];
}
//ここで↑以外で加工が必要なのはループの外で書く
a[3] = a[3] + hoge(3);
...
//で、それ以降の処理
643628:2007/10/20(土) 10:30:23
×a[3] = a[3] + hoge(3);
○a[3] = a[3] + foo(3);

644デフォルトの名無しさん:2007/10/20(土) 10:41:05
>>640
それは文脈がちがう。

>>641
windowsのメッセージクラッカとみたいに、処理を追い出して、分岐部分のコードを小さくしようって
話はあるけど、分岐するコードを分割しようって話にはなりにくいんじゃないの?

もしかして「分割」って、処理を外に追い出すようなことを言ってるのかね?

コードコンプリートみたいなお作法関係の本でも、小さくしようとか書き方を変えようとかって
議論はあるけど、switchを分割しろって話はあまり見たことない。
645デフォルトの名無しさん:2007/10/20(土) 10:55:40
switch文を書き換えるんじゃなくて、分割か。
646デフォルトの名無しさん:2007/10/20(土) 10:57:02
なんか不毛なスレだな
何も得られない
何も深まらない
ただ読むことで書くことで刻一刻と残りの人生が磨り減っていく、そんなスレ
647デフォルトの名無しさん:2007/10/20(土) 11:33:07
殺伐としたスレにヘーベルハウスが!!

       /|
       |/__
       ヽ| l l│<ハーイ
       ┷┷┷


    _, ,_  パーン
  ( ゜д゜)
   ⊂彡☆====== /|
       __       |/
      ヽ| l l│
      ┷┷┷
648デフォルトの名無しさん:2007/10/20(土) 12:26:54
>>646
何をしてもしなくても
刻一刻と残りの人生は磨り減っていくんだよ
それだったら踊ろうぜ
649デフォルトの名無しさん:2007/10/20(土) 18:03:58
テーブルブランチャを意図的に作りたいなら、大きいswitchで良いと思うんだけど。
まあ、でかいswitchのcase文中にコード書くと、可読性が落ちるけど。
650デフォルトの名無しさん:2007/10/20(土) 18:28:11
まあATLのメッセージマップなんかも、結局マクロでswitchに見えないようにしてる
&実装部分を関数化するってだけだからな
それでも何の工夫も無いのとは大違いだが

もっとも、パフォーマンス的にシビアな部分でなければ(大抵はそうだ)、
関数ポインタ+表ルックアップ、動的/静的なポリモーフィズム等で代用できる
ケースも多いだろう。
651デフォルトの名無しさん:2007/10/20(土) 23:48:00








 無能クラス
652デフォルトの名無しさん:2007/10/21(日) 00:24:05
boolean isFoo() { 中略 }

if (isFoo())
 setBar(true);
else
 setBar(false);
653デフォルトの名無しさん:2007/10/21(日) 00:26:31
俺もヘタというか冗長だとは思うが結構それ好きな奴多いよな。
あまり有能無能に関係なくいる気がする。
ハカータイプにはまず見かけないが。
654デフォルトの名無しさん:2007/10/21(日) 00:29:59
>>652 の場合はFooとBarなんで意図がなんとなく分かるからいいけど、

boolean isFoo() { 中略 }
boolean isfoo;

if (isFoo())
 isfoo = true;
else
 isfoo = false;

ならば完全にイラッとする。
655デフォルトの名無しさん:2007/10/21(日) 00:33:27
というより、setBar(boolean b)っていうのが。
setBar(Bar bar)であってほしい。
setVisible(boolean b) とか
setEnabled(boolean b) が自然化と。

いえ、まあ、FooBarの使い方について突っ込むのはフェアじゃないですが。
656デフォルトの名無しさん:2007/10/21(日) 00:33:38
ついさっき見たよ…。
657デフォルトの名無しさん:2007/10/21(日) 07:30:37
C++でtypedef使ったらへたくそに見えるの?
658デフォルトの名無しさん:2007/10/21(日) 08:12:08
>>657
ふつーに使うけど、誰かにそういわれたのだったら、どういう文脈で言われたか教えて。
659デフォルトの名無しさん:2007/10/21(日) 09:37:26
時と場合による。
gotoすら時と場合による。
660デフォルトの名無しさん:2007/10/21(日) 09:56:54
ただ趣味でgotoを使いたくないという理由だけで
ループを増やしフラグを増やし分岐を増やしている奴はヘタクソ
661デフォルトの名無しさん:2007/10/21(日) 12:55:31
定数を左辺に持ってくる比較文を見るとイラッとするな。
あと、java限定だけど、"".equals(str)とか見たときだな。
662デフォルトの名無しさん:2007/10/21(日) 13:37:09
ヒント:str==null
663デフォルトの名無しさん:2007/10/21(日) 13:49:33
nullチェックもしないようなプログラムは恐ろしいですなw
まさに、動けばいいレベルのプログラム
664デフォルトの名無しさん:2007/10/21(日) 13:50:30
663 名前:デフォルトの名無しさん[sage] 投稿日:2007/10/21(日) 13:49:33
nullチェックもしないようなプログラムは恐ろしいですなw
まさに、動けばいいレベルのプログラム
665デフォルトの名無しさん:2007/10/21(日) 14:08:30
ぱっと見て「ヘタだなぁ」と思う引用レス

666デフォルトの名無しさん:2007/10/21(日) 14:14:23
>>652
こういう時って、どう書くべきなの?
667デフォルトの名無しさん:2007/10/21(日) 14:17:50 BE:236736533-2BP(125)
setBar(isFoo());
でいいんでない?Cとかだともしかしたら、別なものになるかもしれないけど。
668デフォルトの名無しさん:2007/10/21(日) 14:42:15
C/C++でどうしても1か0にしたいならこうか?
setBar(isFoo() ? 1 : 0);
setBar(!!isFoo());
setBar((bool)isFoo());//C++のみ
669デフォルトの名無しさん:2007/10/21(日) 15:22:49
>>668
1番上以外は意図が伝わりやすいとはいえないな
「1か0にしたい」という意図をそのまま表現しているのは1だし
俺ならそう書く
670デフォルトの名無しさん:2007/10/21(日) 17:57:33
>>668
おれは2番目派だな
これも 1か0のみにしたい という意図が明確だからね

1番上は、1,0という数字をここに書くことで
「今は面倒だから即値書いちゃってるけど、そのうち1とか0を
ほかの数値に置き換える可能性もあるからそこんとこヨロシク」
って意図を感じる。
671デフォルトの名無しさん:2007/10/21(日) 17:59:16
668は型があってない時点で全滅だろ
672デフォルトの名無しさん:2007/10/21(日) 18:02:12
1か0入れたいときはsetの中で変換するだろjk
673デフォルトの名無しさん:2007/10/21(日) 18:26:03
グローバル変数として、
int true = 1, false = 0;をやっちゃうのはどう?
674デフォルトの名無しさん:2007/10/21(日) 18:31:46
は?
675デフォルトの名無しさん:2007/10/21(日) 19:35:03
>>673
今日のコント会場はここですか。
676デフォルトの名無しさん:2007/10/21(日) 20:09:41
>>675
酢が効いてないです
677デフォルトの名無しさん:2007/10/21(日) 20:39:37
>>662
定数を左に書くと、ヌルポが発生するのが防げるけど、まあ、良くないね。
678デフォルトの名無しさん:2007/10/21(日) 20:45:37
nullになるはずが無いのにnullになったらバグだしな。
そのときはきちんとエラーになったほうがありがたい。
679デフォルトの名無しさん:2007/10/21(日) 22:13:54
strがnullでも良いときの話だろ
680デフォルトの名無しさん:2007/10/21(日) 22:32:13
仮にそうだとしても、

if (str == null || str.equals("・・・"))

のほうが素直で分かりやすいコード。
681デフォルトの名無しさん:2007/10/21(日) 22:37:59
>>680
ヘタだなぁ

これでいい?
682デフォルトの名無しさん:2007/10/21(日) 22:54:03
if (str == null || str.equals("・・・"))

if ("・・・".equals(str))

下の方がわかりやすくね?どうみても
683デフォルトの名無しさん:2007/10/21(日) 22:56:52
そうじゃなくて、 >>682 の上下で意味が変わるって事だよ
684デフォルトの名無しさん:2007/10/21(日) 23:00:28
>>682
動作が違うってのは置いといて、お前の感覚はおかしいよ。
685デフォルトの名無しさん:2007/10/21(日) 23:01:40
if ("・・・".equals(str))の方が分かりやすいって人は、
if (str == null) よりも、if (null == str)の方が分かりやすいのかな。
686デフォルトの名無しさん:2007/10/21(日) 23:03:25
>>685
お前はお前で特殊な感性だな
687デフォルトの名無しさん:2007/10/21(日) 23:07:51
>>686
???
688デフォルトの名無しさん:2007/10/21(日) 23:08:03
なぜか向いてない奴がソースを保守する事があるので
馬鹿避けのためには
if( "...".equals(str) ) と書く

下みたいなコードだと馬鹿避けにならない
if( str!=null && str.equals("...") )

やつらは if の条件を*何も考えずに*変更しやがる
689デフォルトの名無しさん:2007/10/21(日) 23:46:47
>668
これも入れといて。
setBar(static_cast<bool>(isFoo()));
690デフォルトの名無しさん:2007/10/21(日) 23:49:33
if (StringUtils.isBlank(str))
691デフォルトの名無しさん:2007/10/21(日) 23:58:01
JAVA初心者の俺は
if("...".equals(str))の方がJAVAっぽいと感じていた。
if(str != null && str.equals("...") ) は冗長のように感じるけど、
例えばstrがnullの場合、equalsメソッドが呼び出されない分速い。とかあるんだろうか?
692デフォルトの名無しさん:2007/10/22(月) 00:26:41
switch文を否定するスレになってないか?w
693デフォルトの名無しさん:2007/10/22(月) 01:10:10
Javaではswitchに文字列使えないからな。
c#のswitchは色々できて好きだが、実行効率的には微妙だ。


equalsメソッドがnull判定を行ってくれるのなら
自分のコードにはnull判定を書かない方が美しいと俺は思う。
問題なのはjavaにはstaticなequals関数がないことで、これは言語の欠陥だと思う。
694デフォルトの名無しさん:2007/10/22(月) 01:19:13
>>693
それは賛否両論だな
Object#equals()の指針を受け継いでいる限り static equals() は存在がおかしい希ガス
695デフォルトの名無しさん:2007/10/22(月) 01:29:24
その指針がおかしいと言ってる。
696デフォルトの名無しさん:2007/10/22(月) 02:27:13
>>678
エラーになった方がありがたいのは確かなのだが、javaでヌルポみたいなのを
どこまでトラッキングしてるかによるからな。いたるところにそんな実行時例外の
キャッチ文入れるのは冗長だし。入れなきゃ入れないで最悪お客様が使ってる
場面で変な状態になったりして後が大変だったりするから。

「if( a != null && a.equal("・・・")」だと2回式が評価されて1つめでfalseなんかに
絶対ならないから無駄だって思えたりもするし。
697デフォルトの名無しさん:2007/10/22(月) 04:39:31
Javaがおかしいのは公知の事実
698デフォルトの名無しさん:2007/10/22(月) 04:42:53
>入れなきゃ入れないで最悪お客様が使ってる
>場面で変な状態になったりして後が大変だったりするから。

例外のキモは想定した範囲内で正しく動くかさもなくば死という所だからそれは正しい動作だろ。
ゲームで画面がバグってる程度なら動き続けたほうがいいかもしれないが。
699デフォルトの名無しさん:2007/10/22(月) 07:26:11
想定外の数値が来てるのに、根本的なデバッグをせずに
「お客様のまえでエラー画面をだしたらいけない」って理由で
その場をスルーさせるって・・・。
Javaじゃ日常茶飯事なの?
700デフォルトの名無しさん:2007/10/22(月) 09:09:41
おまえはそれがJavaのせいだと思うのか?
701デフォルトの名無しさん:2007/10/22(月) 12:46:35
実行時のエラーはどこかでキャッチして、適切な報告を行ったうえで正常系に戻るべきだ。
どこでキャッチするべきか考慮してないのは設計上の問題だ。
それをせずに安易に「エラーにならないコード」を書くのはただの怠慢だ。
702デフォルトの名無しさん:2007/10/22(月) 13:00:48
>>700
文章読解力皆無か?
703デフォルトの名無しさん:2007/10/22(月) 13:45:56
想定外の数値が云々って話になってるのがよくわからん

if(str.equal("・・・")){・・・
でヌルポ発生させるんじゃなくて、

if(str==null){throw new IllegalArgumentException("・・・");}
else if(str.equal("・・・")){・・・


assert str!=null;
if(str.equal("・・・")){・・・

とすべきだろ
704デフォルトの名無しさん:2007/10/22(月) 14:00:39
if(str==null){throw new IllegalArgumentException("・・・");}
else if(str.equal("・・・")){・・・

ヘタだなぁ
705デフォルトの名無しさん:2007/10/22(月) 14:01:36
ヽ(´ー`)ノ イッチャッタ、イッチャッタ
706デフォルトの名無しさん:2007/10/22(月) 14:01:50
うぜ
707デフォルトの名無しさん:2007/10/22(月) 15:45:00
どうしてみんな、評価式の左側に定数書くのを嫌うの?

if(hogehoge_function(arg1, arg2, arg3) == CONST_NUM){}

よりも

if(CONST_NUM == hogehoge_function(arg1, arg2, arg3)){}

の方が、比較対照の定数が前に出てきている分、人の目に止まり安くていいと思うのだが。
結果→原因 という、結果を先に記述する並びも、英語的というかロジカルで分かりやすい。
それに、式は値を前に返すというイメージがあるし、下記の方が断然直感的だと思うんだがなぁ。
708デフォルトの名無しさん:2007/10/22(月) 15:46:42
正直どっちでもいい
709デフォルトの名無しさん:2007/10/22(月) 15:49:44
慣れてれば大抵前からとか意識せずに行単位、節単位で読めるわけだし
読み易さの面でどっちでも大して変わらない、というのと
そういう例外的な書き方を一つ増やすっていうデメリットを天秤にかけた結果の判断じゃない?
710デフォルトの名無しさん:2007/10/22(月) 15:51:44
if(1 == a)なんて書くメリットはないし
じゃあ切り替えるポイントはどこだなんて考えるの面倒だしな。
711デフォルトの名無しさん:2007/10/22(月) 15:54:38
>>707
>英語的というか
いいえ、英語的でさえありません。
712デフォルトの名無しさん:2007/10/22(月) 15:57:45
好みの問題だろ。
不等式を二つ並べるときに不等号の向きをそろえるかどうかと同じ。
713デフォルトの名無しさん:2007/10/22(月) 16:00:31
だけどさ、
if( ! hogehoge_func() ){}
とは、みんな書くんだろ?

if( hogehoge_func() ! ){}
とは書けないもんな、これは文法エラーだし。

だったら、
if( NULL != hogehoge_func() ){}
でも良いんじゃね? ってならない?
714デフォルトの名無しさん:2007/10/22(月) 16:03:01
>>713
強い型付け言語でNULL以外に偽になる値が返らないならありだな
715デフォルトの名無しさん:2007/10/22(月) 16:04:09
>>713
チミはあれこれ考える前にまずは周りの習慣に合わせることを覚えたほうがいい。
716デフォルトの名無しさん:2007/10/22(月) 16:05:04
>>714
NULL 以外に偽になる値を持つ言語って、例えば何がありますかね。
717デフォルトの名無しさん:2007/10/22(月) 16:05:08
>>713
前者は"not ..."だが、後者は"NULL isn't ..."とはならないので有り得ない。
718デフォルトの名無しさん:2007/10/22(月) 16:06:05
なんというフルボッコ…
719デフォルトの名無しさん:2007/10/22(月) 16:07:57
>>715
では、単に習慣の問題で毛嫌いしているだけだと考えれば良いわけ?
そういうことなら納得できるのですが。
720デフォルトの名無しさん:2007/10/22(月) 16:08:39
>>717
ごめん、素でミスった。
721デフォルトの名無しさん:2007/10/22(月) 16:08:40
>>716
ぱっと思いつくのではPHPか。
722デフォルトの名無しさん:2007/10/22(月) 16:15:35
おれはfi(ret_bool_func(args)) {}
ってしてるけど。
723デフォルトの名無しさん:2007/10/22(月) 16:31:51
fiとはまた高度なテクニックを・・・
724デフォルトの名無しさん:2007/10/22(月) 16:33:35
吹いた。fiだけに。
725デフォルトの名無しさん:2007/10/22(月) 16:35:02
ttp://labs.cybozu.co.jp/blog/akky/archives/2007/10/phpspot-bad-regex.html

ヘタなコードっていうのは、こういうことさ。
726デフォルトの名無しさん:2007/10/22(月) 17:13:33
bugを下手だと申されましても…
727デフォルトの名無しさん:2007/10/22(月) 17:19:08
おまいさんのbugって言葉の定義は何だい?
728デフォルトの名無しさん:2007/10/22(月) 17:26:35
要件を満たしていない(十分条件じゃないよ)
正しいメールアドレスやIPアドレスが正しくないと判定されるなら、それはバグ
729デフォルトの名無しさん:2007/10/22(月) 17:59:50
正しいメールアドレスにマッチする正規表現はこんなのになる。
ttp://www.din.or.jp/~ohzaki/perl.htm#Mail

実用的だと思うかね?
730デフォルトの名無しさん:2007/10/22(月) 18:04:17
そしてURLはもっとひどい
731デフォルトの名無しさん:2007/10/22(月) 18:31:01
>>729
それが唯一解ならそれ使うしかないんじゃね?
732デフォルトの名無しさん:2007/10/22(月) 18:34:16
255.255.255.0を通さないのは明らかに下手じゃなくてバグだろ、常考
733デフォルトの名無しさん:2007/10/22(月) 18:37:54
仕様です。
もし変更を要求するなら別途料金をいただきます。
734デフォルトの名無しさん:2007/10/22(月) 18:39:47
別に、一回のmatchingでチェックしなくてもいいだろ・・・
735デフォルトの名無しさん:2007/10/22(月) 18:40:46
正しくないのがpassしてもいいが、正しいのがpassしないのはバグ
736デフォルトの名無しさん:2007/10/22(月) 18:46:30
正しくないのがpassしても駄目だろ。
737デフォルトの名無しさん:2007/10/22(月) 18:50:16
それが良いか悪いかは要求仕様しだい。
738デフォルトの名無しさん:2007/10/22(月) 18:50:46
この場合
・書いた人は仕様を確認してない
・紹介した人は他人のコードを信用しすぎ
なのが下手。

バグかどうかは結果。下手かどうかは過程。
739デフォルトの名無しさん:2007/10/22(月) 18:51:27
下手だと思うコードスレですよ
740デフォルトの名無しさん:2007/10/22(月) 18:57:25
私怨はよそでやれ
741デフォルトの名無しさん:2007/10/22(月) 19:36:37
ヘタというよりは「RFCも読んだことないの?」と思うコードなので対象外だろう
742デフォルトの名無しさん:2007/10/22(月) 20:05:41
>>719
if (0 == a || 2 == a || 4 == b) {}

if (a == 0 || a == 2 || b == 4) {}
の、どっちが見やすいと思う?
定数が左に来たほうが理解しやすいと思うのなら、
x = 0; じゃなくて、0 -> x; みたいな代入文になっただろうな。
743デフォルトの名無しさん:2007/10/22(月) 20:10:50
社員の採用については、
「有能な人を採用し損なってもダメージは少ないが、無能な奴を採用するとダメージは多くなる」
と言われています。
744デフォルトの名無しさん:2007/10/22(月) 20:12:29
欠員がでるまでは採らなくていい
745デフォルトの名無しさん:2007/10/22(月) 20:12:55
心の中で読むとき、
「aがゼロかbがゼロでないとき…」と読むから、
(a == 0 || b != 0)が素直じゃないっすか?
それとも定数左派の人は、
「ゼロがaかゼロがbじゃないとき…」って読むのかな。
746デフォルトの名無しさん:2007/10/22(月) 20:19:54
ソースとディスティネーションの問題は、
インテル系から入ったか、モトローラ系から入ったかの違いなだけじゃ・・・。
昔はLSBとMSBでも揉めてたな。LEかBEでも揉めてたし。
そういうのは「ヘタ」とか「ウマイ」じゃなくって宗教論争なんじゃね?
747デフォルトの名無しさん:2007/10/22(月) 21:13:08
== 演算子と equalsメソッドを同列に論じることは出来ないとおもうんだがどうよ?

まあどっちにしても、どの順番がいいかは文脈しだいで変わるものだと俺は思ってるんだが。
748デフォルトの名無しさん:2007/10/22(月) 21:30:10
多分、心理学的か言語学的にどっちが良いのか説明がつく。
俺は説明できないがなー
749デフォルトの名無しさん:2007/10/22(月) 21:37:01
燃料投下になるんだろうなぁ。

右か左かには、別の視点もある。
定数かどうかではなくて、大きさ。
数直線って右が大きいでしょ。確かw

だからそれに合わせて直感的に。
(0 <= i && i < len)
これは個人的にすごく気に入ってる。
750デフォルトの名無しさん:2007/10/22(月) 21:44:26
0 <= i < len って書けない言語は糞
751デフォルトの名無しさん:2007/10/22(月) 21:55:07
数直線が右が大きいなんて定義は無い。
752デフォルトの名無しさん:2007/10/22(月) 21:59:52
はぁ、そうですか
753デフォルトの名無しさん:2007/10/22(月) 22:17:20
定義は無いかも知れんが、どちらでもいいから右が大なのでは。
文は通常左から右に書くから「右が大」でいいだろ。
754デフォルトの名無しさん:2007/10/22(月) 22:46:58
右から左に文を書く言語圏もある。
思い込みや狭い常識論で「ヘタ」を定義して、他人のコードを貶めて悦に浸ってるだけに見えるんだけど。
755デフォルトの名無しさん:2007/10/22(月) 22:51:47
正直そのネタはもう飽きた
756デフォルトの名無しさん:2007/10/22(月) 23:46:50
>>699
想定外でエラー画面を出してお客様の業務止めてどうするの?リリース前の
テストで出たならともかく、リリース後で出てもすぐ直してリリースなんてこと
出来るとこ少ないだろ。大体、想定外ならelseのエラー処理で十分だろ?
いちいちexceptioスローして処理するエラーか?
下の3つとも大体同じになるけど、どれ選ぶかってことじゃないのか?

1)
if(a != null && a.equal("..."))
else
//エラー処理 aがヌルでもこっち

2)
if("...".equal(a))
else
//エラー処理 aがヌルでもこっち

3)
try{
if(a.equal(a))
else
//エラー処理
}catch(RuntimeException){
//ヌルポのエラー処理
}
757デフォルトの名無しさん:2007/10/22(月) 23:47:23
      〜ここまでテンプレ〜
-----------------------------------

       ここはテンプレ外

-----------------------------------
      〜ここからテンプレ〜
758デフォルトの名無しさん:2007/10/22(月) 23:54:33
「お客様」って書きかたがじつに気持ち悪い
759デフォルトの名無しさん:2007/10/22(月) 23:55:53
問題の本質を理解してない
760デフォルトの名無しさん:2007/10/23(火) 00:11:31
使いどころの良し悪しはあれど、書き方そのものに良し悪しは無し。

gotoだって使い所を間違えなければ悪くはない。
使い所は少ないけど。
761デフォルトの名無しさん:2007/10/23(火) 00:20:10
SQLなんだけど、
XXX_DATE って日付型の項目にインデックスが付いてるテーブルがあって、レコード作成時に時刻は切り捨てている。
で、この日付をつかって絞り込むのに、
TO_DATE(XXX_DATE, 'YYYY/MM/DD') = '2007/10/23'
とかやって、インデックスを効かなくしちゃってるのは「意味ないじゃん!」と思った。
762デフォルトの名無しさん:2007/10/23(火) 00:55:00
catch(RuntimeException)
これはさすがにねえよ。素人か?
763デフォルトの名無しさん:2007/10/23(火) 00:59:19
またエラー処理を例外で、の話題か。
いい加減にしろ
764デフォルトの名無しさん:2007/10/23(火) 01:16:06
>>745
左派の人はロジカルに物を見る。時系列では見ません。
765デフォルトの名無しさん:2007/10/23(火) 01:18:28
定数云々じゃなくて、主語を左に揃えるのが要点だろ
766デフォルトの名無しさん:2007/10/23(火) 01:40:17
いやだから、言語的な語順とかじゃなく、
左にある物の方が、右にあるものよりも基本的に目立つから。

if(0==strcmp(str1, str2)){}
だと、頭を少し見ただけで、引数は置いておいたとしても、とりあえず動作の内容が把握できる。
「等しければ成立で、引数はstr1とstr2だな」と思考する。
一気に考えずに二段階に分けて考えられるから楽かなぁと。

if(strcmp(str1, str2)==0){}
一方、だと、最後まで読まないと最後まで読まないと、何やろうとしているか判らないじゃん。
運悪く「==0」を読み飛ばしてしまったら違う意味に捉えちゃうし。
なんか引数一杯ある関数とかだと、最後まで目をやるのがしんどいときあるし。

だからそういう読み飛ばしてしまいそうな重要事項はなるべく先に書いたほうが、
読み手に釘をさせて良いんじゃないかという。
767デフォルトの名無しさん:2007/10/23(火) 01:42:06
結局は「どの茶屋の団子が美味い?」と同じだな

分かりきっていたことだが
768デフォルトの名無しさん:2007/10/23(火) 02:05:53
> 左にある物の方が、右にあるものよりも基本的に目立つから。

> だからそういう読み飛ばしてしまいそうな重要事項はなるべく先に書いたほうが、
> 読み手に釘をさせて良いんじゃないかという。
これに反対している人は殆どいないんだよね。

でも、何が重要なのか分かっていない人がいるのが悲しい。

769デフォルトの名無しさん:2007/10/23(火) 02:11:15
C的なフィーリングってあるじゃない。
あの日本語的でない変数宣言の仕方とか。
あの感覚にあわせるなら、定数は左かなぁという気がするんよ。

もしC言語が「 i int; 」と書かせる言語ならば、主語を左に云々にも納得できるのだが、
C言語は関数呼び出しにしたって、「 (str1, str2)strcmp; 」とは書かさない言語だし。

もし仮に、「 if( (str1, str2)strcmp==0 ){} 」と書けるのなら、
日本語の語順で、「str1 と str2 を 比べて 等しいとき」とそのまま読めて、
こんな素直なことは無いんだけどな。
770デフォルトの名無しさん:2007/10/23(火) 02:53:13
そもそも、
if (0 == a) { ・・・ }
という書き方は、間違って
if (a = 0) { ・・・ }
と書いてしまう事を防ぐため。
うっかりこう書いてもコンパイラはエラーを出さない。
ほんとは
if (a == 0) { ・・・ }
と書きたかったのを凡ミスしたのか、
それとも意図があって a = 0 にしたのか、
判断しにくい場合がある。

さも「おばぁちゃんの知恵袋、生活の知恵」みたいに
比較は左側を定数にしましょうね、って誰かが流行らせたんだな。

これはCとその流れを汲む言語(javaとかperlとか)独特の書き方であって
他の言語ではありえない。
たとえばBasicでは IF の中に代入文そのものが書けないから
定数は左辺だ右辺だと論争する事は無い。
FORTRAN は比較演算子は EQ だっけ?=では無く(うろ覚え)

でもね、このテクニックは、片方が定数のときしか使えないんだよね。
変数同士の比較だと意味が無いんだよねぇ。あ〜アホくさ。
クソ言語Cとその一派に、放尿!
771デフォルトの名無しさん:2007/10/23(火) 02:55:28
で、結局、定数を左に持ってきたり、"".eqauals()みたいな書き方をしたプログラムってあるの?
もちろん、ある程度有名で評価の高いプログラムでの話だけど。
なんなら、解説書でもいいけど。
772デフォルトの名無しさん:2007/10/23(火) 03:30:33
そりゃ流石に探せばいくらでもあるだろ
なんか痛々しいな
773デフォルトの名無しさん:2007/10/23(火) 03:32:28
よーわからんけど,解説書なんていったらこのスレ自体でもいいんか?
そんなことどうでもいいよな.
嫌ならググれカス


以下駄文:
ちなみに
  if(string!=null && string.equals(anotherString)) → "nullチェック"と"文字列の比較"を同時に行う
というのは形式上あまりよくない.
なぜなら,文字列の比較を行いたいのであって,nullチェックは本来不要な演算だから.

なぜ「混ぜて」書かれているかというと,Javaの文字列比較がStringクラスのインスタンスメソッドであって,
インスタンスの参照があるかどうかが,頻繁に必要になるから,だ.

  不思議とこのケースだけは特別扱いされていて,他のインスタンスメソッドの呼び出しには使われてない(気がする).
  では他のケースではnullチェックはどうしてるかっつーと,「nullチェック」を分けて書いてあるのがほとんど.

話は戻るが,JavaのStringはかなり特殊だよな.
それもこれも,Stringが値ではなくオブジェクトで,文字列にも関わらずオブジェクトだから初期「値」がnullだからだ.
実体があって初めて文字列なのに,「実体がない文字列」なんて概念がそもそも必要ないんだよ.
その苦労が "string literal".equals(...) に表れてると思うね.
774デフォルトの名無しさん:2007/10/23(火) 04:08:28
>>772
いくらでもあるなら、実例を1つでも挙げてみほ。
あるなら、ね。
775デフォルトの名無しさん:2007/10/23(火) 04:30:10
まさか、"" と null の区別もつかんの?
文字列であっても null は必要だよ。他の言語でも
empty とか undef とか nothing とか、形を変えて存在し重宝されている。
「カラ文字列」と「無」とは違うもの。

>nullチェック"と"文字列の比較"を同時に行うというのは形式上あまりよくない.
>なぜなら,文字列の比較を行いたいのであって,nullチェックは本来不要な演算だから.

最近、他所でも同じ事を言ってるヤツがいたが、これってもしかして学校の教科書にでも載ってるの?
オレには言っている意味がまるでワカラン。なんでこの2つの文章が”なぜなら”でつながるのか全然ワカラン!
特にjavaプログラマは学校の先生に洗脳されてるヤツが多いからなぁ。「改行とは¥nです!」とか平気で言うしw

たとえば if (Java.String.Compare(a, "unko") == 0) みたいなスタティックな文字列比較
関数があってもよさそうだと思わないかい?ちょうどCのstrcmpみたいなヤツ。
関数の中で a が null かどうかも検査してくれれば一石二鳥だし。
でもそうすると、null チェックと文字列比較をいっしょにやる事になるだろ?(関数の中で。)
「同時に行うな」なぜなら「本来不要だから」・・・意味ワカラン!
776デフォルトの名無しさん:2007/10/23(火) 04:33:07
>>772
やめときなさいって、そういうの。
「ある程度有名で評価の高いプログラムでの話だけど。」って言うのが罠だと気づけよ。
どんな例を挙げても、「をいをい、それが有名で評価の高いプログラムかよw」っておちょくられるだけだから。
777デフォルトの名無しさん:2007/10/23(火) 04:49:51
じゃあ何でも良いから例をどうぞ。
778デフォルトの名無しさん:2007/10/23(火) 04:57:21
テストケース中で使われるassertの類で
assert( 10 == f(10) );
こういうのなら見たことある!
それ以外だとコーディングスタイル本の例ぐらいしか思いつかない
779デフォルトの名無しさん:2007/10/23(火) 08:46:41
780デフォルトの名無しさん:2007/10/23(火) 08:49:12
ありとあらゆるメソッド呼び出しをすべて if (hoge != null) { hoge.foo(); }
みたいに書いてる香具師はさすがに見たことがないな。
assert hoge != null; ならともかく。
781デフォルトの名無しさん:2007/10/23(火) 09:38:59
if (0 == a)派の奴は、何でa = 0に何の文句も言わないの?
782デフォルトの名無しさん:2007/10/23(火) 09:41:17
e?
まだ引っ張るの?
783デフォルトの名無しさん:2007/10/23(火) 09:47:07
意味がわからん
784デフォルトの名無しさん:2007/10/23(火) 10:09:24
「もしゼロがaと等しいなら」と読み下した方が分り易いと考える人は、
「ゼロをaに代入する」と書いた方が分り易いと考えるはずだろ?
ということだと思う。
785デフォルトの名無しさん:2007/10/23(火) 10:11:19
>>778
assertは、expected, actualの順が普通です。
何故だか知りませんけど。
786デフォルトの名無しさん:2007/10/23(火) 10:48:45
今日は時間があるから燃やすぜ

>>775
> まさか、"" と null の区別もつかんの? 
> 文字列であっても null は必要だよ。他の言語でも empty とか undef とか nothing とか、形を変えて存在し重宝されている。 
> 「カラ文字列」と「無」とは違うもの。 
文字列には必要ないだろ.
多分,設定ファイルを読み込んだ場合に「空文字が設定されている」か「何も設定されていない」かを区別したいんだろうが,
そういうのはそもそも文字列の範疇じゃないと言いたいんだが.
(逆に他の値型はどうなってる?「無の整数値」とか存在するか?)

> >nullチェック"と"文字列の比較"を同時に行うというのは形式上あまりよくない. 
> >なぜなら,文字列の比較を行いたいのであって,nullチェックは本来不要な演算だから. 
> 最近、他所でも同じ事を言ってるヤツがいたが、これってもしかして学校の教科書にでも載ってるの? 
> オレには言っている意味がまるでワカラン。なんでこの2つの文章が”なぜなら”でつながるのか全然ワカラン! 
> 特にjavaプログラマは学校の先生に洗脳されてるヤツが多いからなぁ。「改行とは¥nです!」とか平気で言うしw 

> たとえば if (Java.String.Compare(a, "unko") == 0) みたいなスタティックな文字列比較 
> 関数があってもよさそうだと思わないかい?ちょうどCのstrcmpみたいなヤツ。 
> 関数の中で a が null かどうかも検査してくれれば一石二鳥だし。 
> でもそうすると、null チェックと文字列比較をいっしょにやる事になるだろ?(関数の中で。) 
> 「同時に行うな」なぜなら「本来不要だから」・・・意味ワカラン! 
すっかり忘れているようだが,そういう実体同士のチェックは「==」演算子が行っている.
で,>>780の書いている様に,文字列のequals()だけ特殊化されているのがおかしいな,ってこと.
787デフォルトの名無しさん:2007/10/23(火) 11:02:30
a.equals(b) と b.equals(a) が等価じゃないのは確かに気になるな
788デフォルトの名無しさん:2007/10/23(火) 11:06:07
違うのは当たり前だろ
789デフォルトの名無しさん:2007/10/23(火) 11:20:36
もともと、equalsのような二項演算(バイナリメソッド)は、オブジェクト指向だと
「inheritance is not subtyping」問題のようなものを引き起こしやすいことで
知られている。
バイナリメソッドでぐぐるといいよ。
790デフォルトの名無しさん:2007/10/23(火) 11:24:48
>>786
> そういうのはそもそも文字列の範疇じゃないと言いたいんだが.

なぜ「そもそも」なのかを示せ。

> (逆に他の値型はどうなってる?「無の整数値」とか存在するか?)

するし。

> すっかり忘れているようだが,そういう実体同士のチェックは「==」演算子が行っている.

わけわからん。
791デフォルトの名無しさん:2007/10/23(火) 11:28:55
文字列だけじゃないとおもうが
Integer i = null;
Long l = null;
・・・

あと、.netのbooleanはtrue/false/nullの3値論理だったと思うし

nullのセマンティクスはDBのアレでいんじゃね?
unknownまたはN/A
792デフォルトの名無しさん:2007/10/23(火) 11:32:41
>>773
> 実体があって初めて文字列なのに,「実体がない文字列」なんて概念がそもそも必要ないんだよ.

なんで「そもそも」なんだよw
793デフォルトの名無しさん:2007/10/23(火) 11:35:14
必死ですね^^;;;
794デフォルトの名無しさん:2007/10/23(火) 11:37:38
>>790はするー

>>791
ふざけるな

>>792 もだからなんだよwwww
795デフォルトの名無しさん:2007/10/23(火) 11:39:51
もっとがんばれ
796デフォルトの名無しさん:2007/10/23(火) 11:48:28
いいこと思いついた
nullの場合の振る舞いを定義できるように言語仕様を変更すればよくね?
nullオブジェクトパターンの発展型
797デフォルトの名無しさん:2007/10/23(火) 12:24:18
>>775
>「同時に行うな」なぜなら「本来不要だから」・・・意味ワカラン!

多分こういう事を言いたいのでは無いかと。

「やりたい事」は「文字列の比較」なのに、「実際に書くコード」は「nullチェック」と「文字列の比較」。
「やりたい事」と「実際に書くコード」をなるべく一致させたいが、Javaでは毎回nullチェックを書くか、苦肉の策で"string".equals()するしかない。
つーかStringの初期値がnullなのはなんでだ。""にしろ。

結局意味がわからんのは何故だ。
798デフォルトの名無しさん:2007/10/23(火) 12:36:44
>>784
「もしゼロがaと等しいなら」
じゃなくて

「もし、ゼロになるところの、aならば」
だよ。

0==a を 「もしゼロがaと等しいなら」、と呼ぶ人は、
int i, j; をどう読んでいるのか気になるな。
俺は「int になるところの i, j 」ってイメージだが。

それから、単に主語を右だ左だ、と言う話ではない。
短く済ませられる部分をなるべく左に書くのがC言語のスタイルだと。
C言語では、変数宣言の変数とか、関数の引数のリストとか、代入文の右辺とか、
そういう、長くなる可能性のあるものは、なるべく右側に書くように調節してある。
条件式の定数を左に書くのも、あくまでその流儀に従っているだけ。
799デフォルトの名無しさん:2007/10/23(火) 12:57:57
>短く済ませられる部分をなるべく左に書くのがC言語のスタイルだと。
>短く済ませられる部分をなるべく左に書くのがC言語のスタイルだと。
>短く済ませられる部分をなるべく左に書くのがC言語のスタイルだと。
800デフォルトの名無しさん:2007/10/23(火) 12:58:12
関係代名詞かよw
801デフォルトの名無しさん:2007/10/23(火) 12:58:54
if (a == 100)
if (100 = hoge)
こうですか?わかりません><
802デフォルトの名無しさん:2007/10/23(火) 13:00:15
トートロジー
803デフォルトの名無しさん:2007/10/23(火) 13:09:12
つまり、このぐらいのことをやるのがC言語のスタイルなんだよ、きっと。
static const char * const foo[] = {"",}/**//**//**//**//**//**//**//**/;
804デフォルトの名無しさん:2007/10/23(火) 13:29:00
>>798
あなたは、if a equals 0を
> 「もし、ゼロになるところの、aならば」
と訳すということですね?
805デフォルトの名無しさん:2007/10/23(火) 13:30:03
間違えた。
if 0 equals a
だ。
806デフォルトの名無しさん:2007/10/23(火) 13:31:34
いやそんな極端な。

>>800
そうだよ。もともと英語圏で出来た言語だし。
http://www.google.com/codesearch?hl=ja&lr=&q=if%5Cs*%5C%28%5Cs*%5BA-Z%5D%2B%5Cs*%3D%3D&btnG=%E6%A4%9C%E7%B4%A2
これ見ても分かると思うけど、
条件式の定数を左に書いている場合は、往々にして評価される側の式が長い。
大事な部分を先に書いちゃうのは、英語圏の人なら当然の発想だよ。
807デフォルトの名無しさん:2007/10/23(火) 13:34:52
じゃあ、if (a >= 0)は何と読んで、if (0 <= a)は何と読むのでしょう?
808デフォルトの名無しさん:2007/10/23(火) 13:36:10
>>804
C言語を一々日本語に訳したりなどしない。
ただ、頭の中で、そう考えるというだけのこと。
一々日本語に訳してプログラム読んでるのですか?
809デフォルトの名無しさん:2007/10/23(火) 13:40:18
>>807
if (a >= 0)
a が 0 以上

if (0 <= a)
0 以上 になるところの a
810デフォルトの名無しさん:2007/10/23(火) 13:41:17
戦前の人間かよw
811デフォルトの名無しさん:2007/10/23(火) 13:48:33
日本人じゃなんだよ。
相手にするなよ。
812デフォルトの名無しさん:2007/10/23(火) 13:51:29
↓こんなの以外、どうでもいいよ
if(a==0){・・・}
else if(1==a){・・・}
else if(a==2){・・・}
else if(3==a){・・・}
・・・
813デフォルトの名無しさん:2007/10/23(火) 13:55:44
なにと比較するんだ、なにと比較するんだ、なにと比較するんだ・・・



あ、aとか。
814デフォルトの名無しさん:2007/10/23(火) 13:56:29
もういいだろ。
815809:2007/10/23(火) 13:58:53
逆に聞きたいけど、
if (a >= 0)
は語順どおりに読めないよね。どうしても「>=」をあとから読まなきゃしょうがない。
無理に読むと、「aは何か以上であり、それは0です」となる。

反対に、
if(0 <= a)
だと、「0以上のa」という風に語順どおりに読めて、こっちのが楽な気もするのだが。

まぁ俺は、if (a >= 0)と書いてあっても、0から読むがな。
まず敷居値を与えてもらって、それに対して変数がどうか、と思考したほうが考えやすい。
先に変数だけ与えられても、頭の何処においておけば良いのか迷う。
816デフォルトの名無しさん:2007/10/23(火) 14:03:53
a is greater than or equal to zero
817デフォルトの名無しさん:2007/10/23(火) 14:07:23
>>813
それは違うな。
0と比較するのであって、aと比較するわけではない。
aは比較される側であって、0と比較する。
0と比べてaはどうなのかって話だからね。
aに対して0を比較する、なんてのはナンセンスで、
0に対してaを比較する、が正しい。
818デフォルトの名無しさん:2007/10/23(火) 14:09:23
>>816
それいいな。今度から使わせてもらうよ。
819デフォルトの名無しさん:2007/10/23(火) 14:20:11
>>815
奇遇だな。
俺もif (0 == a)と書いてあっても、aから読むぞ。
820デフォルトの名無しさん:2007/10/23(火) 14:21:31
>>815
> 逆に聞きたいけど、
> if (a >= 0)
> は語順どおりに読めないよね。どうしても「>=」をあとから読まなきゃしょうがない。
> 無理に読むと、「aは何か以上であり、それは0です」となる。

えーと、義務教育ちゃんと受けてますか?

イフ、a大なりイコールゼロ
821デフォルトの名無しさん:2007/10/23(火) 14:25:45
というか、コードに関して誰かとリアルでコミュニケーションしたことあんの?
822デフォルトの名無しさん:2007/10/23(火) 14:45:15
アセンブラの感覚のまま高級言語弄ると
即値は第二オペランドに置きたくなるよね。
823デフォルトの名無しさん:2007/10/23(火) 14:47:43
if (0==a)はif (a=0)にwarningを出せなかったタココンパイラを使ってた奴の悪習
824デフォルトの名無しさん:2007/10/23(火) 14:56:37
if (a >= 0)
もしも「a大なりイコール0」という式が非0を返すなら

て読むけどな。俺は
825デフォルトの名無しさん:2007/10/23(火) 14:58:02
>>822
あるあるwこんな具合に。
sub eax,0
jz @f
826デフォルトの名無しさん:2007/10/23(火) 15:00:35
ぱっと見て「ヘタだなぁ」と思う暇の潰し方
827デフォルトの名無しさん:2007/10/23(火) 15:01:02
>>824
ぱっと見て「ヘタだなぁ」と思う思考回路
828デフォルトの名無しさん:2007/10/23(火) 15:13:50
つまり、Javaは糞と。
829デフォルトの名無しさん:2007/10/23(火) 15:45:57
BufferedReader br = new BufferedReader(new FileReader(hoge));
String line;
while (null != (line = br.readLine())) {・・・}
830デフォルトの名無しさん:2007/10/23(火) 15:46:45
それに関しては同意。
831デフォルトの名無しさん:2007/10/23(火) 15:57:48
while (fgets(buf, sizeof buf, fp) != NULL) {
}
832デフォルトの名無しさん:2007/10/23(火) 16:15:04
なぁ、これ何か面白いのか?
833デフォルトの名無しさん:2007/10/23(火) 16:26:39
素人でも、議論に参加し易い
834デフォルトの名無しさん:2007/10/23(火) 16:41:00
>>831
どこがいかんのだ?
835デフォルトの名無しさん:2007/10/23(火) 16:48:59
いかんというか、あまり意味のないレスに見えるな
836デフォルトの名無しさん:2007/10/23(火) 16:55:03
<quote>
if 定数 == 変数と書くプログラマを信頼してはならない
                    -- アリストテレス (BC212)
</quote>
837デフォルトの名無しさん:2007/10/23(火) 17:59:23
自転車置き場どうすんだよ?
838デフォルトの名無しさん:2007/10/23(火) 19:46:12
>>837
好きなように塗ればいいと思うよ。
839デフォルトの名無しさん:2007/10/23(火) 19:56:03
>>820>>815即死。
クソワロタ
840デフォルトの名無しさん:2007/10/23(火) 22:20:31
ここ数日でスレが一気に進んだな。
841デフォルトの名無しさん:2007/10/23(火) 22:23:17
> 逆に聞きたいけど、
> if (a >= 0)
> は語順どおりに読めないよね。どうしても「>=」をあとから読まなきゃしょうがない。
> 無理に読むと、「aは何か以上であり、それは0です」となる。

これネタだよね?だとしたら付き合ってやるよ。ワロタ。すっごく面白〜いw
でもさ、もし天然だとしたらヤバイよ。
もしかして高校で数学の授業中ずっと寝てた?
842デフォルトの名無しさん:2007/10/23(火) 22:33:16
> 逆に聞きたいけど、
> if (a >= 0)
> は語順どおりに読めないよね。どうしても「>=」をあとから読まなきゃしょうがない。
> 無理に読むと、「aは何か以上であり、それは0です」となる。
よく、こんなしょうもない事柄を熱弁できるね
よっぽど自分のコーディングスタイルの整合性を認めて欲しかったんだね。
843デフォルトの名無しさん:2007/10/23(火) 22:39:38
> 逆に聞きたいけど、
> if (a >= 0)
> は語順どおりに読めないよね。どうしても「>=」をあとから読まなきゃしょうがない。
> 無理に読むと、「aは何か以上であり、それは0です」となる。

工業高校卒(大学なんてビンボーで行けけぇ〜YO!)のオレさ分かるような事を・・・
844デフォルトの名無しさん:2007/10/23(火) 23:25:46
値渡しだけで、参照が一個もないソースを見たときにはびっくりしたなぁ……
845デフォルトの名無しさん:2007/10/23(火) 23:54:50
つまり、基礎的な数学的素養ゼロな奴の戯言だったってことだな
846デフォルトの名無しさん:2007/10/24(水) 00:05:13
Cなんて全部値渡しじゃねーか
847デフォルトの名無しさん:2007/10/24(水) 00:06:56
やっぱ逆ポーランド記法が究極やな。
848デフォルトの名無しさん:2007/10/24(水) 00:07:54
844が見たソースが、実はjavaだったとしたら。。。
849デフォルトの名無しさん:2007/10/24(水) 00:08:52
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        J
/     ∩ノ ⊃  ヽ    >>846
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
850デフォルトの名無しさん:2007/10/24(水) 00:12:11
851デフォルトの名無しさん:2007/10/24(水) 00:14:18
852デフォルトの名無しさん:2007/10/24(水) 00:21:36
これはひどい
853デフォルトの名無しさん:2007/10/24(水) 00:33:14
>>849
参照渡しができるのは、C++だぞ。
854デフォルトの名無しさん:2007/10/24(水) 00:36:14
なんかマ板にも似たようなスレがあったような・・・
855デフォルトの名無しさん:2007/10/24(水) 00:45:59
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        J
/     ∩ノ ⊃  ヽ    >>850-853
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
856デフォルトの名無しさん:2007/10/24(水) 01:00:59
もしかして、815=849=855なのか?
857デフォルトの名無しさん:2007/10/24(水) 01:04:11
>>854
そもそもマ板とム板を分ける必要あるのかね?
人気板なら分けてロードバランスするのも分かるけど、
どちらも超過疎ってるのに・・
858デフォルトの名無しさん:2007/10/24(水) 01:23:22
>>857
そもそもファイルサーバとクライアントPCを分ける必要あるのかね?
CPU常時フル稼働ならロードバランスするのも分かるけど、
どちらもほとんどアイドルなのに・・
859デフォルトの名無しさん:2007/10/24(水) 02:01:21
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        J
/     ∩ノ ⊃  ヽ    >>856
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
860デフォルトの名無しさん:2007/10/24(水) 02:07:07
必死すぎて笑えるw
861デフォルトの名無しさん:2007/10/24(水) 02:20:41
人が必死なのは哂ってはいけない
862デフォルトの名無しさん:2007/10/24(水) 02:38:42
そもそも文法的にはどちらの書き方も正しい。

それを「読みやすい」だとか「間違えにくい」という主観と
よく分からん例えを用いて、どちらか一方だけが正しい、
と主張した所でお互い納得する訳が無い。
863デフォルトの名無しさん:2007/10/24(水) 05:17:12
void foo(int *a);
はint*の値を渡してるんだぞ。

と空気嫁ずマジレス。
864デフォルトの名無しさん:2007/10/24(水) 05:57:55
最近釣り針が多いですね。
865デフォルトの名無しさん:2007/10/24(水) 09:14:10
>>862
ゲシュタルトの法則
866デフォルトの名無しさん:2007/10/24(水) 09:20:31
>>862
「書き方」に関する、あらゆるコーディングスタイルに関する議論は、まったく無駄だとおっしゃるのですね。
867デフォルトの名無しさん:2007/10/24(水) 09:21:51
まあさんざんで尽くしていると言う意味でまったく無駄だね
868デフォルトの名無しさん:2007/10/24(水) 09:25:50
>>867=>>815
www
869デフォルトの名無しさん:2007/10/24(水) 09:28:36
>>867
例えばあなたが社内コーディング規約を作ることになったときに、何を規約とするかを選択するときの良い判断材料になるとは思いますよ。
870デフォルトの名無しさん:2007/10/24(水) 10:33:45
>>863 マジレス乙!

             , -''":::::::::::::::::::::::`` ‐ 、' :,
              ,:/:::::::::::::;;;;;: -――‐- :;;;;;;`ヽ、
         ,:'/:::::::::::::::::/u      ,  ,  ``-;ヽ
         ,:':/:::::::::::::::::/  '⌒`ー‐'| | |`ー-‐、u|::|   ←>>849 >>855
        ,:'/:::::::::::::::::/u /⌒ヽ     /⌒ヽ !::! ;
       ,' l--、:::::::/   l  O | lj  | O | '、l ,:
       /´,―、ヽ:/     ヽ、,r‐'-、:::::::::ゝ--く  l ;
     .;'/ /ニ_ノ |   ..::::::::{  r,、 ヽ / ,r-, ノ::.. '、;
     ; | l  '-,        / ヽ !},. ---'し'_,ヘ   :..ヽ':,
       ':,!  `‐'   u ヽ  ,. -'"´_,. ----,、 ヽ、u  l ;
        ':,ヽ_ノ u   ノ'" ,. -''" ̄ ̄ ̄ ヽ. ヽ  |
        .,: | lj      /  /_,. ---、,. -----、|  |  / ;.,
    --―'ヽ     /  '-------―――‐''" ノ /``ー- 、_
871デフォルトの名無しさん:2007/10/24(水) 11:11:14
>>822
実際に出回っているCPUを考えると
第一オペランド派のほうが多いかも
872デフォルトの名無しさん:2007/10/24(水) 11:21:12
>>871
> 実際に出回っているCPUを考えると
どこかに資料ある?
携帯電話とか家電に組み込まれているやつが、数が多そうだけど。

>第一オペランド派のほうが多いかも
CPUの問題じゃなくて、アセンブラの問題でしょ。
同じ、intel CPUでも intelのアセンブラとgasじゃ違うし。
873デフォルトの名無しさん:2007/10/24(水) 11:25:49
まだやんの?
874デフォルトの名無しさん:2007/10/24(水) 12:12:45
gasはちょっと嫌だな。
やはり代入文は x = 0;みたいにかくわけで、これをそのまま並べると
mov eax, 0
見たいな方が慣れもあってわかりやすい
875デフォルトの名無しさん:2007/10/24(水) 12:35:26
0 -> a
みたいな言語があった気がする
876デフォルトの名無しさん:2007/10/24(水) 13:00:45
>>729
ちなみにその正規表現はいわゆるメールアドレスではなく、メールのアドレス部分。
つまり、メールヘッダのTo:やFrom:の後ろに来る表現。
877デフォルトの名無しさん:2007/10/24(水) 15:11:27
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        J
/     ∩ノ ⊃  ヽ    >>863
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
878デフォルトの名無しさん:2007/10/24(水) 15:14:45
なんだか必死な奴が一人いるみたいだな。
まぁ>>849なんだろうがwww
879デフォルトの名無しさん:2007/10/24(水) 16:14:21
C++での演算子オーバーロードを見てみると...
定数が先に来るのではなく、変数が先に来るのが望ましいのではないだろうか?

まあ、C/C++の系統ではの話だがな
880デフォルトの名無しさん:2007/10/24(水) 16:36:00
だから定数変数は本質じゃないって
定数は変数のバリエーションの一つにすぎない
変数と変数を比較するとき、どちらを左辺にすべきか
ということを考えるのが筋
881デフォルトの名無しさん:2007/10/24(水) 16:39:30
定数変数が本質だろ
882デフォルトの名無しさん:2007/10/24(水) 19:30:01
定数==変数
って書き方は代入してしまうミスがあった時にエラーが出て便利って
本で読んだぞ

プロはどう判断するか知らんけど
883デフォルトの名無しさん:2007/10/24(水) 19:30:52
>>882
それ大昔の話。
今時if(a=0)と書くとコンパイラが警告してくれる
884デフォルトの名無しさん:2007/10/24(水) 19:45:23
>>880
それ、定数を左に書く人を諌める言葉だったんだよね。
最近じゃあ、定数を左に書く人が使うようになって困るw

>>862
そんな言い訳で、定数左置きは正当化できませんよw
885デフォルトの名無しさん:2007/10/24(水) 20:00:39
というかさ、数学でも普通 x = 0 って書くでしょ?
こういう「自然な」書き方をあえて避けるほどの理由があるの?
886デフォルトの名無しさん:2007/10/24(水) 20:02:15
いや、0 == xの方がわかり易いと思う人がいるってことで、いるんだからしかたがないという
結論にしかならない気がする。
887デフォルトの名無しさん:2007/10/24(水) 20:13:11
バグを未然に防ぐために定数を左に持ってきてるってんなら、
両方が変数だったときのミスも検出できるようにlintなんかを使うようにするのをお勧めするし、
最近のコンパイラifの中での代入を警告してくれるから、そんなことしなくていいと思う。

ただ、定数を左に持ってきたほうが読みやすいと思ってるなら、
こればっかりは感性の問題だから他人がどうこう言える問題じゃないね。
仕事でやったら感性の異なる同僚にどんな嫌味言われるかは知ったことじゃないけど。
888デフォルトの名無しさん:2007/10/24(水) 20:17:44
今時のlintってC++でテンプレートメタプログラミングしてるような
ソースも食えんの?

最近のコンパイラは皆
if (p = strchr('\n')) *p = '\0';
みたいな正当なコードに小姑みたいに警告を言ってくんの?
(gcc -Wallが文句を言うのは知ってるが)

ちなみに俺は右派だ。俺の中ではただの好みでしかないから
別に正当性は主張せんが。
889デフォルトの名無しさん:2007/10/24(水) 20:21:34
三田本なんか読むからですよ。
890デフォルトの名無しさん:2007/10/24(水) 20:22:46
>>888
そのコードだと、string.hをインクルードしてたらエラーだと思う。
891デフォルトの名無しさん:2007/10/24(水) 20:23:41
下らなさ過ぎて宗教論争にもなってねーなw
892デフォルトの名無しさん:2007/10/24(水) 20:27:37
VC8は/W4にしないと文句言ってこないな。
893デフォルトの名無しさん:2007/10/24(水) 20:38:22
>>890
ごめん、引数が一個抜けてたw
意図だけ汲み取ってくれ。
894デフォルトの名無しさん:2007/10/24(水) 21:00:21
>>885
フツーの本とかコードを読んでたら、そんな書き方するようにならないだろって
書き方のやつはいるな。

#include<stdio.h>

みたいにくっつけて書くやつとか。

こういうのを指摘しても、細かいこととか「宗教論争」とか言って、どっちでもいい(これでいい)とか言って頑張るの。
まあ、たしかに、どっちでもいいけど「こいつ、へたくそそう」と思う瞬間だよね。
895デフォルトの名無しさん:2007/10/24(水) 21:06:22
職場に、ifは、
if (n < 0)
と演算子の両側をあけて書いてるのに、forだとなぜか
for (i = 0; i<10; i++)
みたいにくっつけて書いてるスタイルの人がいるけど、どういう基準なんだろうか。
896デフォルトの名無しさん:2007/10/24(水) 21:06:59
>>894
おまいは指摘の仕方がへたくそそうだな…
897デフォルトの名無しさん:2007/10/24(水) 21:08:25
文末に無駄な空白があったり、コメントで全角英数なんかを使ってたりすると、下手だなって思う。
898デフォルトの名無しさん:2007/10/24(水) 21:08:59
>>896
まあ、ネットだしな。
899デフォルトの名無しさん:2007/10/24(水) 21:18:18
>>895
場合によっては長くなりそうな部分はスペース除いて書くクセついてたりする人はいるな
処理系によっては横80行越えちゃいけないとかあったりするから
改行するより詰めたほうがわかりやすいという理由で

ちなみに昔のC言語のバイブルK&Rもそのへん統一されてない
上記のような理由なのか特に気にしてなかったのかしらないけれど
900デフォルトの名無しさん:2007/10/24(水) 21:32:47
同じ話を何度もするな、ヴォケ
901デフォルトの名無しさん:2007/10/24(水) 21:43:00
数学のx=0とCのx=0は全然違うし
902デフォルトの名無しさん:2007/10/24(水) 21:50:34
x = 0
ていう左から右方向の読み方に慣れてるってことだろ
だから
x == 0
のほうが
0 == x
より自然に読み取れるってことだろ
903デフォルトの名無しさん:2007/10/24(水) 22:02:59
xが0と等しい
0がxと等しい

おれ自身は定数左派じゃないが、
どうみても読みの方向なんか関係ねえよ
904デフォルトの名無しさん:2007/10/24(水) 22:04:46
数学だって、「x=0 のとき」とは言っても、「0=xのとき」とは言わない。
905デフォルトの名無しさん:2007/10/24(水) 22:07:20
なんで言わないのか考えたことあるか?
906デフォルトの名無しさん:2007/10/24(水) 22:29:58
要は、0が先に出てきて後からaが出てくる方が分かりやすいか、
反対に、aが先に出てきて後から0が出てくる方が分かりやすいかって話だよな。
読む時は、aが先、考える時は0が先って感じだろう。
907デフォルトの名無しさん:2007/10/24(水) 22:34:39
だから定数変数関係ねえって

class hoge {
private int x;
・・・
void fuga(int a) {
if (x==a){・・・}
}
}

文脈上、主語に当たるものが
左のほうが読みやすいの
908デフォルトの名無しさん:2007/10/24(水) 22:35:14
数学の場合はフォーカスが変数から定数へと行くほうが値の固定のイメージとして自然だからだろう
あとは値のほうが重要度が高いから数値が後ろにきやすいということだろ
(xの値を求めて答えをいうときに「xはゼロ」という)

だからといって0 = xと言っていけないということはないけど
慣例にわざわざ背く必要もない

なんだったら日本語の文法も変えるか?w

909デフォルトの名無しさん:2007/10/24(水) 22:36:34
>>908
失礼
重要度っていうよりは主語述語の関係と言ったほうがいいな
910デフォルトの名無しさん:2007/10/24(水) 22:44:24
主語述語って意味なら、C言語は壊滅的だな。
int mainとか。
main is int って書ければ良かったのにな。
911デフォルトの名無しさん:2007/10/24(水) 22:45:59
どうしてlvalue・rvalueの話が出ない
912デフォルトの名無しさん:2007/10/24(水) 22:46:46
関係ないから
913デフォルトの名無しさん:2007/10/24(水) 22:49:45
>>910
COBOLやれよwww
914デフォルトの名無しさん:2007/10/24(水) 22:55:56
>>910
int-valued main って読めばいいんじゃね
915デフォルトの名無しさん:2007/10/24(水) 22:59:33
>>914
その乗りで良くと、0==a は 0と等しいa と読めるな。
逆に、aと等しい0 ってのは変になるな。
916デフォルトの名無しさん:2007/10/24(水) 23:10:56
糞スレ度猛烈うp中
917デフォルトの名無しさん:2007/10/24(水) 23:14:01
左辺に定数を書くから、お前はC++を覚えられないんだ

といってみるテスト
918デフォルトの名無しさん:2007/10/24(水) 23:16:48
int mainのintは、形容句だろ

public static void main
パブリックでスタティックな値を返さないメイン関数
てな具合で
919デフォルトの名無しさん:2007/10/24(水) 23:19:13
>>915
宣言じゃないのにその読み方は変じゃないか?
920デフォルトの名無しさん:2007/10/24(水) 23:20:26
宣言はリストとしての読みやすさを考えてそうなってるんだろうからなw
921デフォルトの名無しさん:2007/10/24(水) 23:41:41
>>917
むしろ大好物です。てかこの偏屈さはどう考えてもC++向きだろ。

>>920
関数も引数のリストをとるぞ。
int a, b, c, d, e, f, g, h, i, j;
f( 0 == func(a, b, c, d, e, f, g, h, i, j) ){}
そういう意味では同じじゃないかな。
922デフォルトの名無しさん:2007/10/24(水) 23:48:37
>>918
0==a という条件式だって、aに対する条件を定義しているわけだから、
0== は a を修飾している、つまり形容詞と捉える見方もあるのでは?
そういう風に捉えると、案外 0==a も読みやすいものだと思うが。

>>921
訂正
「f( 0==・・・ 」 → 「if( 0==・・・ 」
923デフォルトの名無しさん:2007/10/24(水) 23:54:01
>>921
慣例的には同じじゃない
プログラム部分はリストとして読まずに文章として読むほうが「自然」だし可読性高いだろ?
わざわざそこもリストとして読みたいというなら止めはしないけど
924デフォルトの名無しさん:2007/10/24(水) 23:57:05
>>922
だから要は慣例なんだって

そりゃ慣れればどっちでもいいさ
チームとしてプログラム組むときにどっちかに合わせないと読みにくいってんなら
そのとき話し合えばいい
925デフォルトの名無しさん:2007/10/25(木) 00:04:43
>>921
でも、
( a == 定数 )
は、
( a.operator==( 定数 ) )
となり、aの属する型の比較であることが保証されるけど

( 定数 == a )
は、
( operator==( 定数, a ) )
になり、aの属する型の比較とは限らなくなるので、おかしいと思うの
926デフォルトの名無しさん:2007/10/25(木) 00:05:58
StallmanとかGoslingとかBill Joyとかが、if (0 == a)と書くとは思えない。
アホグラマ用のルールじゃん。
927デフォルトの名無しさん:2007/10/25(木) 00:12:30
>>923
リストとしては読まないよ。リストってのはa, b, c, d・・・みたいなのがリスト。
変数宣言部も別にリストってわけじゃない。型名の後に変数名のリストが続くってだけ。
宣言部において、変数名のリストが長くなるから後ろへ回したって言うのなら、
同じように、条件式においても、引数リストが長くなるならって理由で後ろに回してもよいだろ。
関数呼び出しも、(a, b, c, d, e, f, g, h, i, j)func; とは書かない。
引数のリストが長くなって邪魔だから func(a, b, c, d, e, f, g, h, i, j); と書く。

(a, b, c, d, e, f, g, h, i, j)func; を読みにくいと感じるなら、
func(a, b, c, d, e, f, g, h, i, j)==0 が読みにくいってのもなんとなく分かる気がせんか?
「==0」 の影が薄いというか。
0==func(a, b, c, d, e, f, g, h, i, j) の方が「==0」が目だって良くない?
928デフォルトの名無しさん:2007/10/25(木) 00:12:46
燃料おつw
929デフォルトの名無しさん:2007/10/25(木) 00:13:23
>>928>>926へのレスね。
930デフォルトの名無しさん:2007/10/25(木) 00:17:13
>>924
もちろん慣例には従うさ。だた、意味も分かってないで、
「定数を左に書くのはだめ」って頭ごなしに言うのはどうかなって思ったんだ。
普段 int i; とか int main() とか平気で書いといて、
それが普通でない並びになってることには気づかなかったのかなと。
慣例には、もちろん従うよ。
931デフォルトの名無しさん:2007/10/25(木) 00:19:51
if (0 == a)は書かないかも知れんが、"hoge".equalsは書くと思う
932デフォルトの名無しさん:2007/10/25(木) 00:23:45
if(JOptionPane.showConfirmDialog(...)==JOptionPane.YES_OPTION){ とは書くけど、
if(JOptionPane.YES_OPTION==JOptionPane.showConfirmDialog(...)){ とは書かないな。
933デフォルトの名無しさん:2007/10/25(木) 00:26:55
>>930
頭ごなしに言ってるのはただの釣りだからほっとけwww
というか俺も釣られてる希ガス
934デフォルトの名無しさん:2007/10/25(木) 00:28:26
>>925 , >>926
俺も普段は定数を右に書くよ。
条件式内の関数の引数が長い場合は定数を前に出すこともあるけど。
それはキレイとか汚いとか、読みやすいとか読みにくいとかじゃなくて、
定数を前に出すことで、他のプログラマに、定数と比較しているぞ、ということを
印象付けるためにね。うっかり読み飛ばされたら大変だから。

だけど、C言語的には、定数を左に書いても変とはいえない言語だと感じるから、
定数を左に書く人をそこまで非難するのは変かなぁと。
それから、この人達は、int i; とか int func(); とか書くことに何も感じなかったのかなぁと。

C++は文法的に破綻しているから、いまさらどうこう言ってもしょうがないよね。
個人的にはそのダーディーさが、たまらなく好きなのだけど。
935デフォルトの名無しさん:2007/10/25(木) 00:31:52
    /\___/ヽ
   /''''''   '''''':::::::\
  . |(●),   、(●)、.:| +
  |   ,,ノ(、_, )ヽ、,, .::::|    
.   |   `-=ニ=- ' .:::::::| +
   \  `ニニ´  .:::::/     +
,,.....イ.ヽヽ、ニ__ ーーノ゙-、.
:   |  '; \_____ ノ.| ヽ i
    |  \/゙(__)\,|  i |
    >   ヽ. ハ  |   ||
936デフォルトの名無しさん:2007/10/25(木) 00:41:59
a==0が0==a、あるいはその逆になったぐらいで
読みずれーとは頭が固い連中だな。
937デフォルトの名無しさん:2007/10/25(木) 00:47:28
おまいら正直になれよw
定数左派が得意満面だったとき、
それにイラッとするだけだよって。
読みやすいかどうかは些細な問題だよって。
938デフォルトの名無しさん:2007/10/25(木) 01:12:49
変数とかどうでも良いから定数と定数を比較する場合どっちが先にするんだよ
939デフォルトの名無しさん:2007/10/25(木) 01:30:09
左派っていっても、このスレでは俺だけなんだけどね。
単に、定数を左に書いてはいけない理由を聞いてみたかっただけだったんだけど、
「主語述語の関係になってないから」なんて返ってきてびっくりしてね。

だってそれは、C言語使いが、C言語のあの変な仕様の宣言の性で、
他の言語使いに罵倒される時にしばしば使われてきた言葉そのものだったから。
C言語使いながら、「主語述語の関係じゃないから駄目」と主張するなんて、
世の中には、凄いことを言う人達が居るのだなぁと思って。
しかも、普段はヘタなコードを罵倒している偉そうな人達がだよ。
一体どんな顔して言ってるのかと思うとおかしくておかしくて。
まったく世も末だね。

>>938
もうちょっと面白いこと言ってね。
940デフォルトの名無しさん:2007/10/25(木) 01:30:14
>>938
両方定数なら人の手で最適化しとけ
941デフォルトの名無しさん:2007/10/25(木) 01:45:30
俺は if(a == 0) 定数右派。
理由:手が自然に動いちゃうんだもん!
942デフォルトの名無しさん:2007/10/25(木) 01:54:20
全ての左派が>>939みたいな人間だとは思わないでくださいね…。
943デフォルトの名無しさん:2007/10/25(木) 01:58:10
あと、俺は別にヘタなコード見たからって、一々バカにしたりはしないよ。
他人を笑い飛ばそうとして、実は自分がナンセンスなこと言っちゃってる滑稽なやつ見たときは別だが。
言ってる内容そのものよりも、その姿に笑っちゃうよ。
俺がこのスレ覗いたのだって、そういう滑稽な人達が見てみたくなったからだし。

大体自分が人のことを笑い飛ばしている時は、
逆にそれを聞いてる誰かに笑い飛ばされているものだよ。
だって、自分より頭のいい人が、全くこの世に居ないわけなんて無いでしょ。
だから、人のことはあまり悪く言うもんじゃないよね。
944デフォルトの名無しさん:2007/10/25(木) 02:07:13
嫌なおっさんだと思われたらいやだから一応断っておくけど、学生ですよ。
だから、青臭いとか言われても困るよ。
まぁいい歳超えたおっさんが、こんな詰まらないスレ覗いてるわけないけどね。
945デフォルトの名無しさん:2007/10/25(木) 02:15:02
ガキはさっさと寝なさい。
946デフォルトの名無しさん:2007/10/25(木) 02:44:54
0:30に放送されていたNHKの高校講座 数学Iで、たまたま不等号の話だったんだが

( X^2 + 2X + 3 ) > 0

と言う表記だった
よって、定数が右にある方が、大多数の人とって、自然に読める物と思われる
とか言ってみるテスト
947デフォルトの名無しさん:2007/10/25(木) 03:03:46
釣りだって言ってるのに、まだ書き込むんだな。
元々C言語が普通ではない言語だって事だよ。
int i; なんて書いちゃう言語の上で、語順云々をあーだこーだいってもしょうがねぇよ。
文句いいたけりゃ 「int i;」 に対してでも言えばいい。

それから、読みやすさや自然さよりも、バグの出にくさを優先すべきじゃないかな。
948デフォルトの名無しさん:2007/10/25(木) 03:13:41
>>947
普通の人は、定数を右にしようが左にしようが、バグは出しませんw
定数を左にすることでバグを減らせるのは、=と==と打ち間違えるバカだけですwww

バカじゃなければ、打ち間違えたところで警告が出るので修正が簡単にできます。
万が一警告を見逃したとしても、単体テストの段階でバグは見つかるので、問題はありません。


てか、釣られたwwwww
949デフォルトの名無しさん:2007/10/25(木) 03:14:50
天に唾するとはまさにこのこと
950デフォルトの名無しさん:2007/10/25(木) 03:18:10
>>947
if (a == 0)とでも、if (0 == a)とでも書けるときにどちらを選択しますかという問題なんだけど、
それすらも理解できてないのかな。
951デフォルトの名無しさん:2007/10/25(木) 03:31:41
で、849はどこに行ったのかな?

>>950
次スレをヨロ
952デフォルトの名無しさん:2007/10/25(木) 03:35:28
>>948
if( hoge(a, b, c, d, e, f, g, h, i, j, k, l) == 0)
{
}

とかやっちゃうと、環境によっちゃ==0がエディタ外にいっちゃって
見落としちゃうかもしれないだろ。
そういうことまで考えて、わざわざ定数を前に出してる人達のことを、
単に定数が左だからって事だけで、頭ごなしに笑い飛ばすのは
愚かだって事だよ。何も笑い飛ばすことは無い。

>>950
どちらを選択しても、それはその人の自由だよ。
臨機応変に選択すればいいだけの話。
そして、そんな詰まらないことで、他人を馬鹿にする必要も無い。
どちらか一方が正しいと決め付けるために、変な屁理屈をこねる必要も無い。
953デフォルトの名無しさん:2007/10/25(木) 03:37:08
次スレ

ぱっと見て「ヘタだなぁ」と思うコード その6
http://pc11.2ch.net/test/read.cgi/tech/1193250955/

記述スタイルは、超既出ネタで禁止だったのね・・・
954デフォルトの名無しさん:2007/10/25(木) 03:39:11
>>952
つまり、コンパイルさえ通れば、どんな書き方したって他人が口出す問題じゃないと言いたいんだな?

一人でやってるなら、それでいいんじゃね?
955デフォルトの名無しさん:2007/10/25(木) 03:40:55
んなこた最初から結論出てただろ?

まじめにレス返してる人はそっちが「自然」に思えると言ってるだけで誰も笑い飛ばしちゃいない
一部が煽ってただけだろ

こういう釣りは不毛過ぎる
まじめで実直な人たちの時間のロスにしかならない
956デフォルトの名無しさん:2007/10/25(木) 03:42:07
>>955>>952へのレスな
957デフォルトの名無しさん:2007/10/25(木) 03:47:59
>>952
if (...) {
}
if (...)
{
}
if (...)
 {
 }
これらのどれが優れてるかで、いつでも大論争が起こるのがプログラマという人種なんだよ。
なぜif (a == 0)だけが聖域で触れてはならんのだ?論争したっていいじゃない。
958デフォルトの名無しさん:2007/10/25(木) 03:49:46
>>952
そもそも、
> if( hoge(a, b, c, d, e, f, g, h, i, j, k, l) == 0)
こんな関数を作っちまう奴がアホ。

> とかやっちゃうと、環境によっちゃ==0がエディタ外にいっちゃって
> 見落としちゃうかもしれないだろ。
どんな腐ったエディタを使っているんだよ。
959デフォルトの名無しさん:2007/10/25(木) 03:50:42
>>954
少なくとも if (a == 0) と、if (0 == a) に関しては自由だろ。
バグってるわけでも、冗長なわけでもない。
普遍的にあーだこーだいえる問題ではないよね。
どうしても統一したいってんなら、コーディング規約で決めればいいだけの話だろ。
どっちにしたって 「定数が左 = ヘタ」 ってことには成らないよ。

>>955
真面目で誠実な人間はこんなスレ覗かないよ。
どうせ不毛な議論が続いていることなんて分かりきってるし。
暇つぶしに俺みたいな学生が来るぐらいだろ。
960デフォルトの名無しさん:2007/10/25(木) 03:54:37
>>959
> どっちにしたって 「定数が左 = ヘタ」 ってことには成らないよ。
今までの流れを全て無視するなよw
961デフォルトの名無しさん:2007/10/25(木) 03:54:44
>>959
そういう決め付けは良くないぞ
だったらそれなりの理由を考えて真面目にレス返してる人たちが
いるのはいったいなんなんだ?

論争じゃなくて叩き合いならもっと違う流れになってるはず
ちなみに俺もこのスレは今日たまたま開いたんだが

いいかげん釣られるのも疲れたし明日も早いんで寝る
962デフォルトの名無しさん:2007/10/25(木) 03:59:36
>>958
>こんな関数を作っちまう奴がアホ。
Win32APIなんて、そんなんばっかだよ。
だからといって、使いづらい関数を作った奴がバカだから、
自分スタイルのコーディングを貫いて、結果として読み辛くなったとしても、
それは他人の性!!
なんてのは子供の理屈だよ。
もっと目的意識を持って行動したら?

それから visual studio は折り返さないぜ?
オプションで変わるのかもしれないが。
963デフォルトの名無しさん:2007/10/25(木) 04:01:03
>>959
> 普遍的にあーだこーだいえる問題ではないよね。

それは君の認識であって、万人がそう思っているわけではないということはわかってるよね?
少なくとも、if (a == 0)に関しては、>>957の「かっこの位置」と違って、普遍的にあーだこーだ
言えると考えてる人はいるよ。現にいたでしょ、このスレにも。

> どっちにしたって 「定数が左 = ヘタ」 ってことには成らないよ。
君はならないと考えているが、下手と思う人間もいるってことだよ。

if (0 == a)の方がわかり易いと思う人がいて、それを否定できないのと同様、
その書き方を下手だと思う人がいて、それを否定できないのではないかな?

if (0 == a)がなぜわかり易いかを主張するのは良くて、なぜそれが良くないと思うのかを
主張するのは禁止かい?
964デフォルトの名無しさん:2007/10/25(木) 04:03:30
ちなみに、
if (...)
 {
 }
が優れていると主張する人たちは、大抵人間性まで否定されるところまで行くよ(笑)
965デフォルトの名無しさん:2007/10/25(木) 04:19:43
int i;
がおかしいのか?
FORTRANでも、型宣言をする場合は、型名が最初に出るので、Cが特に変なわけでは無いと思うが

PASCALやBASICでは、型名修飾が後方に来ているからって、それが標準であるとは言えないと思うが?
966デフォルトの名無しさん:2007/10/25(木) 04:30:24
>>961
>だったらそれなりの理由を考えて真面目にレス返してる人たちが
>いるのはいったいなんなんだ?

「慣例だから」といってくれた人達以外は、
単に自分を正当化したかったか、それとも、屁理屈こねて相手をねじ伏せたかったんじゃない?
どちらにしても、大した理由には思えんし、そういう行動は止めた方が良いだろうね。

「真に素晴らしいコーディングとは!!」とか誰も頼んで無いのに勝手にいきり立っちゃってる人も
いるのかもしれないが、結局のところ良いコーディングをするには、
読み手のことを考えて臨機応変に対処するしかないのだから、
変な物差し作るだけ無駄というものだと思うがな。
真面目な人も居たのかもしれないが、宗教論争が無意味だって事が学べて良かったんじゃないかしら。
もちろん宗教論争したい人はどうぞ。止めやしないよ。
967デフォルトの名無しさん:2007/10/25(木) 04:39:04
よくよく考えてみたら...

if ( 定数 == 変数名 ){}

とした方が見やすいようなコードの場合
if文ではなく、switch文を利用した方がもっと見やすくなるのでは無いだろうか?
968デフォルトの名無しさん:2007/10/25(木) 04:48:10
>>963
そう思うんなら、if (a == 0)に関して、
どうして普遍的にどちらが良いか言いきれる問題なのかを主張すれば?
単に俺は、そういったことはケースバイケースで
普遍的にあーだこーだ言える問題でないと考えたから、
そう自分の意見を書き込んだまでだが。反論するのは自由ですよ。

>それは君の認識であって、万人がそう思っているわけではないということはわかってるよね?
万人がそう思ってるわけじゃないんだから、書き込むなってか。どんな理屈だ。

>それを否定できないのではないかな?
俺は自分の意見を書き込んでるだけなんだが。
「定数を左に書く奴はヘタだ」って思いたい人はずっと思ってれば?
ただ俺はそれは間違った認識だと思うがな。

俺は単にコーディングスタイルなんかでウマいヘタを決めるのはナンセンスだと。
969デフォルトの名無しさん:2007/10/25(木) 04:54:59
>>965
変は言いすぎだったかもしれんが、まぁ、ちょっと素直ではないかもね。
まぁでもあれのおかげで、int a; って書くんだから、0==aでもいいじゃん
って考える人が居てもおかしくは無い土壌が出来たというのはあると思うよ。
でも、コンピュータ言語なんかを真剣にやってるところに行くと、結構バカにされてるよね。
正直どうでも良いんだけどね。int i のが読みやすいし。
970デフォルトの名無しさん:2007/10/25(木) 06:49:40
>>968
まぁ、この記事でも読んでよ。

アマチュアとプロのあいだ (2)
ttp://www.st.rim.or.jp/~phinloda/ruins/ruins149.html

おそらくif (定数 == 変数)をマスメディアに登場させたのは、悪名高い三田典玄氏が
Cマガジン1991年3月号に載せた記事だ。

それ以降、if (定数 == 変数)の方が良いと主張する人は幾度も登場し、根拠として
if (0 = a)と書いたときにコンパイルエラーになるからということを挙げていた。
そしてそのたびに、「今のコンパイラはif (a = 0)で警告を出す、lintを使え」と論破されてきた。
もちろん、俺が目にしていない議論もあったはずで、そこで「そのほうがわかり易いから」という
理由を挙げていた人がいたかもしれないが、俺は知らない。

インターネットが1995,6年ころに一般に普及し、Cに関するサイトも数多く登場したが、
if (定数 == 変数)がgood-knowhowであると主張する人は見たことがない。
しばらくは、それはbad-knowhowであるという評価は定着していたと思う。
971デフォルトの名無しさん:2007/10/25(木) 06:53:22
現在、if (定数 == 変数)という書き方が良いと考えている人には二通りあると思う。
* どこかでif (定数 == 変数)という書き方(bad-knowhow)が良いという情報を得て、
 それを盲目的に信じている
* 本当に、if (定数 == 変数)の方がわかり易いと考えている

後者の人たちが居るのも事実だし、それは否定しない。

しかし、この話題が1991年3月以降、何度も書籍・雑誌・ネットに登場するのは、
人をひきつける何かがあるのだと結論付けざるを得ない。

- Fin
972デフォルトの名無しさん:2007/10/25(木) 07:03:31
読み直して、一つ追加。

上記レスは、あくまでも日本での事情で、海外でif (定数 == 変数)と書く人たちが、
なぜそのように書くに至ったのかは知りません。
973デフォルトの名無しさん:2007/10/25(木) 09:42:18
 
974デフォルトの名無しさん:2007/10/25(木) 10:43:16
>>964 吹いたw
975デフォルトの名無しさん:2007/10/25(木) 14:26:41
> 「慣例だから」といってくれた人達以外は、
> 単に自分を正当化したかったか、それとも、屁理屈こねて相手をねじ伏せたかったんじゃない?
> どちらにしても、大した理由には思えんし、そういう行動は止めた方が良いだろうね。

それはおまいさんもそうだろ
変な理屈こねて自分を正当化したかったとしか思えない

このレスそのものもそう
自分にも非があるということを認めていない
上からの目線で相手をねじ伏せたいだけ
976デフォルトの名無しさん:2007/10/25(木) 14:28:38
そもそも最初のほうで不毛な宗教論争になるからと言われているのに
あまりにしつこくおまいさんが聞いてきたから一応の理由を述べたのみ

もともと不毛だと思っているならそういうのに他人を巻き込むなよ
977デフォルトの名無しさん:2007/10/25(木) 14:44:38
最初から>>970の記事を出すだけで良かったのに
わざわざ釣りをして時間の浪費を他人に強いて自分は「釣りを含めて自分の行動は正しい」
なんて姿勢が気に食わない
978デフォルトの名無しさん:2007/10/25(木) 14:54:20
もっと言うとおまいさんの主張のとおりここにゃ落ちぶれた学生かニートくらいしかいないとしよう

だけどそれはおまいさんの言う社会で偉そうにのさばってる連中じゃない
どっちかといえば社会からはみ出した連中であって社会的弱者なほうだ
矛先を向ける相手が違うんじゃないか?

それともそういうダメな連中がちょっと強がってみせるのが気に食わないってのか?
だったらおまえのやってることはただの弱いものいじめだ

連投スマン
979デフォルトの名無しさん:2007/10/25(木) 15:04:21
int i;が素直じゃないとか言うのも気に入らない
入れ物の用途は最初に明示するべきだ

var i:integer;の方がよっぽど屈折しているし、01 cnt PICTURE 9(03) VALUE 0.なんて最悪だろ

これらの宣言方法よりも、int i;やinteger iの様な宣言の方が判りやすいのは確かである

まあ、後方で型を指定するような変態言語を使っているから、論理式の前方に定数を持ってくるなどという変態的行為が平然と出来、それを正しい等と言うことが出来るのだろうがな
980デフォルトの名無しさん:2007/10/25(木) 15:06:41
まぎらわしいから書いとくけど>>975-978>>979は別の人な
981デフォルトの名無しさん:2007/10/25(木) 15:22:33
>>978 スレの流れとは関係ないがおまいの発言に(`;ω;´)モワッ
痛みはね、痛みはね、俺もおまいも痛みは同じ。
982デフォルトの名無しさん:2007/10/25(木) 16:38:08
>>977
最初からって・・・
俺は、この話題ではあのレスが始めての発言なんだけど・・・
983デフォルトの名無しさん:2007/10/25(木) 16:43:35
>>976
俺は、この手の話題は不毛だとは思わないんだよなぁ。
自分のコーディングスタイルが固まってない人には、興味深い話題だったと思うよ。

GNUコーディングスタイルは、なぜああなのか、とかもね。
984デフォルトの名無しさん:2007/10/25(木) 16:47:09
まだやってるのかよ。

あのな、そもそも、if (0 == a) って書き方は、
if (a == 0) と書くつもりが、間違って if (a = 0) と書いてしまう事を
防ぐためにはじまったんだよ。
初心者が間違えやすいから、御親切な先人が考え出した余計なおせっかいだよ。

これは、いわば、「プログラミングの初心者マーク」だ。
免許取立てのヤツは車に若葉マークつけとけ!
ボケ老人は枯葉マークつけとけ!
プログラミング習いたての初心者は if (0 == a) って書いとけ!
985デフォルトの名無しさん:2007/10/25(木) 17:46:23
そんなことは流石に皆わかってるだろ・・
右派の奴で、拠り所がそれしか無い奴は
このスレですら相当レベル低い部類に入るだろ
986デフォルトの名無しさん:2007/10/25(木) 18:21:54
>>984
そんな馬鹿な話は無いだろ
if ( a == b ){}

if ( a = b ){}
に間違えたら元も子もないじゃん

それが理由で、定数を左にってのは、"馬鹿"とか言うレベルじゃないぞ
987デフォルトの名無しさん:2007/10/25(木) 19:06:31
if (0 == a)
if (a == 0)

でも、どっちでもいいんだけど、全体のソース内で統一しろよ!と言いたい。
ちなみに某 目立のソースコード。
ある人物が改修した部分だけそんな感じになってて、デバッグしてたら正直とまどう。


988984:2007/10/25(木) 19:45:49
>>986
ホントだってば。
その”馬鹿な話”を広めたのは、Cマガジンの三田典玄。
これ有名な話。伝説になってるぞ。
989デフォルトの名無しさん:2007/10/25(木) 20:00:51
>>982
それは済まなかった 人違いか

>>983
俺も議論が不毛だとは思わない
だが不毛だと思ってるまして相手を貶めようとしてる奴が釣りでやるのは気に食わない
もっと建設的な方向で意見を述べるか議論できたはず
>>939>>943を読む限り何を意図してたかといえばただの他人の見下しじゃねぇか
990デフォルトの名無しさん:2007/10/25(木) 20:43:20
ハーブ・サッターとアンドレイ・アレキサンドレスクの
C++ Coding Standardの項目 0 が「こまかいことにこだわるな」
991デフォルトの名無しさん:2007/10/25(木) 20:45:11
何が不毛ってこんなんとっくにがいしゅつで
延々ループしているだけだって事
992デフォルトの名無しさん:2007/10/25(木) 20:59:30
ヘタなやつって、指摘されると、細かいこととか宗教論争とかどっちでもいいとか言い出すな。
どっちでもいいなら、自分のスタイル見直せばいいのに、すごいこだわってる。
993デフォルトの名無しさん:2007/10/25(木) 21:20:58
誰にもソースコードを見せないで、自分だけで開発するなら何でもいいんだけどね。
定数を左に置こうが、右に置こうが。

家の中ならどんな服装だろうが(素っ裸だとしても)許されるけど、それなりの服装が要求される場所があるってことだな。
しもだかげき(漢字忘れたw)みたいなファッションセンスも本人はカッコイイと思っているんだろうけど、周りから見たらバカ丸出しにしか見えないのとおなじか。
994デフォルトの名無しさん:2007/10/25(木) 21:21:17
if ( a == b ){...}

if ( a - b ){}else{...}
て書いてるやついたな。
995デフォルトの名無しさん:2007/10/25(木) 21:37:55
>>994
それどこの七行スレ住人だよ
996デフォルトの名無しさん:2007/10/25(木) 22:14:53
60代フォートラン使い、あるいは、ALU的思考?
997デフォルトの名無しさん:2007/10/25(木) 22:49:11
>>996
オレも思った。FORTRAN 的発想だよね。
998デフォルトの名無しさん:2007/10/25(木) 22:50:36
なぜフォートラン的発想かkwsk
999デフォルトの名無しさん:2007/10/25(木) 22:53:51
>>998
算術IFじゃね?

IF (a - b) 10, 20, 30

で、式がマイナスだったら、10に、ゼロだったら20に、プラスだったら30にgotoするってやつ。
1000デフォルトの名無しさん:2007/10/25(木) 22:56:08
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。