[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 11/13 08:16 / Filesize : 78 KB / Number-of Response : 344
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

コーディング規約 第3条



1 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 23:28:42 ]
カッコの位置や変数名のつけ方から、何で規約なんて決めるのという話まで
コーディング規約・スタイルに関するスレ

前スレ

コーディング規約 第2条
pc10.2ch.net/test/read.cgi/tech/1068752664/

175 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 10:20:53 ]
>>174
自動車をなくせば交通事故は無くなるんじゃない?

176 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 10:25:26 ]
>>175
いいえ、自動車以外の交通事故は残ります。
→ケース問題を除く宗教戦争は残ります。

177 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 13:07:30 ]
BASICって確か大文字小文字区別しないけど、
あの言語ってケース問題に関する宗教戦争ってないのか?

178 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 13:33:11 ]
8bit時代のBASICならいざしらず、VisualBaiscとか今時のBASIC使ってるヤツで
「大文字小文字同一視だぜ」とか言ってるやつはみたことないな。
普通に大文字小文字区別して「どう書こう?」ってやってる。


179 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 13:51:21 ]
Delphiが「大文字小文字同一視だぜ」なんだけど、
書籍やIT系サイトのチュートリアルっぽいコードで、たまに無茶苦茶なのを見かける。

一般向けに晒すコードなら、プロパティ名とかメソッド名はオンラインヘルプに記述されているとおりに書け。

# Delphiのヘルプは酷いから、そもそもオンラインヘルプで記述が統一されていないってのもあるが。

180 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 14:43:03 ]
MSDN見習わせたらエラー処理はしないしファイル番号は固定だし……

ってのは兎も角。
>>178
VisualBasicは大文字小文字を区別できるんですか?
例えばdim aa as integer, AA as integer, Aa as integerみたいに?
私ゃ保存はされるけど区別はできないと思っていたのだが。

181 名前:178 mailto:sage [2007/05/21(月) 15:01:39 ]
>>180
いや、区別しない。

>>178で言いたかったのは
「区別されないからAbcDefメソッドをABCDEFで呼ぶぜ」なんてやつはおらず、
VBでも「『AbcDef』がいいか『abcDef』がいいか(大文字小文字を意識して)どう書こう?」って
やってる、ってこと。

書き方悪かったかも。ごめん。

182 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 15:38:32 ]
でも自動車を無くせば自動車事故は起きなくなるね
#こういう考え方はいかん
#エロサイトを封じれば性犯罪が減ると思ってやがる

183 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 19:08:06 ]
>>182
コメントへの野暮なレスですまんが、
もとの「自動車を無くせば自動車事故は起きなくなる」に対応する
のは「エロサイトをなくせばエロサイトへの接続が無くなる」では。

# 縦読みを仕込みたかったが出来なかった。



184 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 20:21:39 ]
エロサイトを封じたら、性犯罪は増えるんじゃないの?

185 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 00:14:54 ]
>>183
エロサイトを封じればエロサイトの広告、迷惑メールなどが減る。
→でもその他の広告などは残る。

186 名前:175 mailto:sage [2007/05/23(水) 01:40:16 ]
大文字小文字の区別をつけるか否かは、言語設計者が決めることだから、
その言語を使用する側が制御できることではないし、どうこう言うべきことでもない
と言いたかったのですが。

187 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 05:03:55 ]
最近はCOMとか.NETとかスクリプティングとか言語設計者の都合だけでは
決められない要素も出てきた

188 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 06:51:31 ]
COMは最近ではないと思うけど、まあそうだね。

189 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 13:52:32 ]
機械語

190 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 08:01:29 ]
そういえばスペースだけでコーディングする言語あったよね
あれなら宗教戦争はなくなる

191 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 08:23:20 ]
ホワイトスペルマだっけ?

192 名前:デフォルトの名無しさん mailto:sage [2007/06/02(土) 00:19:25 ]
しばらく開発から離れた仕事をしていたうちにハンガリアンはあまり使われなくなったみたいですが、どういった理由でですか?
カーソルをあわせれば型が出るからですか?
自分はカーソルあわせるのが面倒なのでハンガリアンで書いてますが・・・

193 名前:デフォルトの名無しさん mailto:sage [2007/06/02(土) 00:25:52 ]
>>192
templateをゴリゴリつかったプログラミングなんかが流行ったこととかが関係してると思う。
ハンガリアンだと型を変えたときに名前まで変えなきゃならんしね。

