コーディング規約 第3条
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/02/04(日) 23:28:42コーディング規約・スタイルに関するスレ
前スレ
コーディング規約 第2条
http://pc10.2ch.net/test/read.cgi/tech/1068752664/
0233デフォルトの名無しさん
2007/08/26(日) 01:06:27とてもアリな気が今した!
0234デフォルトの名無しさん
2007/08/26(日) 20:47:53コレ継承先から継承元の変数見るのが面倒では…
あー、もしや変数は全部privateにしろって事?
0235デフォルトの名無しさん
2007/08/26(日) 21:13:48>あー、もしや変数は全部privateにしろって事?
当たり前じゃん。
0236デフォルトの名無しさん
2007/08/27(月) 00:31:17structなしでint m_x;とか書いたのに比べて、なにか不便になることってあるの?
0237デフォルトの名無しさん
2007/08/27(月) 00:41:08素直にint x_, y_;にしとけばタイプ量も減る。
0238デフォルトの名無しさん
2007/08/27(月) 01:24:03例外にも強いしコピー・交換も楽で速いしなんて思っていたら、
どうみても劣化pimplです、本当にありがとうございましたというオチ。
0239デフォルトの名無しさん
2007/08/31(金) 23:34:42タイプ量だけ?
>>234 の継承とかなんとかは関係ないの?
0240デフォルトの名無しさん
2007/09/01(土) 22:41:02メンバ数が多いと、逆にタイプ数は減らないか?w
0241デフォルトの名無しさん
2007/09/04(火) 00:15:46>231の例でx,yの初期化ってどうやって書けば良い?
0242デフォルトの名無しさん
2007/09/04(火) 00:38:14普通にコンストラクタの初期化部で書けばよろしいかと。
0243241
2007/09/05(水) 00:12:31サンプルコードを書いて貰えませんか?
少なくとも漏れの知ってる書き方をみる限りでは、
>231の方法はやっぱダメだとしか思えませぬ。
0244デフォルトの名無しさん
2007/09/05(水) 00:47:14--
class Hoge {
struct {
int x;
int y;
} m;
public:
Hoge() {m.x = 0; m.y = 0;}
Hoge(int x, int y) {m.x = x; m.y = y;}
};
0245デフォルトの名無しさん
2007/09/06(木) 00:18:43外部から初期値渡したい場合は?
それ考えると>231はやっぱ使い物にならん。
0246デフォルトの名無しさん
2007/09/06(木) 00:54:420247デフォルトの名無しさん
2007/09/06(木) 01:14:03>x,yがconstか参照で、かつコンストラクタの引数経由で
>外部から初期値渡したい場合は?
条件後出ししていいなら、構造体に名前つけさせてくれ。
0248デフォルトの名無しさん
2007/09/06(木) 20:24:05structに名前付けるのはいいけど、
通常1回書けばすむはずの処理を、2回書かなきゃダメだよね?
そうじゃないスマートな書き方を知っているなら是非ご教授を。
0249デフォルトの名無しさん
2007/09/07(金) 13:03:532回って、何で? Hoge は InnerHoge に丸投げするだけでしょ。
0250デフォルトの名無しさん
2007/09/08(土) 00:21:38Hogeのコンストラクタとその内部構造体のコンストラクタで
2回初期化を書かなければいけない(そしてそれがスマートでない)
と248は言っているのだろう。
0251デフォルトの名無しさん
2007/09/18(火) 16:57:12皆さんはWinMainの引数とかAPIのコールバック関数にもアンダースコア区切りで命名しますか?
それともWinAPIに関連する変数は例外的にハンガリアン+CamelCaseで命名しますか?
当方、先週Windows畑に飛ばされたばかりのへっぽこPGなんですが、
どうにも気になって気になって。。。
0252デフォルトの名無しさん
2007/09/20(木) 02:06:2402531/2
2007/10/05(金) 00:49:37こういうのはどうなの?
(サンプルソースの意図は、oldTest() の if 文を無くして test() のようにシンプルにすること)
public class Test {
private static void oldTest(String[] params){
for (int i = 0; i < params.length; i ++) {
if (0 < i) {
System.out.print("," + params[i]);
}
else {
System.out.print(params[i]);
}
}
}
private static void test(String[] params){
Printer printer = FirstPrinter.instance;
for (String param : params) {
printer.print(param);
printer = printer.nextPrinter();
}
}
public static void main(String[] argv){
test(argv);
}
}
02542/2
2007/10/05(金) 00:50:41abstract void print(String param);
abstract Printer nextPrinter();
}
class FirstPrinter extends Printer {
static final FirstPrinter instance = new FirstPrinter();
void print(String param){
System.out.print(param);
}
Printer nextPrinter(){
return SecondPrinter.instance;
}
}
class SecondPrinter extends Printer {
static final SecondPrinter instance = new SecondPrinter();
void print(String param){
System.out.print("," + param);
}
Printer nextPrinter(){
return this;
}
}
0255デフォルトの名無しさん
2007/10/05(金) 00:58:07コード読んでないけど、駄目って言う理由がないんならどうでもいいんじゃね?
0256デフォルトの名無しさん
2007/10/05(金) 01:31:13駄目って言う理由はなんなんだろう。
0257デフォルトの名無しさん
2007/10/05(金) 01:58:23ちょっとよくわからないで言うけど
this を返してもらった奴がこれを使うときにthisの実体がなくなっちゃてたりするケースってない?
0258デフォルトの名無しさん
2007/10/05(金) 03:18:25だって呼び出している側がインスタンス保持しているのに、
なくなっているってことが通常ある?
0259デフォルトの名無しさん
2007/10/05(金) 03:53:45コード見る限り Java だから、それはありえない。
0260デフォルトの名無しさん
2007/10/05(金) 05:18:480261デフォルトの名無しさん
2007/10/05(金) 15:25:15インスタンスを持っているならthisを返す意味はある?
汎化という目的で独立性を高めるために他の処理でこれを使うことを考慮したら
インスタンスが失われることを考えてthisを返してはいけないとか
0262デフォルトの名無しさん
2007/10/05(金) 15:26:270263デフォルトの名無しさん
2007/10/05(金) 19:00:26instance.foo().bar().baz()
とかやりたいってことない? これを指してメソッドチェーンといったんだけど。
0264デフォルトの名無しさん
2007/10/05(金) 20:10:40まあ、java にはないから関係ないけど
0265デフォルトの名無しさん
2007/10/09(火) 15:59:590266デフォルトの名無しさん
2007/10/09(火) 20:15:56シンプルどころか複雑怪奇になってる。
さらにメモリ使用量も増えてるし、速度も遅くなっていそう。
そして、return this;よりはreturn SecondPrinter.instance;の方がいいだろう。
最悪なのは、親クラスのクラス変数を子クラスで隠蔽しているところだな。
0267デフォルトの名無しさん
2007/10/09(火) 20:35:42「this を返すAPI を作るな」っていうコーディング規約は、
「メソッドチェーンを前提にした API を作るな」っていうのが本来の意図であって、
そうでなければオーケーなんじゃないかと。
>>266
今回はサンプルがはじめからシンプルだったために、結果的に複雑怪奇になってしまったわけで、
実際にはトレードオフで適用すればいいのだと思います。
>最悪なのは、親クラスのクラス変数を子クラスで隠蔽しているところだな。
親クラスで定義しているのは抽象メソッドだけで (つまり実質的にインタフェースといえる)、
クラス変数は存在しないはずなのですが・・・
>return this;よりはreturn SecondPrinter.instance;の方がいいだろう。
あー。確かに。言われてみれば。
ただ、今回は Printer をシングルトンで実装できたけど、
例えば任意のセパレータの文字を指定して CSV ファイルを構築できるように
Printer を改造したような場合は、各インスタンスが状態を持つようになるので
this を返すような実装になると思う。
まあ、この場合でも Printer をイミュータブルになるように設計して
Flyweight の getter メソッドを活用して this を返さないような仕組みにすることは出来るけど
そこまでやると冗長になる気がする。
0268デフォルトの名無しさん
2007/10/23(火) 19:22:00C++0x 2
http://pc11.2ch.net/test/read.cgi/tech/1191842951/172
0269デフォルトの名無しさん
2007/12/15(土) 02:35:34bool isHoge_;
だけでなく、
private:
void doHoge_();
とか、
template<class Hoge_>
のように準ローカルな名前全てにアンダーバーを付けたくてウズウズしてしまうのですが、
そのようなコーディング規約が見付かりません。
常識的にあまり推奨されないのでしょうか?
0270デフォルトの名無しさん
2007/12/15(土) 02:39:55どうして?
0271デフォルトの名無しさん
2007/12/15(土) 03:03:06発端は、templateのタイプ名が外部の通常のクラス名と衝突してしまったため、
冗長にせざるを得ない場面があったからです。
ならばメンバ変数に習い、「末尾にアンダーバー」イコール「スコープ限定」にしてしまえば、
衝突も避けられるし、読む時にも迷子になり難いのではないかな・・・と。
0272デフォルトの名無しさん
2007/12/15(土) 03:44:57そんな局所的な理由で規約になるわけないんじゃないの?
0273デフォルトの名無しさん
2007/12/15(土) 04:41:14前ならそうしてる人結構いるよ。
0274デフォルトの名無しさん
2007/12/15(土) 04:59:490275デフォルトの名無しさん
2007/12/15(土) 07:12:05つまりボキャブラリが貧弱なのを _ でごまかそうということですね
英語の辞書を買ったらどうでしょう
冗長といっても、いくら長くてもいいと思う
あとで別の人間が解析するときに、
grepをかけたら似た様なのがゾロゾロって
猛烈に格好悪い
0276227
2007/12/15(土) 07:45:38これっていつから言われてるの?
昔は_ 前だったのに・・・
>>271
それってローカル側優先で処理されるよね?
TXxxx
とかにするってのもどうかね
0277デフォルトの名無しさん
2007/12/15(土) 09:53:59> これっていつから言われてるの?
「言われてる」ってのが何のことかわからないけど、予約名の規定自体は
知ってる範囲では ISO C++98, C99 とかで決められてる。たぶんそれより前の
C89 からそんなに変わってないと思うから、少なくとも 10 年以上前から使っちゃ
マズイってことにはなってたはず。
0278デフォルトの名無しさん
2007/12/15(土) 10:26:40MS-DOS の初期のころから内部の実装で使われていた気がする
0279デフォルトの名無しさん
2007/12/15(土) 11:02:48オレは何度も見たことあるよ。
0280デフォルトの名無しさん
2007/12/15(土) 12:33:25確かに、C の関数の場合は後ろに _ をつけると()と離れて絵的に悪くないかも知れないけど
いまひとつ _ を前後に使う意味がわからないな
_ があることでなにかを示すようには見えないな
もっと、適切な方法があるならそれを選んだほうがいいように思う
見てわかるような名称にするように文になっていたっていいと思う
昔の関数名なんか変なのあるよな
creat() なんて何を考えてるんだかw
'e' 一文字を省く理由がわからない
0281227
2007/12/15(土) 12:39:05ごめ。
_ は前に普通に付ける時代があったんだけど(本とかで載っていた)
最近後ろに付ける勢力が急拡大している感じ。
いつからだろうと。
0282デフォルトの名無しさん
2007/12/15(土) 12:49:04前につけることの問題を知らずに本を書いちゃうようなアホが淘汰されたんだろう。
いつからってこともないと思うぜ。
0283デフォルトの名無しさん
2007/12/15(土) 12:57:38利点、欠点を考えて判断すりゃいいんじゃない?
利点:ローカルスコープの関数・変数が一目でわかる
欠点:メンバー変数とメンバー関数のバッティングが発生する可能性がある(C++の場合)
-->別の命名規則で回避する必要あり
ぐらいかね?
ローカルスコープなんだし好きにすれば?という気もするけど。
0284デフォルトの名無しさん
2007/12/15(土) 13:28:58_ 前に付けて問題になったことなど一度たりともないけどな。
メンバ変数なんてローカルだし。
__descspecとかのキーワードなんて __ だしな
0285デフォルトの名無しさん
2007/12/15(土) 13:56:19creat()については名付け親がそうつけてしまったことを深く恥じているのだから、
もうそっとしておいてあげたらどうだw
0286デフォルトの名無しさん
2007/12/15(土) 15:40:040287デフォルトの名無しさん
2007/12/15(土) 23:55:12__declspecはむしろ正しい使い方。
処理系予約の識別子なのだから。
0288デフォルトの名無しさん
2007/12/16(日) 00:04:35?
いや、その通りだけど、>>284の趣旨は、「そういうのは"__"だから、"_"を前につけても問題が起こったことはない」でしょ。
0289デフォルトの名無しさん
2007/12/16(日) 01:34:460290デフォルトの名無しさん
2007/12/16(日) 01:42:20歴史的なもの
識別子に5文字しか使えなかったシステムで付けられた名前を引きずってるだけ
0291デフォルトの名無しさん
2007/12/16(日) 02:50:52一度もないのは分かるけど、
規格で「予約」と明記されているものをあえて使う理由が分からん。
ローカル名については「マナー」程度なのかな?
他の言語だと「予約」だったりするんだろうか。
0292デフォルトの名無しさん
2007/12/16(日) 07:00:04グローバルの_ はstdio.hとかのライブラリと被るので
~~~~~~~~~~~~~~~
注意ってことじゃなかったかって気がするんだが。
手元に資料がないから確認は取ってないが
0293デフォルトの名無しさん
2007/12/16(日) 07:04:09そういやBUFSIZ ってシンボル使えないよなw
0294デフォルトの名無しさん
2007/12/16(日) 11:04:04どっちも「予約」だよ。識別子の利用範囲が違うだけ。区別するのがメンドイから
自分とこで作るルールに書くときは一括でダメってことにするのが簡単。
0295デフォルトの名無しさん
2007/12/16(日) 11:26:03ちょっと見つけた
0296デフォルトの名無しさん
2007/12/16(日) 13:52:19うーーー。意味わかんない;
ごめんオレ馬鹿すぎ。エロイ人教えて。
0297296
2007/12/16(日) 13:58:190298デフォルトの名無しさん
2007/12/16(日) 13:59:11>281-282 にある
> _ は前に普通に付ける時代があった
> 前につけることの問題を知らずに本を書いちゃうようなアホ
の例じゃね?
0299デフォルトの名無しさん
2007/12/16(日) 15:05:06メンバ変数名は、
グローバルなネームスペースを汚してるわけじゃないしね
0300デフォルトの名無しさん
2007/12/17(月) 02:42:380301デフォルトの名無しさん
2007/12/17(月) 02:50:17いまひとつわからない
たしかに、かっこいいかもしれないけど
_や__が予約語に多いのだから、他人が見たら、
これらは予約語としてみられる可能性があるということでしょ?
できるだけ、必然的であるべきだと思うのだけど
でないと後で見てわからない気がするんだけどな
名称を考えるのがめんどくさいだけに思えるのは、オレが世間知らずだから?
0302デフォルトの名無しさん
2007/12/17(月) 02:54:48そういうのを見て覚えた奴が自己弁護のために抵抗してるだけ。目的なんか無い。
0303デフォルトの名無しさん
2007/12/17(月) 08:01:370304デフォルトの名無しさん
2007/12/17(月) 08:05:56やっぱ答え出てるじゃないか。
メンバ変数はグローバルじゃねえ。
関数名とグローバル変数に問題があるだけだろうな
0305デフォルトの名無しさん
2007/12/17(月) 11:48:400306デフォルトの名無しさん
2007/12/17(月) 15:58:27_STDLIB_H_
0307デフォルトの名無しさん
2007/12/18(火) 00:11:07それならわかるわ
検索してみたら、いいページ掛かったわ
0308デフォルトの名無しさん
2007/12/18(火) 06:32:30自分の作ったのを予約語扱いしてもらいたい 「格好つけしー」 か
考えるのが面倒で、 _ でもつけとけの 「横着者」 のどっちか
でいいの?
0309デフォルトの名無しさん
2007/12/18(火) 08:17:39_ のあとの小文字は問題ねーってよ
0310デフォルトの名無しさん
2007/12/18(火) 08:33:41昔のDOS系、MSのLIBなんかは _ の関数だらけ
これを予約語といえるかわからんが
それと同列のものにしたいということだろ?
0311デフォルトの名無しさん
2007/12/18(火) 11:31:02何が問題ねーの?予約識別子じゃないの?
0312デフォルトの名無しさん
2007/12/18(火) 11:46:380313デフォルトの名無しさん
2007/12/18(火) 12:17:430314デフォルトの名無しさん
2007/12/18(火) 12:21:590315デフォルトの名無しさん
2007/12/18(火) 22:50:440316デフォルトの名無しさん
2007/12/19(水) 05:46:36例えが、ちがうか;
0317デフォルトの名無しさん
2007/12/23(日) 23:54:01( ゚д゚ )
¶ノ ¶ノ |
/ ̄ ̄ ̄ ̄ ̄\
./ (,) (,) ヽ
| | ̄| |
ヽ  ̄ ̄ /
| | | | |
.ノ .ノ ヽ ノ .ノ .|
(_ノ (_ノ .|
/ /  ̄/ /
< < .< <
ヽ ヽ ヽ ヽ
0318デフォルトの名無しさん
2007/12/25(火) 07:53:47#ifndef _FILENAME_H
#define _FILENAME_H
はどんなシンボル名にしてんの?
#define H_FILENAME_H
とか?( ゚д゚)
0319デフォルトの名無しさん
2007/12/25(火) 10:30:280320デフォルトの名無しさん
2007/12/26(水) 04:02:280321デフォルトの名無しさん
2007/12/26(水) 04:09:120322デフォルトの名無しさん
2007/12/26(水) 04:10:30そうじゃない手段をわざわざ使うのは気が引けるよ
0323デフォルトの名無しさん
2007/12/29(土) 11:30:30#ifndef
の使用はもうやめたんだろ?
0324デフォルトの名無しさん
2007/12/29(土) 13:41:220325デフォルトの名無しさん
2007/12/30(日) 00:07:39なんで ifndef はいけないと思うの?
0326デフォルトの名無しさん
2008/02/19(火) 01:14:20俺は単純に
indent -kr hoge.c
です。
0327デフォルトの名無しさん
2008/02/19(火) 14:45:58名前がぶつかるかも知れない恐怖が
0328デフォルトの名無しさん
2008/03/16(日) 18:09:350329デフォルトの名無しさん
2008/04/13(日) 15:16:470330デフォルトの名無しさん
2008/07/28(月) 01:19:200331デフォルトの名無しさん
2008/07/30(水) 22:41:39tp://d.hatena.ne.jp/akkt/20080424/1209051266
これを厳密に守るのはきついな……
■ このスレッドは過去ログ倉庫に格納されています