1 :
デフォルトの名無しさん :
2006/08/12(土) 01:56:11
まだやんの?
3 :
1 :2006/08/12(土) 02:01:37
Cネタはもう枯渇気味なので、他言語ネタ求む。
Perlとか、上手い下手以前に手馴れた奴が書いたコードは解読不能
某スレより。 perl -e 'print $_[int(rand(@_ = <>))]' hoge.txt たったこれだけで、吐き気がする。
AAにしか見えないなw
7 :
1 :2006/08/12(土) 02:45:27
Perlの解読不能ネタはさんざん既出なんですが・・・ このスレ的には新しいので、どうぞお続けください。
そうさせていただきます
perlのrandってsrandしないでいいんだなぁ
java で // double-checked locking を使う とか自信満々にコメントされたエセ singleton に遭遇した時。
前スレとはうって変わって、為になりそうな予感
>>5 どうみても上手い下手の問題ではないので却下。
sedやawkで修行してくればPerlは天国に見えるよ
VC++ で ExcelのタイプライブラリのC++ヘッダファイルを自動生成したら、ロクにビルドを通らないシロモノだった件。
>>5 それ、intは無くてもいいな。
perl -e 'print $_[rand(@_=<>)]' hoge.txt
まあ、「不必要なものが付いてる」と、「可読性を考えずに削る」、
どちらが『ぱっと見ヘタ』かは判らないけど。
16 :
デフォルトの名無しさん :2006/08/12(土) 10:43:24 BE:49923252-2BP(200)
>>1 基本的なネタを延々とやることにこのスレの意義があるのに。。。
>>14 それは、バグとか仕様不良の類なので、スレ違い。
>>11 ぱっとみてアホレスですな。
10はdouble-checked lockingはダメ解法と踏まえた上でレスしてるのは明白なんだから
お前の「というか」とか意味不明すぎる。
何が"というか"だよ。
知識披露厨乙。
> ・局所ブロック 局所ブロックって、if とか for とか while なしで、{ } でブロック作るやつのこと?
お前が
>>10 でないなら、「明白」なんてことは言えない。
お前が
>>10 なら、double-checked locking はヘタとか言う
以前の話でスレ違い。
どちらにせよ、
>>18 のレスは「ヘタな煽り」にしか見えない。
結論:オレサマイガイ ミンナ ヘタクソ
>>20 明白だってこともわからんアホですか。
しかもスレ違いと思ったけどレスしましたってアホですか。
ホントお前アホだなぁ…。
明日でも昨日でもいいじゃんかよ!
ここはいいモヒカン族の養殖場ですね
>>24 アホの典型的負け犬の遠吠えレス乙
言い返せなくなるとソレだよな。
int Gethoge { if(hoge=TRUE){return 1;} return 0; }
28 :
デフォルトの名無しさん :2006/08/12(土) 18:01:15
変数宣言時にとりあえずnewしてるのは嫌いだ。
ふつー宣言と同時にnew
BEのキチガイがまたいるな・・・
JavaやC++で関数定義の頭に宣言が固まってるコードは頭が悪いと思う。
> 28 > 31 使う箇所で宣言すりゃ普通その場でnewじゃね?
>>14 Officeのタイプライブラリなどを同時にインポートすればよいだけ。
ただたしかに、
「"xxx.h"をインクルードする前に"yyy.h"をインクルードする必要があります」
ということとと同じことだから、下手といえば下手。
>>31 >>32 そうだよな。
使う直前に宣言して、その場でnew。
関数の先頭でまとめて宣言してるのが行儀いいって思ってるアホとかたまに見るな。
>>26 何を言い返す必要があるんだろう…。
どうやら、
>>11 は
>>10 の唯一の自慢に触れてしまったみたいだな。(w
>>34 > 関数の先頭でまとめて宣言してるのが行儀いいって思ってるアホとか
> たまに見るな。
昔の流儀が抜けないだけだろ。
今でも入門書にK&R勧めてるのを見かけたりするもんなー 正直、正気を疑うところだが
>>32 気になるのは
Child c = new Child();
c = parents.getChild();
というような記述。
使いまわしの話か?
想像だけど。 使い回してるんじゃなくて、宣言時にアサインしたnew Child()は結局使っても いないんだろう。ところが、ブロック開始時に宣言する習慣が抜けず、なおかつ 宣言したらその場で初期化すべし、という金科玉条を守るために使いもしないオ ブジェクトを割り当ててる。
それは下手どころか間違ってんじゃねーか 初学者とかならさておき、そんなコードを恒常的に書く奴いんのか?
CやPascalみたいに使う変数が固まってくれてる方が個人的には読みやすい Option Explicitがついてない上に、include先のグローバル変数、 それも「strPath」みたいなごく普通の名前のグルーバル変数が 縦横無尽に飛び交っている。そんなVBSが今まで読んだ中でも最凶のコード
>>41 >CやPascalみたいに使う変数が固まってくれてる方が個人的には読みやすい
COBOLみたいに、プログラムの先頭で全部宣言してあれば最強ってことか。
>>40 間違ってるかどうかはともかく、問題が起きるとは限らないんだな。
だからブロック開始部分に限らず結構見かけるね。
金科玉条を守るためなら とりあえず null で初期化すれば良いような。
最近どこかの質問スレで見かけたよ。 Class1 class1 = new Class1(); class1 = oldclass1; と Class1 class1 = oldclass1; って何か違うんですか、どっち使うべきですか、って感じだった
>>35 何にも言い返す必要が無い癖に
> ププッ、顔真っ赤だぞ オ・マ・エ (w
とレスしたのか?
口を開けば矛盾が出るな。どこまでアホなの?
Class1のコンストラクタにある副作用が 必要なら上、そうでなければ下。
>>47 そんな副作用が必要だったらそれはそれで下手だ
18,22,24,26,35,46 をスルー。 キーワードはアホと行末の(wです。
>>44 それにすら気づかないから、下手なコードなんだろう。
>>46 どこが矛盾してるんだろうか…。
>>22 があまりにも必死に見えただけなんだけど。
もしかして日本語もあまり得意じゃないのかな? (w
もうすぐお盆なんだからそんなことで煽りあってると ご先祖様に叱られるぞ
腹抱えて笑ってるだろうな無様さを
>>48 それこそ、下手というより間違ってるな、だな。
いや、君の肛門さしだされても……
僕の肛門も無限ループしそうです
printf(hogestring); ↑ こういうコードを見た時。脱力する
俺は脱毛した。
数日前、auの端末でそれ系のバグがあって話題になってたね。
単発コメントはゴミ以下。プログラム全体を奏でる壮大なシンフォニーであってほしい。
do_something(foo); do_something(foo); // 何故か二回呼ばないと駄目
65 :
デフォルトの名無しさん :2006/08/17(木) 16:41:55
int kesuna[4000]; ↑このkesunaは何処からも参照されてないのに 消したら本当に実行時エラーが発生して噴いた。 そんなヘタなコード。(実話) 何でだ?
おそらく、ローカルに作った配列で範囲はみ出してスタック書きつぶしてるんだろ。 kesunaがあるとそこを書きつぶすので実害にならない。
67 :
デフォルトの名無しさん :2006/08/17(木) 16:55:39
なるほど〜
感心している場合じゃないぞw こわいコードだな。
69 :
デフォルトの名無しさん :2006/08/17(木) 17:01:38
>>65 それってあれだよね。
VCとかだったらデバッガモードでは動いてたけど
リリースモードにしたら動かなくなったみたいなパターンだね。
決まったタイミングで実行時エラーが出るなら、潰しやすいバグだと思うが。
下手とバグは分けましょう。
retrun answer + 1; // なぜか1少ないので1足して戻す
// 100未満のときに、なぜか1少ないということがわかったので、そのときだけ1足して戻す if (answer < 100) { return answer + 1; } else { return answer; }
// 100〜1000のときだけ、正しい値になることがわかったので、 // それ以外は1足してもどす if (answer >= 100 && answer <= 1000) { return answer; } else { return answer + 1; }
// テストの結果、10,000以上のときも・・・ 泥縄
// free(p); // ここでfreeすると何故だか落ちるのでコメントアウト
「なぜか」「なぜだか」がキーワードですなw
いや、バグ対処の仕方が激しく間違ってるんだろ。
ヘタなデバッグのやり方を披露するスレじゃないだろ。
ネタ切れなんだから、なんでもいいじゃn
普通に考えたら、上手に書けてんのにバグってるなんて珍妙な事態は無いはずだしなー。 そう思うと結構難しいな、このスレ。
ネットでちょっと探したら、ゴロゴロころがってるけど。 > へたなコード
じゃ見つけて貼ってくれよ
>>86 最初につっこむのはむしろここじゃね?
>#include<iostream.h>
>....
>void main()
>>86 つか、そのサイト、古いしむちゃくちゃなので、いまさら感がある
関係ないが/* */うぜー
>>88 ぱっとみても分かりません。説明してください。
突込みどころがいろいろあるだけに、まずどこに対して突っ込むのが正解かわからないな。
intの参照を返すって辺りか
constの参照返しといて自分がconst関数じゃないあたりとかもか
>>94 あと、クラス内部への参照を外に渡してるってのも。
>クラス内部への参照を外に渡してる いつでも許される類のもんじゃ無いにせよ、それ自体は別に有りだろ。 一応const憑いてるしな。
このサイト、1999年だか2000年だかに作られた古いページだから。 当時このページ見つけたとき、その時でもなんじゃこりゃ感はあったw 内容が書き換わってるのか書き換わってないのか知らないけど、 一番の「下手」は、作成日時と更新日時を各ページに載せてないとこだな。
思ってたより新しいな。
〉97 いや、ほとんどの場合、無しだろ。 const付きでも。
>>100 ほとんどの場合ということは、例外もあるということですよね。
どのような例外ケースがあるのでしょうか?
古いサイトは古いままのが多いよな
103 :
デフォルトの名無しさん :2006/08/18(金) 14:18:43
昔のサイトは古いよな〜 びっくりだぜ それに比べて最近のは先進的だね。 サイコー
誰も下手だとは言ってないだろ。
>>106 リンク先読むとこだったじゃないか、ボケ
どんどん下手なコードから遠ざかっていくなぁ
宗教論争は盛り上がるんだけど 非難一辺倒なコードはヘタ以前に 致命的な間違い犯してる場合が殆どやしねえ。
じゃ、109が酒の肴になるようなヘタなコードを披露するってことで。
いや俺酒飲まないし
昔書いたソース見てくるよ。
//test = hoge1(hage〜moge); //test = hoge2(moge〜hage); test = hoge3(hage〜hage); //test = hoge4(moge〜moge); コメントアウトが残ってる事自体は別として 何が悪くて何がしたくて何が良くてhoge3を残したのか hoge1~4の先を全部読むまで全くわからんし そうじゃなくても可読性低下させるだけの古い 糞コードを糞しつこく糞こびり付かせてると吐き気がする。 しかも古いコードはコメントアウトして残しておくようにとか指示する糞野郎の下だと 糞がぼとぼと降り注ぐ中で自分も糞を生産するという地獄絵図だよな
古いコード・・歳を取ってしまった自分 残しておけ・・俺を捨てないでくれ というメタファーに気がつけ。 まぁそれはともかく。 マジックナンバー満載の素敵コードのおかげで 徹夜のデバッグを余儀なくされると殺意沸くよね。 ヘタとか以前に死ねと思うコード。
116 :
113 :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つもある(計画性なく拡張したせいなのだが)。
119 :
デフォルトの名無しさん :2006/08/21(月) 22:22:01
過疎板で回転の速いうpろだにあげちゃだめって何度も言ったのに…。
120 :
デフォルトの名無しさん :2006/08/21(月) 22:28:41
>>118 気になったところ。
using namespace std; <-思わぬところで衝突するかも
if文 <-必ず括弧を付けよう
fin.close(); <-勝手にやってくれるから書くだけ無駄
>>118 クラス名や変数名を見ても目的がわかりづらい。aとかbとか使うな。
何も書かれていないmain.hやgetメソッドの存在意義がわからん。
ヘッダが無いと動かないってわけでもないし
set書いたらgetも書かなきゃいけないというわけでもない。
>>118 >if(b)
> b = 0;
>else
> b = 1;
boolにはtrueとfalseを入れればいいじゃん。
値の反転はこうで。
b = !b;
123 :
デフォルトの名無しさん :2006/08/22(火) 00:30:27
124 :
デフォルトの名無しさん :2006/08/22(火) 00:32:04
> bool b(0); boolにもコンストラクタってあったの? 知らなかった... いつも bool b = false; と書いてました。
bool(0)は関数形式のキャスト演算子では?
>>124 C++では、そのように組み込み型のオブジェクトもコンストラクタ引数を指定するのと同じ構文で初期化できる。
見たことないの関数やらクラスがあるが必要もなさそう C言語の関数?それとも昔の表記方法?wは全部不要じゃん? wstring wifstream wcout imbue locale
locale("japanese")よりlocale("")の方が良いと思う。 あと0x0D, 0x0Aではなく'\r', '\n'にしろ。(それでは良くない環境ならせめて'\x0a', '\x0d')
ここで指摘の多い様な、ぱっと見の下手なコードって C++に集中してる気がするのは気のせいか? 適当に書いても適当に通っちまったり、オペレーターオーバーロードとかで 出鱈目やってもコンパイラ的には全然OKだったり、無法がまかり通るからなのかな…
Hoge::Hoge() { this->isFuga = true; } よりも Hoge:Hoge() : this->isFuga(true) { } が望ましい。
なんで?プリミティブななんとかが関係有る?
それ以前に何故にthisを明記するか。 voidは省略してやがる癖に。
>>131 コンストラクタ本体での設定は、初期化じゃなくて代入になる。
constメンバとか、参照メンバはこの方法じゃないと初期化できない。
>>133 まあ、普通に常識ではあるよな。
正直なところ基本型についてはどっちでやってもええやんとは思うが。
二重コンストラクタとか用意した方が取り回しの便利なクラスとかだと、
わざわざ無駄になる初期化部分を書くのが面倒ちい。
class Hage
{
int hige;
public:
Hage() { init(); }
void init() { hage = 0; }
};
とか。
>>129 コードがキレイかどうかを気にするのがC++プログラマに多いからじゃね?
136 :
118 :2006/08/22(火) 08:53:29
>>120 わかりました、そうします。
>>121 まだちょっと実装不足です。
>>122 それがありました・・・orz
>>123 あれは実験コードで・・・今のもだけど
>>125 できるらしいです、Effective c++より
>>127 stringをマルチバイトでgetコマンドすると一バイトずつ読みバケるんで、
自分で処理するのにも自信ないのでc++のマルチバイト処理関数使ってます。
ちゃんと解説してる本やサイトなくてつらかった・・・
>>128 そういう方法で処理します。(enumハックでするとどうなるんだろう)
次にテンプレート化して提出します。え、そういうスレじゃない?
Effective C++なんて読むレベルの奴がこんな指摘されるはず無いのだが
うーん、いや実際に読んでるよ。読むだけ
MoreEffectiveもデザパタも読んでモヒカン入門した俺の頭のテカリ具合を見てくれ。 こいつをどう思う?
すごく…氏ね…
TYPOしたままやけくそで全部そのままTYPO名使ってるコード。 つーか置換しろよ…
検索する時困るんだよな。 確か stopFlag だったよなーと思って探しても見つからず途方にくれる。 実は stopFlug でした、とか。そりゃみつからねーや。
普通は見つからなかったらtypoだと思い"stop"で検索かける。
stapFlugだったりとか。 ちょっと長めの名前だと、補完使ったりコピペするので、 TYPOにしばらく気づかないことが多いな。
気付いたときには手遅れだったり。
typoはtypeのtypoだ、とまことしやかに説明している人がいた。
これまたリカーシブですね
149 :
デフォルトの名無しさん :2006/08/23(水) 20:46:52
typoってどーゆーいみ?
昔fj見てたとき、なんでふつーに日本語で書かないんだろって思ってたよ > typo
typographical error
>>148 ・識別子が全部小文字で非常に見づらい。
単語の区切りが明確になるようにアンダーバーを入れれ。
ローカル変数も然り。
・getdateinputinfってのが何なのかさっぱりわからんけど適切な命名ではないと思う。
・getstreamopenでなくてis_stream_open。
名前だけ見ると別の意味になる。
・コメントがなさすぎ。命名の微妙さとあいまって何をやってるコードなのかさっぱりわからん。
>>148 Error #503
Service Unavailable
BoostWeb BW4.2.16.1 Feb 24 2003 at bw03
>>148 >if(b){
> value += a;
>}else{
> value += a;
>}
これはバグ?
>ファイルをとじらせるバグってる 日本語でOK。
157 :
デフォルトの名無しさん :2006/08/28(月) 01:53:12
開発で見かけた、T芝のコード。 関数の途中で数箇所return的な処理をする代わりにgoto使ってる。 void xxx() { : if( ... ) { goto END; } switdh( ... ) { case xxx: goto END; : } END: return; } ・・・こういう目的限定なら使ってもいいのか?俺は使わないが。
その例なら 普通に return した方が良い。 ただ、エラー処理が混じる場合は goto を使った方がエレガントに書けるので 積極的に使えば良いという人も少なからずいる。 (goto排除原理主義者はこれを認めない。)
別に下手でも何でもないような。 まあ、行数多い中でやってるなら、分けろよとは思うかもしれないけど。 goto排他原理主義者って、なんであんなに頑ななんだろうね。 どう見ても使った方がいいだろって状況でも grepかけて突きつけてきたりするもんなー。 多重ループん中から抜ける時とか、同じ条件のifだだ並べにしてる方が 三億倍はキモいと思うんだが、何がそこまで彼らの憎しみを駆り立てるのか。
なんでも極端にやるのはダメだよねぇ… 以前“短い関数”原理主義者を見かけたよ。 3行関数を大量生産したらかえって読みにくい。
C言語ならありかもしれないな。 C++では例外やアルゴリズムやオーバーロードがあるから gotoは完全にいらない子だけどね。
アルゴリズムもオーバーロードも関係ないと思われ。 例外は確かにあるが、多重ループから抜けるのなんかに使ってたら、それこそヘタなコードだろ。 場合によっちゃJavaでだってバカにされるわ。 C++の例外は、そもそもデストラクション絡みの負荷がデカすぎて 使用を呑めない場合すらあるしなー。 Cで許されるのと同程度の使い方なら、C++で使ってたって何の問題もないと思うんだが。
アルゴリズム類の適用で多重ループ自体の出番を減らせられるのは分かるが、 なんでもかんでもそれで書いてたら、それはそれで馬鹿なコードだな case文のラベル名指しで飛んでるようなコードは流石に有害指定してもいいとは思うが、 ぱっと見すぐわかる範囲で簡潔に使われてる程度で目くじら立てるのは…
よくあるのは、 : : return TRUE; /* ↑ここまで正常系処理 */ error: if (hoge) { hogeのリソースを解放; } if (fuga) { fugaのリソースを解放; } return ERROR; みたいなやつ。hoge/fuga/...は一連の処理の最初にNULLで初期化しておく。 途中で処理が失敗したとき、どのリソースが割り当てずみかを気にせず、 末尾に飛べばいい。
TRUE/ERRORってのは変な組み合わせだな。てきとーに読み替えplz
>C++では例外やアルゴリズムやオーバーロードがあるから なぜここにアルゴリズムが混じりますか??
>>160 > 以前“短い関数”原理主義者を見かけたよ。
Kent Beckのことですね。
>>164 正常系のリソース解放を一緒にすると下のようになるんだろうが、なんか微妙
なようなそうでないような。
result = SUCCESS;
goto end;
/* ↑ここまで正常系処理 */
error:
result = FAILURE;
end:
if (...)
if (...)
return result;
>>162 なんでそんな例外を忌み嫌うのかよくわからん。
頭固いんじゃないの?
>>162 > C++の例外は、そもそもデストラクション絡みの負荷がデカすぎて
必要なことをしているだけじゃないの?
例外を使わなくたって、デストラクタを呼ぶ必要がなくなるわけじゃないでしょ?
正常系の場合に(結果的に)無駄となることをする場合もあるけど、
例外を使うことによるメリットを考えれば普通は我慢できるはずだけど。
>>169 え?多重ループから抜け出すのに例外使うの?
下手だなー。
>>170 C++の例外処理は相当重たい処理だよ。
だからこそ例外を使わないというコンパイルオプションがあるくらいなのに。
>>168 頻出なイディオムなのに簡潔に書けないもんだから
C++やその他の言語で try-catch が生まれたって流れなんでしょうね。
たまに C++ で書く時は finally 使えなくてムズムズする。
きちんとデストラクタ書けって話なんだけど。
>>167 Kent Beckに限らず、Smalltalkerはn行を超えるメソッド(関数)が
ポコポコ出来るなんて信じられない、という発言を真顔でするね。
多重ループじゃなくてイテレーションなら一発で抜けられるのにな
goto信者が暴れていたようだな。 そんなに早さを求めたいのならC++なんて使うな。
C++ではデストラクタ以外にリソース解放コードを書いてはいけない よってgotoはいらない 逆にスコープアウト時の処理が書けないレガシーな言語には必要。 Javaはgotoがないのでご覧のとおり悲惨なことになっている
ループを脱けるために例外を使うなんて、意味論的にも変だっつーの。 ところで、 LABEL: for(〜) { for(〜) { if (〜) break LABEL; } } で、外側のforまで一気に break してくれる構文のある言語があったような木がするんだけど、なんだっけ?
ラベル付きbreakはJavaにはあるな。C♯は goto ラベルか。 Perlだとbreakじゃなくてlastだが、これもラベルがつけられる。 Rubyだと catch(:identifier) do throw :identifier end と書く。 # これは例外処理ではない。
D言語の言語仕様にはあったが実際どう動くかわからない
>>177 関数内のある処理のために確保した一時メモリ領域とかもデストラクタで解放するの?
C♯のfinally構文に慣れたせいかいまいち理解できない。
具体的にどう書くの?
>>181 つ std::auto_ptr
auto_ptrは腐ってるという意見もあるようだが。
phpは break n; でn段のネストから抜ける
「n段」ってのがPHPらしい仕様だよな
>>182 ほへー。
それを徹底するくらいなら例外かgotoで終了処理したほうがよほどスマートだと思うんだけどな・・・
>>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
標準では未だにauto_arrayって入ってないんだっけ。 いや、自分で書いても一瞬だけどさ…。
>>181 つ[More Effective C++]
>>181 C#使いなら、System.IDispose.Disposeに書くようなことをC++ではデストラクタに書くと言えば通じるだろうか。
ただしusingに相当するものはなく、自動変数ならスコープを抜けるときに呼ばれるという感じ。
すまん、IDisposableだったな。
>>186 auto_ptrを自動変数として使うだけなら、scoped_ptrでいいだろと思う俺。
今はまだBoostだから使用に抵抗を感じるのかもしれないけどね。
boost馬鹿は死んでいいよ
おまいが死んだら一番じゃん
193 :
デフォルトの名無しさん :2006/08/31(木) 00:30:09
try{ … } catch(Exception e){ if(e instanceof HogeException){...} } もうね、アホカと。馬鹿かと。
・飛んでくる例外の共通の親はException。 ・各例外を捕まえたときの処理は同じだが結構分量アリ。 ・捕まえずに上にそのまま通す例外もある みたいな条件が重なったときは結構困るな。
どういう場合にそういう状況に陥る? 設計しなおすと結構シンプルになったりしそうなんだが。
・飛んでくる例外の共通の親はException。 →当たり前。 ・各例外を捕まえたときの処理は同じだが結構分量アリ。 →メソッド化しろボケ。 ・捕まえずに上にそのまま通す例外もある →catchしてthrowするか、何もするな。 どこがどう困るんじゃと。
そうでもないよ
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();
}
}
>>196 Exceptionまでさかのぼらないと共通の親クラスが見つからない、
だから、まとめて捕まえるならExceptionで捕まえるか、
別々に書くかしないといけない、ということだね。
201 :
181 :2006/08/31(木) 05:10:40
>>189 いや、C++も昔やってたからその辺のことはわかってるよ。
ただ一時メモリ領域もデストラクタで解放するっていうことに違和感を覚えただけ。
BarException をcatchする意味がないじゃん。 handleException() は、handleException(e1) とかで多胎にするよーな?
>>201 >一時メモリ領域
一瞬、スタック領域に取られたメモリの事かとおもた
じゃなかったら一時的かどうかはコンパイラには解らないから
204 :
181 :2006/08/31(木) 15:12:31
スタック領域だったらそもそも解放とか気にする必要がないのではw
まあとりあえず自分の話題については
>>182 で一応の解決を見たのでこれ以上の問答は無用です。
例外も仕様の内だと思うんだけど。 なんでtry-catchなんて使うんだろうね。 ifとtryのどっちを使うのか明確にわけてあるプロジェクトにあたったことないな。
>>206 おお!trycatchの適切な利用方法を説明してみてくれ。
なんかパっとしねぇの多いんだ。
>>202 rethrow する前にログったり BarException 固有の処理するけど
紙面の都合で省かれてるんだと思うことにしよう。
> 多胎
派生例外クラスにありとあらゆるケースの例外処理が書かれて
かえって可読性が下がる気がしなくもない。
当然のことだが、例外クラスはそれを使うクラスのことは知らない。 まさか、1クラスにつき1例外作るとか言うんじゃないだろうな。
そう。だから例外処理で多態は困難に感じる。
ここで「こいつ下手そう」発言君↓
>>207 try {
resA->open(); // res: resource
resB->open();
resA->hoge();
resB->fuga();
resB->close();
resA->close();
}
catch () {
}
んなーこたーない
215 :
213 :2006/09/01(金) 00:52:06
>>214 ん、俺?
俺いつもこうやってるよ。俺下手なのか?
ここでもやっぱり「こいつ下手そう」発言君↓
どう考えても213はおかしいだろ
>>213 見るからに例外安全じゃないコードだな。
close前に例外飛んだらout
もしRAIIだから大丈夫だとしたら逆にcloseを明示的に書いているのがダサい。
219 :
213 :2006/09/01(金) 00:54:12
220 :
213 :2006/09/01(金) 00:55:14
>>218 あー、俺やっぱり下手だわ。
意味さっぱりわかんね。
>>218 エラーコードでいちいちエラーチェックするより、例外使ったほうがいいという例じゃないの?
>208-210 派生例外クラスじゃなくて、handleException を多態にするという意味では? void handleException ( Exception& e ); // 共通の処理 void handleException ( BarException& e ); // BarExceptionだけの処理 try{ //FooException,BarException,BazExceptionが発生する可能性あり } catch( Exception e ){ handleException( e ); }
>>221 エラーチェックの話なら,
例外版は適切にRAIIとかfinally相当でリソースの後始末をするべき。
これだと例外を使うとリソースをリークするという話にしか見えん。
まともに例外を扱えないやつが例外を書くと危険極まりない。
下手糞の例外は下手糞のgotoよりはるかに凶悪
>>220-221 resA の open に成功して、resB の open に成功した場合、
resA のリソースが開放されないので例外安全にならない。
スコープ抜けたら勝手に開放される(RAII)のであれば
わざわざ close 呼んでるのが冗長。
>下手糞の例外は下手糞のgotoよりはるかに凶悪 まったくもってごもっとも。 つーか正直なところどんだけやってもC++の例外を使いこなす自信が持てん。
>>224 たぶん主張内容から推察するに
× resBのopenに成功
○ resBのopenに失敗
だな。
主張内容は完全に同意。
>>222 実際にやってみたか?引数のオーバロードは多態ではないから
e が BarException でも共通の処理のほうに飛ぶんだが。
>>222 オブジェクト自身が振る舞いを知ってる場合が多態で
入り口(呼び出し側)でオーバーロード用意して
振り分けしちゃうのは多態とは言わないと思ってました。
実際のところどうなんでしょう?
>>226 ご指摘の通り。しかも223氏が本質的な発言先にしちゃってるし。
もう俺寝た方が良さそう。
230 :
213 :2006/09/01(金) 03:26:07
あー、それは当然catch内でやる。213はtry{}の例。
catch内でリソースの開放処理をするのも上手くない。 その時点でcloseなどの解体処理が正常時と異常時の二箇所に分散するということが確定するから。 エラー処理を一箇所でやるための例外でその処理が分散したら本末転倒。 そんなんするならgotoでエラー処理するほうが開放処理が一箇所にまとまる分マシとさえ言える。 結局資源開放するならC++ならRAIIが定石(他言語ならfinally)
232 :
231 :2006/09/01(金) 03:54:18
あと、resB->open()時に発生した例外と hoge(),huga()で発生した例外で開放するリソースが変わるからさらに面倒だな。 open時だとresAのみ、それ以外だとresA,resBを開放する必要がある。 こんなのを手動で開放処理書いてたら俺は間違いなくどこかでミスる自信がある。
> 間違いなくどこかでミスる自信がある うん、間違いなくミスってるよw resA->open()時に例外が発生する事象を見逃してる。 このケースだと資源の解放はいらない。
234 :
231 :2006/09/01(金) 04:02:32
うへぇ、本当だ。やっぱりミスってたかー... うーん、こういう解体処理はRAIIに任せなきゃ駄目だなマジで
つまり例外は使うなってことでFA?
238 :
231 :2006/09/01(金) 04:12:41
>>236 >>213 のケースをRAIIで書くと有効な例になるんじゃね?
try {
Resource resA(a->getResource());
Resource resB(b->getResource());
resA->hoge();
resB->fuga();
}catch(){
/* エラー処理を記述 */
}
どこにも開放処理はいらないし俺がミスる心配もない
ミスる心配が無いって気分いいよな
>>238 それだと、resA, resBに特化したエラー処理が書けないよ
COMでIDispatchとか使わされる状態だと例外ないとやってらんね
エラー処理は ResA.hoge()、ResB.hoge() の返り値を switch-case なり if なりで判定して行う。 エラー処理と例外処理は別のものだよ。
>227 まぁ、>222のとおりだとそうなるけど。 catch(BarException e) を同様に作ってやればいいだけの話。 try{ //throws FooException,BarException,BazException } catch( BarException be ){ handleException( be ); } catch( Exception e ){ handleException( e ); }
これJavaの話?
>>240 try {
Resource resA(a->getResource());
Resource resB(b->getResource());
try {
resA->hoge();
} catch(){
// resA に特化したエラー処理
// 処理を途中で止めるなら throw
}
try {
resB->fuga();
} catch(){
// resB に特化したエラー処理
}
}catch(){
/* エラー処理を記述 */
}
>>242 > エラー処理と例外処理は別のものだよ。
はぁ?
はぁ?
エラー処理と例外処理は別のものだろ。 それは間違いない。例外=エラーじゃない。 ファイルストリームの中でバッファ溢れを検知して例外投げて 捕まえた奴がフラッシュしてバッファ空にして処理続行、 別に変わった使い方じゃないし、どこにもエラーは無い。
はじめてtry-cacheがあって本当に良かったと思ったのはつい最近。 javascriptでregexpを評価する時に 食わせる正規表現が不完全な時に出るエラーメッセージをcacheして潰した時。 つーのも、無計画に追加していった自分用リンク集がいい加減肥大化して 目的のもの見つけるのが面倒くさくなってきたんで regexpインクリメンタルサーチを搭載してみたんだけど 入力途中の、正しい正規表現かどうかかわからん文字列を 本当に正規表現として正しいのかどうか調べてから食わせるより とりあえず食わせてみた後にエラー潰したほうが遥かに楽だったという話
>>249 2回間違えるあたり単なるスペルミスではなさそうだな。
キャッシュ?
253 :
デフォルトの名無しさん :2006/09/02(土) 13:26:45
「おまえらのコードは俺が理解できないから汚い。俺のコードは俺が理解しやすいから美しい。」 もう結論出てますよ。いつまで無意味な論争やっているんですか?
>ぱっと見て「ヘタだなぁ」と思うコード
>>248
>>249 正しい正規表現かどうか調べるのと
正規表現をビルドしてみるのとコスト変わらないのかな
文字列が正しい正規表現かどうか調べるメソッドが存在する処理系ってある?
正規表現オブジェクト内部で 処理する前に正しいかどうか調べてんじゃない? バッファオーバーフローとかしたら致命的だし ホットなループ内でエラーチェックするのはコストが高すぎる
ふつーの正規表現ライブラリなら構文食わせた段階でコンパイルされる。 まあたとえば空文字列にマッチしてしまうような正規表現はエラーではないが、 そういう用途には向いていないので実際のデータを食わせる前に判定した方がいいけどな
> 文字列が正しい正規表現かどうか調べるメソッドが存在する処理系ってある? 文字列が正規表現として正しいかを判定する正規表現を書けばいいんじゃないか?
正規表現ライブラリ内でパターンをコンパイルする時に 構文解析やってるはずなのに その結果を返すメソッドが用意されてないからって わざわざ自作するのは人間のコストが高すぎる。 とりあえずコンパイルして例外キャッチしてで十分に思う。 使用できる表現を限定する必要があるなら 頑張って自作するっきゃないだろうけど。
>>249 が「例外があって良かった」の例になっていない件について
は、もう突っ込み入ってるのか
例外が便利なのは ・複雑なエラー状態を統一的に扱える ・複雑な呼び出し構造や一時変数の破棄をを自動的に処理できる の2点なんだけど、 後者はデストラクタがきっちり定義された型の変数だけでコードを書いてないとあまり意味がない。 前者は誰がどう見ても便利。固定した構文があるだけでもぜんぜん違う。 まあ今時の言語なら実行時エラーを捕獲する機構は必須だわな。 プログラムが自分や他のモジュールについてのメタ情報を扱うのが最近の流行だ。
javascript のクロスブラウザ対応コードとかだと 最初にバージョン等で依存するメソッドなりプロパティなり参照させて そいつをcatchして「これはECMA1.1だ。あっちはJScriptだな」 とかやっててため息が出る。 コード書いた奴のせいではないけど。
それは確かに (スクリプトホストの実装が)ヘタだなぁ
>>261 > 例外が便利なのは
・正常系の処理が素直に書ける
ことに尽きると思う。
例外がないと、エラーチェックだらけで処理が追いにくい。
>>262 ため息をつくほどのことか?
>>261 が言うように処理系がメタ情報を
提供するのが最近の流行だろうけど、ちょっと古い実装系だと提供す
る関数自体が未実装だったりするので過渡期のテクとしてはやむをえ
ないと思うよ。
>>264 それってメリットかなぁ・・・
俺はエラーの分岐もプログラムのうちだと思うけど。
そもそも正常系とわける意味がわからない。
エラー処理だって仕様の一部だよ。
あるべき場所になくて実は例外で飛んでるってのはかなり追いにくい。
>>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
お前が何をいわんとするのかさっぱりわからない。
俺もため息が出るよ。 醜くてもやむをえずそれを書いた人の心中察するあまり…
で、
>>267 を
try{
hoge.init();
hogest.init();
・
・
・
}
って書くと
catch()
catch()
catch()
・
・
・
って書かなきゃいけないじゃん。
俺、これをやるぐらいなら
>>267 のほうが100倍ぐらいいいと思うんだけど。
エラーが起きたらエラーが起きたその箇所にその内容が書いてあるほうがいいと思うんだけどなぁ。
>>267 >これってfopenを'a'で開くだけじゃんw
あ、いけね、「新規作成して1行ファイル内容を出力」の肝腎な後半を忘れてた。
で、漏れはそのwriteLog()相当の中身の話をしたかったんだがなぁ。
それはさておき、>269のcatch()の連続は何?
C++でinitというメンバ関数名を見るたびに嫌気が差す。
コンストラクタでええやん。
コンストラクタがあるのに何がかなしゅうて一々ケッタイな初期化せにゃあかんねん。
>>270 たぶん、例外要因全部別々にcatchしてる例外初心者でしょ。
俺ならstd::exception.whatで終わらせるけど。
>>270 >あ、いけね、「新規作成して1行ファイル内容を出力」の肝腎な後半を忘れてた。
日本語でおk
>で、漏れはそのwriteLog()相当の中身の話をしたかったんだがなぁ。
こんなのtrycatchに関係あるの?わからない。
>>271 >C++でinitというメンバ関数名を見るたびに嫌気が差す。
だってMFCからいってコンストラクタじゃウィンドウできてねーし。
継承して作ったら何もしようが無い。
>std::exception.what
なにそれ?資料少なすぎてマイナーなんじゃね?
なんかよくなるの?
基本的に処理とエラー内容はできるだけ離したくないんだけど?
俺のニーズにはあってるのかな?
>>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);
}
}
>>273 だって全然検索ヒットしないよ。
入れてみたものの誰も使ってないんじゃない?
C言語のunionみたいさ。
>>271 コンストラクタでエラーが起きたときに
それを通知するには例外を使うのが普通だろうけど
そのリソースに代替物があって、初期化の失敗が
致命的なエラーにならないときには
例外ではなく戻り値で通知して欲しい、とか
まあ、オブジェクトが正常かどうかを
問い合わせる関数を追加すればいいのだろうけど。
>>274 Cでunion使わないってありえねー。
C++だと継承でほぼ代用できるから利用価値が低下するけど。
>>275 その場合なら自分も例外処理にするよりも普通は成否を返すでしょうね。
C++のiostreamもそのパターンの場合は例外を投げないですしね。
例外を使う場合はむしろメモリ不足とかの代替とか無理な状況に使うほうが多いですし。
>>276 おお、検索の仕方が悪かっただけか。すまん。
でも、やっぱり、
catch()
catch()
catch()
って書くみたいなんだけど?
>>273 fputs(), fputc(), fclose()のエラー処理も入れてくれ。
>>272 「新規作成して1行目にファイル内容の概略を出力」でいい?
要は、ファイル名がerror.logなら"; error.log"と書いておくとかそんな感じで。
#この件は説明不足が続いて失礼。
>>276 それは余りに無意味な検索の仕方だ。3つの単語を別々に検索してしまうジャマイカ。
>>278 int main()
{
try
{
// ...
}
catch(const std::exception& e)
{
std::cerr << e.what() << std::endl;
return 1;
}
}
そしてこのほかには殆ど完全にと言ってよいほどtry/catchが出てこないプログラム。
というか例外って使いこなせば使いこなすほど try catchをほとんど書かなくなるんだよな(C++では)
処理を中断してログ吐いて終了するくらいしか手がないときにしか 例外って使わないしねぇ…
非チェック例外以外にチェック例外も用意したJavaですら 最近は「例外は基本的に実行時例外だけにしとけ。 どうにもならんような状態を知らせるか、 プログラミングミスを検出する目的で使え。」な流れだよね。
>>277 > Cでunion使わないってありえねー。
> C++だと継承でほぼ代用できるから利用価値が低下するけど。
kwsk
プログラムにバグがあるときでも何とかごまかすために使ってる>>例外
継承で利用価値が低下するってのは、俺にもよくわからんな。 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); … } みたいに書くからって話かな?
union と継承の関係もよくわからんが、
>>296 のプログラムと継承の関係はもっとよくわからん。
>>287 ・>286のclass RGBAはunionを使っていない。
・struct RGBAを含む構造体は内包で実現することになるが、
class RGBAを含む構造体は継承で実現できる。
#が、意味は微妙。
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のどのメンバにアクセスできるかが決まるというもの。
そんなもんCでもできるし、継承関係ないけど…。 ひょっとして釣り?
いや、289のようにCでは共用体でやっていたのを、C++では継承で代用…ってことなんではないかと。 自分の勘違いだったら申し訳ないが、自分は290の読解力こそ疑うが…。
>>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も同じ
union ってあるビットの塊をいろんなものに解釈するためにあると思うんだが。 Foo, Bar, Piyo が union だった場合、それぞれを Foo は Bar にも Piyo にも見えるけど、 Foo, Bar, Piyo が Hoge の派生だった時に、 Foo を Bar に見ることって無理っぽいんですが。
やっぱりUnionと関係ない気がするな。
共用体だからって、別のものに解釈させて使わなきゃならないってことはないんで、 292の例は別解釈をさせずに、統一的に扱うために使ってるんではないかと。 WinAPIのSendInputで使うINPUT構造体なんかも292の例と同じ使い方だね。
>>293 289/292では、typeに指示された型以外で共用体のメンバにアクセスしてはいけないという仕様。
FooをBarとして見るなどといったことはできない。
Cでは、こういうunionの使い方をされることも全くないわけではない。
あるunionの使い方についてはC++の継承で表現できる、なら納得。
>>292 なんかすげーヘタな設計を見た気がする...。
> virtual void HogeHoge() {/* fooの処理 */}
とか書いてごまかしてるけど、
union {
char a;
int b;
float c;
} x;
に相当するもの書いてみ。自分がどんな変な設計してるかわかるから。
>>293 ビットレベルの別解釈と、メモリの節約 (=同一の領域をいろんな意味で使う) だろ。
>>295 それは、単にタグをつけてるだけの話。
継承とはまったく関係がない。
たとえば、Cでパーサを書くときって、Tokenをunionで実装したりしない? union Token { int keyword; char *identifier; int intValue; double doubleValue; }; これを、C++で書いたら、Tokenクラスを継承して、KeywordTokenとか、NumberTokenとかを 作成するような実装もありうると思うけど。
>>299 なるほど、すまんちょっと勘違いしてた
>>292 class Base {};
class Char: Base { char a; };
class Int: Base { int b; };
class Float: Base { float c; }
みたいなイメージやね。
まあ、
>>297 が正しいと思う。
unionでセットしたメンバ変数以外のメンバ変数として解釈するのはANSI-C的にはNG 複数のビット表現として解釈する使い方が〜とかほざくやつは完全に標準違反。
だが、それを承知した上で使えば中々便利。
303 :
デフォルトの名無しさん :2006/09/05(火) 02:16:44
ついに1000体突破かよ アイロボットみたいだな 株ロボもいつか夢を見るようになるのかなぁ
>ANSI-C的にはNG 実装依存じゃなかったか?
故にNGなんだろなー。 あまりにも典型的すぎるんで、使ってるから下手だとか言う気には到底なれんが。
なあおまえら聞いてください。 #define MINUS_1 -1 これは明らかにうんこたれだ。 んがしかし #define MINUS_1 FunnyVariant(L"-1", FV_LONG) これはおkだよな? (つД`) つーかもう俺泣きてぇ。 この FunnyVariant をはじめ、DB操作もお金の計算も日付計算も専用のライブラリが用意されてて ↑あんな感じで FunnyVariant クラスに *文字列を* 入れて、数値を生成しなきゃならん。 こうやって、東日本全体を覆うアレのシステムは構築されてんだぜ。。。
>>306 >この FunnyVariant をはじめ、DB操作もお金の計算も日付計算も専用のライブラリが用意されてて
超巨大プロジェクトは、そうするのが普通。
アカデミックバカ世にはばかる、みたいな。
>>307 突込みどころはそこじゃないんじゃないか
これって、 FunnyVariant *anyval = new MINUS_1; って感じで使うの?
一時オブジェクトで使うのが一般的なんだと思う。
>311 うん、そういう事。 FunnyVariant yesterday = Calendar::addDay(today, MINUS_1); みたいな感じでね。 >307 うんまあ、専用ライブラリが存在する事は、悪くはない事だと思う。 アルゴリズムに責任が持てるのは、いい事だよね。 っていうか、なぜ素直に FunnyVariant yesterday = Calendar::addDay(today, -1); と書かせてくれないのかと(つД`)えーんえーん
> FunnyVariant yesterday = Calendar::addDay(today, -1); このコードキモいな
まあ、俺が組んだ箇所は金の計算をunsigned intでやってあるけどね。
そもそも"FunnyVariant"ってネーミングがアレだな
FunnyVariant はコンテキストによって 整数型になったり通貨型になったり日付型になったりするわけ? なぜそんなにもバリアントにこだわるんだろう。
>>314 是非コードの適用箇所を教えてください。
42億ほど用意して突撃させていただきます。
>>317 314の使っている環境ではunsigned intは64bit以上あるのでは?
>>316 コンテキストによるんじゃなくて、自分で指定してるじゃん。
>>318 そんな夢の無いこと言わないでください…
1900京円ほど用意して突撃させていただきます。
321が1990京円用意するより先に、 そこでのunsigned intのビット数はもっと増えていそう。
じゃあ、私は-1円振り込もっと。
324 :
デフォルトの名無しさん :2006/10/01(日) 01:01:34
借金として処理されるだけな気がする
毎日の金利がオーバーフローし続けたりしてな。
328 :
デフォルトの名無しさん :2006/10/04(水) 00:22:37
sage
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
あらゆる箇所にコメント書く香具師うぜー 本当に必要なコメントが埋もれてしまうがな
>330 居るよな、そういうヤツ。 酷い場合、そういうのがコーディングガイドになってたりするところもあるわなぁ('A`) お互いにプロなんだから、そんな基本的なコメントいらんから、 てか、空気読めよ、みたいなヤツな。 典型的なのが、 int i=0; //変数iを0で初期化する。 こういうのとか、 exit 0; //リターンコード0を返し、処理を終了する とかな。
print $_->[0],"\n" for sort{ $_->[1] }map{[$_,lc$_]} @ARGV; おまえらはコレにコメント欲しい?なくても読める? 俺はなくても読めるし無いほうが簡潔だと思うけどどうよ?
前後の繋がりもあるから一概には言いにくいが、ぱっと見解りにくいと思われ
>>332 コメントがどうこう以前にウンコに見える
だめなコメント 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;
# ホルホル print $_->[0],"\n" for sort{ $_->[1] }map{[$_,lc$_]} @ARGV;
じゃあこれはどうよ? $r=query($conn,"insert into t1(".join(',',sort keys %d).")values(".join(',',map{db_quote($d{$_})}sort keys %d).")");
言語仕様そのものがゴミクズ。
>>338 これは無理
こんなの一行で書くんじゃねえよ
>>338 ぱっと見、フィールド名と値の順番は大丈夫か、ちょっとどきどきする。
変数名もドキュメントの一部
変数名だけで何をやるのかが分かる
末尾の数字だけが違う以外は同名の関数が複数出てくるコード。 private Hoge createHoge(Fuga fuga){ // なんか処理 } private Hoge createHoge2(Fuga fuga){ // createHoge と殆ど同じ処理 } 以下、createHoge6 あたりまで続く。 無印〜6までの使い分け条件・使い分けが必要な理由は コメントにも仕様書にもどこにも書いてない。 マジックナンバーがそこら中に分散、 一つの関数が300行越えるのはザラ、 等の諸症状も併発する。
class名見れば分かるのにメソッドにまでわざわざ長ったらしく書く奴
コメント読むとおつむの程度が知れる。 コメント読まれるとおつむの程度が知られてしまう。 だから漏れはコメントを書かない。 これぞ自衛的プログラミングの極意。
コード書かなきゃいいんじゃね?
それだ!
要求だけあって、仕様がない一人案件の場合、 おもむろに作り始めるんだけど、 そういう場合、変数やら関数の意味が あとからだんだん変わってしまう場合が多いので あまり真剣に考えても意味がない。 適当にしたほうが良い。 ということを学んだ入社半年目。
まーそういう事もままあるが、途中で随時リファクタリングしてる。 IDEが簡単な置き換えしかできないシケたヤツだとダルいけど。
>>349 変数と関数で物事括ってるからマズいんでね?
>>349 意味が変わってきたら、それに応じてリファクタリングかけるべきだな。
いつでも変数の意味は正確な物にしておくほうがベター。
考えても意味がないっていうのは、ちょっと良い考え方ではない。
一人案件でも、仮に趣味のコードでも、このへんは変わらんよ。
数ヶ月後の自分は、今の自分からみたら他人並。
その時に、わかりやすいコードとコメントが意味を持ってくるものだし。
本当に作り捨てで今だけ解ればいいっていうなら、手を抜くのも有りではあるが…
案件なら、作りっぱなしでもう2度とコードみないって訳にもいかなかったりするだろ?
入社半年目なら、今のうちに考え直す方が良いよ。
袋叩き
変数名考えてる時って、頭の片隅で設計してるんよ。 見通しの悪い設計してるから良い名前が付けられない。
あー、プログラムの文脈以外に、識別子に意味もつけられたら便利かもと、唐突におもた
boolean型で変数名 flag これ最強。
俺の bool b とどっちが強いかな??
5行くらいの関数で使うんならアリだぜ。 20行越えてたら殺す。
悪い、40行くらいのコードでも普通に使い倒してる。 二回死んどくから勘弁してくれ。
許す。
String s = new String(); s = "foobar";
void foo() throws Exception { ... }
今時、for文でループまわしているのを見たとき
>>366 eachとかforeach使えってこと。
iteratorでも可
まあ、今時、それらができない言語は時代遅れだと思う
階乗の計算をeachやforeachで書ける?
>>368 もちろん、書かない。
わざわざ適していない方法で書く必要はない。
そういうときは、適している方法で書く。
例えば、再帰で書く
for文でループまわす必要があるのはリストよりはマップ。 キーと値を特定の順序で取り出したい場合は eachやforeachは弱い。
若者の都会かぶれが流行ってると聞いちょるがここまで進んでるたぁ、おれぁもうガマンならねぇ!
出直してけぇな
>>369 さん!
372 :
386 :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>());
}
>>372 おっと名前欄にほかのスレの数字残ってたな。
その辺はスルーしといてくれ
うあ、面倒くさっ!
> (1..n).inject(1){|x,y|x*y} うぉ。こんな風にかけるんだ
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;
}
と書いたら「ヘタだなぁ」と思われるの?
377 :
372 :2006/10/08(日) 10:25:22
思われない思われないw 俺もネタ以外では普通にそうやる。 関数型言語っぽいやりかたはC++ではまだまだ面倒だからね。
普通に末尾再帰で書けばいいじゃん。 #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にしてない コードをみると あ、こいつはダメだ。 と思う。
引数までfinal化する必要があるかは程度問題だと思うんだが。 ローカル変数も同じ。 Java使ってまでC++と同じ流儀で徹底しないでもいいだろ。 C++でconstつけない奴は尻が二つに割れるまでチョップの刑だが。
382 :
380 :2006/10/08(日) 12:37:24
>381 いや俺はできる限り、あらん限りの方策で すべてfinal化するべきだと思っている。
うむ
Delphiで、引数にconstつけて周る俺がきましたぉ
なんでconsomeはないの?
>>376 378
下手かどうか以前にバグってるぞ
387 :
378 :2006/10/08(日) 21:01:10
388 :
デフォルトの名無しさん :2006/10/08(日) 22:09:01
C++でクラスにする必要のない処理をわざわざクラス化してるとき
>>376 ++i を使ってる時点で俺的にoutなんだが
390 :
デフォルトの名無しさん :2006/10/08(日) 22:23:22
*=ってなんでつかwwwwww
resはどこで確保されてるか
はいはい、i++と++iは同じです。
勉強しても++iとi++は同じであることがわかるだけだけどな。
先に加算するか後で加算するかの違い なんて関係ないことがほどんどだよな
C++の勉強をしましょう。
402 :
デフォルトの名無しさん :2006/10/08(日) 23:06:31
この場合は何もかわらんな
しょうがないな、正解を言うぞ、 i++; は tmp=i,++i,tmp; という命令、階乗は ((1 + n) * n) / 2 で求まる。 うはっWWWオレ天才WW
中学の数学の勉強をしましょう。
>>400 i++の式値はi
++iの式値はi+1
前とか後とかじゃない、式値が違うだけだ
shine!
0!が考慮されてないって意味じゃね? あと++iとi++は戻り値が違う。
ここはぱっと見のコードの質を云々するスレなのだから、充分違うと思うが。
ところで int *iってして、*(++i++)はどんなのになるの? 文脈的に考えて
何が違うの?
夏だなあ
「〜しましょう」とか言ってる奴うぜー
鹿児島商
>>418 「i++が右辺値になり、それに前置++を使用しているのでコンパイルエラー」だと思う。
なんかこの話題最近見たきがするなぁ。
C++におけるpre/post incrementの知識を披露したいんでしょう。
このスレの80%はループでできて略
しかし無知が間違いと確信してるとこを指摘して 突っ込まれているところをニヤニヤしてる分には ループでもいい
>>429 あんまり生産的なやり取りじゃないから
見てて気分よくないけどな。
馬鹿がうつるってのはあるけどな
つまり良くねーんじゃねーか。
あぼーん
434 :
349 :2006/10/11(水) 10:48:49
あぁ、ここに書き込んでたのか。 クラス名・変数名スレに書き込んだつもりだったんだけど どこいったんだかわからなくなってた。 で、だ、これ、適当にしたほうがっていうのは 名前に関して2時間とか3時間とか1日とか悩んでも 結局変更することになるんだからほどほどにしとけって意味。 # ていうか、俺が悩んでつけた名前って言うのは 後から見るとピントはずれなことが多い。 リファクタリングをしないって意味じゃない。 Cだとリファクタリング大変だけど・・・。
もういいって。
>>434 >俺が悩んでつけた名前って言うのは
名前で悩む前に設計がそれで適切なのかを考えてはどうか。
どの変数・関数がどんな役割を持つのかハッキリしないから
どんな名前つけて良いかが分からない。
役割がハッキリしてればその役割をそのまま名前に落とせば良い。
命名に詰まる時は、設計見直しのサインだよ。
他人が書いたコードを整理していると、しばしばネーミングに困る。
>命名に詰まる時は、設計見直しのサインだよ 悩んだ末にすっきり名前が決まると、なんつーかこう、宿便が抜けたような爽快感。 それだけで仕事が終わった様な気持ちになれるな。 いや、冗談抜きで名前が決まった時点で仕事の何割かは完了してるわけなんだけどさ。
lpszStrButtyakeBuririant0001->getSTRLFSPACETABCOMMA(index)->getSTRCONTROLSHIFTTAB(index_ind)->getChar(index_chr);
うわー。。。
malloc 関数で確保してるのに開放は delete 演算子。 2つのメンバ関数間でしか使われてないのでスタック割り当てで十分なはずだが、なぜかメンバ変数。 単体の画面アプリで外から呼ばれるはずもないのに、全てpublic関数。 const の検索結果0件。#DEFINEすら使ってない。何もかもリテラル。 default 句のない switch 文。default が不要な理由などどこにも書いてない。 JOIN すれば一発なのに、単体テーブルアクセスを内部で毎レコード繰り返してるDB参照処理。 どう見ても作り直しです。本当にありがとうございました。
つ ラップしちゃえ!
malloc(strlen(p)))
>>443 それだけ見ても、下手かどうか判断できないが。
例えばfgets()の直後に、改行文字を取り除いた文字列の複写を得たいのなら、妥当じゃないか。
>>444 その処理なら strdup でいいと思うが。
↓ strdup無いなんてどんな環境だよ ↓ ○○環境にはないんだよボケ ↓ だったら自分でやりゃいいだろボケ ↓ ○○も知らないくせに下手なコードとか言うなボケ ↓ (グダグダな流れが続く) という予感
>>446 >strdup がなかったら?
malloc(strlen(p)+1) と strcpy だな。
>>448 長さ覚えといてmemcpyの方がだいぶ速いことがあるよ。
for(;;){ if(judge){ break; } 〜〜〜 〜〜〜 }
>>450 そういうのは終了条件( if(judge){ break; } に相当するトコ)が
複雑になる可能性があるときに書くことあるなぁ。
閉じ括弧が1つ多い。
セミコロンがない
セミコロン は文の区切りです
>450 ↓だったら普通。また将来↓にする予定で>450と書くのも分からんではない for(;;){ if(条件1){ break; } if(条件2){ break; } : if(条件N){ break; } : }
それは普通 for(;;){ if( is_must_to_break( ... ) ) break; . . . } と書くだろ
>>458 while(is_proceding()) {
:
}
>>459 be動詞+助動詞+to+動詞
についてkwsk
All your bases are belong to us.
FIXME: bloken English
465 :
458 :2006/11/23(木) 00:11:50
>459,460 あれが一番常識的っつー意味で「普通」なのではなく あーいう書き方をしてもそれほど変とも言い切れない、 という意味で「普通」です。 まぁかなり限定的だけど…
466 :
デフォルトの名無しさん :2007/01/14(日) 15:04:58
このスレでまたコードの更正やっていいですか?w
ok
while(*d++ = *s++);
470 :
450 :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__ ------------------------------------- いろいろな意味で勘弁してよ〜
#define BASE \ unko_t **my_unko;\ int penis_count;\ struct SuperPenis { BASE ... } struct OldCunt { BASE ... } こういうの嫌い。ていうかマクロで変数定義済ませるコードはイヤ。
そんなヤツはおらんやろ〜
>>471 うーん。本来
struct Base {
unko_t **my_unko;
int penis_count;
}
struct SuperPenis {
Base base;
...
}
struct OldCunt {
Base base;
...
}
であるべきなのを、
その様なベタ書きなデータ設計を強制されるなら
自分もやってしまいそうです
やるなよ。
ところがこれが VC のコードで DECLARE_BASE とかいう名前だと さほど違和感が無いあたり、漏れはMSに毒されてるな・・・
オプソのライブラリとかでもよく使われてる。>マクロによる一括変数定義
名前空間が特定のライブラリ色に染められるのが不愉快。
こんなだから、再利用性の低いコードばかり生まれるんだよな。
ちなみに、
>>471 の方法は、Perlのコードに使われてたのを引っ張ってきた。
それにしても例に使ってる変数名と構造体名はどうにかならなかったものか。
かたじけない。
>>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);} ¥
みたいなのを作ったばかり・・・。
>>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>{
...
};
>>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)が確定しなくて、
コンパイルエラーになってしまう。
作りを大幅に変えずにエラーを回避する方法はないだろか・・・?
開発環境は何使ってるんだ?
>>482 の方法で、Visual Studio 2005 Express だと問題なくコンパイルできるぞ。
ただ、
class Hoge: public MemoryPool<Hoge, 100>{
は、当然 Hoge の再定義になるから、
class Hoge1: public MemoryPool<Hoge, 100>{
... とする必要あるけど。
また、うまく動作するかは試してないけどな。
>>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);
};
スレ違いのような気もするけど、自分がヘタレだと云う点では
間違っていないな・・・。
485 :
481 :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);
};
>>485 おお。試してみたところ期待通りの結果(継承に置き換え可能)になりました。
(そのままでもOKでしたが、ChunkはMemoryPoolのインナークラスにしました)
なるほど実体化の遅延ですか。勉強になりました。
480です。しまった、ちゃんとお礼を云ってなかった。
>>481 さん、
>>483 さん、ありがとうございました。
スレ汚しすみません。
chokin = chokin != 0 ? chokin : 0;
最適化で消滅しそうだな
ム板のその4の次スレ、ここでいいの?
↑ ×ム ○マ
492 :
デフォルトの名無しさん :2007/05/21(月) 18:57:37
age。
今やってるプロジェクト、Cで作っているけど動的なメモリ確保は禁止なんだぜ? リークの原因になるからだって。
>>493 一昔前のゲームプログラムとか(携帯機なら今でも)、組み込みだと当たり前では?
どこの「当たり前」だよ
そもそも動的に割り当てるほどのメモリが無いというならともかく、 リークするからとmallocを禁止するのは当たり前とは言えないだろうな。
mallocがクソな環境もあるんだよ
普通に使っていてリークするようなクソmallocがあるのか、 そりゃたいへんだな。
リンクオプションで領域確保しておいて、その中で自前で管理するってプロジェクトはあったな。
リークするからと言う理由だけじゃなくて、そもそも必ず確保できるわけじゃない 可能性があるから malloc() 禁止のところは組み込みなら普通にある。 misra malloc とかでぐぐってみ。
> 確保できるわけじゃない可能性があるから malloc() 禁止のところは組み込みなら普通にある。 そんなことは誰でもしってます
> そんなことは誰でもしってます とりあえず知らない人間はいないことをどうやって証明したのかkwsk
マロックさんをわるくいうんじゃない!!
>>502 誰もが最初は知らなかった筈ですから、
「誰でも」が「遍く」ではないことは想像できることです。
では「誰でも」とはどういった範囲の人たちを指しているのでしょう?
それは
>>500 のみぞ汁。
> 「誰でも」が「遍く」ではないことは想像できることです。 言い訳乙。 少なくとも俺は、唐突に「誰でも」って書かれたら、全世界の人間を想定する。
お前が宇宙人を差別することは分かった。
自分が悪い時に、素直に間違いを認めず「だけど、〜」って関係ない事象を語って 煙にまこうとする奴を見た時は「ヘタだなぁ」と思うな。 コードじゃないけど。
組込みやらないやつはsbrkとか自分たちで実装する 環境なんて思いもよらないんだろうな。。。 組込みやらないやつは void main を見て int main じゃないから下手だ、とか言うんだろうな。
組み込みにはOSがないと思い込んでいるなら下手どころじゃないがな。
石屋にはなりたくない。へたすりゃ携帯屋だもん。
512 :
504 :2007/06/06(水) 11:15:24
>>505 >言い訳乙。
504 ≠ 500 ですよ。間抜けですね。
>全世界の人間を想定する。
素人が知ってるわけがないでしょうに。間抜けですね。
自演乙。
変数宣言とか行末コメントを揃えて書いてあるのを見ると、下手だと思ってしまう。 多分、コボラーを連想しちゃうからだと思う。 unsigned int hogehoge1; int hogehoge2; double hogehoge3; 間違いなくずれていると思うが、変数の開始位置が揃っていると思ってけれ。
>>514 これはいまのソースコードがプレーンテキストで記述されていることからくる
問題であって本来テーブル記述できるべきもんだと思うし、俺は揃えてある
ほうが好きだけどなぁ。
可読性のために変数を揃えることはある
揃えようが揃えまいが可読性は変わらないな、俺の場合。 下手に揃えてあると、修正が面倒くさい。 変数を一個追加するだけなのに、全ての変数宣言を修正する羽目になったりするし。
変数宣言は俺も昔は揃えてたけど、最近はあまり気にしなくなった。 でも、行末コメントは今でも揃えてる。ばらばらだと読み辛いから。
PL/SQL なんだけど、テーブルからデータを取得する関数が すでに作ってあるから使って、といわれた。 ライブラリを見てみたら、関数は戻り値が整数型でエラーコードを返す。 これはまいい。 引数を見ると、最初に2つくらいがDB検索のキー。 そしてその後ろに、10個近くのデータ出力用の引数がずらりと並んでいた。 デフォルト引数など用意されているはずもなく、 俺が必要なのはそのうちの1つか2つなのに、この関数を使うためには、 まったく必要のないダミーバッファを引数として渡さなければならないという。 そんなもん使う気にもなれず、select 文書きましたよ。where条件だって その方が自在だしな。
>>520 せめてNULLなら無視してくれる仕様だったらよかったのにな
そういう仕様を考えるのは、汎用機あがりに多いね。
>>520 いまいち状況よくわからんけど、ラッパー書けば済む話じゃないのか?
そうだよな。そこでデザインパターンの登場ですよと。
ラッパークラスにHeyYoと名付けたら怒られた。
// 消費税を計算する price = price + 1.5; // 1.5かける かけてないじゃん そんなコメントはいらん *= 使え ぼったくりすぎだろ べた書きすんな。何のために期間管理付きの設定ファイル作ったと思ってんだコノヤロウ と、コードより指摘事項が長くなるようなレビューを続けること1週間。 コンパイラも静的解析ツールも馬鹿の前には無力。もう疲れた...
>>527 もつかれw
なんというか、プログラミング以前の数々の間違いにワロタw
デンマークですら消費税25%だぞw
ちょwwww これはぜひとも晒しageなくてはw
>>527 を「price *= 1.05」に直してきたら「将来消費税率が上がったら税額計算してるとこ全部書き直すの?」と突っ込む。
んで、「#define TAX_RATE 1.05 …」とやってきたら「累進税率になったらどうしよう?」
そして「int tax_in(int price){ return price * TAX_RATE; }」→「品目別税率になるかもしれないね」
ここでキレたり泣き出さなかった新人がようやく使い物になる。
>>531 超アホな癖がつくからそんなことを新人にやるな。
税率が変わることは可能性が高いから考慮するが、後ろの2つは切り捨てていいだろう。 くだらないことを考えて複雑なコードを書くヤツは下手糞。
>>533 禿道
「かもしれない」可能性論で実装するのはアホ
大体、消費税が大きく変わったら、そこで予算取って仕事にするんだから、
今下らない理由で無駄な作業をやらせるのは愚行
>「累進税率になったらどうしよう?」
ならなかったら、この作業分の無駄をどうpayするんだ?
>「品目別税率になるかもしれないね」
ならなかったら、この作業分の無駄をどうpayするんだ?
>>534 真の問題はその作業分が無駄になるだけじゃなくソースコードが
肥大化することでメンテナンスコストが増大することだろ。
むしろ真の問題は帰りがけに背中を刺されること。
むしろそれは最善の解決策
とりあえず
>>531 みたいな馬鹿がいるとこ就職しちまったヤツには深く同情する。
将来の事を考えてバリアント型にしておきましたッ!!
お前の将来は何時までたっても泥沼なのかyo
> 税額計算してるとこ全部書き直すの? そもそも、税額計算してるところが複数ある設計に問題があるだろ...。
みんな、531をそんなに苛めるなよ。 531は会社で評価されていなくて、新人を苛めるくらいしか仕事が無いんだよ。 本人は、「俺って先を読んで設計できる上級者」とか思っているんだから。 余り苛めると引きこもりになっちゃうぞ。
でもリファクタリングがはやって、思考停止するやつが増えたような気もする。 今回の流れみたいな雰囲気で話するやつが多い。 今回はの流れはわかるけど。 極論を話すやつもいるから。単に仕事をするのがいやって理由だったりする。 そのくせ、締め切りまぎわにまでリファクタリングとかって引っ張る。 設計の思考停止を実装でカバーってな風。
それなんて俺?
> そのくせ、締め切りまぎわにまでリファクタリングとかって引っ張る。 おれおれ
>>531 みたいに未来の仕様を先回りして実装するのは下手だが
実際に仕様が追加されたとき(
>>531 の例でいうと累進税率や品目別税率)に
何箇所も直したりプログラムの構造を変えなくちゃいけなくなったりするのも下手
すなわちYAGNI
CVSとgrepと正規表現置換ができるエディタがあれば無問題
548 :
527 :2007/06/20(水) 01:10:39
>>548 オチだとしたらできすぎだよw
おつかれ。
設計の妥当性の検証って1週間〜1ヶ月くらいはかかると見ておいた方がいいね。 例えば、ふと思いついた設計が、実は糞仕様だったのでその実装をやり直すってよくあるだろ。 まあ、実装してみなければわからん糞さってのもあるけど。 そこを熟成させるために実装を遅らせる効果は大きい。 バージョン管理していても、その糞実装したコストは変わらないわけで。
規模も複雑さも書かずに1週間〜1ヶ月と言われてもなぁ。
552 :
デフォルトの名無しさん :2007/09/03(月) 15:47:43
よしあげてやる
553 :
デフォルトの名無しさん :2007/09/04(火) 16:13:00
>>132 >それ以前に何故にthisを明記するか。
this->とやると、入力補完出来るんだよ。
this入力しないとメンバも保管できないIDEってwwww
if (f.isVisible() == true) みたいな不要なことをするやつ。 #define SIZE 10 for (int i = 0; i < SIZE; i++) みたいにして意地でも配列を使う奴。 typedefしまくってるやつ。
>ぱっと見て「ヘタだなぁ」と思うコード 俺のコード。
まだあったか、このスレ。 そろそろまとめサイトでも作るか。
>>559 イデオンなんてシラネエよ!
ジジイ世代乙。
>556 芸人ランナー
ぶっちゃけ、このスレみるより mixiのプログラム関係のコミュを見たほうが 悪いコードの見本には事欠かないような気がする
また、ソースうpして添削してもらうかな
>>554 だって候補に型やらグローバルオブジェクト出てきて鬱陶しいもの。
>>555 > if (f.isVisible() == true)
いたなぁ。
「こっちの方が分かりやすい」とかいいながら
一個だけ!= trueが混じってた時は殺意がわいた。
>>555 似てるけどこういうの居た。(VB)bInchikiはBoolean型です。
If bInchiki <> False Then
でもInteger型の変数でも同じ書き方であちこちに散りばめられていた。
>>567 > 「こっちの方が分かりやすい」とかいいながら
> 一個だけ!= trueが混じってた時は殺意がわいた。
ワロタw 無駄なもの書いてバグらせておいて、
まったく世話がない (#^ω^)ピキピキ
コードではないが、仕様書を作るときにexelを指定されると、長時間労働を覚悟する。 さらに、印刷時に1ページにおさまるようなフォーマットになっていると、デスマーチを覚悟する。 挿入や削除がやりにくいんじゃ〜
>570 それは単にお前さんがExcelについて勉強不足なだけでは。
OLの友達でもいれば教えてもらえるようなレベルだろうな、きっと。
もうExcelでプログラム書いちゃえよw
エクセルで仕様書って、目次はどうしてんの?
某社のプロジェクトでは手作りだったなぁ。
無知ゆえに意味もなく使いたがったり、逆に頓珍漢な理由で拒絶する。
>>574 目次は、ページ番号まで載せるのは辛いので、章番号、節番号までのせて我慢する。
章毎にインデックスシールつける。
>>574 うちでは、1シート1ページになるように、様式の枠が用意されている。
ページ番号は、印刷して確認して手作業で振る。
texという手はないのか
そんな手が使えるくらいなら、ExcelじゃなくてせめてWordを使うだろ。 あれなら一応、目次くらいは作ってくれる。
おまえらエクセルをあなどりすぎ、 目次ができない。そんなの簡単にできるよ。 なんてったって、世の中で一番生産性が高いプログラム環境なんだって
うちには、ExcelでできたソフトウェアやExcelでできたインストーラがある。
> Excelでできたインストーラ うそだww
昔Excelでファイラー作った事がある
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のスコープが抑えられる!
C++でそういう阿呆なコードは見たことがないのは何故だろう。
fooList中の特定の要素を削除するループ書いてみ
VB で定数が左 If True = HogeHoge(A, B) Then Cならまだしも、VB でやっても何の意味もないのに。 けっこう長いリストでちょうど半分くらいがこれだったから萎えた。 指定した行の左右をワンキーで入れ替えるアドイン書いちゃったよ。
入れ替えても何の意味もなくね?
>>592 コンピュータ使って計算するのも,そろばん使って計算するのも何の違いも泣くね?
>>591 Cでも定数を左に書くやつは馬鹿にされてるけどね。
実際にまともなコードも書けないし。
595 :
588 :2007/09/28(金) 21:41:10
>589 俺のコードが阿呆?どこら辺がだめなのか教えてくれませんか? >590 どういう意味?こんなんじゃだめかな。 for (Iterator itr = fooList.iterator(); itr.hasNext();) { if ("target".equals(itr.next())) { itr.remove(); } }
foreach(it, v) { … }
>>594 天下の目立を愚弄するのですね
規約になってる現場では俺も欝だったけど
目立はハード屋としては優秀だがソフトはダメダメだろ
600 :
デフォルトの名無しさん :2007/09/29(土) 09:20:54
600
ソフトのことを言ったらNECも富士通もダメダメだよな。
>>599 勿論、知ってます
>>601 NECや富士通は目立ほど頭が固くないからまだマシ
目立の意味無く長時間なレビューに付き合わされた日には全治3日程度の欝になります
仕様書を音読するって小学校?
603 :
589 :2007/09/29(土) 22:17:50
>>588 前者。つまり、C++ではforを使わずwhileの外でイテレータを定義している例を見たことがない。
>603 へー なんでだろ不思議だね。 有名どころのJava本にwhileでの使用例が載ってたのかな。 それともサソじゃばの試験対策本だろうか・・・
恥を忍んで尋ねるが C++ってイテレータでループ回してる間に 要素を削除追加してもokなの?
コンテナによる
607 :
デフォルトの名無しさん :2007/10/01(月) 23:49:19
>>602 うひゃぁ。もしかしてあなた戦友かも。
いろんなところで仕事したけど、顧客レビューで数百ページの仕様書を
1行1行音読させられたのはあそこだけだったよ。
顧客レビューに半年かかって、結局目立が顧客に頭下げてリスケ。
>>588 5以降で、コレクションがIterableなら、さらに短く
for(final T e : TList) {}
にできるね。
仕事サボって2ch見ている奴を見たとき。
仕事サボって2ch見るようなコードをぱっと見て 「ヘタだ」とは思わんなァ… 「何コレ…」とは思うだろうけど。
二行目で断定して、三行目で推定してるってことは、 二行目は自分の事を弁解したもので、 三行目は他人から見た自分の姿を推定したもの、という解釈で良い?
>>611 ほど受け答えのできるコードなら
逆に舌を巻くだろうなー
つ うずら
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(); プッ
何か問題ある?
多分ループせずにrset.last()使えって事かと
>>618 上のコードだと、ループの最後の値しか残せてないよね?
>java. bakaっぽい名前空間だな・・・
622 :
デフォルトの名無しさん :2007/10/19(金) 03:34:09
いきなりbreakで抜ける気がするのだが。
こういうアホもPGには混ざってるんだから、その辺も考慮してコーディングしろって事だろ。
ぱっとみて「ヘタだなぁ」とおもう糞誘導。 板違いバレバレ。
いや、そのものなんだが……
本当は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
イベントドリブンを知らないとは・・・
>>628 つーか、お前はそれをどう書くべきだと思ったの?
>>631 > つーか、お前はそれをどう書くべきだと思ったの?
628じゃないけど
a[1] = "aaa";
a[2] = "bbb";
a[3] = "ccc" + foo(3);
...
一見して、ループにする必要もないし、switchを使う意味もないのは明らかではありませんか。
っていうか、どの部分の何が「ヘタ」だと思ったのか書かないと 単に「俺様気に食わないコード」発表会になっちゃってるよ、このスレ。
場合によっては、 i = 1; a[i] = "aaa"; ++i; a[i] = "bbb"; ++i; a[i] = "ccc" + foo(3); ++i; a[i++] = "aaa"; とは書けても、 a[i++] = "ccc" + foo(i); とは書けないとこらがつらいが。
巨大なswitch/caseは分割すべしってのは定石の一つだろ
定石って、だれが言ってるの?
そういうレベルなのかここは・・・
巨大なswitchは分割すべしなんてあんまり聞かないなぁ。
分割しなければならないほどの巨大なswitchを書かなければならないような 局面がめったにないし、仮にそうなったときにも、分割するのがお作法的に正しいか微妙な気がする。
「リファクタリング」にはコードの危険な匂いの一つとしてswitch文 が上げられてるね。
>>639 Cで何の工夫もなしでウィンドウプロシジャ書けば、すぐそのようなシロモノに
お目にかかることになるよ
642 :
628 :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);
...
//で、それ以降の処理
643 :
628 :2007/10/20(土) 10:30:23
×a[3] = a[3] + hoge(3); ○a[3] = a[3] + foo(3);
>>640 それは文脈がちがう。
>>641 windowsのメッセージクラッカとみたいに、処理を追い出して、分岐部分のコードを小さくしようって
話はあるけど、分岐するコードを分割しようって話にはなりにくいんじゃないの?
もしかして「分割」って、処理を外に追い出すようなことを言ってるのかね?
コードコンプリートみたいなお作法関係の本でも、小さくしようとか書き方を変えようとかって
議論はあるけど、switchを分割しろって話はあまり見たことない。
switch文を書き換えるんじゃなくて、分割か。
なんか不毛なスレだな 何も得られない 何も深まらない ただ読むことで書くことで刻一刻と残りの人生が磨り減っていく、そんなスレ
殺伐としたスレにヘーベルハウスが!! /| |/__ ヽ| l l│<ハーイ ┷┷┷ _, ,_ パーン ( ゜д゜) ⊂彡☆====== /| __ |/ ヽ| l l│ ┷┷┷
>>646 何をしてもしなくても
刻一刻と残りの人生は磨り減っていくんだよ
それだったら踊ろうぜ
テーブルブランチャを意図的に作りたいなら、大きいswitchで良いと思うんだけど。 まあ、でかいswitchのcase文中にコード書くと、可読性が落ちるけど。
まあ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);
俺もヘタというか冗長だとは思うが結構それ好きな奴多いよな。 あまり有能無能に関係なくいる気がする。 ハカータイプにはまず見かけないが。
>>652 の場合はFooとBarなんで意図がなんとなく分かるからいいけど、
boolean isFoo() { 中略 }
boolean isfoo;
if (isFoo())
isfoo = true;
else
isfoo = false;
ならば完全にイラッとする。
というより、setBar(boolean b)っていうのが。 setBar(Bar bar)であってほしい。 setVisible(boolean b) とか setEnabled(boolean b) が自然化と。 いえ、まあ、FooBarの使い方について突っ込むのはフェアじゃないですが。
ついさっき見たよ…。
657 :
デフォルトの名無しさん :2007/10/21(日) 07:30:37
C++でtypedef使ったらへたくそに見えるの?
>>657 ふつーに使うけど、誰かにそういわれたのだったら、どういう文脈で言われたか教えて。
時と場合による。 gotoすら時と場合による。
660 :
デフォルトの名無しさん :2007/10/21(日) 09:56:54
ただ趣味でgotoを使いたくないという理由だけで ループを増やしフラグを増やし分岐を増やしている奴はヘタクソ
定数を左辺に持ってくる比較文を見るとイラッとするな。 あと、java限定だけど、"".equals(str)とか見たときだな。
ヒント:str==null
nullチェックもしないようなプログラムは恐ろしいですなw まさに、動けばいいレベルのプログラム
663 名前:デフォルトの名無しさん[sage] 投稿日:2007/10/21(日) 13:49:33 nullチェックもしないようなプログラムは恐ろしいですなw まさに、動けばいいレベルのプログラム
ぱっと見て「ヘタだなぁ」と思う引用レス
setBar(isFoo()); でいいんでない?Cとかだともしかしたら、別なものになるかもしれないけど。
C/C++でどうしても1か0にしたいならこうか? setBar(isFoo() ? 1 : 0); setBar(!!isFoo()); setBar((bool)isFoo());//C++のみ
>>668 1番上以外は意図が伝わりやすいとはいえないな
「1か0にしたい」という意図をそのまま表現しているのは1だし
俺ならそう書く
>>668 おれは2番目派だな
これも 1か0のみにしたい という意図が明確だからね
1番上は、1,0という数字をここに書くことで
「今は面倒だから即値書いちゃってるけど、そのうち1とか0を
ほかの数値に置き換える可能性もあるからそこんとこヨロシク」
って意図を感じる。
668は型があってない時点で全滅だろ
1か0入れたいときはsetの中で変換するだろjk
グローバル変数として、 int true = 1, false = 0;をやっちゃうのはどう?
は?
>>662 定数を左に書くと、ヌルポが発生するのが防げるけど、まあ、良くないね。
nullになるはずが無いのにnullになったらバグだしな。 そのときはきちんとエラーになったほうがありがたい。
strがnullでも良いときの話だろ
仮にそうだとしても、 if (str == null || str.equals("・・・")) のほうが素直で分かりやすいコード。
if (str == null || str.equals("・・・")) if ("・・・".equals(str)) 下の方がわかりやすくね?どうみても
そうじゃなくて、
>>682 の上下で意味が変わるって事だよ
>>682 動作が違うってのは置いといて、お前の感覚はおかしいよ。
if ("・・・".equals(str))の方が分かりやすいって人は、 if (str == null) よりも、if (null == str)の方が分かりやすいのかな。
なぜか向いてない奴がソースを保守する事があるので 馬鹿避けのためには if( "...".equals(str) ) と書く 下みたいなコードだと馬鹿避けにならない if( str!=null && str.equals("...") ) やつらは if の条件を*何も考えずに*変更しやがる
>668 これも入れといて。 setBar(static_cast<bool>(isFoo()));
if (StringUtils.isBlank(str))
JAVA初心者の俺は if("...".equals(str))の方がJAVAっぽいと感じていた。 if(str != null && str.equals("...") ) は冗長のように感じるけど、 例えばstrがnullの場合、equalsメソッドが呼び出されない分速い。とかあるんだろうか?
switch文を否定するスレになってないか?w
Javaではswitchに文字列使えないからな。 c#のswitchは色々できて好きだが、実行効率的には微妙だ。 equalsメソッドがnull判定を行ってくれるのなら 自分のコードにはnull判定を書かない方が美しいと俺は思う。 問題なのはjavaにはstaticなequals関数がないことで、これは言語の欠陥だと思う。
>>693 それは賛否両論だな
Object#equals()の指針を受け継いでいる限り static equals() は存在がおかしい希ガス
その指針がおかしいと言ってる。
>>678 エラーになった方がありがたいのは確かなのだが、javaでヌルポみたいなのを
どこまでトラッキングしてるかによるからな。いたるところにそんな実行時例外の
キャッチ文入れるのは冗長だし。入れなきゃ入れないで最悪お客様が使ってる
場面で変な状態になったりして後が大変だったりするから。
「if( a != null && a.equal("・・・")」だと2回式が評価されて1つめでfalseなんかに
絶対ならないから無駄だって思えたりもするし。
Javaがおかしいのは公知の事実
>入れなきゃ入れないで最悪お客様が使ってる >場面で変な状態になったりして後が大変だったりするから。 例外のキモは想定した範囲内で正しく動くかさもなくば死という所だからそれは正しい動作だろ。 ゲームで画面がバグってる程度なら動き続けたほうがいいかもしれないが。
想定外の数値が来てるのに、根本的なデバッグをせずに 「お客様のまえでエラー画面をだしたらいけない」って理由で その場をスルーさせるって・・・。 Javaじゃ日常茶飯事なの?
おまえはそれがJavaのせいだと思うのか?
実行時のエラーはどこかでキャッチして、適切な報告を行ったうえで正常系に戻るべきだ。 どこでキャッチするべきか考慮してないのは設計上の問題だ。 それをせずに安易に「エラーにならないコード」を書くのはただの怠慢だ。
想定外の数値が云々って話になってるのがよくわからん if(str.equal("・・・")){・・・ でヌルポ発生させるんじゃなくて、 if(str==null){throw new IllegalArgumentException("・・・");} else if(str.equal("・・・")){・・・ か assert str!=null; if(str.equal("・・・")){・・・ とすべきだろ
if(str==null){throw new IllegalArgumentException("・・・");} else if(str.equal("・・・")){・・・ ヘタだなぁ
ヽ(´ー`)ノ イッチャッタ、イッチャッタ
うぜ
どうしてみんな、評価式の左側に定数書くのを嫌うの? if(hogehoge_function(arg1, arg2, arg3) == CONST_NUM){} よりも if(CONST_NUM == hogehoge_function(arg1, arg2, arg3)){} の方が、比較対照の定数が前に出てきている分、人の目に止まり安くていいと思うのだが。 結果→原因 という、結果を先に記述する並びも、英語的というかロジカルで分かりやすい。 それに、式は値を前に返すというイメージがあるし、下記の方が断然直感的だと思うんだがなぁ。
正直どっちでもいい
慣れてれば大抵前からとか意識せずに行単位、節単位で読めるわけだし 読み易さの面でどっちでも大して変わらない、というのと そういう例外的な書き方を一つ増やすっていうデメリットを天秤にかけた結果の判断じゃない?
if(1 == a)なんて書くメリットはないし じゃあ切り替えるポイントはどこだなんて考えるの面倒だしな。
>>707 >英語的というか
いいえ、英語的でさえありません。
好みの問題だろ。 不等式を二つ並べるときに不等号の向きをそろえるかどうかと同じ。
だけどさ、 if( ! hogehoge_func() ){} とは、みんな書くんだろ? if( hogehoge_func() ! ){} とは書けないもんな、これは文法エラーだし。 だったら、 if( NULL != hogehoge_func() ){} でも良いんじゃね? ってならない?
>>713 強い型付け言語でNULL以外に偽になる値が返らないならありだな
>>713 チミはあれこれ考える前にまずは周りの習慣に合わせることを覚えたほうがいい。
>>714 NULL 以外に偽になる値を持つ言語って、例えば何がありますかね。
>>713 前者は"not ..."だが、後者は"NULL isn't ..."とはならないので有り得ない。
なんというフルボッコ…
>>715 では、単に習慣の問題で毛嫌いしているだけだと考えれば良いわけ?
そういうことなら納得できるのですが。
おれはfi(ret_bool_func(args)) {} ってしてるけど。
fiとはまた高度なテクニックを・・・
吹いた。fiだけに。
bugを下手だと申されましても…
おまいさんのbugって言葉の定義は何だい?
要件を満たしていない(十分条件じゃないよ) 正しいメールアドレスやIPアドレスが正しくないと判定されるなら、それはバグ
そしてURLはもっとひどい
>>729 それが唯一解ならそれ使うしかないんじゃね?
255.255.255.0を通さないのは明らかに下手じゃなくてバグだろ、常考
仕様です。 もし変更を要求するなら別途料金をいただきます。
別に、一回のmatchingでチェックしなくてもいいだろ・・・
正しくないのがpassしてもいいが、正しいのがpassしないのはバグ
正しくないのがpassしても駄目だろ。
それが良いか悪いかは要求仕様しだい。
この場合 ・書いた人は仕様を確認してない ・紹介した人は他人のコードを信用しすぎ なのが下手。 バグかどうかは結果。下手かどうかは過程。
下手だと思うコードスレですよ
私怨はよそでやれ
ヘタというよりは「RFCも読んだことないの?」と思うコードなので対象外だろう
>>719 if (0 == a || 2 == a || 4 == b) {}
と
if (a == 0 || a == 2 || b == 4) {}
の、どっちが見やすいと思う?
定数が左に来たほうが理解しやすいと思うのなら、
x = 0; じゃなくて、0 -> x; みたいな代入文になっただろうな。
社員の採用については、 「有能な人を採用し損なってもダメージは少ないが、無能な奴を採用するとダメージは多くなる」 と言われています。
欠員がでるまでは採らなくていい
心の中で読むとき、 「aがゼロかbがゼロでないとき…」と読むから、 (a == 0 || b != 0)が素直じゃないっすか? それとも定数左派の人は、 「ゼロがaかゼロがbじゃないとき…」って読むのかな。
ソースとディスティネーションの問題は、 インテル系から入ったか、モトローラ系から入ったかの違いなだけじゃ・・・。 昔はLSBとMSBでも揉めてたな。LEかBEでも揉めてたし。 そういうのは「ヘタ」とか「ウマイ」じゃなくって宗教論争なんじゃね?
== 演算子と equalsメソッドを同列に論じることは出来ないとおもうんだがどうよ? まあどっちにしても、どの順番がいいかは文脈しだいで変わるものだと俺は思ってるんだが。
多分、心理学的か言語学的にどっちが良いのか説明がつく。 俺は説明できないがなー
燃料投下になるんだろうなぁ。 右か左かには、別の視点もある。 定数かどうかではなくて、大きさ。 数直線って右が大きいでしょ。確かw だからそれに合わせて直感的に。 (0 <= i && i < len) これは個人的にすごく気に入ってる。
0 <= i < len って書けない言語は糞
数直線が右が大きいなんて定義は無い。
はぁ、そうですか
定義は無いかも知れんが、どちらでもいいから右が大なのでは。 文は通常左から右に書くから「右が大」でいいだろ。
右から左に文を書く言語圏もある。 思い込みや狭い常識論で「ヘタ」を定義して、他人のコードを貶めて悦に浸ってるだけに見えるんだけど。
正直そのネタはもう飽きた
>>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){
//ヌルポのエラー処理
}
〜ここまでテンプレ〜 ----------------------------------- ここはテンプレ外 ----------------------------------- 〜ここからテンプレ〜
「お客様」って書きかたがじつに気持ち悪い
問題の本質を理解してない
使いどころの良し悪しはあれど、書き方そのものに良し悪しは無し。 gotoだって使い所を間違えなければ悪くはない。 使い所は少ないけど。
SQLなんだけど、 XXX_DATE って日付型の項目にインデックスが付いてるテーブルがあって、レコード作成時に時刻は切り捨てている。 で、この日付をつかって絞り込むのに、 TO_DATE(XXX_DATE, 'YYYY/MM/DD') = '2007/10/23' とかやって、インデックスを効かなくしちゃってるのは「意味ないじゃん!」と思った。
catch(RuntimeException) これはさすがにねえよ。素人か?
またエラー処理を例外で、の話題か。 いい加減にしろ
>>745 左派の人はロジカルに物を見る。時系列では見ません。
定数云々じゃなくて、主語を左に揃えるのが要点だろ
いやだから、言語的な語順とかじゃなく、 左にある物の方が、右にあるものよりも基本的に目立つから。 if(0==strcmp(str1, str2)){} だと、頭を少し見ただけで、引数は置いておいたとしても、とりあえず動作の内容が把握できる。 「等しければ成立で、引数はstr1とstr2だな」と思考する。 一気に考えずに二段階に分けて考えられるから楽かなぁと。 if(strcmp(str1, str2)==0){} 一方、だと、最後まで読まないと最後まで読まないと、何やろうとしているか判らないじゃん。 運悪く「==0」を読み飛ばしてしまったら違う意味に捉えちゃうし。 なんか引数一杯ある関数とかだと、最後まで目をやるのがしんどいときあるし。 だからそういう読み飛ばしてしまいそうな重要事項はなるべく先に書いたほうが、 読み手に釘をさせて良いんじゃないかという。
結局は「どの茶屋の団子が美味い?」と同じだな 分かりきっていたことだが
> 左にある物の方が、右にあるものよりも基本的に目立つから。 > だからそういう読み飛ばしてしまいそうな重要事項はなるべく先に書いたほうが、 > 読み手に釘をさせて良いんじゃないかという。 これに反対している人は殆どいないんだよね。 でも、何が重要なのか分かっていない人がいるのが悲しい。
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()みたいな書き方をしたプログラムってあるの? もちろん、ある程度有名で評価の高いプログラムでの話だけど。 なんなら、解説書でもいいけど。
そりゃ流石に探せばいくらでもあるだろ なんか痛々しいな
よーわからんけど,解説書なんていったらこのスレ自体でもいいんか? そんなことどうでもいいよな. 嫌ならググれカス 以下駄文: ちなみに if(string!=null && string.equals(anotherString)) → "nullチェック"と"文字列の比較"を同時に行う というのは形式上あまりよくない. なぜなら,文字列の比較を行いたいのであって,nullチェックは本来不要な演算だから. なぜ「混ぜて」書かれているかというと,Javaの文字列比較がStringクラスのインスタンスメソッドであって, インスタンスの参照があるかどうかが,頻繁に必要になるから,だ. 不思議とこのケースだけは特別扱いされていて,他のインスタンスメソッドの呼び出しには使われてない(気がする). では他のケースではnullチェックはどうしてるかっつーと,「nullチェック」を分けて書いてあるのがほとんど. 話は戻るが,JavaのStringはかなり特殊だよな. それもこれも,Stringが値ではなくオブジェクトで,文字列にも関わらずオブジェクトだから初期「値」がnullだからだ. 実体があって初めて文字列なのに,「実体がない文字列」なんて概念がそもそも必要ないんだよ. その苦労が "string literal".equals(...) に表れてると思うね.
>>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」っておちょくられるだけだから。
じゃあ何でも良いから例をどうぞ。
テストケース中で使われるassertの類で assert( 10 == f(10) ); こういうのなら見たことある! それ以外だとコーディングスタイル本の例ぐらいしか思いつかない
ありとあらゆるメソッド呼び出しをすべて if (hoge != null) { hoge.foo(); } みたいに書いてる香具師はさすがに見たことがないな。 assert hoge != null; ならともかく。
if (0 == a)派の奴は、何でa = 0に何の文句も言わないの?
e? まだ引っ張るの?
意味がわからん
「もしゼロがaと等しいなら」と読み下した方が分り易いと考える人は、 「ゼロをaに代入する」と書いた方が分り易いと考えるはずだろ? ということだと思う。
>>778 assertは、expected, actualの順が普通です。
何故だか知りませんけど。
今日は時間があるから燃やすぜ
>>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()だけ特殊化されているのがおかしいな,ってこと.
a.equals(b) と b.equals(a) が等価じゃないのは確かに気になるな
違うのは当たり前だろ
もともと、equalsのような二項演算(バイナリメソッド)は、オブジェクト指向だと 「inheritance is not subtyping」問題のようなものを引き起こしやすいことで 知られている。 バイナリメソッドでぐぐるといいよ。
>>786 > そういうのはそもそも文字列の範疇じゃないと言いたいんだが.
なぜ「そもそも」なのかを示せ。
> (逆に他の値型はどうなってる?「無の整数値」とか存在するか?)
するし。
> すっかり忘れているようだが,そういう実体同士のチェックは「==」演算子が行っている.
わけわからん。
文字列だけじゃないとおもうが Integer i = null; Long l = null; ・・・ あと、.netのbooleanはtrue/false/nullの3値論理だったと思うし nullのセマンティクスはDBのアレでいんじゃね? unknownまたはN/A
>>773 > 実体があって初めて文字列なのに,「実体がない文字列」なんて概念がそもそも必要ないんだよ.
なんで「そもそも」なんだよw
必死ですね^^;;;
もっとがんばれ
いいこと思いついた nullの場合の振る舞いを定義できるように言語仕様を変更すればよくね? nullオブジェクトパターンの発展型
>>775 >「同時に行うな」なぜなら「本来不要だから」・・・意味ワカラン!
多分こういう事を言いたいのでは無いかと。
「やりたい事」は「文字列の比較」なのに、「実際に書くコード」は「nullチェック」と「文字列の比較」。
「やりたい事」と「実際に書くコード」をなるべく一致させたいが、Javaでは毎回nullチェックを書くか、苦肉の策で"string".equals()するしかない。
つーかStringの初期値がnullなのはなんでだ。""にしろ。
結局意味がわからんのは何故だ。
>>784 「もしゼロがaと等しいなら」
じゃなくて
「もし、ゼロになるところの、aならば」
だよ。
0==a を 「もしゼロがaと等しいなら」、と呼ぶ人は、
int i, j; をどう読んでいるのか気になるな。
俺は「int になるところの i, j 」ってイメージだが。
それから、単に主語を右だ左だ、と言う話ではない。
短く済ませられる部分をなるべく左に書くのがC言語のスタイルだと。
C言語では、変数宣言の変数とか、関数の引数のリストとか、代入文の右辺とか、
そういう、長くなる可能性のあるものは、なるべく右側に書くように調節してある。
条件式の定数を左に書くのも、あくまでその流儀に従っているだけ。
>短く済ませられる部分をなるべく左に書くのがC言語のスタイルだと。 >短く済ませられる部分をなるべく左に書くのがC言語のスタイルだと。 >短く済ませられる部分をなるべく左に書くのがC言語のスタイルだと。
関係代名詞かよw
if (a == 100) if (100 = hoge) こうですか?わかりません><
トートロジー
つまり、このぐらいのことをやるのがC言語のスタイルなんだよ、きっと。 static const char * const foo[] = {"",}/**//**//**//**//**//**//**//**/;
>>798 あなたは、if a equals 0を
> 「もし、ゼロになるところの、aならば」
と訳すということですね?
間違えた。 if 0 equals a だ。
じゃあ、if (a >= 0)は何と読んで、if (0 <= a)は何と読むのでしょう?
>>804 C言語を一々日本語に訳したりなどしない。
ただ、頭の中で、そう考えるというだけのこと。
一々日本語に訳してプログラム読んでるのですか?
>>807 if (a >= 0)
a が 0 以上
if (0 <= a)
0 以上 になるところの a
戦前の人間かよw
日本人じゃなんだよ。 相手にするなよ。
↓こんなの以外、どうでもいいよ if(a==0){・・・} else if(1==a){・・・} else if(a==2){・・・} else if(3==a){・・・} ・・・
なにと比較するんだ、なにと比較するんだ、なにと比較するんだ・・・ あ、aとか。
もういいだろ。
815 :
809 :2007/10/23(火) 13:58:53
逆に聞きたいけど、 if (a >= 0) は語順どおりに読めないよね。どうしても「>=」をあとから読まなきゃしょうがない。 無理に読むと、「aは何か以上であり、それは0です」となる。 反対に、 if(0 <= a) だと、「0以上のa」という風に語順どおりに読めて、こっちのが楽な気もするのだが。 まぁ俺は、if (a >= 0)と書いてあっても、0から読むがな。 まず敷居値を与えてもらって、それに対して変数がどうか、と思考したほうが考えやすい。 先に変数だけ与えられても、頭の何処においておけば良いのか迷う。
a is greater than or equal to zero
>>813 それは違うな。
0と比較するのであって、aと比較するわけではない。
aは比較される側であって、0と比較する。
0と比べてaはどうなのかって話だからね。
aに対して0を比較する、なんてのはナンセンスで、
0に対してaを比較する、が正しい。
>>816 それいいな。今度から使わせてもらうよ。
>>815 奇遇だな。
俺もif (0 == a)と書いてあっても、aから読むぞ。
>>815 > 逆に聞きたいけど、
> if (a >= 0)
> は語順どおりに読めないよね。どうしても「>=」をあとから読まなきゃしょうがない。
> 無理に読むと、「aは何か以上であり、それは0です」となる。
えーと、義務教育ちゃんと受けてますか?
イフ、a大なりイコールゼロ
というか、コードに関して誰かとリアルでコミュニケーションしたことあんの?
アセンブラの感覚のまま高級言語弄ると 即値は第二オペランドに置きたくなるよね。
if (0==a)はif (a=0)にwarningを出せなかったタココンパイラを使ってた奴の悪習
if (a >= 0) もしも「a大なりイコール0」という式が非0を返すなら て読むけどな。俺は
>>822 あるあるwこんな具合に。
sub eax,0
jz @f
ぱっと見て「ヘタだなぁ」と思う暇の潰し方
>>824 ぱっと見て「ヘタだなぁ」と思う思考回路
つまり、Javaは糞と。
BufferedReader br = new BufferedReader(new FileReader(hoge)); String line; while (null != (line = br.readLine())) {・・・}
それに関しては同意。
while (fgets(buf, sizeof buf, fp) != NULL) { }
なぁ、これ何か面白いのか?
素人でも、議論に参加し易い
いかんというか、あまり意味のないレスに見えるな
<quote> if 定数 == 変数と書くプログラマを信頼してはならない -- アリストテレス (BC212) </quote>
自転車置き場どうすんだよ?
ここ数日でスレが一気に進んだな。
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!)のオレさ分かるような事を・・・
値渡しだけで、参照が一個もないソースを見たときにはびっくりしたなぁ……
つまり、基礎的な数学的素養ゼロな奴の戯言だったってことだな
Cなんて全部値渡しじゃねーか
847 :
デフォルトの名無しさん :2007/10/24(水) 00:06:56
やっぱ逆ポーランド記法が究極やな。
844が見たソースが、実はjavaだったとしたら。。。
849 :
デフォルトの名無しさん :2007/10/24(水) 00:08:52
∩___∩ |
| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | J
/ ∩ノ ⊃ ヽ
>>846 ( \ / _ノ | |
.\ “ /__| |
\ /___ /
850 :
デフォルトの名無しさん :2007/10/24(水) 00:12:11
これはひどい
なんかマ板にも似たようなスレがあったような・・・
855 :
デフォルトの名無しさん :2007/10/24(水) 00:45:59
∩___∩ |
| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | J
/ ∩ノ ⊃ ヽ
>>850-853 ( \ / _ノ | |
.\ “ /__| |
\ /___ /
もしかして、815=849=855なのか?
>>854 そもそもマ板とム板を分ける必要あるのかね?
人気板なら分けてロードバランスするのも分かるけど、
どちらも超過疎ってるのに・・
>>857 そもそもファイルサーバとクライアントPCを分ける必要あるのかね?
CPU常時フル稼働ならロードバランスするのも分かるけど、
どちらもほとんどアイドルなのに・・
859 :
デフォルトの名無しさん :2007/10/24(水) 02:01:21
∩___∩ |
| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | J
/ ∩ノ ⊃ ヽ
>>856 ( \ / _ノ | |
.\ “ /__| |
\ /___ /
860 :
デフォルトの名無しさん :2007/10/24(水) 02:07:07
必死すぎて笑えるw
人が必死なのは哂ってはいけない
そもそも文法的にはどちらの書き方も正しい。 それを「読みやすい」だとか「間違えにくい」という主観と よく分からん例えを用いて、どちらか一方だけが正しい、 と主張した所でお互い納得する訳が無い。
void foo(int *a); はint*の値を渡してるんだぞ。 と空気嫁ずマジレス。
最近釣り針が多いですね。
>>862 「書き方」に関する、あらゆるコーディングスタイルに関する議論は、まったく無駄だとおっしゃるのですね。
まあさんざんで尽くしていると言う意味でまったく無駄だね
>>867 例えばあなたが社内コーディング規約を作ることになったときに、何を規約とするかを選択するときの良い判断材料になるとは思いますよ。
>>863 マジレス乙!
, -''":::::::::::::::::::::::`` ‐ 、' :,
,:/:::::::::::::;;;;;: -――‐- :;;;;;;`ヽ、
,:'/:::::::::::::::::/u , , ``-;ヽ
,:':/:::::::::::::::::/ '⌒`ー‐'| | |`ー-‐、u|::| ←
>>849 >>855 ,:'/:::::::::::::::::/u /⌒ヽ /⌒ヽ !::! ;
,' l--、:::::::/ l O | lj | O | '、l ,:
/´,―、ヽ:/ ヽ、,r‐'-、:::::::::ゝ--く l ;
.;'/ /ニ_ノ | ..::::::::{ r,、 ヽ / ,r-, ノ::.. '、;
; | l '-, / ヽ !},. ---'し'_,ヘ :..ヽ':,
':,! `‐' u ヽ ,. -'"´_,. ----,、 ヽ、u l ;
':,ヽ_ノ u ノ'" ,. -''" ̄ ̄ ̄ ヽ. ヽ |
.,: | lj / /_,. ---、,. -----、| | / ;.,
--―'ヽ / '-------―――‐''" ノ /``ー- 、_
>>822 実際に出回っているCPUを考えると
第一オペランド派のほうが多いかも
>>871 > 実際に出回っているCPUを考えると
どこかに資料ある?
携帯電話とか家電に組み込まれているやつが、数が多そうだけど。
>第一オペランド派のほうが多いかも
CPUの問題じゃなくて、アセンブラの問題でしょ。
同じ、intel CPUでも intelのアセンブラとgasじゃ違うし。
まだやんの?
gasはちょっと嫌だな。 やはり代入文は x = 0;みたいにかくわけで、これをそのまま並べると mov eax, 0 見たいな方が慣れもあってわかりやすい
0 -> a みたいな言語があった気がする
>>729 ちなみにその正規表現はいわゆるメールアドレスではなく、メールのアドレス部分。
つまり、メールヘッダのTo:やFrom:の後ろに来る表現。
877 :
デフォルトの名無しさん :2007/10/24(水) 15:11:27
∩___∩ |
| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | J
/ ∩ノ ⊃ ヽ
>>863 ( \ / _ノ | |
.\ “ /__| |
\ /___ /
なんだか必死な奴が一人いるみたいだな。
まぁ
>>849 なんだろうがwww
C++での演算子オーバーロードを見てみると... 定数が先に来るのではなく、変数が先に来るのが望ましいのではないだろうか? まあ、C/C++の系統ではの話だがな
だから定数変数は本質じゃないって 定数は変数のバリエーションの一つにすぎない 変数と変数を比較するとき、どちらを左辺にすべきか ということを考えるのが筋
定数変数が本質だろ
定数==変数 って書き方は代入してしまうミスがあった時にエラーが出て便利って 本で読んだぞ プロはどう判断するか知らんけど
>>882 それ大昔の話。
今時if(a=0)と書くとコンパイラが警告してくれる
>>880 それ、定数を左に書く人を諌める言葉だったんだよね。
最近じゃあ、定数を左に書く人が使うようになって困るw
>>862 そんな言い訳で、定数左置きは正当化できませんよw
というかさ、数学でも普通 x = 0 って書くでしょ? こういう「自然な」書き方をあえて避けるほどの理由があるの?
いや、0 == xの方がわかり易いと思う人がいるってことで、いるんだからしかたがないという 結論にしかならない気がする。
バグを未然に防ぐために定数を左に持ってきてるってんなら、 両方が変数だったときのミスも検出できるようにlintなんかを使うようにするのをお勧めするし、 最近のコンパイラifの中での代入を警告してくれるから、そんなことしなくていいと思う。 ただ、定数を左に持ってきたほうが読みやすいと思ってるなら、 こればっかりは感性の問題だから他人がどうこう言える問題じゃないね。 仕事でやったら感性の異なる同僚にどんな嫌味言われるかは知ったことじゃないけど。
今時のlintってC++でテンプレートメタプログラミングしてるような ソースも食えんの? 最近のコンパイラは皆 if (p = strchr('\n')) *p = '\0'; みたいな正当なコードに小姑みたいに警告を言ってくんの? (gcc -Wallが文句を言うのは知ってるが) ちなみに俺は右派だ。俺の中ではただの好みでしかないから 別に正当性は主張せんが。
三田本なんか読むからですよ。
>>888 そのコードだと、string.hをインクルードしてたらエラーだと思う。
下らなさ過ぎて宗教論争にもなってねーなw
VC8は/W4にしないと文句言ってこないな。
>>890 ごめん、引数が一個抜けてたw
意図だけ汲み取ってくれ。
>>885 フツーの本とかコードを読んでたら、そんな書き方するようにならないだろって
書き方のやつはいるな。
#include<stdio.h>
みたいにくっつけて書くやつとか。
こういうのを指摘しても、細かいこととか「宗教論争」とか言って、どっちでもいい(これでいい)とか言って頑張るの。
まあ、たしかに、どっちでもいいけど「こいつ、へたくそそう」と思う瞬間だよね。
職場に、ifは、 if (n < 0) と演算子の両側をあけて書いてるのに、forだとなぜか for (i = 0; i<10; i++) みたいにくっつけて書いてるスタイルの人がいるけど、どういう基準なんだろうか。
>>894 おまいは指摘の仕方がへたくそそうだな…
文末に無駄な空白があったり、コメントで全角英数なんかを使ってたりすると、下手だなって思う。
>>895 場合によっては長くなりそうな部分はスペース除いて書くクセついてたりする人はいるな
処理系によっては横80行越えちゃいけないとかあったりするから
改行するより詰めたほうがわかりやすいという理由で
ちなみに昔のC言語のバイブルK&Rもそのへん統一されてない
上記のような理由なのか特に気にしてなかったのかしらないけれど
同じ話を何度もするな、ヴォケ
数学のx=0とCのx=0は全然違うし
x = 0 ていう左から右方向の読み方に慣れてるってことだろ だから x == 0 のほうが 0 == x より自然に読み取れるってことだろ
xが0と等しい 0がxと等しい おれ自身は定数左派じゃないが、 どうみても読みの方向なんか関係ねえよ
数学だって、「x=0 のとき」とは言っても、「0=xのとき」とは言わない。
なんで言わないのか考えたことあるか?
要は、0が先に出てきて後からaが出てくる方が分かりやすいか、 反対に、aが先に出てきて後から0が出てくる方が分かりやすいかって話だよな。 読む時は、aが先、考える時は0が先って感じだろう。
だから定数変数関係ねえって class hoge { private int x; ・・・ void fuga(int a) { if (x==a){・・・} } } 文脈上、主語に当たるものが 左のほうが読みやすいの
数学の場合はフォーカスが変数から定数へと行くほうが値の固定のイメージとして自然だからだろう あとは値のほうが重要度が高いから数値が後ろにきやすいということだろ (xの値を求めて答えをいうときに「xはゼロ」という) だからといって0 = xと言っていけないということはないけど 慣例にわざわざ背く必要もない なんだったら日本語の文法も変えるか?w
>>908 失礼
重要度っていうよりは主語述語の関係と言ったほうがいいな
主語述語って意味なら、C言語は壊滅的だな。 int mainとか。 main is int って書ければ良かったのにな。
どうしてlvalue・rvalueの話が出ない
関係ないから
>>910 int-valued main って読めばいいんじゃね
>>914 その乗りで良くと、0==a は 0と等しいa と読めるな。
逆に、aと等しい0 ってのは変になるな。
糞スレ度猛烈うp中
左辺に定数を書くから、お前はC++を覚えられないんだ といってみるテスト
int mainのintは、形容句だろ public static void main パブリックでスタティックな値を返さないメイン関数 てな具合で
>>915 宣言じゃないのにその読み方は変じゃないか?
宣言はリストとしての読みやすさを考えてそうなってるんだろうからなw
>>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) ){}
そういう意味では同じじゃないかな。
>>918 0==a という条件式だって、aに対する条件を定義しているわけだから、
0== は a を修飾している、つまり形容詞と捉える見方もあるのでは?
そういう風に捉えると、案外 0==a も読みやすいものだと思うが。
>>921 訂正
「f( 0==・・・ 」 → 「if( 0==・・・ 」
>>921 慣例的には同じじゃない
プログラム部分はリストとして読まずに文章として読むほうが「自然」だし可読性高いだろ?
わざわざそこもリストとして読みたいというなら止めはしないけど
>>922 だから要は慣例なんだって
そりゃ慣れればどっちでもいいさ
チームとしてプログラム組むときにどっちかに合わせないと読みにくいってんなら
そのとき話し合えばいい
>>921 でも、
( a == 定数 )
は、
( a.operator==( 定数 ) )
となり、aの属する型の比較であることが保証されるけど
( 定数 == a )
は、
( operator==( 定数, a ) )
になり、aの属する型の比較とは限らなくなるので、おかしいと思うの
StallmanとかGoslingとかBill Joyとかが、if (0 == a)と書くとは思えない。 アホグラマ用のルールじゃん。
>>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」が目だって良くない?
燃料おつw
>>924 もちろん慣例には従うさ。だた、意味も分かってないで、
「定数を左に書くのはだめ」って頭ごなしに言うのはどうかなって思ったんだ。
普段 int i; とか int main() とか平気で書いといて、
それが普通でない並びになってることには気づかなかったのかなと。
慣例には、もちろん従うよ。
if (0 == a)は書かないかも知れんが、"hoge".equalsは書くと思う
if(JOptionPane.showConfirmDialog(...)==JOptionPane.YES_OPTION){ とは書くけど、 if(JOptionPane.YES_OPTION==JOptionPane.showConfirmDialog(...)){ とは書かないな。
>>930 頭ごなしに言ってるのはただの釣りだからほっとけwww
というか俺も釣られてる希ガス
>>925 ,
>>926 俺も普段は定数を右に書くよ。
条件式内の関数の引数が長い場合は定数を前に出すこともあるけど。
それはキレイとか汚いとか、読みやすいとか読みにくいとかじゃなくて、
定数を前に出すことで、他のプログラマに、定数と比較しているぞ、ということを
印象付けるためにね。うっかり読み飛ばされたら大変だから。
だけど、C言語的には、定数を左に書いても変とはいえない言語だと感じるから、
定数を左に書く人をそこまで非難するのは変かなぁと。
それから、この人達は、int i; とか int func(); とか書くことに何も感じなかったのかなぁと。
C++は文法的に破綻しているから、いまさらどうこう言ってもしょうがないよね。
個人的にはそのダーディーさが、たまらなく好きなのだけど。
/\___/ヽ /'''''' '''''':::::::\ . |(●), 、(●)、.:| + | ,,ノ(、_, )ヽ、,, .::::| . | `-=ニ=- ' .:::::::| + \ `ニニ´ .:::::/ + ,,.....イ.ヽヽ、ニ__ ーーノ゙-、. : | '; \_____ ノ.| ヽ i | \/゙(__)\,| i | > ヽ. ハ | ||
a==0が0==a、あるいはその逆になったぐらいで 読みずれーとは頭が固い連中だな。
おまいら正直になれよw 定数左派が得意満面だったとき、 それにイラッとするだけだよって。 読みやすいかどうかは些細な問題だよって。
変数とかどうでも良いから定数と定数を比較する場合どっちが先にするんだよ
左派っていっても、このスレでは俺だけなんだけどね。
単に、定数を左に書いてはいけない理由を聞いてみたかっただけだったんだけど、
「主語述語の関係になってないから」なんて返ってきてびっくりしてね。
だってそれは、C言語使いが、C言語のあの変な仕様の宣言の性で、
他の言語使いに罵倒される時にしばしば使われてきた言葉そのものだったから。
C言語使いながら、「主語述語の関係じゃないから駄目」と主張するなんて、
世の中には、凄いことを言う人達が居るのだなぁと思って。
しかも、普段はヘタなコードを罵倒している偉そうな人達がだよ。
一体どんな顔して言ってるのかと思うとおかしくておかしくて。
まったく世も末だね。
>>938 もうちょっと面白いこと言ってね。
俺は if(a == 0) 定数右派。 理由:手が自然に動いちゃうんだもん!
全ての左派が
>>939 みたいな人間だとは思わないでくださいね…。
あと、俺は別にヘタなコード見たからって、一々バカにしたりはしないよ。 他人を笑い飛ばそうとして、実は自分がナンセンスなこと言っちゃってる滑稽なやつ見たときは別だが。 言ってる内容そのものよりも、その姿に笑っちゃうよ。 俺がこのスレ覗いたのだって、そういう滑稽な人達が見てみたくなったからだし。 大体自分が人のことを笑い飛ばしている時は、 逆にそれを聞いてる誰かに笑い飛ばされているものだよ。 だって、自分より頭のいい人が、全くこの世に居ないわけなんて無いでしょ。 だから、人のことはあまり悪く言うもんじゃないよね。
嫌なおっさんだと思われたらいやだから一応断っておくけど、学生ですよ。 だから、青臭いとか言われても困るよ。 まぁいい歳超えたおっさんが、こんな詰まらないスレ覗いてるわけないけどね。
ガキはさっさと寝なさい。
0:30に放送されていたNHKの高校講座 数学Iで、たまたま不等号の話だったんだが ( X^2 + 2X + 3 ) > 0 と言う表記だった よって、定数が右にある方が、大多数の人とって、自然に読める物と思われる とか言ってみるテスト
釣りだって言ってるのに、まだ書き込むんだな。 元々C言語が普通ではない言語だって事だよ。 int i; なんて書いちゃう言語の上で、語順云々をあーだこーだいってもしょうがねぇよ。 文句いいたけりゃ 「int i;」 に対してでも言えばいい。 それから、読みやすさや自然さよりも、バグの出にくさを優先すべきじゃないかな。
>>947 普通の人は、定数を右にしようが左にしようが、バグは出しませんw
定数を左にすることでバグを減らせるのは、=と==と打ち間違えるバカだけですwww
バカじゃなければ、打ち間違えたところで警告が出るので修正が簡単にできます。
万が一警告を見逃したとしても、単体テストの段階でバグは見つかるので、問題はありません。
てか、釣られたwwwww
天に唾するとはまさにこのこと
>>947 if (a == 0)とでも、if (0 == a)とでも書けるときにどちらを選択しますかという問題なんだけど、
それすらも理解できてないのかな。
で、849はどこに行ったのかな?
>>950 次スレをヨロ
>>948 if( hoge(a, b, c, d, e, f, g, h, i, j, k, l) == 0)
{
}
とかやっちゃうと、環境によっちゃ==0がエディタ外にいっちゃって
見落としちゃうかもしれないだろ。
そういうことまで考えて、わざわざ定数を前に出してる人達のことを、
単に定数が左だからって事だけで、頭ごなしに笑い飛ばすのは
愚かだって事だよ。何も笑い飛ばすことは無い。
>>950 どちらを選択しても、それはその人の自由だよ。
臨機応変に選択すればいいだけの話。
そして、そんな詰まらないことで、他人を馬鹿にする必要も無い。
どちらか一方が正しいと決め付けるために、変な屁理屈をこねる必要も無い。
>>952 つまり、コンパイルさえ通れば、どんな書き方したって他人が口出す問題じゃないと言いたいんだな?
一人でやってるなら、それでいいんじゃね?
んなこた最初から結論出てただろ? まじめにレス返してる人はそっちが「自然」に思えると言ってるだけで誰も笑い飛ばしちゃいない 一部が煽ってただけだろ こういう釣りは不毛過ぎる まじめで実直な人たちの時間のロスにしかならない
>>952 if (...) {
}
if (...)
{
}
if (...)
{
}
これらのどれが優れてるかで、いつでも大論争が起こるのがプログラマという人種なんだよ。
なぜif (a == 0)だけが聖域で触れてはならんのだ?論争したっていいじゃない。
>>952 そもそも、
> if( hoge(a, b, c, d, e, f, g, h, i, j, k, l) == 0)
こんな関数を作っちまう奴がアホ。
> とかやっちゃうと、環境によっちゃ==0がエディタ外にいっちゃって
> 見落としちゃうかもしれないだろ。
どんな腐ったエディタを使っているんだよ。
>>954 少なくとも if (a == 0) と、if (0 == a) に関しては自由だろ。
バグってるわけでも、冗長なわけでもない。
普遍的にあーだこーだいえる問題ではないよね。
どうしても統一したいってんなら、コーディング規約で決めればいいだけの話だろ。
どっちにしたって 「定数が左 = ヘタ」 ってことには成らないよ。
>>955 真面目で誠実な人間はこんなスレ覗かないよ。
どうせ不毛な議論が続いていることなんて分かりきってるし。
暇つぶしに俺みたいな学生が来るぐらいだろ。
>>959 > どっちにしたって 「定数が左 = ヘタ」 ってことには成らないよ。
今までの流れを全て無視するなよw
>>959 そういう決め付けは良くないぞ
だったらそれなりの理由を考えて真面目にレス返してる人たちが
いるのはいったいなんなんだ?
論争じゃなくて叩き合いならもっと違う流れになってるはず
ちなみに俺もこのスレは今日たまたま開いたんだが
いいかげん釣られるのも疲れたし明日も早いんで寝る
>>958 >こんな関数を作っちまう奴がアホ。
Win32APIなんて、そんなんばっかだよ。
だからといって、使いづらい関数を作った奴がバカだから、
自分スタイルのコーディングを貫いて、結果として読み辛くなったとしても、
それは他人の性!!
なんてのは子供の理屈だよ。
もっと目的意識を持って行動したら?
それから visual studio は折り返さないぜ?
オプションで変わるのかもしれないが。
>>959 > 普遍的にあーだこーだいえる問題ではないよね。
それは君の認識であって、万人がそう思っているわけではないということはわかってるよね?
少なくとも、if (a == 0)に関しては、
>>957 の「かっこの位置」と違って、普遍的にあーだこーだ
言えると考えてる人はいるよ。現にいたでしょ、このスレにも。
> どっちにしたって 「定数が左 = ヘタ」 ってことには成らないよ。
君はならないと考えているが、下手と思う人間もいるってことだよ。
if (0 == a)の方がわかり易いと思う人がいて、それを否定できないのと同様、
その書き方を下手だと思う人がいて、それを否定できないのではないかな?
if (0 == a)がなぜわかり易いかを主張するのは良くて、なぜそれが良くないと思うのかを
主張するのは禁止かい?
ちなみに、 if (...) { } が優れていると主張する人たちは、大抵人間性まで否定されるところまで行くよ(笑)
int i; がおかしいのか? FORTRANでも、型宣言をする場合は、型名が最初に出るので、Cが特に変なわけでは無いと思うが PASCALやBASICでは、型名修飾が後方に来ているからって、それが標準であるとは言えないと思うが?
>>961 >だったらそれなりの理由を考えて真面目にレス返してる人たちが
>いるのはいったいなんなんだ?
「慣例だから」といってくれた人達以外は、
単に自分を正当化したかったか、それとも、屁理屈こねて相手をねじ伏せたかったんじゃない?
どちらにしても、大した理由には思えんし、そういう行動は止めた方が良いだろうね。
「真に素晴らしいコーディングとは!!」とか誰も頼んで無いのに勝手にいきり立っちゃってる人も
いるのかもしれないが、結局のところ良いコーディングをするには、
読み手のことを考えて臨機応変に対処するしかないのだから、
変な物差し作るだけ無駄というものだと思うがな。
真面目な人も居たのかもしれないが、宗教論争が無意味だって事が学べて良かったんじゃないかしら。
もちろん宗教論争したい人はどうぞ。止めやしないよ。
よくよく考えてみたら... if ( 定数 == 変数名 ){} とした方が見やすいようなコードの場合 if文ではなく、switch文を利用した方がもっと見やすくなるのでは無いだろうか?
>>963 そう思うんなら、if (a == 0)に関して、
どうして普遍的にどちらが良いか言いきれる問題なのかを主張すれば?
単に俺は、そういったことはケースバイケースで
普遍的にあーだこーだ言える問題でないと考えたから、
そう自分の意見を書き込んだまでだが。反論するのは自由ですよ。
>それは君の認識であって、万人がそう思っているわけではないということはわかってるよね?
万人がそう思ってるわけじゃないんだから、書き込むなってか。どんな理屈だ。
>それを否定できないのではないかな?
俺は自分の意見を書き込んでるだけなんだが。
「定数を左に書く奴はヘタだ」って思いたい人はずっと思ってれば?
ただ俺はそれは間違った認識だと思うがな。
俺は単にコーディングスタイルなんかでウマいヘタを決めるのはナンセンスだと。
>>965 変は言いすぎだったかもしれんが、まぁ、ちょっと素直ではないかもね。
まぁでもあれのおかげで、int a; って書くんだから、0==aでもいいじゃん
って考える人が居てもおかしくは無い土壌が出来たというのはあると思うよ。
でも、コンピュータ言語なんかを真剣にやってるところに行くと、結構バカにされてるよね。
正直どうでも良いんだけどね。int i のが読みやすいし。
>>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であるという評価は定着していたと思う。
現在、if (定数 == 変数)という書き方が良いと考えている人には二通りあると思う。 * どこかでif (定数 == 変数)という書き方(bad-knowhow)が良いという情報を得て、 それを盲目的に信じている * 本当に、if (定数 == 変数)の方がわかり易いと考えている 後者の人たちが居るのも事実だし、それは否定しない。 しかし、この話題が1991年3月以降、何度も書籍・雑誌・ネットに登場するのは、 人をひきつける何かがあるのだと結論付けざるを得ない。 - Fin
読み直して、一つ追加。 上記レスは、あくまでも日本での事情で、海外でif (定数 == 変数)と書く人たちが、 なぜそのように書くに至ったのかは知りません。
> 「慣例だから」といってくれた人達以外は、 > 単に自分を正当化したかったか、それとも、屁理屈こねて相手をねじ伏せたかったんじゃない? > どちらにしても、大した理由には思えんし、そういう行動は止めた方が良いだろうね。 それはおまいさんもそうだろ 変な理屈こねて自分を正当化したかったとしか思えない このレスそのものもそう 自分にも非があるということを認めていない 上からの目線で相手をねじ伏せたいだけ
そもそも最初のほうで不毛な宗教論争になるからと言われているのに あまりにしつこくおまいさんが聞いてきたから一応の理由を述べたのみ もともと不毛だと思っているならそういうのに他人を巻き込むなよ
最初から
>>970 の記事を出すだけで良かったのに
わざわざ釣りをして時間の浪費を他人に強いて自分は「釣りを含めて自分の行動は正しい」
なんて姿勢が気に食わない
もっと言うとおまいさんの主張のとおりここにゃ落ちぶれた学生かニートくらいしかいないとしよう だけどそれはおまいさんの言う社会で偉そうにのさばってる連中じゃない どっちかといえば社会からはみ出した連中であって社会的弱者なほうだ 矛先を向ける相手が違うんじゃないか? それともそういうダメな連中がちょっと強がってみせるのが気に食わないってのか? だったらおまえのやってることはただの弱いものいじめだ 連投スマン
int i;が素直じゃないとか言うのも気に入らない 入れ物の用途は最初に明示するべきだ var i:integer;の方がよっぽど屈折しているし、01 cnt PICTURE 9(03) VALUE 0.なんて最悪だろ これらの宣言方法よりも、int i;やinteger iの様な宣言の方が判りやすいのは確かである まあ、後方で型を指定するような変態言語を使っているから、論理式の前方に定数を持ってくるなどという変態的行為が平然と出来、それを正しい等と言うことが出来るのだろうがな
>>978 スレの流れとは関係ないがおまいの発言に(`;ω;´)モワッ
痛みはね、痛みはね、俺もおまいも痛みは同じ。
>>977 最初からって・・・
俺は、この話題ではあのレスが始めての発言なんだけど・・・
>>976 俺は、この手の話題は不毛だとは思わないんだよなぁ。
自分のコーディングスタイルが固まってない人には、興味深い話題だったと思うよ。
GNUコーディングスタイルは、なぜああなのか、とかもね。
984 :
デフォルトの名無しさん :2007/10/25(木) 16:47:09
まだやってるのかよ。 あのな、そもそも、if (0 == a) って書き方は、 if (a == 0) と書くつもりが、間違って if (a = 0) と書いてしまう事を 防ぐためにはじまったんだよ。 初心者が間違えやすいから、御親切な先人が考え出した余計なおせっかいだよ。 これは、いわば、「プログラミングの初心者マーク」だ。 免許取立てのヤツは車に若葉マークつけとけ! ボケ老人は枯葉マークつけとけ! プログラミング習いたての初心者は if (0 == a) って書いとけ!
そんなことは流石に皆わかってるだろ・・ 右派の奴で、拠り所がそれしか無い奴は このスレですら相当レベル低い部類に入るだろ
>>984 そんな馬鹿な話は無いだろ
if ( a == b ){}
を
if ( a = b ){}
に間違えたら元も子もないじゃん
それが理由で、定数を左にってのは、"馬鹿"とか言うレベルじゃないぞ
987 :
デフォルトの名無しさん :2007/10/25(木) 19:06:31
if (0 == a) if (a == 0) でも、どっちでもいいんだけど、全体のソース内で統一しろよ!と言いたい。 ちなみに某 目立のソースコード。 ある人物が改修した部分だけそんな感じになってて、デバッグしてたら正直とまどう。
988 :
984 :2007/10/25(木) 19:45:49
>>986 ホントだってば。
その”馬鹿な話”を広めたのは、Cマガジンの三田典玄。
これ有名な話。伝説になってるぞ。
>>982 それは済まなかった 人違いか
>>983 俺も議論が不毛だとは思わない
だが不毛だと思ってるまして相手を貶めようとしてる奴が釣りでやるのは気に食わない
もっと建設的な方向で意見を述べるか議論できたはず
>>939 や
>>943 を読む限り何を意図してたかといえばただの他人の見下しじゃねぇか
ハーブ・サッターとアンドレイ・アレキサンドレスクの C++ Coding Standardの項目 0 が「こまかいことにこだわるな」
何が不毛ってこんなんとっくにがいしゅつで 延々ループしているだけだって事
ヘタなやつって、指摘されると、細かいこととか宗教論争とかどっちでもいいとか言い出すな。 どっちでもいいなら、自分のスタイル見直せばいいのに、すごいこだわってる。
誰にもソースコードを見せないで、自分だけで開発するなら何でもいいんだけどね。 定数を左に置こうが、右に置こうが。 家の中ならどんな服装だろうが(素っ裸だとしても)許されるけど、それなりの服装が要求される場所があるってことだな。 しもだかげき(漢字忘れたw)みたいなファッションセンスも本人はカッコイイと思っているんだろうけど、周りから見たらバカ丸出しにしか見えないのとおなじか。
if ( a == b ){...} を if ( a - b ){}else{...} て書いてるやついたな。
60代フォートラン使い、あるいは、ALU的思考?
997 :
デフォルトの名無しさん :2007/10/25(木) 22:49:11
>>996 オレも思った。FORTRAN 的発想だよね。
なぜフォートラン的発想かkwsk
>>998 算術IFじゃね?
IF (a - b) 10, 20, 30
で、式がマイナスだったら、10に、ゼロだったら20に、プラスだったら30にgotoするってやつ。
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。