↑これは型に対するハンガリアンのことであって、意味に対するハンガリアンは
いまでもそこそこ使われてると思うけど。



194 名前:デフォルトの名無しさん mailto:sage [2007/06/02(土) 00:41:42 ]
変数のスコープがやたらでかくなってないか、
関数でかすぎるせいでそうなってないか、
一回見直したほうが良い。

195 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 21:19:31 ]
悪しきシステムハンガリアンが消えて
本来のアプリケーションハンガリアンを用いる人が増えただけ

196 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 05:09:57 ]
ハンガリーってどこらへん?

197 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 11:45:17 ]
X系はdoSomething、GNU系はdo_something
ディストリをメンテしているオレの戦いは今日もつづく

198 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 16:30:30 ]
>>196
www.namamono.com/okotoba01.html (02年3月上旬)

199 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 16:37:28 ]
無駄に探す労力を割かす上につまんねぇ…
なんという糞レス…

200 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 20:07:08 ]
>>199
おーrrらー

201 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 01:08:52 ]
今までこう書いてたけど

変数 => 全部小文字/アンスコ
メソッド => 先頭大文字/キャメル
クラス => 先頭大文字/キャメル
定数 => 全部大文字/アンスコ

>>163さんと同じにした方がみやすいんじゃん
っておもた
でも先頭が小文字のキャメルは不自然に感じてしまう

202 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 01:33:07 ]
C#だけど結局

プライベートフィールド・ローカル変数   :ローワーキャメル
名前空間・クラス・関数・プロパティ・定数 :アッパーキャメル

に落ち着いた。
フィールドにアクセスするときは必ずthis付けるようにしてるから
ローカル変数と混同することはないはず。

今MSDNのガイドライン読んだらプライベートメンバの
名前付けに関してはなんでもいいみたいだな。

203 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 23:17:56 ]
>>202
構造体・クラス・列挙体にはリーディングタグつけないやっぱり?
C#だとやってる人ほとんどいないなどういうわけか。

enumはともかく、クラスと構造体の違いは勘違いしてると致命的になる場合が
あるから、つけた方がぜったいコード読みやすいと俺は思うんだけど。



204 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 00:11:27 ]
MS的にNGな気がする。

205 名前:デフォルトの名無しさん [2007/06/29(金) 01:18:09 ]
>>163氏の命名法で

変換テーブル的に使う変数(例えば数値→文字へに使うようなmap型の変数)や
関数オブジェクトのインスタンスなら関数と同じような命名法である
>先頭小文字/キャメル
を適用したいのです

こういう類の変数で初期化時に設定してあとは殆ど変更しなかったり、
初期化部分以外での扱い方が関数的(mapの例だとmap[x]でxに対応する値の取得に使われる)たりで
メソッドとみなしてメソッドに対する命名法を適用しても問題ない気がするんですがどうでしょう?

それでも変数である以上変数に対するルールを出来る限り使用するべきでしょうか?

206 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 10:02:57 ]
>>203
C# は結局、VS のインテリセンスに頼ること前提だから、
クラスと構造体の勘違いは気にしなくてもいいのかも。

207 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 12:44:20 ]
P/Invoke以外で構造体作ったこと無いなー。

208 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 18:08:36 ]
>201
Javaだと先頭小文字のキャメルってよく使うよ。
何せ標準ライブラリがそうなってるからな。
M$は先頭大文字キャメルLoveみたいだが。

209 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 20:11:36 ]
.NETは、
名前空間名、型名、パブリックメンバ名はPascalCase、
関数の引数名はcamelCase

210 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 02:29:48 ]
正直Camelで区別するのって、ハンガリアンと同じモノを感じるのは漏れだけですか。

211 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 03:07:50 ]
ハンガリアンはハンガリアンでもアプリケーションハンガリアンは全然おkだよ
getXXXとかのgetのようなものも役目としてはこれに近いから同じように感じるのも無理はない

212 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 16:52:56 ]
C#でLogというクラスを作ったわけですよ。で、ログの種別を
区別するための列挙型をLog.Typeと命名したんですね。
.NETのライブラリでもアッパーキャメル規約になってるっぽいですから。

で、メンバ変数としてType Log.typeを定義したのです。ここまでは
分かりますね。さらにLog.typeを外部から直にアクセスして欲しくないので
typeにアクセスするプロパティを定義すると。MS式の記法だと、やっぱり
Log.Typeが妥当かな?


  型 'Log' は 'Type' の定義を既に含んでいます。

213 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 01:04:30 ]
>>212
キャメル云々はそれでよいと思う。

名前が重複する件は、列挙型はTypeでよくて、プロパティの方は「○○のためのType」という
○○の部分をうまく補ってあげればいいんじゃないかな。



214 名前:212 mailto:sage [2007/08/17(金) 03:18:25 ]
「○○のためのType」がこの場合、本当に「ログのためのType」としか
表現のしようがないのが辛いです。
列挙型はLog.Typeで、プロパティはLog.LogType…うーむ。

余談ですが、列挙型の識別子を“TYPE”と全部大文字表記
(長い場合はアンダースコア区切り)にすることも考えました。
しかしその方法でも内部クラスとかの命名になるとお手上げ…。

215 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 00:09:00 ]
TypeIdとかTypeNoとか。

216 名前:デフォルトの名無しさん [2007/08/24(金) 04:14:41 ]
C++だけど、こんな感じで関数名と変数名がバッティングするときどうします?

class Ore {
public:
  bool isNeet() const { return isNeet; }
  // if (ore.isNeet()) { ... } とか呼びたい

private:
  bool isNeet;
};

1. こういうの嫌だから関数を大文字で始めてるYO(isNeet()をIsNeet()に)
2. こういうの嫌だから変数にプリフィックスなどをつけてるYO(isNeetをm_isNeetやisNeet_に)
3. 変数名を変えちゃうYO(isNeetをneetとか……形容詞ならともかく名詞だと変な気が。
  なんかもっといいネーミングとかありますかね)

なんかJavaだと↓で普通に通っちゃうんだけど。理屈はわかりませんが。

class Ore {
  public boolean isNeet() { return isNeet; }
  private boolean isNeet;
}

関数名が小文字で始まるほうがコードが柔和な気がするのでC++でもそうしたいんですが、
(メイヤーズ先生も小文字で始めてるし)
どうもここがちょっと引っかかって。

217 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 04:29:23 ]
>>216
isNeet = false とかがキモイのもあって、 neetFlag とかにしちゃうかな。
m_neet もアリだな。

218 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 10:53:28 ]
>>216
メソッド名を大事にしたいならフィールド名にちょっと引込んでもらうしかないのでは。
自分ならサフィックスにアンダーバーつける。

>>217
「isNeetを内部で保持するのはneetFlag」みたいなのって、頭使うの面倒じゃない?
まれにはそういう置きかえがピッタリいくこともあるけど、ほとんどの場合は
機械的に「プレフィックスつけてるっすー」とかの方が、余計なことに気を回す必要がなくて楽だと思う。

219 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:44:34 ]
_*
m_*
がいいよ。

メンバ変数を他の変数と区別できるようにするのは、
CodeCompleteでも薦められてるようなよくやるパターンです

220 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:21:18 ]
メンバ変数はname_にしてる。

221 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:27:52 ]
>219
_FollowedByUppercaseLetterはコンパイラ&ライブラリ実装者用の予約語なので、
_nameも避けといた方が無難。
#double__underscoreもね

222 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:32:37 ]
前にアンダーバー置くのはイクナイね。

223 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:35:48 ]
某所で、初心者にえらそうに教えてるやつが、Cなのに構造体のメンバにm_をつけてた。
意味をわかってつけてるのか。



224 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 03:11:13 ]
>>219
_name をつけるほど自信家じゃない
grepしたときやたらと似たようなのが引っかかりそうだし
それにエディタの行位置表示を下線にしてあるから、見えなくなる

225 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 03:16:23 ]
>それにエディタの行位置表示を下線にしてあるから、見えなくなる
これが理由なら、阿呆だ。

226 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 06:17:51 ]
>>223
member の m なら C の構造体でも間違いではないだろ。

227 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 09:51:01 ]
>>221
たぶんそれ、グローバルな名前がそうなだけ

228 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 09:53:05 ]
予約識別子だから、マクロ名を含めて、ソースコード中に出現してはならんよ。

229 名前:227 mailto:sage [2007/08/25(土) 11:29:28 ]
すまん>>221は、_の後に大文字が来るのが最もマズいって言ってんのか

230 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 13:13:08 ]
外からしか扱わないメンバに m_ とかつける必要は無いだろ。

struct Point { int m_x; int m_y };
Point p0 = { 0, 0 };
Point p1;
p1.m_x = p0.m_x + 1;

とか無意味。
scope の間違えようがない。

231 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 22:37:30 ]
class Hoge {
private:
struct {
int x;
int y;
} m;
}


232 名前:227 mailto:sage [2007/08/26(日) 00:16:02 ]
>>231
やめなさいw

233 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 01:06:27 ]
>>231
とてもアリな気が今した!



234 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 20:47:53 ]
>231
コレ継承先から継承元の変数見るのが面倒では…
あー、もしや変数は全部privateにしろって事?

235 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 21:13:48 ]
>>234
>あー、もしや変数は全部privateにしろって事?
当たり前じゃん。

236 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 00:31:17 ]
>>234
structなしでint m_x;とか書いたのに比べて、なにか不便になることってあるの?

237 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 00:41:08 ]
2〜3行増える。
素直にint x_, y_;にしとけばタイプ量も減る。
 

238 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 01:24:03 ]
231のmをポインタにした感じのコードなら書いたことある。
例外にも強いしコピー・交換も楽で速いしなんて思っていたら、
どうみても劣化pimplです、本当にありがとうございましたというオチ。

239 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 23:34:42 ]
>>237
タイプ量だけ?
>>234 の継承とかなんとかは関係ないの?


240 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 22:41:02 ]
>>237
メンバ数が多いと、逆にタイプ数は減らないか?w

241 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 00:15:46 ]
アフォな質問ですまん。
>231の例でx,yの初期化ってどうやって書けば良い?


242 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 00:38:14 ]
>>241
普通にコンストラクタの初期化部で書けばよろしいかと。

243 名前:241 mailto:sage [2007/09/05(水) 00:12:31 ]
>242
サンプルコードを書いて貰えませんか?
少なくとも漏れの知ってる書き方をみる限りでは、
>231の方法はやっぱダメだとしか思えませぬ。



244 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:47:14 ]
structが無名だから初期化できないね。ま、コンストラクタで代入するってことで。
--
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;}
};

245 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 00:18:43 ]
x,yがconstか参照で、かつコンストラクタの引数経由で
外部から初期値渡したい場合は?
それ考えると>231はやっぱ使い物にならん。

246 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 00:54:42 ]
struct に名前を付けてコンストラクタ書けばいいだけの話じゃないの?

247 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 01:14:03 ]
最早>231はどうでもいいがw
>x,yがconstか参照で、かつコンストラクタの引数経由で
>外部から初期値渡したい場合は?
条件後出ししていいなら、構造体に名前つけさせてくれ。

248 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 20:24:05 ]
>246,247
structに名前付けるのはいいけど、
通常1回書けばすむはずの処理を、2回書かなきゃダメだよね?
そうじゃないスマートな書き方を知っているなら是非ご教授を。

249 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 13:03:53 ]
>>248
2回って、何で? Hoge は InnerHoge に丸投げするだけでしょ。

250 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 00:21:38 ]
>>249
Hogeのコンストラクタとその内部構造体のコンストラクタで
2回初期化を書かなければいけない(そしてそれがスマートでない)
と248は言っているのだろう。

251 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 16:57:12 ]
あーの、Windowsでアンダースコア区切りの命名規則を採用している方に質問なのですが、
皆さんはWinMainの引数とかAPIのコールバック関数にもアンダースコア区切りで命名しますか?
それともWinAPIに関連する変数は例外的にハンガリアン+CamelCaseで命名しますか?

当方、先週Windows畑に飛ばされたばかりのへっぽこPGなんですが、
どうにも気になって気になって。。。

252 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 02:06:24 ]
Gtk+なんかだとAPIそのもの以外は徹底的にアンダースコア区切りで命名してるな

253 名前:1/2 [2007/10/05(金) 00:49:37 ]
なんか、コーディング規約で this を返すのは駄目っていうのをどっかで読んだんだけど
こういうのはどうなの?
(サンプルソースの意図は、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);
    }
}




254 名前:2/2 [2007/10/05(金) 00:50:41 ]
abstract class Printer {
    abstract 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;
    }
}

255 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 00:58:07 ]
>>253
コード読んでないけど、駄目って言う理由がないんならどうでもいいんじゃね?

256 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 01:31:13 ]
メソッドチェーンするのに便利だしthisを返しておいた方がいいと思ったんだけど、
駄目って言う理由はなんなんだろう。

257 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 01:58:23 ]
>>256
ちょっとよくわからないで言うけど
this を返してもらった奴がこれを使うときにthisの実体がなくなっちゃてたりするケースってない?


258 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 03:18:25 ]
>>257
だって呼び出している側がインスタンス保持しているのに、
なくなっているってことが通常ある?

259 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 03:53:45 ]
>>257
コード見る限り Java だから、それはありえない。

260 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 05:18:48 ]
入出力関係のオブジェクトだと閉じてる可能性はあるね。

261 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 15:25:15 ]
まじわからないで言う、ごめん

インスタンスを持っているならthisを返す意味はある?
汎化という目的で独立性を高めるために他の処理でこれを使うことを考慮したら
インスタンスが失われることを考えてthisを返してはいけないとか


262 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 15:26:27 ]
if を使ってる処理のほうが、「何をしているか」がよくわかる


263 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 19:00:26 ]
>>261
instance.foo().bar().baz()
とかやりたいってことない? これを指してメソッドチェーンといったんだけど。




264 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 20:10:40 ]
operator overloading なんかだと this を返さないと成り立たないけどねw
まあ、java にはないから関係ないけど

265 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 15:59:59 ]
副作用がある場合はthisを返さないってポリシーはあるな。


266 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 20:15:56 ]
>>253
シンプルどころか複雑怪奇になってる。
さらにメモリ使用量も増えてるし、速度も遅くなっていそう。
そして、return this;よりはreturn SecondPrinter.instance;の方がいいだろう。
最悪なのは、親クラスのクラス変数を子クラスで隠蔽しているところだな。


267 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 20:35:42 ]
個人的に思ったのは、
「this を返すAPI を作るな」っていうコーディング規約は、
「メソッドチェーンを前提にした API を作るな」っていうのが本来の意図であって、
そうでなければオーケーなんじゃないかと。

>>266
今回はサンプルがはじめからシンプルだったために、結果的に複雑怪奇になってしまったわけで、
実際にはトレードオフで適用すればいいのだと思います。

>最悪なのは、親クラスのクラス変数を子クラスで隠蔽しているところだな。
親クラスで定義しているのは抽象メソッドだけで (つまり実質的にインタフェースといえる)、
クラス変数は存在しないはずなのですが・・・

>return this;よりはreturn SecondPrinter.instance;の方がいいだろう。
あー。確かに。言われてみれば。

ただ、今回は Printer をシングルトンで実装できたけど、
例えば任意のセパレータの文字を指定して CSV ファイルを構築できるように
Printer を改造したような場合は、各インスタンスが状態を持つようになるので
this を返すような実装になると思う。

まあ、この場合でも Printer をイミュータブルになるように設計して
Flyweight の getter メソッドを活用して this を返さないような仕組みにすることは出来るけど
そこまでやると冗長になる気がする。

268 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 19:22:00 ]
保守代わりに転載。
C++0x 2
pc11.2ch.net/test/read.cgi/tech/1191842951/172

269 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 02:35:34 ]
 private:
  bool isHoge_;

だけでなく、

 private:
  void doHoge_();

とか、

 template<class Hoge_>

のように準ローカルな名前全てにアンダーバーを付けたくてウズウズしてしまうのですが、
そのようなコーディング規約が見付かりません。
常識的にあまり推奨されないのでしょうか?

270 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 02:39:55 ]
>>269
どうして?

271 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 03:03:06 ]
>>270
発端は、templateのタイプ名が外部の通常のクラス名と衝突してしまったため、
冗長にせざるを得ない場面があったからです。
ならばメンバ変数に習い、「末尾にアンダーバー」イコール「スコープ限定」にしてしまえば、
衝突も避けられるし、読む時にも迷子になり難いのではないかな・・・と。

272 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 03:44:57 ]
>>271
そんな局所的な理由で規約になるわけないんじゃないの?

273 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 04:41:14 ]
後ろにアンダーバーなんて始めて見たな。
前ならそうしてる人結構いるよ。



274 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 04:59:49 ]
前につけるとすぐ予約名になるまたは予約名とまぎらわしいから、やめといたほうがいい。

275 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 07:12:05 ]
>>271
つまりボキャブラリが貧弱なのを _ でごまかそうということですね
英語の辞書を買ったらどうでしょう

冗長といっても、いくら長くてもいいと思う
あとで別の人間が解析するときに、
grepをかけたら似た様なのがゾロゾロって
猛烈に格好悪い






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<78KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef