コーディング規約 第3条
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/02/04(日) 23:28:42コーディング規約・スタイルに関するスレ
前スレ
コーディング規約 第2条
http://pc10.2ch.net/test/read.cgi/tech/1068752664/
0002デフォルトの名無しさん
2007/02/05(月) 00:24:350003デフォルトの名無しさん
2007/02/05(月) 11:52:530004デフォルトの名無しさん
2007/02/05(月) 13:34:58{
0005デフォルトの名無しさん
2007/02/05(月) 16:34:210006デフォルトの名無しさん
2007/02/05(月) 17:10:48printf("%d", cnt);
0007デフォルトの名無しさん
2007/02/05(月) 17:30:280008デフォルトの名無しさん
2007/02/05(月) 17:54:270009デフォルトの名無しさん
2007/02/05(月) 20:05:29ワロタw
0010デフォルトの名無しさん
2007/02/05(月) 21:34:46てゆーかインデントレベル2でタブ幅8はやめてくださいおながいします
0011デフォルトの名無しさん
2007/02/05(月) 21:40:300012デフォルトの名無しさん
2007/02/06(火) 10:47:20タブ幅は一般的には幅8だが、これはエディタ依存で4に設定してる奴もいるだろう。
インデント幅はあくまでコーディングスタイル。
インデントにタブを使ったり、それどころかスペースと混ぜるなんてアホすぎる。
もっとマトモなエディタ使えよ、と。
俺はEmacs使ってるが・・・Emacs自体はGNUのウンココーディングスタイルで書かれてんだよなぁ。。
0013デフォルトの名無しさん
2007/02/06(火) 17:35:42こうしておけば各自見やすいタブ幅に設定しておけるしいいんじゃないかと思っている。
0014デフォルトの名無しさん
2007/02/06(火) 18:23:12スペース派 == これが俺のインデント幅だ。従え。
タブ派 == インデント幅は各自好きにしろ。
0015デフォルトの名無しさん
2007/02/06(火) 18:42:19混在派: 考えたこともない。
てとこか?
0016デフォルトの名無しさん
2007/02/06(火) 19:32:250017デフォルトの名無しさん
2007/02/06(火) 19:39:500018デフォルトの名無しさん
2007/02/06(火) 21:05:15int i;
char c;
struct dirent dirs;
こういう風に書く奴が多いじゃん?
int i;
char c;
struct dirent dirs;
タブストップの設定が違うと
int i;
char c;
struct dirent dirs;
0019デフォルトの名無しさん
2007/02/06(火) 21:14:59>>18 みたいなケースではスペース使って、
インデントにはタブ。
□をタブ、_ をスペースとして、↓みたいに。
□□func(a, b, c,
□□______d, e, f);
0020デフォルトの名無しさん
2007/02/06(火) 21:58:24すこしずれてる
0021デフォルトの名無しさん
2007/02/06(火) 22:29:53俺は
func() {
<TAB>int<SP><SP>i;
<TAB>char<SP>c;
}
みたいにする。
要するに、TABは必ず行頭から連続しているようにする。
言ってることは>>19と同じ罠
0022デフォルトの名無しさん
2007/02/06(火) 23:12:342番目の書き方は C の構造体のメンバ変数宣言とかでよく見るけど
最高に自己満足な気がする。
後で長い名前の変数作ることになったら
シコシコとスペースなりタブなり追加するんだろうか。
時間の無駄だからさっさとやめろと言いたい。
規約で強制されそうになったら頑として抵抗する。
0023デフォルトの名無しさん
2007/02/06(火) 23:34:43プログラマなんだからさ。
0024デフォルトの名無しさん
2007/02/06(火) 23:46:51でも簡単にリファクタリングできるからって意味もなくしまくっていいわけでもないだろ。
本質的でない変更がdiffに混ざったりすると混乱する
(リファクタリングだけでちゃんとコミットしてればいいんだが)
0025デフォルトの名無しさん
2007/02/07(水) 00:52:06最近のdiff/merge系のツールは賢いから、
そーゆー本質的でない変更は無視できるように設定できるだろ。
0026デフォルトの名無しさん
2007/02/07(水) 01:00:41リファクタリング
という言葉が出てくるのかがわからない
0027デフォルトの名無しさん
2007/02/07(水) 03:21:27インデントの設定とかが、議論のネタになるんだろw
ソースだけ引き継ぐこともあるしなあ
(完成品だけ引き継いで、バージョンアップしたこともあるがw)
0028デフォルトの名無しさん
2007/02/07(水) 03:30:310029デフォルトの名無しさん
2007/02/07(水) 03:38:16・「( 論理式 ) ? 式1 : 式2」という書き方は禁止
全体を括弧でくくって、「( 論理式 ? 式1 : 式2 )」と書け
0030デフォルトの名無しさん
2007/02/07(水) 07:54:28リファクタリングを、コードの整形レベルのことだと思ってるってこと
だろう。
0031デフォルトの名無しさん
2007/02/07(水) 09:22:23普通に使うよ。使った方がコードが読みやすくなると思ったら迷わず使う。
0032デフォルトの名無しさん
2007/02/07(水) 10:09:26なんで、三項演算子使っちゃいけないの?
0033デフォルトの名無しさん
2007/02/07(水) 10:51:29まー使ったほうが綺麗に読みやすくなる場合もあると思うんだが、
アホに使用を許すと場をわきまえずバンバン使って、えらく読みにくくなる場合が多い。
どうせ構文砂糖なんだから、禁止しても害は無いので禁止しちまえ、という事らしい。
0034デフォルトの名無しさん
2007/02/07(水) 10:52:260035デフォルトの名無しさん
2007/02/07(水) 12:10:12三項演算子より条件演算子が正しい表現ではないのか
条件演算子はネスト禁止
0036デフォルトの名無しさん
2007/02/07(水) 12:12:320037デフォルトの名無しさん
2007/02/07(水) 12:37:07FALSE |
FAILED(hr = ...) |
FAILED(hr = ...) |
が30行ぐらい延々とつづくコードをみたことがある。
中で三項演算子もばっちり使ってた。
生暖かく見守ってたらやっぱりメンテで叫んでた。
0038デフォルトの名無しさん
2007/02/07(水) 12:38:430039デフォルトの名無しさん
2007/02/07(水) 13:21:16規約のリンク集みたいなサイトってある?
0040デフォルトの名無しさん
2007/02/07(水) 13:25:560041デフォルトの名無しさん
2007/02/07(水) 13:42:20プロジェクトごとに定めているのがふつーだわな。
Linux kernel coding style(ソースツリーにも入ってる)
http://pantransit.reptiles.org/prog/CodingStyle.html
1インデント幅が8スペース分のTAB。
GNU Coding Standards
http://www.gnu.org/prep/standards/standards.html
変態的な{}の使い方が特徴。
Code Conventions for the Java Programming Languag
http://java.sun.com/docs/codeconv/
オプソじゃないけどJavaでは有名。
Mozilla Coding Style Guide
http://www.mozilla.org/hacking/mozilla-style-guide.html
いろいろC++の機能の利用を制限しているのがつらそう。
ぐぐるとjakartaのとかもあるな。
0042デフォルトの名無しさん
2007/02/07(水) 16:35:130043デフォルトの名無しさん
2007/02/07(水) 17:18:07gccとemacsの世話になりっぱなしだが、あれだけはイヤ。
0044デフォルトの名無しさん
2007/02/07(水) 18:07:33出所がすぐ分かるとかw
ねーか、キモいからか書き換えられる悪寒
0045デフォルトの名無しさん
2007/02/07(水) 20:07:06おー、こんなの読みたかった、thx
しかしGNUのブレースの書き方…w
Mozilla は和訳もあるみたいね。
ttp://www.mozilla-japan.org/hacking/mozilla-style-guide.html
0046デフォルトの名無しさん
2007/02/07(水) 22:27:45> 俺はタブを使ってインデントしてるんだが(ハードタブっていうのか?)
> こうしておけば各自見やすいタブ幅に設定しておけるしいいんじゃないかと思っている。
>>14
> タブ派 == インデント幅は各自好きにしろ。
char *hoge = {"hoge", "piyo",
"fuga"};
if (hoge ||
piyo)
function(arg1,
arg2);
行頭だけタブ使っていても、一行が長くなる時には改行入れるでしょ。
その時にどうしてもタブとスペースが混ざったり、混ざらない場合でも
人によっては見苦しい汚いコードになるわけだ。
他人に公開するソースにはタブなんて使うもんじゃないよ。
Tabs are evil
http://www.google.com/search?q=%22Tabs+are+evil%22&hl=en&ie=utf-8&oe=utf-8
0047デフォルトの名無しさん
2007/02/07(水) 22:53:35http://www.jwz.org/doc/tabs-vs-spaces.html
は?
0048デフォルトの名無しさん
2007/02/07(水) 23:13:59継続行は元の行より1レベル余計にインデントするだけで、
位置あわせは全くやりませんね。
0049デフォルトの名無しさん
2007/02/08(木) 00:23:01ローカル変数を const にしたいときに使うので良く使う。
こういうときに匿名関数とか欲しくなる。
0050デフォルトの名無しさん
2007/02/08(木) 02:47:20インデントなんか何だっていいんだよ、
チェックインする前に自動整形かければ済むことだ。
人様のコードを読む時も、自動整形かければ済むことだ。
まぁ、インデントがスペースだと文句を言う人は、
キーボードの→を押して、ぼーっと画面を眺めるような間抜けだろう。
0051デフォルトの名無しさん
2007/02/08(木) 06:34:060052デフォルトの名無しさん
2007/02/08(木) 14:08:08なんで人間がソースコードを整形しないんだよ。
インデントって重要なんだよ、
チェックインする前には、必ず手作業で整形する習慣をつけるべき。
人様のコードを読む時に、自動整形するなんて言語道断。
まぁ、自動整形がいいんだと文句を言う人は、
世の中には例外というものがあって、自動整形することで
醜くなるソースコードがあることすら理解できない間抜けだろう。
0053デフォルトの名無しさん
2007/02/08(木) 16:30:100054デフォルトの名無しさん
2007/02/08(木) 21:57:34一本とれてよかったね。
0055デフォルトの名無しさん
2007/02/09(金) 04:31:13しまいにゃあ、いろんなところが崩壊して行きそう
マイケルジャクソンみたいに
0056デフォルトの名無しさん
2007/02/09(金) 07:26:37・ツール側の非互換な変更に備えて、バージョンまで指定する
・ツールを変更した場合、そのツールで全ソースを整形し直す
くらいで解決できそう。
0057デフォルトの名無しさん
2007/02/09(金) 15:12:40その例だと、こうする。TABの幅が変わってもずれない。(可変幅fontな奴はさすがにいないだろう)
<TAB>char *hoge = {"hoge", "piyo",
<TAB> "fuga"}; // TABのあとに14文字スペース。前の行のcharのc前までがTAB
まあ個人的なコードで他人関係ないならこう書くけど
<TAB>char *hoge = {
<TAB><TAB>"hoge",
<TAB><TAB>"piyo",
<TAB><TAB>"fuga",
<TAB>};
0058デフォルトの名無しさん
2007/02/09(金) 16:13:50等幅フォントという前提自体が美しくない。
まぁ、>57の前者程度であれば空白が詰まろうとたいした問題ではないが。
駄菓子菓子、パラメータや型名の後を揃えたがるのはどうにもこうにも美しくない。
Ex.
sumType_t funcName(
int foo, /* この行にfooとbarをそろえるための空白を入れている */
const char * bar
)
{
0059デフォルトの名無しさん
2007/02/09(金) 20:07:140060デフォルトの名無しさん
2007/02/09(金) 20:57:01現にここに貼ってもプロポーショナルフォントで見る羽目になるわけで。
0061デフォルトの名無しさん
2007/02/10(土) 02:21:33ハードウェア・ソフトウェアとも、十分プロポーショナルフォントで行ける環境はあるのに。
メールなんか、Outlook Expressやらのせいで、どちらかというと等幅の方が劣勢だよね。
0062デフォルトの名無しさん
2007/02/10(土) 02:22:05キーワードが太字になったり斜体になったりして
結局揃わない罠。
0063デフォルトの名無しさん
2007/02/10(土) 02:25:49フォント変えられるエディタで好きに書けよ
0064デフォルトの名無しさん
2007/02/10(土) 03:04:121.0, 10,0, 100.0,
125.0, 1.0, 12.4,
45.0, 1250.0, 25.0
};
こんな感じのを書くときとか、やっぱ都合が悪いわけで
0065デフォルトの名無しさん
2007/02/10(土) 12:22:00等幅等幅いってんのは日本人だけだろ?
0066デフォルトの名無しさん
2007/02/10(土) 12:52:450067デフォルトの名無しさん
2007/02/10(土) 13:01:35Tabを使えとあれほど
0068デフォルトの名無しさん
2007/02/10(土) 13:03:21アラビア語の書籍は持ってないので分からん。
0069デフォルトの名無しさん
2007/02/10(土) 13:07:45日本語プログラミング言語が基本的にゲテモノ扱いなのと一緒で
0070デフォルトの名無しさん
2007/02/10(土) 13:40:11むこうでもタイプライタ系の等幅フォントだよな。Courier NewとかConsolasとか。
0071デフォルトの名無しさん
2007/02/10(土) 13:49:460072デフォルトの名無しさん
2007/02/10(土) 14:12:430073デフォルトの名無しさん
2007/02/10(土) 14:38:290074デフォルトの名無しさん
2007/02/10(土) 15:34:14pretty printすることはあったけど今はやらないなぁ。
だいたいソースコードを印刷すること自体まずやらん。
0075デフォルトの名無しさん
2007/02/10(土) 16:29:500076デフォルトの名無しさん
2007/02/10(土) 16:30:22D&Eだっけ?すごく読みにくかった記憶が。
0077デフォルトの名無しさん
2007/02/10(土) 16:36:58プロポーショナルで書かれていることもあるみたい。
今見たら、ソフトウェア博物誌とかそうなってた。
0078デフォルトの名無しさん
2007/02/11(日) 01:28:35> だいたいソースコードを印刷すること自体まずやらん。
EclipseからわざわざソースをエクスポートしてDFで差分を表示して
印刷してレビューとかしてます。いやさせられてます。もうアホかと
0079デフォルトの名無しさん
2007/02/11(日) 02:09:36タブじゃ全然無理
場所によって桁数がちがうだろ、よく見ろ
0080デフォルトの名無しさん
2007/02/15(木) 11:03:40http://sourceforge.net/projects/gcgreatcode/
これ?
0081デフォルトの名無しさん
2007/03/12(月) 01:51:520082デフォルトの名無しさん
2007/03/12(月) 03:04:05プロポーショナルでびっしり印刷してある。
パッと視界に収まるのは良いけど。
0083デフォルトの名無しさん
2007/03/13(火) 23:50:45さっぱりハンガリアン記法が使われていなかった。
このヘッダ自体は古くからあると思うんだけど、
そこでハンガリアンが使われていないということが意外だった。
0084・∀・)っ-○◎●
2007/03/14(水) 00:44:27ハンガリアンマンセーなのは9xのほう。
ってばっちゃが言ってた
0085・∀・)っ-○◎●
2007/03/14(水) 01:31:560086デフォルトの名無しさん
2007/03/14(水) 05:29:570087デフォルトの名無しさん
2007/03/14(水) 05:50:470088デフォルトの名無しさん
2007/03/14(水) 05:58:41iHoge とか dwFoo とか書く意味はまるでないッ
その変数の「意味」を頭に書き加えるのならやってもいいッ
0089デフォルトの名無しさん
2007/03/14(水) 06:15:430090デフォルトの名無しさん
2007/03/14(水) 08:14:010091デフォルトの名無しさん
2007/03/14(水) 09:13:06ttp://tinyurl.com/2cgb8n
型名プレフィックスをつけるだけの記法を
ハンガリアンと読んでいる奴はアホ。
その記法をマンセーしてる↓みたいな奴はもっとアホ。
ttp://homepage2.nifty.com/well/HungarianNotation.html
0092デフォルトの名無しさん
2007/03/14(水) 14:06:04激しく同意
0093デフォルトの名無しさん
2007/03/14(水) 23:21:44HWND hWnd;
とか書いちゃってるなあ。
HWND windowHandle;
でいいはずだが。
0094デフォルトの名無しさん
2007/03/14(水) 23:41:47(やや苦しいかもしれないが)例えばC#なんかだとみんなIntPtrになるからハンドルにhを付けるのも生きてくる。
C/C++のtypedefは型名にアプリケーションハンガリアンを適用するためにも使えるという見方もできる。
(それが行き過ぎて型名とプレフィックスを結び付けるシステムハンガリアンになってしまったのかもしれないが)
そういう訳もあって俺はウィンドウハンドルの変数名・プレフィックスをhWndとするのではなく、hwndとしている。
HANDLE hHoge = hwndHoge;なんて有り得ない。
0095・∀・)っ-○◎●
2007/03/15(木) 00:09:410096デフォルトの名無しさん
2007/03/15(木) 03:32:04だってボタンやテーブルなんだし。
0097デフォルトの名無しさん
2007/03/15(木) 04:08:24妙な略語は読みにくい。
今時の環境なら補完くらいしてくれるから、長くてもtypoは起きにくいし。
へたすると、短くて補完効きづらい名前のがtypoしやすいくらい。
それに、 button とか table とかは接頭辞じゃなくて接尾辞にすべきだと思う。
型より意味のが重要なんだから。
0098デフォルトの名無しさん
2007/03/15(木) 05:04:25などと言い合いの軸をもう一つ増やしてカオスに追い込んでみようかな。
0099デフォルトの名無しさん
2007/03/15(木) 05:25:130100デフォルトの名無しさん
2007/03/15(木) 09:10:00変数に大文字が混入するのは何となく嫌だ。
0101デフォルトの名無しさん
2007/03/15(木) 09:51:22頭に持ってくるか尻に持ってくるかは、
どっちの意味を重視するか、どっちから探したいかによるかと。
俺の頭の中ではボタンは型ではなくて、単にボタン。
hoge するものであること以上に
画面上のボタンであることをイメージするので
(hoge という意味もボタンという意味も持つ。型はない。)
頭に持ってきたいんです。
なんだけど、hogeButton の方が自然な名称だとは思う。
まぁ規約に従いますよ。
0102デフォルトの名無しさん
2007/03/15(木) 10:15:28quitボタンという画面部品だから、付けるならquitButtonだなー。
quitButtonで呼ぶ処理ルーティンの名前はquitかもしれぬ。
0103デフォルトの名無しさん
2007/03/15(木) 10:21:36とか言ってくるやつがたまに居るんだが
どうやって対処したらいいんだろ。
型じゃねーよと言っても分かってもらえない。
0104デフォルトの名無しさん
2007/03/15(木) 10:31:57ボタン型より抽象的な型(コンポーネントとかウィジェットとか)で
保持してやればいいんじゃね?名前はそのまんまで。
で、本当にボタンとして使うときには毎回キャスト。
一回やってみせて、できあがったアフォコード見せてやればきっと
納得してくれるよ。
0105デフォルトの名無しさん
2007/03/15(木) 11:02:060106デフォルトの名無しさん
2007/03/16(金) 20:26:030107デフォルトの名無しさん
2007/03/17(土) 23:30:31a += 2;
{
懿。疂nt tmp = a;
懿。畭 = b;
懿。畸 = tmp;
}
みたいに{ }を使うこともあると思うけど、これに if else をつけると、
if (a > 0)
懿。畭 += 2;
else
懿。痣
懿。癧疂nt tmp = a;
懿。癧畭 = b;
懿。癧畸 = tmp;
懿。痾
のように、一行コードと{ }のブロックが同じインデントになってるから、
GNUのスタイルは一応理にかなってはいるなと思っただけ。
0108デフォルトの名無しさん
2007/03/17(土) 23:34:09a += 2;
{
□int tmp = a;
□a = b;
□b = tmp;
}
みたいに{ }を使うこともあると思うけど、これに if else をつけると、
if (a > 0)
□a += 2;
else
□{
□□int tmp = a;
□□a = b;
□□b = tmp;
□}
のように、一行コードと{ }のブロックが同じインデントになってるから、
GNUのスタイルは一応理にかなってはいるなと思っただけ。
#化けたのでもう一度書きます。すんません。。。
0109・∀・)っ-○◎●
2007/03/17(土) 23:45:160110デフォルトの名無しさん
2007/03/18(日) 00:07:54GNUの{}がキモイと言っている奴らは
そういう理屈を理解した上でなおキモイと言っているんだと思われ
0111デフォルトの名無しさん
2007/03/18(日) 00:20:470112デフォルトの名無しさん
2007/03/18(日) 00:24:12オレは { } を使わない if がそもそもキモイと思う。( >>108 の a += 2; の部分 )
0113デフォルトの名無しさん
2007/03/18(日) 00:34:00>まずは「GNU 標準プログラム書法」
>(GNU coding standards)を入手して印刷してみてください。でも、読むために
>印刷するのではありません。印刷した物を燃やすのです!この儀式は晴れがま
>しい決意表明なのです! V^_^V
By リーナスたん
0114デフォルトの名無しさん
2007/03/18(日) 01:23:23とにかく気持ち悪い。
0116デフォルトの名無しさん
2007/03/18(日) 09:17:27自分では単文の時も必ず{}で括るようにしているが、
そうでないソースがあったとしてもキモいとまでは思わないな。
0117デフォルトの名無しさん
2007/03/18(日) 14:04:35a = 1;
else {
int b;
a = 1;
b = 2;
}
1行コードと {} のインデントを同じにしなきゃならん理由がわからん
ifとelseの中身が同じインデントレベルの方が見て把握しやすい
GNUはやっぱキモイわ
リーナスたんが言うようにGNUのウンココーディングスタイルなんて燃やすべきだ!
0118デフォルトの名無しさん
2007/03/18(日) 15:32:05俺様wayに頑なに固執するのは俺的には精神分析の対象だと思う。
どっか幼児性が切断されてないところがあるんじゃないの?
気色悪い、という感情はコードのお作法に対してより、
むしろそういう自分自身をこそ向けられるべきだね。
0119デフォルトの名無しさん
2007/03/18(日) 15:36:57異なるパターンのコードを行ったり来たりするのは疲れることは確か。
だとしたらフリースタイルというcの思想がそもそも間違ってるのかもね。
まあ、自由というドグマに囚われた不自由なアメリカ人が作ったものだからな。
0120デフォルトの名無しさん
2007/03/18(日) 15:38:380121デフォルトの名無しさん
2007/03/18(日) 15:59:53コミッターや開発者の間で民主的に多数決でもとって GNU v2 のスタイルでも
決めてくれればいいものを。
一部の変人がコーディングスタイルを決めて、それがデファクトスタンダードになって
しまってる現状に疑問を投げかけてもいいんじゃない?
>>118みたいに人格攻撃しかしないバカには理解できないだろうけど
0122デフォルトの名無しさん
2007/03/18(日) 16:32:190123デフォルトの名無しさん
2007/03/18(日) 16:38:140124デフォルトの名無しさん
2007/03/18(日) 23:11:130125デフォルトの名無しさん
2007/03/18(日) 23:19:300126デフォルトの名無しさん
2007/03/18(日) 23:54:090127デフォルトの名無しさん
2007/03/18(日) 23:58:360128デフォルトの名無しさん
2007/03/19(月) 00:03:090129デフォルトの名無しさん
2007/03/19(月) 11:06:300130デフォルトの名無しさん
2007/03/19(月) 13:00:16「デファクトスタンダード」の意味調べて来い。
0131デフォルトの名無しさん
2007/03/19(月) 15:56:43>>121は、FLOSSなどと呼ばれるソフトウェアはLinuxカーネルを除いて
みなGNUスタイルで書かれてるとでも思っているのではないだろうか。
0132デフォルトの名無しさん
2007/03/19(月) 22:09:09俺は一瞬「幼児を分断」と読んで萎えた
0133デフォルトの名無しさん
2007/03/20(火) 01:27:02正しくは「幼児性の払拭」だね
なんつう、つまんないレスを(ry
0134デフォルトの名無しさん
2007/04/10(火) 13:58:05関数名、変数名の大文字小文字でずっと悩んでいますが、
スタイルはJavaやMSDNでいいと思っています
でも、STLやBoostを使うと、バランス悪くなりませんか?
0135デフォルトの名無しさん
2007/04/10(火) 14:49:21必要以上の一貫性は無意味だ。
0136デフォルトの名無しさん
2007/04/29(日) 03:20:35それはいつも悩んでます。俺はVBでcmdOkとかcmdCancelみたいなのに
慣らされてきたから、C#になったときにbuttonOkとかbuttonCancelとか
やってみたんだけど、確かに探しやすいんだがなんか気持ち悪い。
次のプロジェクトではokButton、cancelButton式にしたんだけど、やっぱり
探しづらい。どうしても「UI要素の分類」をキーボードから打ったあとで
候補から↑↓で選ぶ方が探しやすいと思うのだ。
そうして小さなプロジェクトを作るごとにあーだこーだ悩んだ末、
今ではプロジェクトごとにばらばらだ。それが一番ダメなんだってw
0137デフォルトの名無しさん
2007/04/29(日) 07:21:40ダメなのはプロジェクト内で統一されてない時。
0138デフォルトの名無しさん
2007/05/01(火) 03:41:22_をofと考えて、button of ok → button_ok
0139デフォルトの名無しさん
2007/05/09(水) 03:02:45* ←このアスタリスクがめんどい
*/
0140デフォルトの名無しさん
2007/05/09(水) 03:13:07/*
* ←このアスタリスクがめんどい
*/
はじめに書くときにも面倒だし、後でコメント内のインデントを上げ下げ
するときにも激しくウザイ。そしてこの面倒さに対するメリットがよくわからない。
いっこだけ検索して見つけたのが、その行がコメントであることを行自身に
明示させる働きがあるとのこと。だけどそんなのエディタで開けば
色分けしてくれるし、そうじゃなくてもコメントとコードの区別は目で見れば
簡単に判別できる。機械的に判別させるためであれば、行頭アスタリスクで
始まるコードも書けてしまうので結局曖昧なままだし。
なんでこのスタイルがこんなに普及してるのか、知ってる人がいたら教えて欲しい。
0141デフォルトの名無しさん
2007/05/09(水) 03:15:140142デフォルトの名無しさん
2007/05/09(水) 03:16:50いちいち打つのは面倒だからやりたくないね。
エディタが勝手に埋めてくれるから埋めとくかって感じだけど。
0143デフォルトの名無しさん
2007/05/09(水) 03:18:15それがそんなにめんどいなら、そのアスタリスクを付加するフィルタを簡単に作れるようになるべきかと。
固定文字列対応のことを考えるとめんどいけど
0144デフォルトの名無しさん
2007/05/09(水) 03:20:35そのエディタ、コメントの中のインデント調整してもアスタリスクの位置だけ
保持してくれたりする?
0145デフォルトの名無しさん
2007/05/09(水) 03:33:15プログラマなんだからそれくらいエディタにやらせろよ。
0146デフォルトの名無しさん
2007/05/09(水) 13:41:49ところで単語の区切りはどうしてる?
do_somethingで単語を区切る方が好きだけどC++やJavaも使うから泣く泣くdoSomethingみたいに大文字で区切ってる
0147デフォルトの名無しさん
2007/05/09(水) 14:05:50javadocのせいじゃないの?
0148デフォルトの名無しさん
2007/05/09(水) 18:05:54C# と Java やり始めてようやく doSomething 式にしたけどまだ違和感があるな
0149デフォルトの名無しさん
2007/05/09(水) 19:42:35とりあえず周りに合わせる感じ。
C++でソロだとdo_something系だな、今は。
0150デフォルトの名無しさん
2007/05/09(水) 21:31:46C#はDoSomethingだろ
マイクロソフト様のガイドラインに書いてある。
0151デフォルトの名無しさん
2007/05/09(水) 21:34:24doやsomethingそのものも柔軟に定義できてそれらの直行性を使って
複合的な機能が実装できればいいのに
0152デフォルトの名無しさん
2007/05/09(水) 21:39:040153デフォルトの名無しさん
2007/05/09(水) 21:59:36直交性に読み替えてみてもさっぱり意味が(ry
・・・もしかしてニモニック?
0154デフォルトの名無しさん
2007/05/09(水) 22:07:17マジすか
明日から堂々と DoSomething って書くわ、むろん Java でも
0155デフォルトの名無しさん
2007/05/09(水) 22:11:06Javaでのメソッド名、変数名についてはdoSomethingでたのむにょろ。
0156デフォルトの名無しさん
2007/05/09(水) 22:34:40変数名は小文字アンダースコア区切り、メソッド名はCamelな俺。
0157デフォルトの名無しさん
2007/05/09(水) 22:36:15命名しててなんか気持ち悪くなるんだよね。
0158デフォルトの名無しさん
2007/05/10(木) 00:26:29変数名と関数名は全部小文字で単語間をアンダースコアで区切る。
クラス名はキャメルケースを使う。
という風に使い分けてる。
0159デフォルトの名無しさん
2007/05/10(木) 13:35:570160デフォルトの名無しさん
2007/05/10(木) 14:57:560161デフォルトの名無しさん
2007/05/11(金) 02:03:18関数ポインタとかファンクタ、デリゲート、const変数等はどう名付けてます?
0162デフォルトの名無しさん
2007/05/11(金) 02:52:04>>161
デリゲートって悩むよねー
MS様のガイドラインではイベントハンドラ以外のは
〜Callbackにしろって書いてあったと思うけど、
明らかに守られてないし。(MethodInvokerとか)
あんまし関係ないけどWin32APIの定数はできるだけ
constの変わりにenum使うようにしてる。
0163デフォルトの名無しさん
2007/05/14(月) 13:48:41メソッド => 先頭小文字/キャメル
クラス => 先頭大文字/キャメル
定数 => 全部大文字/アンスコ
かな。
0164デフォルトの名無しさん
2007/05/14(月) 21:40:44publicな名前はDoSomethingで、
privateな名前はdoSomethingと覚えておけばいい
0165デフォルトの名無しさん
2007/05/14(月) 23:26:270166デフォルトの名無しさん
2007/05/15(火) 02:20:540167デフォルトの名無しさん
2007/05/15(火) 21:43:210168デフォルトの名無しさん
2007/05/16(水) 02:25:30> C++ 標準規格 17.4.3.1.2 節 グローバル名 [lib.global.names] 第1パラグラフによると:
>
> 名前と関数シグネチャのある特定の組は、実装によって常に予約されています:
> 二重のアンダースコア(__)が含まれる名前、または後ろに大文字 (2.11) が付くアンダースコアで始まる名前は、
> ある目的のために実装によって予約されています。
> アンダースコアで始まる名前は、グローバルな名前空間で使う名前として実装によって予約されています。
0169デフォルトの名無しさん
2007/05/16(水) 08:11:48ほとんど [in] だし、ポインタに const ついてなければ [out] または [in,out] なんで、
あんまり手動でつけて回るメリットが無いような気がしてます。
0170デフォルトの名無しさん
2007/05/16(水) 08:27:30私のところでは、過去との互換性でconstついてないポインタの時にはつけてる。
0171デフォルトの名無しさん
2007/05/16(水) 09:11:58渡すときは in も out も何かしっくりこないしねぇ。出したり入れたり
じゃなくて状態を変更するかどうかが重要って感じ?
0172デフォルトの名無しさん
2007/05/16(水) 12:50:240173デフォルトの名無しさん
2007/05/16(水) 14:45:200174デフォルトの名無しさん
2007/05/21(月) 04:21:300175デフォルトの名無しさん
2007/05/21(月) 10:20:53自動車をなくせば交通事故は無くなるんじゃない?
0176デフォルトの名無しさん
2007/05/21(月) 10:25:26いいえ、自動車以外の交通事故は残ります。
→ケース問題を除く宗教戦争は残ります。
0177デフォルトの名無しさん
2007/05/21(月) 13:07:30あの言語ってケース問題に関する宗教戦争ってないのか?
0178デフォルトの名無しさん
2007/05/21(月) 13:33:11「大文字小文字同一視だぜ」とか言ってるやつはみたことないな。
普通に大文字小文字区別して「どう書こう?」ってやってる。
0179デフォルトの名無しさん
2007/05/21(月) 13:51:21書籍やIT系サイトのチュートリアルっぽいコードで、たまに無茶苦茶なのを見かける。
一般向けに晒すコードなら、プロパティ名とかメソッド名はオンラインヘルプに記述されているとおりに書け。
# Delphiのヘルプは酷いから、そもそもオンラインヘルプで記述が統一されていないってのもあるが。
0180デフォルトの名無しさん
2007/05/21(月) 14:43:03ってのは兎も角。
>>178
VisualBasicは大文字小文字を区別できるんですか?
例えばdim aa as integer, AA as integer, Aa as integerみたいに?
私ゃ保存はされるけど区別はできないと思っていたのだが。
0181178
2007/05/21(月) 15:01:39いや、区別しない。
>>178で言いたかったのは
「区別されないからAbcDefメソッドをABCDEFで呼ぶぜ」なんてやつはおらず、
VBでも「『AbcDef』がいいか『abcDef』がいいか(大文字小文字を意識して)どう書こう?」って
やってる、ってこと。
書き方悪かったかも。ごめん。
0182デフォルトの名無しさん
2007/05/22(火) 15:38:32#こういう考え方はいかん
#エロサイトを封じれば性犯罪が減ると思ってやがる
0183デフォルトの名無しさん
2007/05/22(火) 19:08:06コメントへの野暮なレスですまんが、
もとの「自動車を無くせば自動車事故は起きなくなる」に対応する
のは「エロサイトをなくせばエロサイトへの接続が無くなる」では。
# 縦読みを仕込みたかったが出来なかった。
0184デフォルトの名無しさん
2007/05/22(火) 20:21:390185デフォルトの名無しさん
2007/05/23(水) 00:14:54エロサイトを封じればエロサイトの広告、迷惑メールなどが減る。
→でもその他の広告などは残る。
0186175
2007/05/23(水) 01:40:16その言語を使用する側が制御できることではないし、どうこう言うべきことでもない
と言いたかったのですが。
0187デフォルトの名無しさん
2007/05/23(水) 05:03:55決められない要素も出てきた
0188デフォルトの名無しさん
2007/05/23(水) 06:51:310189デフォルトの名無しさん
2007/05/23(水) 13:52:320190デフォルトの名無しさん
2007/05/30(水) 08:01:29あれなら宗教戦争はなくなる
0191デフォルトの名無しさん
2007/05/30(水) 08:23:200192デフォルトの名無しさん
2007/06/02(土) 00:19:25カーソルをあわせれば型が出るからですか?
自分はカーソルあわせるのが面倒なのでハンガリアンで書いてますが・・・
0193デフォルトの名無しさん
2007/06/02(土) 00:25:52templateをゴリゴリつかったプログラミングなんかが流行ったこととかが関係してると思う。
ハンガリアンだと型を変えたときに名前まで変えなきゃならんしね。
↑これは型に対するハンガリアンのことであって、意味に対するハンガリアンは
いまでもそこそこ使われてると思うけど。
0194デフォルトの名無しさん
2007/06/02(土) 00:41:42関数でかすぎるせいでそうなってないか、
一回見直したほうが良い。
0195デフォルトの名無しさん
2007/06/03(日) 21:19:31本来のアプリケーションハンガリアンを用いる人が増えただけ
0196デフォルトの名無しさん
2007/06/20(水) 05:09:570197デフォルトの名無しさん
2007/06/20(水) 11:45:17ディストリをメンテしているオレの戦いは今日もつづく
0198デフォルトの名無しさん
2007/06/20(水) 16:30:30http://www.namamono.com/okotoba01.html (02年3月上旬)
0199デフォルトの名無しさん
2007/06/20(水) 16:37:28なんという糞レス…
0200デフォルトの名無しさん
2007/06/21(木) 20:07:08おーrrらー
0201デフォルトの名無しさん
2007/06/28(木) 01:08:52変数 => 全部小文字/アンスコ
メソッド => 先頭大文字/キャメル
クラス => 先頭大文字/キャメル
定数 => 全部大文字/アンスコ
>>163さんと同じにした方がみやすいんじゃん
っておもた
でも先頭が小文字のキャメルは不自然に感じてしまう
0202デフォルトの名無しさん
2007/06/28(木) 01:33:07プライベートフィールド・ローカル変数 :ローワーキャメル
名前空間・クラス・関数・プロパティ・定数 :アッパーキャメル
に落ち着いた。
フィールドにアクセスするときは必ずthis付けるようにしてるから
ローカル変数と混同することはないはず。
今MSDNのガイドライン読んだらプライベートメンバの
名前付けに関してはなんでもいいみたいだな。
0203デフォルトの名無しさん
2007/06/28(木) 23:17:56構造体・クラス・列挙体にはリーディングタグつけないやっぱり?
C#だとやってる人ほとんどいないなどういうわけか。
enumはともかく、クラスと構造体の違いは勘違いしてると致命的になる場合が
あるから、つけた方がぜったいコード読みやすいと俺は思うんだけど。
0204デフォルトの名無しさん
2007/06/29(金) 00:11:270205デフォルトの名無しさん
2007/06/29(金) 01:18:09変換テーブル的に使う変数(例えば数値→文字へに使うようなmap型の変数)や
関数オブジェクトのインスタンスなら関数と同じような命名法である
>先頭小文字/キャメル
を適用したいのです
こういう類の変数で初期化時に設定してあとは殆ど変更しなかったり、
初期化部分以外での扱い方が関数的(mapの例だとmap[x]でxに対応する値の取得に使われる)たりで
メソッドとみなしてメソッドに対する命名法を適用しても問題ない気がするんですがどうでしょう?
それでも変数である以上変数に対するルールを出来る限り使用するべきでしょうか?
0206デフォルトの名無しさん
2007/06/29(金) 10:02:57C# は結局、VS のインテリセンスに頼ること前提だから、
クラスと構造体の勘違いは気にしなくてもいいのかも。
0207デフォルトの名無しさん
2007/06/29(金) 12:44:200208デフォルトの名無しさん
2007/07/01(日) 18:08:36Javaだと先頭小文字のキャメルってよく使うよ。
何せ標準ライブラリがそうなってるからな。
M$は先頭大文字キャメルLoveみたいだが。
0209デフォルトの名無しさん
2007/07/01(日) 20:11:36名前空間名、型名、パブリックメンバ名はPascalCase、
関数の引数名はcamelCase
0210デフォルトの名無しさん
2007/07/16(月) 02:29:480211デフォルトの名無しさん
2007/07/16(月) 03:07:50getXXXとかのgetのようなものも役目としてはこれに近いから同じように感じるのも無理はない
0212デフォルトの名無しさん
2007/08/16(木) 16:52:56区別するための列挙型をLog.Typeと命名したんですね。
.NETのライブラリでもアッパーキャメル規約になってるっぽいですから。
で、メンバ変数としてType Log.typeを定義したのです。ここまでは
分かりますね。さらにLog.typeを外部から直にアクセスして欲しくないので
typeにアクセスするプロパティを定義すると。MS式の記法だと、やっぱり
Log.Typeが妥当かな?
型 'Log' は 'Type' の定義を既に含んでいます。
0213デフォルトの名無しさん
2007/08/17(金) 01:04:30キャメル云々はそれでよいと思う。
名前が重複する件は、列挙型はTypeでよくて、プロパティの方は「○○のためのType」という
○○の部分をうまく補ってあげればいいんじゃないかな。
0214212
2007/08/17(金) 03:18:25表現のしようがないのが辛いです。
列挙型はLog.Typeで、プロパティはLog.LogType…うーむ。
余談ですが、列挙型の識別子を“TYPE”と全部大文字表記
(長い場合はアンダースコア区切り)にすることも考えました。
しかしその方法でも内部クラスとかの命名になるとお手上げ…。
0215デフォルトの名無しさん
2007/08/18(土) 00:09:000216デフォルトの名無しさん
2007/08/24(金) 04:14:41class 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++でもそうしたいんですが、
(メイヤーズ先生も小文字で始めてるし)
どうもここがちょっと引っかかって。
0217デフォルトの名無しさん
2007/08/24(金) 04:29:23isNeet = false とかがキモイのもあって、 neetFlag とかにしちゃうかな。
m_neet もアリだな。
0218デフォルトの名無しさん
2007/08/24(金) 10:53:28メソッド名を大事にしたいならフィールド名にちょっと引込んでもらうしかないのでは。
自分ならサフィックスにアンダーバーつける。
>>217
「isNeetを内部で保持するのはneetFlag」みたいなのって、頭使うの面倒じゃない?
まれにはそういう置きかえがピッタリいくこともあるけど、ほとんどの場合は
機械的に「プレフィックスつけてるっすー」とかの方が、余計なことに気を回す必要がなくて楽だと思う。
0219デフォルトの名無しさん
2007/08/25(土) 00:44:34m_*
がいいよ。
メンバ変数を他の変数と区別できるようにするのは、
CodeCompleteでも薦められてるようなよくやるパターンです
0220デフォルトの名無しさん
2007/08/25(土) 01:21:180221デフォルトの名無しさん
2007/08/25(土) 01:27:52_FollowedByUppercaseLetterはコンパイラ&ライブラリ実装者用の予約語なので、
_nameも避けといた方が無難。
#double__underscoreもね
0222デフォルトの名無しさん
2007/08/25(土) 01:32:370223デフォルトの名無しさん
2007/08/25(土) 01:35:48意味をわかってつけてるのか。
0224デフォルトの名無しさん
2007/08/25(土) 03:11:13_name をつけるほど自信家じゃない
grepしたときやたらと似たようなのが引っかかりそうだし
それにエディタの行位置表示を下線にしてあるから、見えなくなる
0225デフォルトの名無しさん
2007/08/25(土) 03:16:23これが理由なら、阿呆だ。
0226デフォルトの名無しさん
2007/08/25(土) 06:17:51member の m なら C の構造体でも間違いではないだろ。
0227デフォルトの名無しさん
2007/08/25(土) 09:51:01たぶんそれ、グローバルな名前がそうなだけ
0228デフォルトの名無しさん
2007/08/25(土) 09:53:050230デフォルトの名無しさん
2007/08/25(土) 13:13:08struct Point { int m_x; int m_y };
Point p0 = { 0, 0 };
Point p1;
p1.m_x = p0.m_x + 1;
とか無意味。
scope の間違えようがない。
0231デフォルトの名無しさん
2007/08/25(土) 22:37:30private:
struct {
int x;
int y;
} m;
}
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
これを厳密に守るのはきついな……
0332デフォルトの名無しさん
2008/08/07(木) 15:47:210333デフォルトの名無しさん
2008/08/09(土) 21:26:02goto有害論並に偏りすぎてねぇか?
0334デフォルトの名無しさん
2008/08/09(土) 22:46:420335デフォルトの名無しさん
2008/08/25(月) 00:22:16だけど、働き始めて周りの人間にソース追いにくいだのなんだの
不評だったせいでいつのまにか書かなくなったが。
0336デフォルトの名無しさん
2008/10/01(水) 21:55:220337デフォルトの名無しさん
2008/10/01(水) 21:56:360338デフォルトの名無しさん
2008/10/01(水) 23:43:18検索しやすいように空けない。
0339デフォルトの名無しさん
2008/10/02(木) 00:07:240340デフォルトの名無しさん
2008/10/02(木) 00:08:040341デフォルトの名無しさん
2008/10/02(木) 20:45:350342デフォルトの名無しさん
2008/10/03(金) 01:01:52operator\wktk=
0343デフォルトの名無しさん
2008/10/09(木) 08:01:21escalator��
0344デフォルトの名無しさん
2009/01/09(金) 01:29:10a, b, cとか行に寄って記述が違うとイラッと来る。
0345デフォルトの名無しさん
2009/01/10(土) 21:16:17コピペ製作だと思うよ。
0346デフォルトの名無しさん
2009/02/08(日) 11:22:25for( iI = 0 ; iI < iMax ; iI = iI + 1){
とか泣けるんですが。iIって変数名も泣けるけど。
0347デフォルトの名無しさん
2009/02/08(日) 16:00:560348デフォルトの名無しさん
2009/02/08(日) 20:56:100349デフォルトの名無しさん
2009/02/08(日) 21:59:110350デフォルトの名無しさん
2009/02/09(月) 00:02:370351デフォルトの名無しさん
2009/02/09(月) 02:15:38痛々しいな。
1を加算するのに++を使うのもみっともないが
1づつ増えていく値を表現するのに++を使わないのも、なんだかな
0352デフォルトの名無しさん
2009/02/09(月) 10:51:44で、代替のサンプルがすごく分かりにくい。
0353デフォルトの名無しさん
2009/02/09(月) 15:12:23ぱっと見で理解できやすいほうに改良していく感じで。
基本は固まりがわかりやすいインデント、改行+固まりの概要コメントってとこかな。
class A {
public:
int i;
0354デフォルトの名無しさん
2009/02/09(月) 15:13:48class A {
public:
int i;
}
よりも
class A {
public:
int i;
}
のが好き
0355デフォルトの名無しさん
2009/02/09(月) 20:43:150356デフォルトの名無しさん
2009/02/10(火) 12:27:33{
private:
int i;
};
がすき
>>355
変数名はクラス間で衝突するのが当然だから後から置換するのは大変だぞ
0357デフォルトの名無しさん
2009/02/10(火) 19:13:100358デフォルトの名無しさん
2009/02/10(火) 20:36:18JavaとかC#だと当たり前のように存在する。
0359デフォルトの名無しさん
2009/02/10(火) 20:39:51何年前から来ましたか
0360デフォルトの名無しさん
2009/02/10(火) 21:25:10viでperlでCGIを書いていた時代には戻れない。
0361デフォルトの名無しさん
2009/02/10(火) 21:51:51eclipseを使って変数名変更やもっと高度なコードの書き直しができるみたいね
ttp://www.confrage.com/eclipse/
(リファクタリングの項目)
こういう情報がまとまってるところってないものかな
0362デフォルトの名無しさん
2009/02/10(火) 22:25:030363デフォルトの名無しさん
2009/02/10(火) 22:54:59C++は構文解析の難易度高いんで発狂IDEも多いけどw
0364デフォルトの名無しさん
2009/02/10(火) 23:59:01俺はしない。
0365デフォルトの名無しさん
2009/02/11(水) 03:25:36Java/C#では、IDEが勝手にやってくれるのでそのままやらせている。
0366デフォルトの名無しさん
2009/02/11(水) 15:14:16名前変更は、grepで拾って一つ一つやる
そもそも名称変更をする時点で
設計がおかしいってことだし、そういう意味でコードの見直しにもなる
というオレは前時代の生き物だが、そうやって生き残ってきたから
この部分はそのまんまw
0367デフォルトの名無しさん
2009/02/11(水) 16:01:04前向きに検討してあげてね。
最近上司にO/Rマッパの話をしたら、
「そんなこと位、ケチらずにSQL書けよw
最近のはSQLも書けないのが多いってことなんかねー」
と言われた若いもんより
0368デフォルトの名無しさん
2009/02/11(水) 16:29:450369デフォルトの名無しさん
2009/02/11(水) 16:36:56仕掛け上、膨大な数のファイルを取り扱うし整合性とるのだけでも大変だ。
0370デフォルトの名無しさん
2009/02/11(水) 19:04:310372366
2009/02/12(木) 00:35:22いやいや、統合環境でもがつがつ組むときだけテキストエディタを使ってる
私は、フリーだし
誰かの面倒見るときでも、基本的には個人の自由と思ってる
0373デフォルトの名無しさん
2009/02/12(木) 07:55:52お前のレスから出た発想に決まってるだろ低脳
0374デフォルトの名無しさん
2009/02/12(木) 08:14:580375デフォルトの名無しさん
2009/02/12(木) 08:25:470376デフォルトの名無しさん
2009/02/20(金) 19:25:27コードを管理するディレクトリ構成のことなんだけど、
ソースとヘッダーを同じディレクトリに入れてる人っているかな?
ライブラリのコードならヘッダーのディレクトリを分離しなきゃいけないだろうけど、
そうじゃなければ一緒にした方がやりやすいってやってるところもあるのかな?
0377デフォルトの名無しさん
2009/02/20(金) 19:54:540378デフォルトの名無しさん
2009/02/20(金) 20:12:400379デフォルトの名無しさん
2009/02/20(金) 21:29:580380デフォルトの名無しさん
2009/02/20(金) 21:33:590381デフォルトの名無しさん
2009/02/20(金) 21:53:41必要とメリットに応じて。でいいんじゃない? 自分は分けてない
0382デフォルトの名無しさん
2009/02/21(土) 00:52:52ところで今さらだけど、こんな記事あった
ttp://blog.scriptionary.com/2009/01/21/hungarian-notation-what-to-do/
0383デフォルトの名無しさん
2009/02/21(土) 01:02:050384デフォルトの名無しさん
2009/02/21(土) 01:08:300385デフォルトの名無しさん
2009/02/21(土) 01:15:42ただ、ポインタとグローバル変数にはpとかg_をつけてる。取り扱い注意的な意味で。
0386デフォルトの名無しさん
2009/02/21(土) 01:16:25なおかつ、共通で使うヘッダファイルのディレクトリも作る。
コンポーネント内部でしか使わないヘッダファイルは、コンポーネントのディレクトリに入れる。
0387デフォルトの名無しさん
2009/02/21(土) 01:30:43Cの時は使ってる、C++とかオブジェクト指向系の言語だと考えちゃうね
0388デフォルトの名無しさん
2009/02/21(土) 01:33:46コーディングの手間になるから使ってる
意識する分だけ誤りが少ないし、検索するときユニークになりやすい
同じ意味で型を変換したい時には楽
0389デフォルトの名無しさん
2009/02/21(土) 01:33:57flag = true; //フラグを立てる
とかいうのは意味ないと思う。コードを見ればすぐ分かることを書くのは無駄。
コメントはある程度のまとまったコードに対して、どういう意味があるかを書くと、いちいちコードを解析する手間が省けるから役に立つ。
疑問があるのは、コメントにコードの変更日と変更者を記入してるタイプ。役に立ったことがないんだが、役に立つんかね
0390デフォルトの名無しさん
2009/02/21(土) 01:45:120391デフォルトの名無しさん
2009/02/21(土) 01:46:15昔も似たようなスレあったな
俺はシステムハンガリアンも有効だとレスした
IDEによる入力サポートとか、カーソルあわせての型情報とか一切無い環境もあるからな
ってか俺のとこそうだし
と書いても理解してもらえなかった。
多分ここでも理解してもらえないなw
この意見をどう思う?
0392デフォルトの名無しさん
2009/02/21(土) 01:47:50納品した後の修正とかなら書くよ
0393デフォルトの名無しさん
2009/02/21(土) 02:00:33まずはWindows APIみたいにバンバンtypedefしろ。
0394デフォルトの名無しさん
2009/02/21(土) 02:06:37役に立つならそれはそれでありだと思う。
よほどチープな機材しかない職場なんだろうな。
0395デフォルトの名無しさん
2009/02/21(土) 02:11:41とくに
>疑問があるのは、コメントにコードの変更日と変更者を記入してるタイプ。役に立ったことがないんだが、役に立つんかね
には泣くほど同意見だ。
読みにくいったらないよ。
SCMがあるのになぜコメントで書くのか
0396デフォルトの名無しさん
2009/02/21(土) 02:15:24>とかいうのは意味ないと思う。コードを見ればすぐ分かることを書くのは無駄。
まったく同意w
//このフラグはここでのみ立つので、〜ほにゃらら
とか書くならよいのだが、やってることを書くのはほんとアホ
>コメントにコードの変更日と変更者を記入してるタイプ。
おれも役に立ったことがない、コードが読みにくいだけ
だれがどう変えたにせよ、今手を入れるのは自分なんだし
いまさら前任者を恨んでどうするって感じだわw
ファイルヘッダに履歴があれば充分って思う
0397デフォルトの名無しさん
2009/02/21(土) 02:15:29いや、SCMがあってもそういうのを書かされる話は聞くが。
0398デフォルトの名無しさん
2009/02/21(土) 02:41:39> SCMがあるのになぜコメントで書くのか
どこにでもリポジトリがあるわけじゃありません。
0399デフォルトの名無しさん
2009/02/21(土) 02:43:120400デフォルトの名無しさん
2009/02/21(土) 02:54:240401デフォルトの名無しさん
2009/02/21(土) 03:26:36CodeWarriorというものがあってだな…
0402デフォルトの名無しさん
2009/02/21(土) 03:47:41変更日・変更者コメントは、同時進行で進んでいるソース流用プロジェクトが、
流用元の最近の変更と自分たちの変更を区別するために欲しがっていたな。
0403デフォルトの名無しさん
2009/02/21(土) 03:53:56組込のIDEには入力支援や型情報ポップアップがないって意味?
俺のとこではエディタとして別のIDE使ってたよ。組込の環境は使いにくいw
0404デフォルトの名無しさん
2009/02/21(土) 04:15:350405デフォルトの名無しさん
2009/02/21(土) 15:04:560406デフォルトの名無しさん
2009/02/21(土) 17:25:27アルゴリズムやデータ構造は知ってても、コードは読めんと言う相手と
連携しなきゃならん場合は必要だぞ。
具体的に例を挙げると、↓みたいなコードを、相手方にチェックしてもらうには
「読んで字のごとし」なコードもすごく重要。
・別言語で作ったアプリが吐いたデータを、整合性を崩さないように編集するコード
・ハードウェアを直接叩くコード
0407デフォルトの名無しさん
2009/02/21(土) 17:49:420408デフォルトの名無しさん
2009/02/21(土) 19:21:45自分の知識ですぐ分かること、ではないぞw 言語以外の知識やその行付近以外の知識を必要とする時点ですでに「すぐ分かること」ではない。
例えばこういう感じ
*((volatile char*)0xF860) = 0; //&HF860番地にゼロを書く ←無駄なコメント
*((volatile char*)0xF860) = 0; //VDPリセット ←知識があれば分かることだが役にたつコメント
0409デフォルトの名無しさん
2009/02/21(土) 19:41:39>*((volatile char*)0xF860) = 0; //VDPリセット ←知識があれば分かることだが役にたつコメント
これはコードをみればわかることじゃあないと思うな
0を入れるのか、リセットするのか、クリアするのかは、意味が少々違うからな
「文字」「文字値」「文字配列」「文字列」の違いみたいなものも結構気になる
0410デフォルトの名無しさん
2009/02/21(土) 20:10:39コードを見れば分かる無駄なコメント に対する 役立つものの例として、という意味ね
「そこにゼロ書けばVDPがリセットされる」って知識がある人には、例の2つは同じ「コードをみればすぐ分かるコメント」に見えるかもしれない
でも、>>389で言っている「コードをみればすぐ分かるコメント」ってのは前者(ゼロを書く)であって、後者(リセット)のコメントの付け方ではないよ。
という説明のつもりだったw
0411デフォルトの名無しさん
2009/02/21(土) 21:15:41#define RESET 0
*(VDP_ADDRESS) = RESET;
0413デフォルトの名無しさん
2009/02/21(土) 22:23:07#define RESET 0
#define RESET_VDP() *VDP_ADDRESS = RESET
RESET_VDP();
0414デフォルトの名無しさん
2009/02/22(日) 01:06:490415409
2009/02/22(日) 01:09:28>>413だと、いくつかのシーケンスが内蔵されているように見えるね
該当のレジスタに他の値を入れることがたびたびあって、この行でリセットをしたいなら、明示的な>>411
該当のレジスタには、他でアクセスすることがなく、ここでリセットするだけなら>>413だな
0416デフォルトの名無しさん
2009/02/22(日) 17:45:00どっかの本かWEBで、ブーリアンの引数名にはNoとかNotはつけるな
ってあったんだけど、みなさんどう思いますか?
例えばbool NoScrollとか
0417デフォルトの名無しさん
2009/02/22(日) 17:57:32賛成の反対で、これでいいのだw
0418デフォルトの名無しさん
2009/02/22(日) 18:08:30本とか読んでる訳じゃないから、俺の感覚だと…
別にbool型なんだから
NoScrollにtrue入れるか、Scrollにfalse入れるかでしょ
それなら、コード中でどう使うかで使い分ければいいんじゃない
絶対に、NoScrollを主体で判断した方がいい部分で使われるのが分っているなら
NoScrollとすれば良い
それ以外で、Scrollという状態をtrue or falseで見る使い方なら
わざわざフラグを反転させる意味にしない方か良いと思う
0419デフォルトの名無しさん
2009/02/22(日) 19:02:30どうもありがとうございます
その本だかによれば、ブーリアンは意味的に「〜する」の肯定で統一したほうが混乱が少ない、みたいなことを根拠にしてました
そうやって統一すると、何かを「する」場合はtrue、「しない」場合はfalseを指定すれば良くなる、と
マァ自分的にも個々の使い分けでいいと思いました
0420デフォルトの名無しさん
2009/02/22(日) 19:22:24直感的に、True(真)なのにNo(否定)っていうのが誤りの元にならないかってことだよね。
"できるだけ"避けるべきだとは思うなぁ
ちょっとオレが変かもしれないけど
電気ポットの注ぎ口なんかよくハッとする
「赤」なのに「出る」のが気持ち悪い
0421デフォルトの名無しさん
2009/02/22(日) 19:37:120422デフォルトの名無しさん
2009/02/22(日) 19:49:32赤=危険という風に見ればいい
0423デフォルトの名無しさん
2009/02/22(日) 20:23:15否定後禁止ルールは、isとかcanとか三人単数ルールとかと併用しないと意味不明になりがちだと思う。
その場合ならCanScrollとかScrollsとか。
0424デフォルトの名無しさん
2009/02/22(日) 20:25:59×否定後 → ○否定語
×三人単数 → ○三人称単数
0426デフォルトの名無しさん
2009/02/22(日) 22:22:510427デフォルトの名無しさん
2009/02/22(日) 22:55:000428デフォルトの名無しさん
2009/02/22(日) 23:15:36・熱いから危険だから赤
0429デフォルトの名無しさん
2009/02/22(日) 23:22:32そこは「お湯を注ごうとしてる人」とは違うアクターを想像するんだ。
例えば「ポットを運ぼうとしてる人」とか。
0430デフォルトの名無しさん
2009/02/23(月) 00:52:59わかっちゃいるんだけどね、例えば、車で
アクセルを踏むと赤いランプが点くとしたら、、、気持ち悪いよね
そんな感じ
0431デフォルトの名無しさん
2009/02/23(月) 01:06:410432デフォルトの名無しさん
2009/02/23(月) 01:19:19レスがある限りw
0433デフォルトの名無しさん
2009/02/23(月) 02:49:402ちゃん歴浅いんか?
嫌ならお前が別の話題を振ればいい。
0434デフォルトの名無しさん
2009/02/23(月) 09:35:122ちゃん歴浅いんか?
気に入らないレスならスルーしろ。
0435デフォルトの名無しさん
2009/02/23(月) 13:06:160436デフォルトの名無しさん
2009/02/23(月) 13:28:140437デフォルトの名無しさん
2009/02/23(月) 16:51:410438デフォルトの名無しさん
2009/02/23(月) 17:23:410439デフォルトの名無しさん
2009/02/23(月) 20:53:40,;'':.:. ';,,,.,.,.,.,.,;:' ';
、:´: . ':,
,':.:..:. . ':, ま、お茶でも飲んで休憩すれ。
';:.:.:.:.. / \ ':,
';::.:.:.:. . ● ● ;'
';:::.::.:. (__人__) ;'
'':;,:.:.:.:.:. . 、:' ( (
,;:'':.:.:. '::,,.,.,.,.,,.,,_ ヽ ヽ
,;':::: :: `()\; __O__ )ノ
,;' ;:.:. ;, .:.''_,.,,.,.,.,.,.,.,_,:'" \/= ̄ ̄ =ソ,フi!
,;' ;;:.:. ;, ;;'' {= = = = =イ .i!
;' ';;:.:. ;, ;:' ゙、_= = =_ノ i!
;, ';, ,; ;'  ̄ ̄ ┌―‐┐〜
;, ゙゙''''''" ; { 茶 }
:; ;'''"゙゙'';: :; ヘニニノ
:; ; ;: ; || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
':, ,; :; :; || ||
゙゙''''''''''" ゙゙''''''''''"
0440デフォルトの名無しさん
2009/02/24(火) 00:23:49命令しといて自分はやらない人につっこみ入れただけだしなあ。
0441デフォルトの名無しさん
2009/02/24(火) 00:26:100442デフォルトの名無しさん
2009/02/24(火) 00:30:510443デフォルトの名無しさん
2009/03/02(月) 01:19:09そういうヤツのコードは1関数1500行とかスパゲッティな依存関係とかすごく汚いコードだったw
そんな事書くくらいならコードの可読性をあげるコメントを書けと
0444デフォルトの名無しさん
2009/03/03(火) 01:33:42ハンガリアンみたいに詳細に説明してるサイトがないからそれしかわからん
0445デフォルトの名無しさん
2009/03/03(火) 10:05:24>パスカル記法ってただ頭を大文字にするだけ?
そんだけ。
0446デフォルトの名無しさん
2009/03/14(土) 12:19:31いちいちtypedefしてんじゃねーよカスが。
0447デフォルトの名無しさん
2009/03/14(土) 12:50:46typedefしなきゃ書けないコードを知らずに全否定するカス
0448デフォルトの名無しさん
2009/03/14(土) 15:23:25一部の人々は、typedefを広範に使用することに反対している。
ほとんどの議論は、typedefは単に変数の実際のデータ型を隠すだけであるという考えに集中する。
例えば、Linuxカーネルハッカーであり、ドキュメント作成を行っているGreg Kroah-Hartmanは、
関数プロトタイプ宣言を除いて、typedefの使用をやめさせようとしている。
彼は、typedefを使用することが、必要以上にコードを混乱させるだけでなく、
プログラマが巨大な構造体を単純な型と誤認識して使用してしまうことがあると主張している[1]。
0449デフォルトの名無しさん
2009/03/14(土) 17:34:56どこからの引用なのか書けや
0450デフォルトの名無しさん
2009/03/14(土) 18:04:54ttp://ja.wikipedia.org/wiki/Typedef#.E6.89.B9.E5.88.A4
0451デフォルトの名無しさん
2009/03/14(土) 18:17:03typedefはCとC++ではまったく事情が違う。
C++でテンプレートメタプログラミングするなら必須
0452デフォルトの名無しさん
2009/04/19(日) 16:03:420453デフォルトの名無しさん
2009/04/19(日) 22:00:520454デフォルトの名無しさん
2009/05/29(金) 15:01:49<>の中が書きにくいとか一行が長くなるとか?
0455デフォルトの名無しさん
2009/05/29(金) 15:58:010456デフォルトの名無しさん
2009/05/29(金) 21:46:05超大雑把に言うと、
データを渡すために変数が必要なように、型を渡すためにtypedefが必要だということ。
身近な例だとstd::vectorのvalue_typeとか。
0457デフォルトの名無しさん
2009/06/05(金) 03:28:55マクロも定義もしない。
リリースまで立ち会えば、あとは、プリプロセッサを通した綺麗なソースだけを
残す。
後のヤツは苦しめ。俺のときは動いたんだから、それを動かせないのはおまぃらが
ドン臭いからだ。
これが派遣渡り鳥の現実です。
0458デフォルトの名無しさん
2009/06/05(金) 23:57:54こいつ最低だな。
たいした能力も無いくせに・・・。
派遣雇うような環境なら周りはレベル低いやつばかりだろうから、自ずと自分の
能力が高いとか思いこむんだろう。
こう言うのが人生負け組、嫌われ者で、同じ所から二度と仕事の依頼がないんだろうな。
0459デフォルトの名無しさん
2009/06/06(土) 00:47:50まあネタでしょ
0460デフォルトの名無しさん
2009/06/06(土) 05:06:08メンテナンスの必要な間の雇用が保証されて給料の支払われる正社員の方はそういうメンテナンスしやすい
コードを引けば良いんだから、その分みっちり支払ってコメントかかせればいいよ。
その場限りで使い捨て搾取するんだから、その場限りのコードしか渡されないのは、やむなし。
同じところからの仕事の依頼なんてハナから期待していない。他の仕事していれば、断らざるを得ないし、
間を空けずに次の仕事を言ってくるのに派遣でつないでるようなろくでもない経営者と働くのはそもそも
イヤだしな。
ま、どうしても困ったときには呼んでくれ。土日スポット料金でおもくそ吹っかけてやんよ。
……くらいのものかな。
0461デフォルトの名無しさん
2009/06/07(日) 20:05:58このひねくれ具合、もうだめだねこりゃ。
0462デフォルトの名無しさん
2009/06/07(日) 21:31:53ドキュメントもなし、前時代のコーディング規約を押し付けて、ごてごて盛り付けていったような既存のコードの改造で、
テストまでこちらにやらせて、不具合だ未実装だと難癖付けて、ズルズル拘束しておきながら、なにげに機能追加まで盛り込んで
支払いもゴネたうえに、使い捨てるようなクライアントには、そんな対応でもしてやりたくなるわな
0463デフォルトの名無しさん
2009/06/08(月) 01:02:02(Cのプリプロセッサの事だよな?)
何もかも展開されて、これを「はい、ソースです」って提出するのはありえんと思う
がそうでも無いのか?
0464デフォルトの名無しさん
2009/06/08(月) 03:20:390465デフォルトの名無しさん
2009/06/08(月) 11:57:24間違ってるんではないの?
0466デフォルトの名無しさん
2009/06/08(月) 16:11:06メンテが必要ないプログラムってあるのか?
0467デフォルトの名無しさん
2009/06/08(月) 17:30:510468デフォルトの名無しさん
2009/06/08(月) 21:32:02社員にそれだけの能力がある会社がどれだけあるんだかw
0469デフォルトの名無しさん
2009/06/08(月) 21:46:59マ板でやれ
0470デフォルトの名無しさん
2009/06/09(火) 02:43:330471デフォルトの名無しさん
2009/06/09(火) 06:35:18一言で言えば、いろいろ。
社員だけで足りないから、外に頼む。
外に頼むと、いらんやつがもれなくついてきたりする。
システムの規模によるが、数人〜十数人規模のシステムなら
賢いところは、会社と付き合わずに、個人を特定して捕まえておく。
いいコードは、製品というより作品。
どんなにドキュメントをそろえても
作った会社にメンテを頼むより、作った個人にやらせるほうが数十倍早くて正確だから。
0472デフォルトの名無しさん
2009/07/01(水) 23:02:00フィールド変数・プライベートメソッド・
パブリックメソッド・パブリックプロパティ順にすると
宣言と使用箇所が離れて見にくいし
宣言と使用箇所を近くするにも限界がある
散らかした部屋の中みたい
使っている言語はC#
Delphiだと宣言がいやでもまとまるので見やすかった
実現部はIDE任せでアルファベット順だった
0473デフォルトの名無しさん
2009/07/02(木) 00:02:31C# の場合は、Visual Studio のクラスビューの並びに合わせてる。
0474デフォルトの名無しさん
2009/07/02(木) 00:48:06決めてしまえば迷うこともないかな、やってみる
0475デフォルトの名無しさん
2009/07/03(金) 13:15:120476デフォルトの名無しさん
2009/07/03(金) 18:34:59書くときは気の向くまま、というと変だが、気にしないで書いて、あとで整形するから気にしない。
0477ゴロゴロ
2009/09/11(金) 21:12:39<ABC> と <abc> のどっちがいいと思いますか?
どっちが一般的でしょうか?
0478デフォルトの名無しさん
2009/09/11(金) 23:06:19XML のタグは大文字・小文字を区別するから、どちらか
一方に統一するのではなく、Pasacl 記法で命名してる。
タグの大文字小文字の区別、使える文字を教えて
http://www.atmarkit.co.jp/fxml/askxmlexpert/011tagname/11tagname.html
もし一方に統一する必要があるなら、XHTML などに倣っ
て小文字にするだろう。
0479デフォルトの名無しさん
2009/09/12(土) 13:26:03それとも一個汎用的なの作ったら、あらゆる言語でそれをつき通すもんなのかな
0480デフォルトの名無しさん
2009/09/12(土) 22:16:400481デフォルトの名無しさん
2009/09/13(日) 23:42:41似た様な言語なら流用するじゃないの。
例えば、Javaのコーディング規約をC#に流用するとか。マイクロソフト標準とちとずれるかもしれないけど。
0482デフォルトの名無しさん
2009/10/19(月) 01:40:220483デフォルトの名無しさん
2009/10/19(月) 01:46:550484デフォルトの名無しさん
2009/10/19(月) 16:17:04オレはそればっかり
一方、変数は頭大文字
0485デフォルトの名無しさん
2009/11/25(水) 18:41:36C++ でboolのメンバ変数を設定・参照したいんだけど
1)
void SetEnable(bool value);
bool GetEnable();
2)
void SetEnable(bool value);
bool IsEnabled();
3)
void Enable();
void Disable();
bool IsEnabled();
4)
bool Enable();
void Enable(bool value);
それぞれの長所と短所を教えてくらさい
一番長所が多いOR一番短所が少ないやつにします
0486デフォルトの名無しさん
2009/11/25(水) 19:27:17Enableって聞くと単にbool型変数の値を変更するだけじゃなく、有効にするための処理も含まれてると想像するけど。
それなら3)。
単にbool型変数の値を変更するだけなら1)かなぁ。
0487デフォルトの名無しさん
2009/11/25(水) 20:21:040488デフォルトの名無しさん
2009/11/25(水) 20:40:510489デフォルトの名無しさん
2009/11/26(木) 01:05:56> C++ でboolのメンバ変数を設定・参照したいんだけど
実装から名前を決めようなんて考えてる時点で根本的に間違ってる。
0490デフォルトの名無しさん
2009/11/29(日) 21:04:225)
bool set(int id, bool val);
bool get(int id);
1〜4 は変数増えたら API も増えるだろ。
生成時間もメモリ消費量も無駄に増える。
0491デフォルトの名無しさん
2009/11/29(日) 21:06:01せめてidはenumにしろ。
0492デフォルトの名無しさん
2009/11/29(日) 21:15:44ただ、enum にするとコンパイラの最適化で short に
されちゃったりすることがある。 組み込みの armcc とか。
複数のコンパイラが混在する場合は int か u32_t
みたいに CPU で決まる型にしておくのがいいよ。
0493デフォルトの名無しさん
2009/11/29(日) 23:09:000494デフォルトの名無しさん
2009/11/30(月) 16:51:000495デフォルトの名無しさん
2009/11/30(月) 16:56:08enumの肝は、妙なidをコンパイルエラーにしてくれるところジャマイカ?
0496デフォルトの名無しさん
2009/11/30(月) 17:02:08C++だとチェック入るけど、Cだと実質整数だったような。
0497デフォルトの名無しさん
2009/11/30(月) 18:23:34と思って gcc で試したけど、enum の型に無茶な数値入れても
警告最大だろうがなんだろうが何も言われなかった。
0498デフォルトの名無しさん
2009/11/30(月) 22:14:10lintなら警告するんだけど。
0499デフォルトの名無しさん
2009/12/02(水) 01:02:07フラグに 0x80000000 立てるのが大好きな人にはウケが悪い。
みんな、ちゃんと -Wextra つけてるか?
if (err < 0) って書いて err が unsigned int
だったりすると恥ずかしいぞw
0500デフォルトの名無しさん
2009/12/02(水) 20:54:140501デフォルトの名無しさん
2009/12/02(水) 22:23:240502デフォルトの名無しさん
2009/12/03(木) 01:22:31if (err != E_OK) とか。
0503デフォルトの名無しさん
2009/12/03(木) 02:14:260504デフォルトの名無しさん
2010/03/05(金) 15:28:36(ネストしてるnamespaceで外側のスコープの解決とかも)
1. 出来るだけ解決演算子を付ける
2. 出来るだけ解決演算子を付けない
3. 名前が重複しがちな関数とか、特定のものだけ注意して付ける
俺はあんまりつけてないんだけど、何にでも付けてる人もいるし、
付けた方がいいよってガイドラインでもあるのかね。
自分の中での取り決めとか、例外とかもあれば教えてくれるとうれし
0505デフォルトの名無しさん
2010/03/06(土) 01:07:481 はウザすぎ、 2 はちょっとウザいことがあるかもしれない、 3 はスタイルとして成立してない。
グローバルスコープ解決演算子をどうする、とか考えるんじゃなくて、要らないものが
書いてあって見づらいなら消せばいいという当たり前の話で済まないのか?
0506デフォルトの名無しさん
2010/03/06(土) 17:15:16つか、グローバルはご先祖様みたいなもんで身内と
同等の扱いだろ。
どうせ、頻繁に :: つけないといけないような実装は
他でも override とか static 忘れでバグ頻発するような
レベルのコードしか書けない奴。
0507デフォルトの名無しさん
2010/03/07(日) 01:01:21インテリセンス使ってる時は付けた方が便利ゆえ、
付けない事を強制するのもどうかと思う。
そもそも強制したってメリットの無いルールを強制するのは
労力の無駄遣いだと思う。
コンパイラ等でチェックできるならばしても良いとは思うけど。
0508デフォルトの名無しさん
2010/03/07(日) 21:27:31つけないけど利便性があがるんなら
つけてもいいよ。
でも Cライブラリや Win32 API と同じ名前の関数を
自分のクラスに作るのは許さん。 たとえ open/close であっても。
0509デフォルトの名無しさん
2010/03/08(月) 00:49:410510デフォルトの名無しさん
2010/03/08(月) 04:07:55お前とは一緒に仕事したくないわw
0511デフォルトの名無しさん
2010/03/08(月) 08:47:230512デフォルトの名無しさん
2010/03/09(火) 22:22:49たまに m_pMember->Hoge(); を Hoge(); と短縮するのが目的みたいな
ラッパー関数が存在するが、正直止めて欲しい。
0513デフォルトの名無しさん
2010/03/09(火) 22:58:130514デフォルトの名無しさん
2010/03/10(水) 01:55:58CLibrary::open(char *file) {
return open(file, O_RDONLY);
}
みたいなのを書く奴がおるんよ。。。
0515デフォルトの名無しさん
2010/03/10(水) 03:06:15そのコードの何が問題?
0516デフォルトの名無しさん
2010/03/10(水) 03:44:26やはりお前とは仕事したくないでござる
0517デフォルトの名無しさん
2010/03/10(水) 07:29:320518デフォルトの名無しさん
2010/03/10(水) 07:49:220519デフォルトの名無しさん
2010/03/10(水) 07:53:57リファクタリング読んだ?
0520デフォルトの名無しさん
2010/03/10(水) 10:30:12SendMessageとかいう関数を作ったら、実はSendMessageWって名前になってました、とかあるよね。
0521デフォルトの名無しさん
2010/03/11(木) 01:03:03class Moge{
public: void func();
};
class Hoge {
Moge* m_pmoge;
private: void func(){ m_pmoge->func(); } //←こーいうの
};
Hoge が func() の主語として適切なら良いが、そうじゃなければ
リファクタリング云々以前に、オブジェクト指向的に間違ってる。
Hogeを主語とすると不自然なものは、privateであってもメンバに加えるべきじゃない。
どうしてもラッピングしたいなら、Mogeのエイリアスとなるクラスを用意して、
そのクラスを使ってやるべき。
0522デフォルトの名無しさん
2010/03/11(木) 01:08:460523デフォルトの名無しさん
2010/03/11(木) 01:18:58おいおい、このご時勢にどんだけ時代遅れなんだよ
0524デフォルトの名無しさん
2010/03/11(木) 01:22:11伝説級の迷言
デザパタの半数以上がオブジェクト指向的に間違ってるらしい。
0525デフォルトの名無しさん
2010/03/11(木) 01:25:24ダメだな。 基本がなってない。
0526デフォルトの名無しさん
2010/03/11(木) 02:37:28そのスタンスで何か一つでもアプリを作れたら報告してください。
最終的にあらゆるオブジェクトがお互いの参照を持たないことになるわけですが。
0527デフォルトの名無しさん
2010/03/11(木) 09:02:05委譲って言葉を知ってるか?
0528デフォルトの名無しさん
2010/03/11(木) 09:41:110529デフォルトの名無しさん
2010/03/11(木) 22:32:310530521
2010/03/11(木) 22:45:42>Hogeを主語とすると不自然なものは、privateであってもメンバに加えるべきじゃない。
不正確で誤解を招く表現だったので訂正&補足。
Hogeを主語とすると不自然な「関数」は、privateであってもメンバに加えるべきじゃない。
より適切なクラスに持たせて、そのクラスのオブジェクトなり参照なりを持つようにすべき。
一応文脈的に「もの」=「関数」と読み取って欲しいところだけど、
暴論過ぎますな。すんません。
0531デフォルトの名無しさん
2010/03/11(木) 23:41:150532521
2010/03/12(金) 01:25:02ここじゃなかったら何だろうね。
もしかしたら>521のようなコードを、「全て」否定してると勘違いしてる?
否定してるのは「クラスが関数の主語として不適切な場合」だけだけど。
ProxyやFacadeのようなパターンは否定していない。
(これらは委譲先のクラスの別称あるいは総称であり、主語として適切)
0533521
2010/03/12(金) 01:30:03もっともProxyやFacadeのようなパターンの場合、>521のようにラッパー関数が
privateになる事はほとんど無いと思うけどね。
0534デフォルトの名無しさん
2010/03/12(金) 04:55:35どんどんトンチンカンになっていく
0535デフォルトの名無しさん
2010/03/12(金) 11:19:06同僚にお前って鳩山系だよなって言われない?
0536デフォルトの名無しさん
2010/03/12(金) 14:32:080537デフォルトの名無しさん
2010/03/12(金) 15:28:04だとしたら、なぜ>>514を良くないと考えるのか、HogeとかMogeとかfunc抽象的な話をせずに、
>>514のコードがどのような理由で良くないのか、ずばっと主張してくれ。
0538デフォルトの名無しさん
2010/03/12(金) 16:06:270539デフォルトの名無しさん
2010/03/12(金) 16:36:10ユーティリティクラスの全否定にしか見えんが
0540デフォルトの名無しさん
2010/03/12(金) 18:15:00open()がコードにあちこち登場して、なおかつ"/dev/物理デバイス"をopen()するような
ことだったら目も当てられない(テスト的に)。
0541521
2010/03/12(金) 20:38:38514≠521ですが何か。
514とは違う切り口で519の「無駄なたらい回し」の例を挙げてるだけなのだが。
いまいち理解を得られてないようなので、例を少し具体的にしてみた。
class Data {
public: void SaveToFile() {
open();
write();
close();
};
private:
void open(){ m_pfile->open(); } //←こーいうのが
void write(){ m_pfile->write(); } //←無駄だと
void close(){ m_pfile->close(); } //←言いたい
File* m_pconfigfile;
};
open/write/closeは厳密にはFileに対する操作であるのだから、
Dataのメンバに加えるのは、そもそもオブジェクト指向的に間違ってる。
0542デフォルトの名無しさん
2010/03/12(金) 22:22:39それどこの誰がオブジェクト指向違反だって言ってるの?
そのオブジェクト内でしか使わない、昔の C で言うところの static 関数みたいな使い方も
普通によくされてることだし、教科書でも別にあーだこーだ言ってるものは見たことないが。
0543デフォルトの名無しさん
2010/03/12(金) 22:23:55オブジェクト指向的に間違っているのとは違うだろ。
public/protectedでopen/write/closeを公開するのなら
間違ってるかどうかの議論になるが。
0544543
2010/03/12(金) 22:24:510545デフォルトの名無しさん
2010/03/12(金) 22:30:44決め打ちで引数入れて覆い隠してしまうことならあるな。
>>541も抽象化と言われれば、まあそうなのかと思えたりもするかも。
確かに基本無駄だろうな。
例えばconfig_openとかの名前にするのはどう思う?それもだめ?
あと、サブクラスでオーバーライドする用なんて可能性はどう?
(厳しい言語はprotectedじゃないとダメなのかな?)
0546543
2010/03/12(金) 22:35:50そもそもWrapperの認識が俺とは違う。
普通、Wrapper関数とかWrapperクラスというのは、AがBを直接呼ばないように(呼ばなくて良いように)
CにAが使うI/Fを定義して(あるいは、Bが提供する機能をCに定義して)、CのみがBにアクセスするよう
にするのを言うんじゃないか?
つまり、Wrapper関数/クラスCはAとBの間に構築するもので、AとBの外側にあるもの。
自クラス内のprivateメソッドにopenを分離するのをWrapすると言うのは聞いたことがない。
委譲の時にもWrapという単語を使うのは見たことないなぁ。
0547デフォルトの名無しさん
2010/03/12(金) 22:50:53例えば、数行からなる、複数メソッドで使用するdatabseのopen/write/closeをprivateメソッドとして実装するのも
オブジェクト指向的に間違っているという主張?
それとも単に1行だからNGってこと?
0548デフォルトの名無しさん
2010/03/12(金) 22:52:40はじめて聞いたわw
やっぱ自称オブジェクト指向技術者はピンキリだね。
0549512=521=541
2010/03/13(土) 03:41:50>例えばconfig_openとかの名前にするのはどう思う?それもだめ?
open/write/close は否定しているが、SaveToFile は否定してない。が答え。
>あと、サブクラスでオーバーライドする用なんて可能性はどう?
541の例で言うと、Fileクラスを派生させてオーバーライドする形式が一番好ましいかと。
>つまり、Wrapper関数/クラスCはAとBの間に構築するもので、AとBの外側にあるもの。
だからこそopen/write/closeがData内にあるのは変という主張なんだけど。
>547
>例えば、数行からなる、複数メソッドで使用するdatabseのopen/write/closeを
>privateメソッドとして実装するのもオブジェクト指向的に間違っているという主張?
そのクラスとの関連が強い処理で、分離するには粒度が小さくなりすぎる場合「とか」は、
無理して分離する必要は無いと思う。(他にも例外はあるかと)
ただし>541みたいに、必要性が薄いのに分離されてるものを別のクラスに引き込むのは
当然駄目/無駄だと思う。
0550デフォルトの名無しさん
2010/03/13(土) 04:19:20俺は>>541のprivate methodのようなものはWrapper関数とは俺なら言わないよってだけのことで、
Wrapper関数だからclass Dataの外側に持って行けとは言ってないよ。
Wrapper云々については、俺とは認識が違うなぁというだけの話なので、今回の本筋とは全く関係ないよ。
> そのクラスとの関連が強い処理で、分離するには粒度が小さくなりすぎる場合「とか」は、
> 無理して分離する必要は無いと思う。(他にも例外はあるかと)
えーと、分離すべきかどうかの話じゃなくて、オブジェクト指向的に間違ってるかどうかという質問
なんだけど。
databseへのアクセスを提供するクラスではなくて、それを使用するクラスでdatabaseアクセス
部分をprivateメソッドに抽出することもオブジェクト指向的に間違っているのかという質問。
> ただし>541みたいに、必要性が薄いのに分離されてるものを別のクラスに引き込むのは
> 当然駄目/無駄だと思う。
うーん、Fileの場合は間違っていて、databaseの場合は無理して分離すべき必要が無いというのが
良くわからん。
0551デフォルトの名無しさん
2010/03/13(土) 04:51:57> 541の例で言うと、Fileクラスを派生させてオーバーライドする形式が一番好ましいかと。
わけがわからん。
class DerrivedFile {
public:
void Open() { open(); }
void Wite() { write(); }
void Close() { close(); }
}
を作れってこと?
これでも状況は全く同様で、
class Data {
public: void SaveToFile() {
open();
write();
close();
};
private:
void open(){ m_pfile->Open(); }
void write(){ m_pfile->Write(); }
void close(){ m_pfile->Close(); }
DerrivedFile* m_pconfigfile;
};
になるだけなんですが。で、今度は何を派生させますか?
0552デフォルトの名無しさん
2010/03/13(土) 05:54:34>>549の論理で徹底するとクラスの数は無限大に発散する
0553デフォルトの名無しさん
2010/03/13(土) 06:08:04それが無駄なのは明白だが、単にその例に限定して無駄なだけでは?
オブジェクト指向的に間違っていると言う話はどこへ?
Dataがセーブ先のpathを自分で管理しなければならない場合はどう実装すれば良い?
結局例も挙げられないほど自分が何言ってんのか理解してないとしか思えない。
0554デフォルトの名無しさん
2010/03/13(土) 06:08:340555デフォルトの名無しさん
2010/03/13(土) 06:10:040556デフォルトの名無しさん
2010/03/13(土) 06:17:40ただし、>>Hogeを主語とすると不自然な「関数」は、privateであってもメンバに加えるべきじゃない。 には誰一人として同意しないだろう
0557デフォルトの名無しさん
2010/03/13(土) 06:25:20512=521=541は数万ステップのコード書いた事あるか?
0558デフォルトの名無しさん
2010/03/13(土) 06:54:17次はそんな無意味なコードじゃなくて
オブジェクト指向的に間違ってることを表すコードをお願いします
少なくともその無意味なコードはオブジェクト指向的に間違ってるとはいえません
0559デフォルトの名無しさん
2010/03/13(土) 06:57:02変わらない気がする。
普通に何が問題なのか(どんな困ったことが起こるのか)を示してくれればいいんだよ。
0560デフォルトの名無しさん
2010/03/13(土) 07:01:380561デフォルトの名無しさん
2010/03/13(土) 07:14:220562デフォルトの名無しさん
2010/03/13(土) 09:11:34一見わかってるふうだからたちがわるい。
0563デフォルトの名無しさん
2010/03/13(土) 09:21:22簡単な見分け方がある
「〜は駄目だ」と言う奴は99%役立たずの勘違い馬鹿
コイツの戯言は何一つ聞き入れる必要が無い
「そこは〜にすると良い」と言える奴は99%有益な意見を持つ人間
この見分け方は別にソフトウェア業界に限らない
0564デフォルトの名無しさん
2010/03/13(土) 19:34:45お前は駄目だ
0565545
2010/03/13(土) 20:12:29長文ですまん、横道ですまん、そしてprivateとかprotectedとか無視してすまんが、
例えば、下の2通りの派生の仕方なら下の方が好ましいということ?
で、根拠はFileはopenするものだが、Dataはopenするものではない、SaveToFileならToFileとあるのでより正確、ということ?
(ちなみにconfig_openはOKなんだよな?)
メソッド名が適切ならどっちでもあり?
class DataWithLog : Data {
void open(){ log("open"); super->open(); }
void write(){ log("write"); super->write(); }
void close(){ log("close"); super->close(); }
};
class FileWithLog : File {
void open(){ log("open"); super->open(); }
void write(){ log("write"); super->write(); }
void close(){ log("close"); super->close(); }
};
privateとはいえ、そこにこだわりたい気持ちは分かってきた気がする。命名について考え直すいい機会になった。
少し違うがその場での構造化のためにクラスにメソッドを作る違和感というのは時々感じてた。
クラスの中に、そのクラスしか使わないけどクラスメソッドでもインスタンスメソッドでもないただの関数が書ければそれがいいのかもな。
private:の他にfunction:みたいなのがあれば個人的にすっきりするかも。
なんにしろ、最初から完璧は難しいと思うから、名前は後からでも変えられると気楽に考えてみてはどうよ。
"達人自身にルールを作らせて、ルールに従わせると逆に作業効率が下がった"みたいな話もあるらしいぞ。
出典はたしかリファクタリングウェットウェア。ときには型を破ることも大切らしい。
0566デフォルトの名無しさん
2010/03/13(土) 20:27:400567512=521=541=549
2010/03/13(土) 21:00:37漏れが言いたいのは、まず↓は明らかに無駄だって事。
class Data {
public: void SaveToFile() {
open();
write();
close();
};
private:
void open(){ m_pFile->open(); } //←こーいうのが
void write(){ m_pFile->write(); } //←無駄だと
void close(){ m_pFile->close(); } //←言いたい
File* m_pFile;
};
だけど、↓は辛うじて許容されると思う。(設計の良し悪しは別として)
void opendata(){ m_pFile->open( m_datafile_path ); }
両者の違いは何か?と言う理由を考えたとき、一番単純明快な理由が
前者はオブジェクト指向的に間違ってるという事。
open/write/closeは明らかにFileに対する操作であって、
Dataに対する操作ではない。Dataだけが行う操作でもないし、
DataはFileの別称または総称でもない。
一方、後者はDataだけが行う操作。主体はデータファイルだから
原則を徹底するなら別クラスとして切り離すべきだけど、
その場合クラスの粒度が細かくなりすぎる。
一言でまとめるなら、「無駄なたらい回し」は何を持って無駄か?ってのは、
オブジェクト指向的にどこまでが妥当か?で判断すりゃ良いんじゃないかと
言いたかった。
0568デフォルトの名無しさん
2010/03/13(土) 21:06:340569デフォルトの名無しさん
2010/03/13(土) 21:24:38541の例は単純に↓がベストであると考えている。
open/write/closeをラップしたいなら、Fileをラップするクラスを作り、File*を置換する。
class Data {
public: void SaveToFile() {
//省略
};
private:
File* m_pconfigfile;
};
>552
>クラス無駄にポコポコ作れば俺オブジェクト指向やってるカッケーって脳汁でまくる知的障害者なんだろ
それは549で否定してるがな。
粒度の小さいクラスは、妥当なクラスに併合すれば良い。
でも>541みたいなのはそもそもopen/write/closeをラップする意味がないし、
併合先を間違えているとも言える。(Fileに併合して消滅させるべき)
>557
>Dataクラスが実用レベルまで拡張されると、>>541の例のメンバが十分な正当性を持ち始めるんだがな。
それはない。
open/write/closeにDataクラス固有の処理が追加されるならまだわかるけど。
でもその場合も必要になった時点で追加すれば良い。
>565
ルールを押し付けたいのではなく、原則はこうだよねというノリで書いております。
(如何なるルールにも例外はあると思う。)
>566
Dataに「Open」という関数を追加するのがNGなのではなく、
余所で定義済みの関数を、わざわざData内で定義しなおしてるのがNG。
「データファイルを開く」というDataクラス固有の処理ならばOK。
0570デフォルトの名無しさん
2010/03/13(土) 21:30:39> open/write/closeにDataクラス固有の処理が追加されるならまだわかるけど。
> でもその場合も必要になった時点で追加すれば良い。
なら単に例のまんまの状態では関数化が要らないっていうだけのあたりまえの話じゃないか。
オブジェクト指向とか持ち出す意味がわからん。
0571デフォルトの名無しさん
2010/03/13(土) 21:49:27全く無駄な固有例を挙げて無駄だろ?って言ってるだけで
オブジェクト指向のオの字すらも関係ないな
固有例であってケースすら示してない
0572デフォルトの名無しさん
2010/03/13(土) 21:50:04>なら単に例のまんまの状態では関数化が要らないっていうだけのあたりまえの話じゃないか。
>オブジェクト指向とか持ち出す意味がわからん。
当たり前の話というのはその通り。ただ、世の中にはそれを当たり前と思わない人達も居て、
541のような実装がまかり通っている。
(実際、今あーいうコードと格闘中。)
なので別の基準としてオブジェクト指向を持ち出してみた。
open/write/closeはその内容を見る限り、Fileに対する操作であって、
Dataに対して行う操作とは違う。
だからオブジェクト指向的にも間違ってる(妥当な実装ではない)、って事で、
これもごく当たり前な事を言ってるつもりなんだが。
0573デフォルトの名無しさん
2010/03/13(土) 21:55:55だから何でオブジェクト指向を持ち出すんだよ?
単に無駄だってことを説明すれば十分だろ?
そんなコードを書く奴はオブジェクト指向的に正しいかどうかなんてなおさら興味ないよ。
0574デフォルトの名無しさん
2010/03/13(土) 21:59:23>567の違いが説明しやすいと思うんだが。
実際、無駄/無駄じゃないだと>567の後者は良くて前者が駄目だという基準が曖昧で
中々理解を得にくいが、オブジェクト指向的に考えると両者に明確な差が出て来るんで
(ちょっとだけ)納得して貰い易くなる。
0575デフォルトの名無しさん
2010/03/13(土) 22:00:51お前さ、バカが書いたコードで苦しんでるのは分かったから
そのイラツキをオブジェクト指向に対する意味不明な誤解を広める方向に向けないでくれ
主語がなんだとかprivateに持つべきでは無いだとか、何も関係ないだろ?
0576デフォルトの名無しさん
2010/03/13(土) 22:03:44> (ちょっとだけ)納得して貰い易くなる。
と勝手に思っていたが、このスレで実はそうはいかないと学習できたわけだ。
まぁがんばれよ。
0577デフォルトの名無しさん
2010/03/13(土) 22:09:08馬鹿の書いたコードの無駄さと、お前のムカツキを表すためだけに
何十年もかけて多くの人間が懸命に広めてきた共通概念を都合の良い様に捻じ曲げて使うな
どこからどう見ても全然関係ないだろ
0578デフォルトの名無しさん
2010/03/13(土) 22:12:220579デフォルトの名無しさん
2010/03/13(土) 22:12:28>主語がなんだとかprivateに持つべきでは無いだとか、何も関係ないだろ?
主語が云々は、凄く重要な判定基準だと思うんだが違うのか。
あと「privateに持つべきでは無い」とは言ってない。「privateであっても」だ。
また「持つべきでは無い」であって「持ってはならない」とは違う。
ニュアンスの違いも読み取って欲しい所。
0580デフォルトの名無しさん
2010/03/13(土) 22:15:430581デフォルトの名無しさん
2010/03/13(土) 22:20:32オレジェクト志向のお話はもうお腹いっぱいです
0582545
2010/03/13(土) 22:33:10命名と意味のない拡張と、どっちを問題にしたかったんだ?
あるいは両方?
・命名が良くない
継承(is a)とコンポジション(has a)では、元のクラス(インスタンス)のメソッドを拡張するとき
命名の仕方はそれぞれで変えたほうがよい。それはprivateでも一貫させる。主語が大事。
・意味のない拡張がよくない
所有しているインスタンスのメソッドをそのまま呼び出すだけでは意味がない。
publicなら委譲だが、privateでは無意味。
0583デフォルトの名無しさん
2010/03/13(土) 22:35:28多分この子が言いたいのは後者でしょ。
そして持論を補強したくて無理に前者を持ち出してみたら袋叩きにあったと。
0584デフォルトの名無しさん
2010/03/13(土) 22:47:10>>557だが、お前さんは「とにかく否定したい病」の患者なのかい?
>Dataクラスが実用レベルまで拡張されると、>>541の例のメンバが十分な正当性を持ち始めるんだがな。
↓
>それはない。
↓
>open/write/closeにDataクラス固有の処理が追加されるならまだわかるけど。
「拡張」の意味を知らないのか?
「持ち始める」のニュアンス(笑)を捉える力が無いのか?
そもそもオブジェクト指向的な概念の話をしているという文脈が理解できていないのか?
>>557のケースをキッパリ否定した次の行で、>>557のケースの存在を認めるって何の意図があったの?
0585デフォルトの名無しさん
2010/03/13(土) 22:56:29無駄って言いたいのはもう分かってるからさ
お前さんの主張が書かれてるソースをお願い
オブジェクト指向としてうんたらかんたらって言ってるんだから
俺様が今考えたスタイルですってわけじゃないんだろう?
0586デフォルトの名無しさん
2010/03/13(土) 23:06:270587デフォルトの名無しさん
2010/03/13(土) 23:12:31後者。「命名が良くない」自体は否定しないけど、こちらの意図とは違う。
>583
「前者」を「オブジェクト指向」に置き換えれば概ね当たり。
単に無意味である以上に、純粋にFile操作するだけの関数が
Dataのメンバであるのは間違いだという主張。
「間違い」は言い過ぎだとしても、オブジェクト指向的に
違和感があると思うんだが。
多少のツッコミは予想していたが、正直>575-577,580-581は
熱くなりすぎじゃないかと思った。
何か気に触る事言った?
0588デフォルトの名無しさん
2010/03/13(土) 23:17:140589デフォルトの名無しさん
2010/03/13(土) 23:18:58× オブジェクト指向的に違和感がある
○ オレ的に違和感がある
0590デフォルトの名無しさん
2010/03/13(土) 23:19:01したり顔で大嘘吐いてるのが気に障る
0591デフォルトの名無しさん
2010/03/13(土) 23:20:26> 「前者」を「オブジェクト指向」に置き換えれば概ね当たり。
だからどうしてそこを置き換えないといけないんだよw
わざとやってるのか?
0592デフォルトの名無しさん
2010/03/13(土) 23:25:48>「持ち始める」のニュアンス(笑)を捉える力が無いのか?
拡張が必要なら、拡張する時点で追加すれば良いけど、>541の時点では
追加する必要は全く無いというのがこちらのスタンス。
同じスタンスで言ってるなら>577は同意。
ただ違う事を言ってる可能性もあるんで、ああ書かせて貰った。
0593デフォルトの名無しさん
2010/03/13(土) 23:31:35>582の「前者」は意図してないと断ってるじゃん。
それに>583を↓と置き換えて、こうすれば概ね当たりだと言って何が問題?
>>582
多分この子が言いたいのは後者でしょ。
そして持論を補強したくて無理にオブジェクト指向を持ち出してみたら袋叩きにあったと。
0594デフォルトの名無しさん
2010/03/13(土) 23:38:07・・・
「拡張」されたら「持ち始める」といってるのに、お前さんが同じ事だと理解出来る為にはこれ以上何の補足が必要なんだ?
0596デフォルトの名無しさん
2010/03/13(土) 23:43:47>>593が一番国語力ありませんがなww
自分がコミュニケーション能力不足なのを人のせいにせんといてwww
0597デフォルトの名無しさん
2010/03/13(土) 23:52:43人のせいにばかりしてるから
そんなに日本語が不自由なんだ
0598デフォルトの名無しさん
2010/03/13(土) 23:56:11いや、理解したからこれ以上の補足は不要。
こちらの読解力が足りていなかったと言う事で。
拡張すると意味を持ち始めるから、それに備えて実装しておく意味がある、
という主張かと思ってしまっていた。
0599デフォルトの名無しさん
2010/03/13(土) 23:59:18日本語不自由なのは認める。
あと上から目線っぽいのは、2chだからってのと、
口調を突然変えるのもどうかと思ったから。
不評のようだから変えます。
0600デフォルトの名無しさん
2010/03/14(日) 00:03:50オブジェクト指向の下りは全面撤回ということでおk?
0601デフォルトの名無しさん
2010/03/14(日) 00:10:42いや、撤回はしません。
至らぬ所があると思うんだったら、ツッコミ入れてくれれば、
納得してくれるまで説明しますよ。
ただし煽りや的外れすぎ等で回答しずらいのはスルーさせて貰います。
0602デフォルトの名無しさん
2010/03/14(日) 00:15:47貴方の説明は要らないんで、同内容が書かれていた文献を教えてください。
0603デフォルトの名無しさん
2010/03/14(日) 00:28:20オブジェクト指向的に間違っていると言うのには全く持って同意できない
俺ルールじゃないと言うのなら絶対に参照元があるはずだし、それを示せば一発でしょ
0604デフォルトの名無しさん
2010/03/14(日) 00:36:510605デフォルトの名無しさん
2010/03/14(日) 00:50:06「無駄でなくなった」瞬間にオブジェクト指向的に正しくなる
このこじ付けには一切正統性が無く、意味不明です。
0606デフォルトの名無しさん
2010/03/14(日) 01:12:11そのインターフェースがクラスに相応しいかどうかは
実装に依存する、ということなのか?
オブジェクト指向的に考えて
0607デフォルトの名無しさん
2010/03/14(日) 01:16:27オブジェクト指向的に考えて
0608デフォルトの名無しさん
2010/03/14(日) 01:28:060609デフォルトの名無しさん
2010/03/14(日) 02:24:13自分なりの解釈に基いて書いているので、コレという「ソース」はありません。
逆にこちらが間違っていると断言できるソースがあるなら示して下さい。
>606,607
「privateであっても」の部分が引っかかるというなら、
まずその部分は取っ払って考えて下さい。
(例えば>541のopen/write/closeは「Data」の操作と言えますか?)
オブジェクト指向的に相応しくないメンバであるなら、
privateであっても極力排除した方が良いと思いますが。
privateなら良しとするべき理由があるならともかく。
0610デフォルトの名無しさん
2010/03/14(日) 02:31:41privateにすれば無問題というのは、オブジェクト指向プログラミングという
技法的には間違ってないと思うけど、思想的には間違っているはず、
と言った方が伝わるでしょうか。
>605
無駄かどうかとは別の角度、つまりオブジェクト指向的に妥当か否かでも
判断できるよねと言う話であって、両者をこじつけたい訳じゃありません。
こじつけて語ってしまった部分もあるかもしれませんが。
0611デフォルトの名無しさん
2010/03/14(日) 02:44:15「オブジェクト指向的に間違っている」というのが
たとえば↓ここらへんにある内容のどれに反しているというのか、挙げてみせてくれないか?
http://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91
> オブジェクト指向的に相応しくないメンバであるなら、
> privateであっても極力排除した方が良いと思いますが。
そうしないと、どんな困ったことが起こるというの?
0612デフォルトの名無しさん
2010/03/14(日) 02:45:32悪魔の証明を求めないで下さい。
こちらは、そんな寝ぼけた主張をしている文献があるはずが無いと言ってるんです。
なにを言われてるか理解できていますか?補足が必要ですか?
0613デフォルトの名無しさん
2010/03/14(日) 03:25:04>そうしないと、どんな困ったことが起こるというの?
privateならOKとか言い出すと、例えば全ての関数を
1個のクラスにprivateメンバとして詰め込んだ実装も
オブジェクト指向的に間違いじゃないと言えてしまいますが。
privateであっても「そこにあるべきと言えないもの」は極力分離すべき、
というのが原則で、クラスの粒度が過度に小さくなるのを防ぐ、
等の理由があるなら例外として認められる、というのが
オブジェクト指向的に正しい考えかただと思いますが違うんで?
0614デフォルトの名無しさん
2010/03/14(日) 03:44:49本質とは全然関係無い話なんで、勝手にすればいいとされています
>>613はオブジェクト指向を全然理解せず、実装に引きずられ過ぎです
書籍は1冊も読んだ事が無いと容易に伺えます
>>613にはオブジェクト指向を語る資格がありません
0615デフォルトの名無しさん
2010/03/14(日) 03:47:33611じゃないけど、その例なら個人的にはありだな。
そのクラスでしか使わないものを、そのクラスに閉じ込めておくのは
他で使われる心配をしなくて済んでいいと思うぞ。
その関数を修正するとき、そのクラスだけ意識すればよくなる。
privateのいいところだな。
0616デフォルトの名無しさん
2010/03/14(日) 03:48:24おまえ隠蔽の意味が全然分かってないだけ。
>privateならOKとか言い出すと、例えば全ての関数を
>1個のクラスにprivateメンバとして詰め込んだ実装も
>オブジェクト指向的に間違いじゃないと言えてしまいますが。
実装としてどうなんだ?と言う話で、オブジェクト指向的にはどこにも間違いが見当たらない。
0617デフォルトの名無しさん
2010/03/14(日) 04:03:090618デフォルトの名無しさん
2010/03/14(日) 04:11:30> オブジェクト指向的に間違いじゃないと言えてしまいますが。
あぁそうだ。そしてそう言えるとしても誰も困らない。
1個のクラスにすべて詰め込んだ実装はいろいろとマズイわけだが、
それはオブジェクト指向とは関係なく説明できる。
> オブジェクト指向的に正しい考えかただと思いますが違うんで?
何を聞いても最終的にオブジェクト指向(しかも脳内)しか出てこない
のもおかしい。その先にある具体的な利点や解決される問題点を示す
ことができないのなら、そんなオブジェクト指向には何の意味も無い。
0619デフォルトの名無しさん
2010/03/14(日) 04:17:46だよなw
何を聞いても最終的には「俺の中のオブジェクト指向ではそれは正しくない」で話が終わってしまうw
0620615
2010/03/14(日) 04:31:48全てのってそのクラスしか無い状態か。
いままでprivateの外にいた奴らは、追い出せばいいんじゃないか?
・・・また読み間違えてる気がする。
0621デフォルトの名無しさん
2010/03/14(日) 05:12:420622デフォルトの名無しさん
2010/03/14(日) 06:53:58言ってしまえばオブジェクト指向の要点なんて情報のカプセル化しか無いだろうに、何でこんな酷い勘違いが出来るんだか・・・
なんというか、数の数え方も知らずに数学について語ってるみたいな奴・・・
0623デフォルトの名無しさん
2010/03/14(日) 08:43:20ちょっと前まではそういう人たちは XP に移ってたけど、今はどこで何してるんだろう?
0624デフォルトの名無しさん
2010/03/14(日) 08:50:54モスバーガーのきれいな食い方教えれ
http://guideline.livedoor.biz/archives/50970830.html
0625デフォルトの名無しさん
2010/03/14(日) 09:19:15「カプセル化」のとはprotected/private化するだけじゃなくて、
クラスとして抽出して外部に追い出す事も含まれると思いますが。
(クラス化自体カプセル化の一種であるというのは、何かで読んだ気がするので探してみます)
でもって>541みたいに必要も無いのに他のクラスのメソッドを引き込むのは、
隠蔽レベルを下げる行為だと見なせますよね?
0626デフォルトの名無しさん
2010/03/14(日) 10:19:33一切微塵も欠片も小指の先ほども含まれて居ない。
「クラスの抽出をする事をカプセル化と言う」などと解説している物があるなら提示を。
>>隠蔽レベルを下げる行為だと見なせますよね?
Dataを外から見た場合、open write closeは完全に隠蔽されている。
というか、privateなのに一体どこで何が下っているのか、想像も付かない。
そして、全く同じシグネチャでも、必要性があれば隠蔽レベルを下げているとは言わず
必要性が無い時だけ隠蔽レベルが下るという主張も意味不明。
全く同じコードでも、閲覧者の主観によって隠蔽レベルが変わるというなら、コンパイラは一体何をすればいいのか。
隠蔽について、まともな本を読み勉強しなおせ。
0627デフォルトの名無しさん
2010/03/14(日) 10:30:06カプセル化とは、オブジェクト指向プログラミングが持つ特徴の一つ。
データとそれを操作する手続きを一体化して「オブジェクト」として定義し、
オブジェクト内の細かい仕様や構造を外部から隠蔽すること。
c++で言うなら、データと手続きをクラスとして抽出し、
細かい仕様や構造をprivate等のアクセス修飾子を使って隠蔽する事が
カプセル化。
隠蔽というのは、あくまでカプセル化の一部。(カプセル化⊃隠蔽)
0628デフォルトの名無しさん
2010/03/14(日) 10:31:48でもって>541みたいに必要も無いのに他のクラスのメソッドを引き込むのは、
カプセル化のレベルを下げる行為だと見なせますよね?
0629デフォルトの名無しさん
2010/03/14(日) 10:35:41Smalltalkとは言わないからせめてJavaレベルで話して欲しい
0630デフォルトの名無しさん
2010/03/14(日) 10:38:02使用者はDataのSaveToFileを呼び出すだけで良い事は変わらないのでカプセル化は保たれています。
Dataの中がどうなっていようが関係ありません。
関係ないからカプセル化です。
0631デフォルトの名無しさん
2010/03/14(日) 10:41:20613でも何でもいいから名前固定してくれ
つかれる
0632613=625=627=628
2010/03/14(日) 10:52:08Dataのヘッダに、Fileの実装やDataがどの関数を使用しているかという
振る舞いが一部見えてます。
(コンパイラは見て見ぬフリをしますが)
open/write/closeを追い出せば、カプセル化はより完璧になります。
0633デフォルトの名無しさん
2010/03/14(日) 10:55:14「カプセル化」の手段として「クラス」があり「隠蔽」がある。
「カプセル化」され、「隠蔽」されているなら、どのような「実装」だろうと関係ない。
ましてや「実装」により「隠蔽」や「カプセル化」が脅かされる事は、絶対に無い。
絶対に、無い。
0634デフォルトの名無しさん
2010/03/14(日) 10:56:42オブジェクト指向にヘッダなんて概念は存在しません。
そろそろ死んでください。
0635デフォルトの名無しさん
2010/03/14(日) 11:02:42613はC++の言語仕様の事をオブジェクト指向と呼んでいる
- 完 -
0636632 ◆79cfdX7bxM
2010/03/14(日) 11:10:55でも「抽出・分離」して隠蔽することを「カプセル化」と言うのだから、
Fileクラスとして抽出・分離されているものを、Dataクラスに必要以上に
結合するのはカプセル化を逆行してるでしょうに。
0637デフォルトの名無しさん
2010/03/14(日) 11:26:55結合度は変わりません。オブジェクト指向として理想的です。
>Fileクラスとして抽出・分離されているものを、Dataクラスに必要以上に
>結合するのはカプセル化を逆行してるでしょうに。
意味不明のオレ概念です。使用を控えてください。
そしていい加減死になさい。
0638デフォルトの名無しさん
2010/03/14(日) 11:38:49だから違うと何度も言ってるだろう。
「カプセル化」とは「オブジェクト」を具現化する事であり、抽出も分離も隠蔽もその手段でしかない。
そこまで致命的にトップダウンな思考が出来ないのなら、一生オブジェクト指向を理解することは無い。
0639デフォルトの名無しさん
2010/03/14(日) 12:04:13お前はe-wordsをチョロっと読んだだけで、浸透まで何十年もかかったパラダイムを理解した気になっている・・・のか・・・?
失笑と言うか・・・・脱力感が・・・ヤバイ・・・
0640デフォルトの名無しさん
2010/03/14(日) 12:39:26のもおかしい。その先にある具体的な利点や解決される問題点を示す
ことができないのなら、そんなカプセル化には何の意味も無い。
0641デフォルトの名無しさん
2010/03/14(日) 12:39:360642デフォルトの名無しさん
2010/03/14(日) 12:45:45やっと後釣り宣言出たって感じ?
Data内で使用しているFileのメンバのシグネチャを変えても
Dataに一切影響がないようにするには、>541のような隠蔽だけでは
不十分です。
例えばopen に引数が追加されたら、Data::openも変更が必要です。
一方、Fileの派生クラスまたはラッパークラスを用意し、そちらに定義しておけば
シグネチャ変更の余波は、Dataに到達する前に止められます。
例:
class DataFile : public File { /*省略*/ };
class Data {
public: void SaveToFile(){
m_pFile->open();
m_pFile->write();
m_pFile->close();
}
private: DataFile* m_pFile;
};
このように、「別クラスに抽出」して「隠蔽」する事をカプセル化と言うのであり、
単に隠蔽するだけをカプセル化と言うのじゃありません。
多くの解説書でアクセス制御=カプセル化として説明してますから
誤解するのも無理は無いと思いますがね。
0644デフォルトの名無しさん
2010/03/14(日) 19:05:26> 例えばopen に引数が追加されたら、Data::openも変更が必要です。
> 一方、Fileの派生クラスまたはラッパークラスを用意し、そちらに定義しておけば
> シグネチャ変更の余波は、Dataに到達する前に止められます。
わざわざ作った「Fileの派生クラスまたはラッパークラス」には変更が及ぶんだろ。
そこに変更が及ばないようにまた何かラッパークラスでも作るの?
それで誰が喜ぶんだよw
0645デフォルトの名無しさん
2010/03/14(日) 19:27:22Fileのパブリックメンバのシグネチャ変えたら使用側全てに変更が及ぶなんて当たり前すぎて何が言いたいのかわからない。
それにData::openの実装の修正は必要だがシグネチャの変更は不要。
お前はなぜ何故実装とシグネチャの区別が付かない。
そうやって無限ラップ地獄の明らかに破綻した論理を大事に墓まで抱えていけば。
0646デフォルトの名無しさん
2010/03/14(日) 19:30:500647デフォルトの名無しさん
2010/03/14(日) 19:39:48DataクラスがDataクラスに対して隠蔽してどうすんだ
馬鹿すぎる
0648デフォルトの名無しさん
2010/03/14(日) 19:58:090649デフォルトの名無しさん
2010/03/14(日) 20:36:42Fileのpublicメンバを変更したらそれはFileのカプセル化が漏れたことになります。
その公開されたメンバを使用している箇所でも修正が必要です。
DataはFileを使用しているため実装に変更が必要になります。
それはFileのカプセル化が漏れたためであり、悪いのはFileです。
publicメンバを変更したFileが悪いのです。Dataは被害者です。
DataFileクラスを新しく作る必要があるのはFileのカプセル化の漏れを
新しいカプセルで覆う必要があるからです。
DataFileのカプセル化に成功した場合は、Dataの実装を変更する必要は無くなります。
541のコードのままでも変更は必要なくなります。
なぜならそれがDataFileのカプセル化の効果だからです。
DataFileがFileからの被害を受け止めることで、Dataが救われました。
DataFileは救われませんが。
0650デフォルトの名無しさん
2010/03/14(日) 21:01:47なぜなら、DataFileも本来関係ないはずのFileの変更に影響されるべき物ではないからだ。
0651デフォルトの名無しさん
2010/03/14(日) 21:06:350652デフォルトの名無しさん
2010/03/14(日) 21:16:03>>541みたいなコードを書いたという元コーダの正当性も再評価する必要があるな。
全うにコーディングしてたら馬鹿に絡まれ馬鹿に馬鹿と晒し上げられた、ただの被害者の可能性がある。
0654デフォルトの名無しさん
2010/03/14(日) 22:41:470655デフォルトの名無しさん
2010/03/14(日) 22:42:510656デフォルトの名無しさん
2010/03/14(日) 23:00:57わからないし、そこを明らかにしないと作成の是非なんか話にならないはずなのに、
「オブジェクト指向的に間違ってる」だの「カプセル化が不完全」だの抽象的な
概念(しかも脳内)を具体的な問題点と繋げないまま繰り返し言うだけで、それで
納得しなかったら馬鹿よばわりとか、どんだけ
0657デフォルトの名無しさん
2010/03/14(日) 23:03:520658デフォルトの名無しさん
2010/03/14(日) 23:06:37>>541のケース「限定」で「Data::openは無駄だ」という当初の主張から翻り、今度は作る意義ですか。
さっぱり分かりませんが、作る意義って何の事を言ってるんですか?
個人的に作る意義は沢山存在しますが。貴方の言ってる事は本当に意味不明です。
0659デフォルトの名無しさん
2010/03/14(日) 23:34:51オブジェクト指向でも構造化プログラミングでも。
0660デフォルトの名無しさん
2010/03/14(日) 23:47:17その通り。抽象化です。(カプセル化、あるいは隠蔽化でも良いと思いますが)
では次。
�@抽象化のメリットは何ですか?
�AData::open は何に対して、何を抽象化してますか?
0662デフォルトの名無しさん
2010/03/15(月) 01:19:47(.___,,,... -ァァフ| あ…ありのまま 今 起こった事を話すぜ!
|i i| }! }} //|
|l、{ j} /,,ィ//| 『おれは奴に具体的な問題点を聞いていた
i|:!ヾ、_ノ/ u {:}//ヘ 思ったらいつのまにか聞かれていた』
|リ u' } ,ノ _,!V,ハ |
/´fト、_{ル{,ィ'eラ , タ人 な… 何を言ってるのか わからねーと思うが
/' ヾ|宀| {´,)⌒`/ |<ヽトiゝ おれも何をされたのかわからなかった…
,゙ / )ヽ iLレ u' | | ヾlトハ〉
|/_/ ハ !ニ⊇ '/:} V:::::ヽ 頭がどうにかなりそうだった…
// 二二二7'T'' /u' __ /:::::::/`ヽ
/'´r -―一ァ‐゙T´ '"´ /::::/-‐ \ 催眠術だとか超スピードだとか
/ // 广¨´ /' /:::::/´ ̄`ヽ ⌒ヽ そんなチャチなもんじゃあ 断じてねえ
ノ ' / ノ:::::`ー-、___/:::::// ヽ }
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::... イ もっと恐ろしいものの片鱗を味わったぜ…
0663デフォルトの名無しさん
2010/03/15(月) 01:26:18オブジェクト指向とか本読むのめんどくせえから1から俺に教えてくれって事?
0664デフォルトの名無しさん
2010/03/15(月) 01:27:48ttp://itpro.nikkeibp.co.jp/article/COLUMN/20060607/240196/
>役割とは,「オブジェクトが果たすべき機能」のことで,オブジェクト指向では
>「責務(Responsibility)」と呼ぶ。通常はクラスにメソッドを実装することで,責務を実現する。
>
>オブジェクトに最適な役割を割り当てることは,
>「適切なクラスに適切な責務を配置する」ことに他ならない。
ファイルのopen/write/closeという責務は Fileが負ってくれているのだから、
Dataまで担う必要ありません。
Single Responsibility Principle (SRP) - 単一責任原則
ttp://syboos.jp/sysdesign/doc/20080608013448257.html
クラスの責務(役割)は一つでなければならない。
0667デフォルトの名無しさん
2010/03/15(月) 01:59:020668デフォルトの名無しさん
2010/03/15(月) 02:05:39オレジェクト指向の宣教活動は自重してください
スレ違いですし、単純に迷惑です
0671デフォルトの名無しさん
2010/03/15(月) 02:09:21自己都合によって捻じ曲げるとこんな醜態を晒すという例
0672デフォルトの名無しさん
2010/03/15(月) 02:10:14寝る前にどこ立て読みかネタばらし頼む
俺もスッキリ寝たい。
0673デフォルトの名無しさん
2010/03/15(月) 02:12:34馬鹿は絶対に自らの間違いを認めない特性を持つが故に、馬鹿は死んでも直らないと言われる。
俺がこれをどちらに向けて言ってるかは、お前が決めれば良い。
0674デフォルトの名無しさん
2010/03/15(月) 02:56:150675デフォルトの名無しさん
2010/03/15(月) 03:10:03DataとFileが密結合になるのが嫌なのだと思う。
まずDataの中にFileをコンポジションで所有するのが、気に入らない。
DataにFileの特性が入り込んでしまう。継承よりは疎結合だし、必要なので我慢する。
だがDataからFileのメンバを使うのは、それだけ結合が増えるので嫌だ。なるべく避けよう。
でもSaveToFile関数でopen/write/closeの3個を使うのは、避けられないから我慢する。
だがopen/write/closeを分けて委譲するのは、同じ3個でも3カ所に分かれるのは結合が強まる。
それに委譲を作るのも、まるでオーバーライドのようで結合が強まっているようだし、そもそもDataの特性に合わない。
SaveToFile関数のローカル内だけで済んでいた結合がDataクラス全体に拡散してしまうなんて悪夢だ。
という考え方なんだと推測したがどうだろう?
0676デフォルトの名無しさん
2010/03/15(月) 04:46:39多分そうなんだろうねー
でもそれらのどこでも結合は強まってないんだけどねー
Data内部でopen/write/closeに分けた方が抽象化の度合いが高まって、より疎になってるんだけどねー
0677デフォルトの名無しさん
2010/03/15(月) 06:24:490678デフォルトの名無しさん
2010/03/15(月) 07:18:17>671
>665
>通常はクラスにメソッドを実装することで,責務を実現する。
つまりopen/write/closeを追加する事自体、責務を増やしている。
m_pFile を持てば十分なのだから増やす必要は無い。
>673,674
お前らにそっくりそのまま返すw
>676
open/write/closeを抽象化したところで、m_pFileを通してFileが丸見えだから
抽象化の度合いは全く高まっていないし、「より疎」にもなっていない。
むしろ675の言う通り無駄な経路を増やしてる。
そもそもopen/write/closeを拡張する場合、Fileを派生するかラッパー作って拡張し
m_pFile の型を変えれば良いのだから、open/write/closeを作らなくても
十分抽象化されてて疎の状態。
>677
「Dataをopen」を意味する関数であれば、privateにはしないでしょうに。
>678
超ド素人でも感覚で理解してるような原則を延々説明しなきゃならんとか、
こっちも想定外だってw
0680デフォルトの名無しさん
2010/03/15(月) 09:38:42> 通常はクラスにメソッドを実装することで,責務を実現する。
↓
> つまりopen/write/closeを追加する事自体、責務を増やしている。
private に open/write/close を追加したことで増えた Data クラスの責務って何よ?
0681デフォルトの名無しさん
2010/03/15(月) 10:29:35その Data クラスにありそうな拡張って例えば、
・最後に保存してから変更があったかどうかのフラグの処理
・ロギング
のようなものが考えられると思うが、両方とも欲しい場合には
FileWithLoggingAndModificationFlag みたいな派生クラス
を作れって言ってるの?
0682551
2010/03/15(月) 10:45:15>>569
> 541の例は単純に↓がベストであると考えている。
> open/write/closeをラップしたいなら、Fileをラップするクラスを作り、File*を置換する。
> class Data {
> public: void SaveToFile() {
> //省略
> };
> private:
> File* m_pconfigfile;
> };
完全な例を書いてくれないかな。それ>>551と何が違うの?
あ、ちなみに>>551は一部書き損なってたとこがあった。
> class DerrivedFile {
↓
> class DerrivedFile : public File {
>>579
> あと「privateに持つべきでは無い」とは言ってない。「privateであっても」だ。
他の奴はどうか知らないが、俺がこだわってるのはこれ。
public/protectedならともかく、privateに>>541のようなメソッドがあることが
なぜオブジェクト指向的に間違っているかだ。
> ニュアンスの違いも読み取って欲しい所。
いやいや、お前がニュアンスを文章として的確に表現しろよ。
0683デフォルトの名無しさん
2010/03/15(月) 11:16:48> m_pFile を持てば十分なのだから増やす必要は無い。
オブジェクト指向的というなら、そもそもclass Dataにm_pFileを持たせること自体がどうかと思う。
Dataには、自分自身を表現するメソッド、例えばtoString()とかイテレータを実装しておき、
永続化を担当するクラスの方に、Dataを渡す方がいいんじゃないか?
0684デフォルトの名無しさん
2010/03/15(月) 13:14:00↓
あーあー、見苦しいなw
わろた
0685デフォルトの名無しさん
2010/03/15(月) 14:13:48シーッ!
ペラい経験と先入観で気持ち良さそうに語っちゃってる痛い子にそんな事言っても理解不能です
0686デフォルトの名無しさん
2010/03/15(月) 14:34:39>public/protectedならともかく、privateに>>541のようなメソッドがあることが
>なぜオブジェクト指向的に間違っているかだ。
ヘッダを読むと見えちゃうかららしいw
そこで爆笑したw
0687デフォルトの名無しさん
2010/03/15(月) 15:45:43オブジェクト指向で言うと、どの行為に当たりますか。
0688デフォルトの名無しさん
2010/03/15(月) 15:50:26俺も思ったけど一番肝心な所が//省略されてて意味不明だった
何が話されてるのかさっぱり分かってないただの馬鹿と判断してスルーしたけど
0689デフォルトの名無しさん
2010/03/15(月) 15:55:44>m_pFileを通してFileが丸見えだから
イミフミエ
0690デフォルトの名無しさん
2010/03/15(月) 18:07:58例えばopen等のメンテの度に、Data全体をコンパイルし直さなければならないというコストです。
>681
うんにゃ。拡張したopen関数が、Dataに負わせるに相応しい債務であれば
Dataに入れても良いと思います。
ちなみに何の拡張もされていないopenを追加する目的は、「openの拡張に備えて」だろうけど
「必要に成った時点で追加」と言う方針で困るケースなど無いから、杞憂というものです。
>682,668
>551と>569の違いは、Dataがopen等を実装しているか否かです。
>569のSaveToFileの中身は↓です。
SaveToFile() {
m_pFile->open();
m_pFile->write();
m_pFile->close();
}
>683
そうですね。
まぁダメな例をちょっと改善したに過ぎないので、ツッコミ処はいくらでもあるかと思います。
>684
その先って>667の無限ループの事ですよ?
>687,689,690
細かい事は気にせず書いてるから、多少おかしな部分はあるかもしれません。
ツッコミたければ好きなだけどうぞ。全部甘んじて受けておきますよ。
以降は、些細なミスについては一々弁解・謝罪するつもりは無いのでよろしくお願いしますね。
0692デフォルトの名無しさん
2010/03/15(月) 20:48:21> 例えばopen等のメンテの度に、Data全体をコンパイルし直さなければならないというコストです。
そのメンテの度にコンパイルし直さなければならないという発生するコストは、
SaveToFile() の中で全部やってなかったら発生しなかったというのかね?
0693692
2010/03/15(月) 20:50:52>>691
> 例えばopen等のメンテの度に、Data全体をコンパイルし直さなければならないというコストです。
聞いたのはクラス Data の「責務」なんだけど、なんでコストの話になったの?
コストの話にしてもおかしいよね。
そのメンテの度にコンパイルし直さなければならないというコストは、
SaveToFile() の中で全部やっていれば発生しなかったというのかね?
0694デフォルトの名無しさん
2010/03/15(月) 21:06:10「コスト」という表現が分かりにくいなら、open等のメンテの度にDataも影響を
受けざるを得ない、要はopenと一連托生になる、ではどうでしょうか。
(話が逸れますが、openとDataはm_pFileを共有する、共有結合だって事も分かりますか?)
>SaveToFile() の中で全部やってなかったら発生しなかったというのかね?
File* を外部から渡す構造にしておく、等の条件付ですが発生しない設計にできますよね。
まぁ open等を作った場合も同じ方法で発生を抑えられますが。
けどそれやったら、丁度>551のような状態になります。
Data内のopen等が無用の長物と化しますね。
オブジェクト指向で考えても、結局行きつく結論は「無駄」でしたね。
皆様お疲れ様でしたw
0696デフォルトの名無しさん
2010/03/15(月) 22:11:150697デフォルトの名無しさん
2010/03/15(月) 22:42:200698デフォルトの名無しさん
2010/03/16(火) 00:17:07天変地異級の大勘違いです。
一体今までの話のどこにグローバル領域が存在したというのか。
そもそも、クラスと、そのクラス自身のメソッド間で結合度?
どこまで馬鹿なんですか?
結合度とは、オブジェクト(クラス)間の関連を語るものです。
0699デフォルトの名無しさん
2010/03/16(火) 00:27:48File* を外部から渡しても無意味だと思うのですが、実際にDataをコンパイルしなおす必要がない設計をしてもらえますか。
何を想定してるのかさっぱり想像がつかないので
とりあえずFileのopenが廃止され、open_streamのみになったケースに対応してください。
0700551
2010/03/16(火) 00:48:38> >569のSaveToFileの中身は↓です。
> SaveToFile() {
> m_pFile->open();
> m_pFile->write();
> m_pFile->close();
> }
え?これが理想型なの?
これだとclass Dataとclass Fileの結合度は全く変わってないよね?
それから「責務」とか「openを実装する」とかの話になっているけど、もともとprivateメソッドの話だよ?
m_pFile->open()をprivateメソッドに括りだしたら、責務が増えたという認識?
俺的には、「Dataにopenを実装する」と言えば、それは大抵publicの話であって、百歩譲っても
protectedの話。
やっぱり「一行しかない処理をprivateメソッドに括り出すのって無駄なたらい回しだよね」以上の
オブジェクト指向的な何かが関係してるとは読めないよ。
0701551
2010/03/16(火) 00:51:12> File* を外部から渡す構造にしておく、等の条件付ですが発生しない設計にできますよね。
の完全な実コードをお願い。
> まぁ open等を作った場合も同じ方法で発生を抑えられますが。
の完全な実コードをお願い。
> けどそれやったら、丁度>551のような状態になります。
> Data内のopen等が無用の長物と化しますね。
この二行の意味がわからないので。
0702デフォルトの名無しさん
2010/03/16(火) 00:53:17File->Save(Data); じゃないの?
0703デフォルトの名無しさん
2010/03/16(火) 01:03:24念のため言っておきますが、あなたが突っ込まれてる箇所はオブジェクト指向の基本中の基本で、
非常に致命的でお話にならない勘違いをしている所ばかりです
度合い的に言うと、÷記号って両辺の数字を足せばいいんだよね?レベルです
(しかもあなたは、÷記号は両辺を足すという意味なのを理解してないの?お前ら馬鹿じゃないの?と言うスタンスで語っています)
細かい所なんて誰も突っ込んでません
突っ込みきれる量じゃないからです
0704デフォルトの名無しさん
2010/03/16(火) 02:05:22◆79cfdX7bxMが書いてる事でオブジェクト指向的に正しいことが本当に一つも無い
細かい事気にしてないとか そんなチャチなもんじゃあ 断じてねえ
0705デフォルトの名無しさん
2010/03/16(火) 03:15:28俺5年なんだけど(お陰で周りは正しいOOPに満ちていた)>>695の言ってる事がちっともわからん。
「無駄」から話が始まったはずなのに「結局行きつく結論は「無駄」でしたね。」とか再発見されても、困惑する。
一体どこを目指していたの?
0706デフォルトの名無しさん
2010/03/16(火) 03:31:38> 「コスト」という表現が分かりにくいなら、open等のメンテの度にDataも影響を
> 受けざるを得ない、要はopenと一連托生になる、ではどうでしょうか。
> (話が逸れますが、openとDataはm_pFileを共有する、共有結合だって事も分かりますか?)
openはDataのopen?Fileのopen?
1. Dataのopenの場合。
Data::openのメンテをする場合Dataが影響を受けるのは当たり前。
よってDataが主語に来ることは在り得ない。
2. Fileのopenの場合。
File::openのシグニチャに変更が無い場合はDataが影響を受けないのは当たり前。
File::openのシグニチャに変更があった場合は、どんな形であろうと、呼び出しているDataが影響を受けるのは当たり前。
そして併せて↓が成立しない。
> (File::)openとDataはm_pFileを共有する
よってFileが主語に来ることは在り得ない。
∴どちらを主語にしても成立しない。
0707デフォルトの名無しさん
2010/03/16(火) 03:40:19> File* を外部から渡す構造にしておく、等の条件付ですが発生しない設計にできますよね。
> まぁ open等を作った場合も同じ方法で発生を抑えられますが。
↓
> けどそれやったら、丁度>551のような状態になります。
↓
>Data内のopen等が無用の長物と化しますね。
話が繋がってない。
重要な言葉を略しすぎで、人に伝える能力が無い。
0708デフォルトの名無しさん
2010/03/16(火) 04:24:23指摘したのに細かいとか一蹴されててワロス
Fileの公開メソッドへアクセス可能なことを丸見えといってるのか、
DataのprivateメンバにFileのインスタンスが存在する事をもって丸見えと言ってるのか
どちらにしろ超絶馬鹿
イミフミエ
0709デフォルトの名無しさん
2010/03/16(火) 10:09:000710デフォルトの名無しさん
2010/03/16(火) 10:12:410711デフォルトの名無しさん
2010/03/16(火) 12:56:00> データとそれを操作する手続きを一体化して「オブジェクト」として定義し、
> オブジェクト内の細かい仕様や構造を外部から隠蔽すること。
その通り。
>>628
> でもって>541みたいに必要も無いのに他のクラスのメソッドを引き込むのは、
> カプセル化のレベルを下げる行為だと見なせますよね?
見なせない。外部からは何も変わっていない。
>>636
> でも「抽出・分離」して隠蔽することを「カプセル化」と言うのだから、
微妙に言い回しを変えてるが、>>627にあるとおり「外部から隠蔽する」というのが
カプセル化の定義。
> Fileクラスとして抽出・分離されているものを、Dataクラスに必要以上に
> 結合するのはカプセル化を逆行してるでしょうに。
何が「必要以上」なのかさっぱり分からんが、privateメソッドを作ろうが作るまいが、
DataとFileの結合度には何の影響も与えない。
そもそもあるクラスがあるクラスを使う(use関係)というのは、カプセル化とは
何の関連もない。
さらには、あるクラスがあるクラスを使うと決定した時点で、結合するのは逃れられない。
ちなみに、その結合を逃れる手段は>>683。
0712デフォルトの名無しさん
2010/03/16(火) 13:00:15class FileWrapperを作るのが正しいという主張だが、これは誰かに使用されうるクラス
全てについて言えることだ。
class Dataがclass A, B, Cを使用するなら、AWrapper, BWrapper, CWrapperを作れと
言っているに等しい。
さらに言えば、class Data自身も誰かに使用されることが目的のクラスなのだから、
class DataWrapperが必要になるということだ。
つまり、100個のクラスを作るなら、100個のWrapperクラスを作るべきと主張している。
Wrapperクラスが有用な場合はもちろんあるが、これが壮大なたらい回しクラスの
固まりだと誰かに言われたらなんと反論するのだろうか。
0713デフォルトの名無しさん
2010/03/16(火) 13:15:46クラスの「ニュアンス」を読み取って、コーダの主観だけを根拠に、ラッパーの必要の無いところは外してほしい(キリッ
0714デフォルトの名無しさん
2010/03/16(火) 13:22:18自分の話が相手に伝わらない原因を相手に求めだす奴にまともな奴は一人も居ない
0715デフォルトの名無しさん
2010/03/16(火) 13:24:31リファクタリングだと、一行だけprivateメソッドに抽出するなんて普通すぎて、誰も疑問に思わないんだけど。
0716デフォルトの名無しさん
2010/03/16(火) 13:26:390717デフォルトの名無しさん
2010/03/16(火) 13:28:47>>670
> ここまで物分りが悪い奴ばかりと思ってませんでした。
> (もしかして釣られたのか。)
確かに爆釣成功だけどな。
0718デフォルトの名無しさん
2010/03/16(火) 13:35:11ばっちゃありがとう
0719デフォルトの名無しさん
2010/03/16(火) 13:41:56で、こいつがなんなの?
0720デフォルトの名無しさん
2010/03/16(火) 13:58:450721デフォルトの名無しさん
2010/03/16(火) 14:57:01思ってたが、何か違うの?
0722デフォルトの名無しさん
2010/03/16(火) 19:30:020723デフォルトの名無しさん
2010/03/16(火) 22:34:29運用による。
private メンバ/メソッドにアクセスしないなら、依然ファイルスコープ static でも構わない。
C の頃から OO 的モジュール分割してたのなら、その解釈でいいと思う。
メンドイのでチョイスして回答させてもらいます。
>706
1の「Dataのopenの場合」です。
当たり前の事を書いてるだけのつもりでしたが、改めて説明しますか。
まずData::openを変更するのはどんな時?と言うと、↓です。
(1)Data独自の機能を追加する場合
(2)File::openのシグネチャが変化した場合
ここでまず「File::openの変更時にDataが影響を受けるのを避ける」のに
Data::openは役立たない事が分かりますね?
そもそもprivateなのだから、Data内に対する役割しか持ち得ませんが。
ではDataに対するData::openの役割は何でしょう?
それも「File::open に処理を丸投げするだけのData::open」の役割は?
m_pFileの隠蔽は当然あり得ません。
また、m_pFileが隠蔽されていないのですから、File::openの代わりに
Data::openを使用する事を強制できません。
使用を強制できないのですから、丸投げするだけのData::openは
将来の拡張に備えるという目的には相応しくありません。
Data::openの役割は、「任意で使用できる」Dataクラス固有の機能を
提供するだけのはずです。
丸投げするだけのData::openに固有の機能などありませんから、
無用の長物としか言えません。
0725デフォルトの名無しさん
2010/03/16(火) 23:44:00漏れが無駄と言ってるのは、「他のクラスの関数に処理を丸投げするだけの関数」です。
ちなみに Proxy や Facade のようなパターンでは例外的にそういった関数が登場すると思いますが、
その場合はアリだとも断ったはずです。(>532)
またその場合、問題の関数がprivateなワケがありません。
0727デフォルトの名無しさん
2010/03/17(水) 00:07:19もう、あなたが書くべき言葉は「ごめんなさい」の一つしか残されていません。
0728デフォルトの名無しさん
2010/03/17(水) 00:10:21あの、↓の実装お願いできませんか?
出来たら本当に凄いことだと思うので。
>File* を外部から渡す構造にしておく、等の条件付ですが発生しない設計にできますよね。
>まぁ open等を作った場合も同じ方法で発生を抑えられますが。
0729デフォルトの名無しさん
2010/03/17(水) 01:33:42「では」以降何を言っているのかさっぱりわからないが、それprivate関数であっても、
クラス名が主語になるようなメソッドしか作成してはならない、の説明なのか?
額面通りに受け取って話が通じるような文章にしてくれよ。
あまりにお前が一生懸命に何か言おうとしてるから、何を言いたいのか知りたいんだけど、
大抵何言ってるのかさっぱりわからんのだよ。
それと、もうクラス名の主語たりえろ云々はもうどうでもいいから、>>728だけは回答してくれ。
0730デフォルトの名無しさん
2010/03/17(水) 01:48:36推敲するとか文章読本読むとかするつもりゼロなんだろうなぁ。
ニュアンス読み取れってことは、自分の伝えたいことが伝わってないということで、
それは自分の文章に原因があるってことに気づかないのかね。
プログラマなんだからコードで語れよ。
>File* を外部から渡す構造にしておく、等の条件付ですが発生しない設計にできますよね。
「等の条件」はお前にしか解らないんだから。
コードで示せば一発で相手を理解させることができるのに。
0731デフォルトの名無しさん
2010/03/17(水) 02:15:100732デフォルトの名無しさん
2010/03/17(水) 02:21:470733デフォルトの名無しさん
2010/03/17(水) 02:25:48もういいだろみんな!!!
0734デフォルトの名無しさん
2010/03/17(水) 02:32:53当たり前の様に言ったコレ
間違いを認めて全面撤回と謝罪をするか、サクっと実コードを示すか
最後にコレだけ頼む
0735デフォルトの名無しさん
2010/03/17(水) 02:45:25そろそろ自分が間違ってるカモと思い始めてもいい頃なのに。
0736デフォルトの名無しさん
2010/03/17(水) 02:54:04だーかーらー、一行をたらい回すprivateメソッドなんて無駄だよねってのはみんなが同意するところで、
オブジェクト指向的に間違ってるのはどこがどう間違ってるのかという話なんだけど。
0737デフォルトの名無しさん
2010/03/17(水) 02:54:24段々使ってる語呂が増え、語呂もオブジェクト指向の物になって来てるんだけど
一つも漏らさず全部の単語の用法が致命的に間違ってると言う素晴らしさ
一生改善しない、まさに死ぬまで馬鹿が約束された、馬鹿の中の馬鹿
0738デフォルトの名無しさん
2010/03/17(水) 09:07:570739デフォルトの名無しさん
2010/03/17(水) 11:27:400740デフォルトの名無しさん
2010/03/17(水) 11:30:26プギャ-www
0742デフォルトの名無しさん
2010/03/17(水) 20:18:190743デフォルトの名無しさん
2010/03/17(水) 21:57:34屑
0744デフォルトの名無しさん
2010/03/18(木) 00:08:50そろそろ自分で出来るって言ったコード書けよゴミクズ
0745デフォルトの名無しさん
2010/03/18(木) 00:56:51何が抽象化だよw
0746デフォルトの名無しさん
2010/03/18(木) 01:28:27間違いない
こんなに自分の発言に責任を持たないキチガイは二人と居ない
0748デフォルトの名無しさん
2010/03/18(木) 01:46:15お前は出来ると言った
俺は出来ないと考える
悪魔の証明を求めるとか本当に馬鹿だな
どうせ悪魔の証明って言葉自体知らんのだろうけど
0749デフォルトの名無しさん
2010/03/18(木) 01:48:20この期に及んで、明らかに不可能な発言すら撤回しないの?本当にごめんなさい出来ないクズだな
0750デフォルトの名無しさん
2010/03/18(木) 02:08:510751デフォルトの名無しさん
2010/03/18(木) 02:35:07おれの理論を使えば誰でも簡単に時間旅行が出来る。
そんなことありえないだって?ならお前が反例だせ。
これ位の馬鹿さを晒しています。
気付いてください。
0752デフォルトの名無しさん
2010/03/18(木) 04:58:010753デフォルトの名無しさん
2010/03/18(木) 06:30:27どの発言の何の反例を求めてるんだ?
お前の発言はどれもめちゃくちゃでわからんぞ。
0754デフォルトの名無しさん
2010/03/18(木) 09:05:32何の反例を求めてるんだか、唐突で全く意味不明。
反論の間違いだとしたら、死ぬほど反論されてお前が無視してるだけだから、スレを読み直して回答しろ。
0755デフォルトの名無しさん
2010/03/18(木) 09:07:02それでもこのスレを読むのもやめられず、悔しくて発言するのもやめられない。
0756デフォルトの名無しさん
2010/03/18(木) 09:11:51> 言葉を額面通りでしか受け取れない人達ばかりですねぇ。
普通の人間なら、額面通りに受け取ってもらえる文章を書こうとするんだが。
0757デフォルトの名無しさん
2010/03/18(木) 14:01:04Data::open() が固定パスのファイルを開くメソッドで有ったり、インデックスを特定のルールでパスに変換して開くメソッドである場合も
File の派生クラスを用意して役割分担させるべきと考える?
同様に Data::write() がテキストをHEXで書き込むメソッドである場合もその責務を File の派生クラスに負わせるべき?
この考えだと File の派生クラスは Data の完全な下請けクラスになっちゃうけどこれってオブジェクト指向的に正しいの?
0758デフォルトの名無しさん
2010/03/18(木) 14:22:59短文にどこまでツッコミ所を込められるかのテストか?www
0759デフォルトの名無しさん
2010/03/18(木) 15:56:27>>747は病気
Data は DataHolderと書いといた方が分かり易かったかと今更後悔。
ところで念の為に聞いておくけど、↓のような実装もオブジェクト指向的には
全く問題無い、と思っておられる方は居るんでしょうか。
class DataHolder : private File
{
public: void SaveToFile(){
open();
write();
close();
}
};
0761デフォルトの名無しさん
2010/03/18(木) 19:44:310762デフォルトの名無しさん
2010/03/18(木) 19:52:090763デフォルトの名無しさん
2010/03/18(木) 20:18:16まだこいつ自分が正しいと思ってるのか
0764デフォルトの名無しさん
2010/03/18(木) 20:24:240765デフォルトの名無しさん
2010/03/18(木) 20:26:130766デフォルトの名無しさん
2010/03/18(木) 20:27:46そういう単位でクラスをつくる奴の気は知れねぇが。
class DataHolder {
public: void SaveTo(File f){
f->open();
f->write();
f->close();
}
};
みたいになぜしないのか不思議。
流れ読んでなくてすまんが。
まぁ普通はそうします罠。
では質問をちょっと変えて、↓のB〜Eのうち、これは無いだろってのを挙げて下さい。
あと一部は良くて他は駄目と言う場合、できれば何が違うかも挙げて下さい。
※クラスB〜Eは、Aとは全く役割が異なるクラスとします。
※Func2〜5は、func1を呼び出す以外の処理も行うとします。
※クラスA以外のfunc1は、クラスAのfunc1を呼び出すだけとします。
※コンストラクタやm_pAの初期化処理は割愛。
class A {
public: void Func1( );
};
class Awrapper {
public: void Func1( ) { m_pA->Func1( ); }
private: A* m_pA;
};
class B {
public: void Func2( ) { m_pA->Func1( ); }
private: A* m_pA;
};
class C {
public: void Func3( ) { Func1( ); }
private: void Func1( ) { m_pA->Func1( ); }
private: A* m_pA;
};
class D : private Awrapper {
public: void Func4( ){ Func1( ); }
};
class E : private A {
public: void Func5( ) { Func1( ); }
};
一応Data::openは固有の引数を与えるとかすら無い、
「完全に丸投げ」な関数だから問題としてます。
あとFileの派生クラスがDataの下請けクラスになるのは正しいと思いますが。
Dataがそのクラスに処理を一部委譲してるって事ですよね。
>765
多分トリップの無い様が簡単過ぎるからかと。
0769デフォルトの名無しさん
2010/03/18(木) 23:54:48下請けクラスを作成する事がオブジェクト指向的に正しいのか答えてないね
あるクラスの機能を実装するときにこの機能はこのクラスの派生が持つべきだからって理由で下請けクラスを
複数作るのは原理主義過ぎて現場にはそぐわないと思うんだが
0770デフォルトの名無しさん
2010/03/19(金) 00:06:53うるせークズ
お前はまずやるべき事をやれ
0771デフォルトの名無しさん
2010/03/19(金) 00:10:47全 部 論 外
0772デフォルトの名無しさん
2010/03/19(金) 02:02:040773デフォルトの名無しさん
2010/03/19(金) 02:15:22> 「完全に丸投げ」な関数だから問題としてます。
問題だから問題です以上の何かは、もう言えないということだな。
private継承を持ち出して、また何か持論を展開しようとしてるみたいだが、まずお前の結論・主張を書け。
つか、まず>>541の問題に決着をつけろ。
0774デフォルトの名無しさん
2010/03/19(金) 02:32:56まーた論点ずれた問いかけをして誰かに答えてもらえるとでも思ったの?
0775デフォルトの名無しさん
2010/03/19(金) 02:34:43仮にそれが問題ありだとして、>>541とどう関連づけるつもりなんだろう?
0776デフォルトの名無しさん
2010/03/19(金) 02:36:57離れてしまったということに気づかないのかな。
0777デフォルトの名無しさん
2010/03/19(金) 02:48:40だからコイツにとっては
オブジェクト指向=C++の言語仕様
なんだって
本人にとっては何もぶれちゃいないツモリ
ヘッダでprivateメソッドの痕跡が見れるのが
オブジェクト指向的に見て大問題とかいっちゃうブットビ具合
0778デフォルトの名無しさん
2010/03/19(金) 02:59:01マルチパラダイム言語とか「10人の天才の足を引っ張る一人のキチガイ」を大量生産するだけだろ
0779デフォルトの名無しさん
2010/03/19(金) 03:42:560780デフォルトの名無しさん
2010/03/19(金) 03:56:380781デフォルトの名無しさん
2010/03/19(金) 06:41:210782デフォルトの名無しさん
2010/03/19(金) 07:56:52相手にされなくなってからの勝利宣言ほど惨めな物は無いが
いい加減しつこ過ぎるしさっさと勝利宣言して気持ちよく消えてくれ
0783デフォルトの名無しさん
2010/03/19(金) 09:08:44・private継承はしない
え?やりたい?うるせー馬鹿。うぜー。
0784デフォルトの名無しさん
2010/03/19(金) 10:10:14基底クラスと派生クラスの役割と、派生クラスは継承して何をやりたいかを明確にしないと
private継承のことは語れません。
private継承は、それを行うと便利なときのみに使います。
どのような時に便利なのかは、(More?) Effective C++やModern C++ Designに載ってます。
0785デフォルトの名無しさん
2010/03/19(金) 10:16:59A-Eが何なのか解らないと答えようがないのは>>784と同じ。
0786デフォルトの名無しさん
2010/03/19(金) 18:45:48「誰にも答えられなかったようですね」と言う虚しい勝利宣言がー
0787デフォルトの名無しさん
2010/03/19(金) 19:16:43private継承を混ぜてきたとか(;´Д`)
だいたい、privateメソッドに着目してウンタコータラ言い続けるのも不思議。
そんなもんの変更は、クラス内で完結しちゃってるだろうに。
そこを突っ込むつもりなら、D、Eはこれでも良いです。
class D : public Awrapper {
protected: void Func4( ){ Func1( ); }
};
class E : public A {
protected: void Func5( ) { Func1( ); }
};
>785
A〜Eが何なのかは、まず身近なコードでAとBの関係になってるものを探して、
B=C=D=Eとして考えて下さい。
で、B〜Eはありなのかと。
流石にBが論外とか言うのは>771だけだと思いますが。
BのようなコードをC〜Eのように書く(書き直す)のはありでしょうか?
無闇に書き直すのは間違いとかいうのは無しですよ。
0790デフォルトの名無しさん
2010/03/20(土) 00:10:58こいつは根っこから馬鹿なんだな
余りにも話を伝える能力が無い
0791デフォルトの名無しさん
2010/03/20(土) 00:11:19>>767 では問題として題意が不明瞭な為に回答ができないとの意見が多い
修正点を上げるだけでは読むほうにとって面倒なので問題を作り直して提示するのが筋だ
0792デフォルトの名無しさん
2010/03/20(土) 00:57:380793デフォルトの名無しさん
2010/03/20(土) 01:57:260794デフォルトの名無しさん
2010/03/20(土) 02:37:10まともに答えるつもりが無い?質問を変えてみます?
何でコイツはコンナニモ馬鹿なのにコンナニモ上から目線なの?
0795デフォルトの名無しさん
2010/03/20(土) 02:48:37まず、お前が積み残した質問に答えろ
0796デフォルトの名無しさん
2010/03/20(土) 02:55:09決定的な間違いをした奴を叩いて溜飲を下げてから
このスレから立ち去る戦法。
0797デフォルトの名無しさん
2010/03/20(土) 02:55:35お前が大半のレスを無視した結果がこれだよw
0798デフォルトの名無しさん
2010/03/20(土) 02:59:31BをCに書き換えたらそれは>>541で、Cはオブジェクト指向的に間違いだという主張じゃなかったのか?
今までさんざん指摘があったのは全部無視か?
>A〜Eが何なのかは、まず身近なコードでAとBの関係になってるものを探して、
いやいや、質問したいなら、お前の身近なコードで具体例を示せよ。
0799デフォルトの名無しさん
2010/03/20(土) 03:13:50じゃないの?
0800デフォルトの名無しさん
2010/03/20(土) 03:26:461.馬鹿
2.不遜
3.尊大
4.横柄
5.論点無視
6.論理飛躍
7.他者批判
8.責任転嫁
9.認知障害
10.有言不実行
11.自意識過剰
12.自制心不足
13.認知的不協和
0801デフォルトの名無しさん
2010/03/20(土) 05:45:24どーーーーーーーでもいい些事なんだな
オブジェクト指向のオの字すら語る資格が無い
0802デフォルトの名無しさん
2010/03/20(土) 05:52:44プロジェクトに組み込まれたら災害レベルの無能を発揮するだろう
0803デフォルトの名無しさん
2010/03/20(土) 08:40:49存分に踊れ。
0804デフォルトの名無しさん
2010/03/20(土) 10:31:14↓
矛盾点を指摘、質問される
↓
論点がずれた意味不明な回答をする
↓
全然解決されなかった矛盾点を再度指摘、質問される
↓
めんどくさいんでスルーしますと言い出す
↓
全てを無かった事にして意味不明な質問をしだす
↓
意味不明すぎて誰からも相手にされない
↓
質問の要点が不明瞭なまま角度だけを変えた意味不明な質問を繰り返す
↓
意味不明すぎて誰からも相手にされない ←いまここ
↓
0805デフォルトの名無しさん
2010/03/20(土) 10:42:54>>679
> 超ド素人でも感覚で理解してるような原則を延々説明しなきゃならんとか、
ド素人の自分が超ド素人時代に、感覚で理解したと勘違いしたことを延々と垂れ流しているだけ。
何の根拠も理論武装も無い。無いが故に、何故正しい自分がわかってもらえないのかという所
から抜け出せない。
あまつさえ、全員が自分を釣っているのではという疑念を抱く始末。
0806デフォルトの名無しさん
2010/03/20(土) 10:56:15「こいつら一から説明しなきゃ分からないのか」と超絶変換される脳みそ持ってる事は、本当にお気の毒だと思う
まぁ79cfdX7bxMの脳みそと性格は絶対直らないから早く死ぬといいよ
0807デフォルトの名無しさん
2010/03/20(土) 21:36:10OOの設計とかリファクタリングとかTDDとか、その手の書籍見たらこんな感じの簡単な
具体例が良く出てくる。
Animal, Dog, Catはもう古いけどさ。
こういう具象クラスを例に挙げないと、会話が進まないよ。
本気で会話したいのかどうか知らないけど。
0808デフォルトの名無しさん
2010/03/20(土) 21:45:550809デフォルトの名無しさん
2010/03/20(土) 22:19:51public: void Func1( );
};
class B {
public: void Func2( ) { m_pA->Func1( ); }
private: A* m_pA;
};
元々↑のようになっていたコードを、
class Awrapper {
public: void Func1( ) { m_pA->Func1( ); }
private: A* m_pA;
};
class B : public Awrapper {
public: void Func2( ){ Func1( ); }
};
あるいは
class B : private Awrapper {
public: void Func2( ){ Func1( ); }
};
と書き直すのはありなんですか?
0811デフォルトの名無しさん
2010/03/20(土) 23:29:170812デフォルトの名無しさん
2010/03/21(日) 00:10:30Awrapper を Bsuper に変更すれば問題無いんじゃないの
0813デフォルトの名無しさん
2010/03/21(日) 00:31:13減るとかメリットあるのか?
0814デフォルトの名無しさん
2010/03/21(日) 01:13:54class B と同列に class B' を作るなら class Bsuper から派生させるのは良くある事だと思うけど
俺に聞いてるんじゃなかったかな?
0815812
2010/03/21(日) 01:34:28>>810 の class A を犬、class B を桃太郎として考えてみよう
class Awrapper は犬の機能を抽出したペットというクラスになり、class Bsuper は人って事になるかな
class Pet {
public: void peropero() { m_self->peropero(): }
private: Dog* m_self;
};
ラッパーは継承しないほうが隠蔽度が上がるからこの実装に問題は無いと思う
class Human {
public: void peropero() { m_dog->peropero(); }
private: Dog* m_dog;
};
人のクラスに舐めるメソッドが存在するのは少し変だけど、実装上の都合でこうなるのは有りえる事
原理主義者は怒るだろうけど絶対ダメって話じゃないと思う(無論、異論は認める)
かくしてペット( Awrapper )と人( Bsuper )の実装が舐める(peropero)に関しては同じになってしまったが、
この2クラスの性質は明らかに異なる
>>810 の後半はペットから桃太郎を派生しているからオブジェクト指向的にはダメで、
Awrapper を Bsuper にして、人から桃太郎を派生させる様にすれば問題は無いんじゃなかろうか
0816デフォルトの名無しさん
2010/03/21(日) 01:41:43意味ない質問してるの解ってるのかな。
責務とか言ってたの誰だっけ?
0817デフォルトの名無しさん
2010/03/21(日) 01:43:23お前それ本気で言ってんの?
0819デフォルトの名無しさん
2010/03/21(日) 02:20:08いやいや、その前にたとえprivateであっても主語がうんたらかんたらが先だろ
0820デフォルトの名無しさん
2010/03/21(日) 04:35:350821デフォルトの名無しさん
2010/03/21(日) 05:52:19それとも、俺が知らないだけでC++界隈にはこの手の馬鹿が多かったりするのか?
0822デフォルトの名無しさん
2010/03/21(日) 07:44:12こんなのそうそう出ない上に、その破壊力が強烈だから目立つだけじゃね?
℃odeZineみたいに、ライターとして記事を採用するようなバカやらなきゃ、実被害は出んよ
0823デフォルトの名無しさん
2010/03/21(日) 08:21:290824デフォルトの名無しさん
2010/03/21(日) 08:40:01ここで話に挙げたいなら纏めろ
0825デフォルトの名無しさん
2010/03/21(日) 10:18:06public: void Func2( ){ Func1( ); }
};
あるいは
class B : private Awrapper {
public: void Func2( ){ Func1( ); }
};
と書くのがダメだとしたら、
class B {
public: void Func2( ){ Func1( ); }
private: void Func1( ) { m_pA->Func1( ); }
private: A* m_pA;
};
もダメだと思いますがいかがでしょうか。
Awrapper が明示的に抽出されていないだけで、
その役割をBに与えてるのは同じですよね。
まぁこれは原理主義的過ぎる考え方だとは思いますがね。
0827デフォルトの名無しさん
2010/03/21(日) 10:44:21まぁ相変わらずイミフ
0828デフォルトの名無しさん
2010/03/21(日) 10:52:08そして悉く使い所が間違ってると来ると、もはや涙無しには語れない。
0830デフォルトの名無しさん
2010/03/21(日) 11:34:49話がずいぶん変わってきた感じがあるが、直近のレスにコメントすると、
Code1:
class B : public Awrapper {
public: void Func2( ){ Func1( ); }
};
と
Code2:
class B {
public: void Func2( ){ Func1( ); }
private: void Func1( ) { m_pA->Func1( ); }
private: A* m_pA;
};
は同一じゃないだろ。Code1の是非はともかくCode1が駄目だとしてもCode2が駄目だとは言えない。
Code1は、お前が考えてるのとは別の意味で駄目な場合がある(継承の是非的視点)。
Code3:
class B : private Awrapper {
public: void Func2( ){ Func1( ); }
};
これも同様で、Code3の是非とCode2の是非はイコールではない。
なぜイコールだと思うのか、その根拠を書け。
0831デフォルトの名無しさん
2010/03/21(日) 11:41:19どうかという事抜きに話をするのは意味がない。
それら抜きに書き換え可能かどうかと言えば、答えは書き換えられるとしかいいようがなく、
それが無駄なたらい回しかどうかは、その場合もあればそうでない場合もあるとしか言えない。
0832デフォルトの名無しさん
2010/03/21(日) 11:48:16なんでコンテキストがしっかりしている>>541から逃げるのか。
0833デフォルトの名無しさん
2010/03/21(日) 11:50:15もはや反論しようが無いからABCで誤魔化して逃げてる
0834デフォルトの名無しさん
2010/03/21(日) 11:53:09> Awrapper が明示的に抽出されていないだけで、
> その役割をBに与えてるのは同じですよね。
まだわかってねーな。
privateメソッドに抽出してもclass Dataの役割は何も変わってないし、カプセル化の度合いも変化なし。
そのこととその抽出したprivateメソッドをクラスに引き上げるのとは全然別。
>なぜイコールだと思うのか、その根拠を書け。
826に書いてある通りです。
Awrapper が明示的に抽出されていないだけで、
Awrapperとしての役割をBに与えてるのは同じですよね。
(役割と言う表現が妥当かは、若干自信がありませんが。)
あとCode2は A-B が has-a な関係なのは明らかですから
is-a 関係とは言えないと思います。
※Javaのように多重継承を許さない言語系では、
is-aな関係でも委譲の形で実装する事はあるでしょうが、
その場合 func1 を private にする事はないはず。
0836デフォルトの名無しさん
2010/03/21(日) 12:27:59Code2はhas-a関係でCode1はis-a関係でしょう。
DataとFileから見た両者の関係は?
少なくともData自身から見れば、Fileとの関係について
privateかどうかは関係無いと思いますが。
0839デフォルトの名無しさん
2010/03/21(日) 12:35:18DataとFileはデータ結合だっつってんだろカスが
0840デフォルトの名無しさん
2010/03/21(日) 12:37:53何でそんなに文盲なの。
0841>>830=836
2010/03/21(日) 12:38:06開いた口がふさがらないとはこのことだな。
>>826を書き直せば、
「Code1あるいはCode3が駄目だとしたらCode2も駄目である」
と言ってる。
Code1とCode2は同一ではない。Code1はis-a関係でCode2はhas-a関係だ。
別の構造なんだから、Code1の是非とCode2の是非は同一ではない。
Code3はクラスを抽出したということと、private継承下という点でCode2と異なる。
故にCode3の是非とCode2の是非は同一ではない。
Code1、Code2そのものにも問題がある場合があって、それは具象例でなければ語れない。
わかった?
0842>>830=836
2010/03/21(日) 12:43:21それはやはり具象例でなければ語れない。
>>541のような具象例だと話が早いし、是非も語れる。
そして、>>541のコードだったら無駄なたらい回しだよねという結論だが、
オブジェクト指向的に間違いかどうかには決着が付いてない。
0843デフォルトの名無しさん
2010/03/21(日) 12:43:28>Code3はクラスを抽出したということと、private継承下という点でCode2と異なる。
>故にCode3の是非とCode2の是非は同一ではない。
ここを詳しく。
Code3はダメでCode2はOKという例を出してくれればOKです。
0845デフォルトの名無しさん
2010/03/21(日) 12:48:152.不遜
3.尊大
4.横柄
5.論点無視
6.論理飛躍
8.責任転嫁
9.認知障害
12.自制心不足
13.認知的不協和
今日だけでこれだけ再発
0846デフォルトの名無しさん
2010/03/21(日) 12:52:37お前は絶対実例出さないのに人にだけはそんな偉そうな態度で例示させるんだなwww
0847>>830=836
2010/03/21(日) 12:55:09そもそもその命題の建て方が間違ってるという指摘なんだが。
何度も言うが、具象例を出せ。
0848デフォルトの名無しさん
2010/03/21(日) 12:56:24お前は一体何の話がしたいの?
逆。
Code3がダメだからCode2もダメだと言いたい。
あるいはBにAのラッパーとしての性格を持たせるのがナンセンスと言いたい。
0850>>830=836
2010/03/21(日) 13:03:54ちゃんと説明しないとわからないか。
Code3が良いなら、それはis-implemented-in-terms-of関係なの(他のprivate継承の
例もある)だから、Code2も良い。
しかし、Code2が良いならいつでもCode3が良いとは言えない。
良い場合もあれば悪い場合もある。(だからCode2が良くてCode3が悪い例を考えても
意味がない)
そして、Code3が悪ければCode2も悪いことにはならない。
無論 B が A のラッパーであるなら妥当であるけど、その場合↓のように
B::func1 は public にするはずですよね。(protectedもあり得るけど)
Code4:
class B {
public: void Func2( ){ Func1( ); }
public: void Func1( ) { m_pA->Func1( ); }
private: A* m_pA;
};
0852>>830=836
2010/03/21(日) 13:07:05ごっちゃにするなよ。
class Dataが何を保有しようと、privateメソッドに何を持とうと、クライアントには
Fileラッパーの性格は見えない。
0854デフォルトの名無しさん
2010/03/21(日) 13:15:10それと全く同じ指摘は200〜300レス前からされてる。
その時の返答はヘッダファイルから見えるだった。
0855>>830=836
2010/03/21(日) 13:15:59Code3は良い場合がある。それは、is-implemented-in-terms-of関係の場合だ。
今日はこれにて撤退。
0856>>830=836
2010/03/21(日) 13:17:450857デフォルトの名無しさん
2010/03/21(日) 13:24:030858デフォルトの名無しさん
2010/03/21(日) 13:26:03大半の問題ケースが許されてしまうと思うんだが。
0859デフォルトの名無しさん
2010/03/21(日) 13:28:47クラス設計的な誤りと、それを隠蔽するかどうかと、>>541がオブジェクト指向的に
誤りかどうかは別の話。
0860デフォルトの名無しさん
2010/03/21(日) 13:46:020861デフォルトの名無しさん
2010/03/21(日) 13:46:08public: void Func1( ) { m_pA->Func1( ); }
private: A* m_pA;
};
Aという型が実装に使われてるのを隠すんなら、
そんなクラス名は不都合だし、メソッド名も同じになるのも苦痛。
型を継承した関係じゃないのに、
実装にある型の存在を予感させたりするのはブサイク。
上の例は class B {public void foo() {_a->Func1();}}; の形にしないとウマミが無い。
class DecratedA : public A {};
にして継承関係にすれば、
クラス名もメソッド名も自然になる。
コンストラクタでA *を受け取るようにして、
内部でそれに委譲しながら独自処理を行うと、
GoFで言うところのDecoratorパターンになる。
特性を動的に追加したりすることなく、
再帰的に合成することもなくて、
あるインスタンスへの間接的なアクセスを提供するなら、
Proxyパターンとなる。
0862デフォルトの名無しさん
2010/03/21(日) 13:55:22static A_Func1();
でいいんじゃね?w
>実装にある型の存在を予感させたりするのはブサイク。
A::Func1 へ丸投げするだけの B::Func1 を実装するのも
ブサイクと思うんですが。(例えB::Func1がprivateだとしても)
それをオブジェクト指向的に云々と表現するのが間違いって言うなら、
単純に漏れが言葉の選択をミスっているという事で納得できますが。
0864デフォルトの名無しさん
2010/03/21(日) 14:09:480865デフォルトの名無しさん
2010/03/21(日) 14:27:43まぁ、なんだ
>>504から読み直せ
0867砂漠の帝王 ◆.CzKQna1OU
2010/03/21(日) 16:18:330868デフォルトの名無しさん
2010/03/21(日) 16:26:180869デフォルトの名無しさん
2010/03/21(日) 17:27:23> A::Func1 へ丸投げするだけの B::Func1 を実装するのも
実装はさておき、インタフェースとして適切かどうかが最大の関心ごと。
Aのインタフェースとして適切で、BがAを継承しているのなら正しい。
継承していなくてもFunc1がBとして適切なら正しい。
あくまで、実装の話をする前にこの決着をつけておく必要がある。
インタフェースが腐っていたらもう、実装の話なんかしてる場合じゃなくなる。
次に、実装について。一見不要でも、単純に判断できない。
インスタンスへのアクセスを集約しておくことは、後で思いがけず役に立ったりもする。
void B::Func1() {_a->Func1();}は、メソッド内を if (_a && _a->isVisible()) _a->Func1(); とさせたり、
if (hasFocus()) _a->Func1(); else _stderr->puts(_a->inspect()); とさせたりしうる。
丸投げに見えるだけであっても、ある種のささいな拡張性を備えていると言えなくもない。
最後に、そのたらい回しprivateメソッドの名前がFunc1のままでいいかどうか。
俺は良くないと思う。ただ同時に、ピーピー言うほどのものでもないと思う。
privateメソッドはただ単に、クラスの内部で完結しており、表に出はしない。
クラス内で判別が付く名前を適当に使えば十分だと思う。
private void B::Func1() であっても、良くはないが許せる。
0870デフォルトの名無しさん
2010/03/21(日) 18:36:14同じ臭いと言われただけでなんですぐ自演に結びつくのかね
0871デフォルトの名無しさん
2010/03/21(日) 19:34:53class B {
public: void Func2( ){ Func1( ); }
private: void Func1( ) { m_pA->Func1( ); }
private: A* m_pA;
};
に問題は無い、B::Func1() が何の為に存在するのか理解してないだろ
class B {
public: void Func2( ){ Func1( ); }
private: void Func1( ) { m_pA->Func1( ); }
private: Awrapper* m_pA;
};
なら B::Func1() は冗長だから問題が有るがオブジェクト指向的な理由では無い
>インスタンスへのアクセスを集約しておくことは、後で思いがけず役に立ったりもする。
void B::Func1() {_a->Func1();} と実装したところで、Bの他のメンバが
a->Func1(); とFunc1を直接呼び出すのを禁止できないから、
集約するという役割は果たしていないと思うのですが。
>871
>B::Func1() が何の為に存在するのか理解してないだろ
何の為に存在すると言うのですか。
0873デフォルトの名無しさん
2010/03/21(日) 22:16:24議論するの意味なくね?
File と Data はどこ行った?
0874デフォルトの名無しさん
2010/03/21(日) 22:26:46> a->Func1(); とFunc1を直接呼び出すのを禁止できないから、
> 集約するという役割は果たしていないと思うのですが。
もう何なのこの馬鹿
メンバが使う事を制限できないとか言い出したら全てが破綻するだろ
>>872
Awrapperを作ったとしてもAwrapperのメンバがA*に直接アクセスするのを制限できない問題について語れ
0875871
2010/03/21(日) 23:09:24>>869 = 874 が書いてるんだけどなぁ
B:Func1() の存在意義は A のラッピング
君がラッパーの存在意義を理解してない事は >>872 で露呈されたよ
Awrapperは、A*を隠蔽して、Awrapper::Func1の使用を
Bのメンバに強制できます。
>875
ですからラッピングしてる対象に直接アクセスできるのですから、
役割を果たしてないじゃないですか。
0877デフォルトの名無しさん
2010/03/21(日) 23:38:56「一つのクラス内のメンバすら管理できないクソ共が途轍もなくクセェ」ってだけで、他に何か問題でもあるのか?
0878デフォルトの名無しさん
2010/03/21(日) 23:39:38馬鹿乙
0879デフォルトの名無しさん
2010/03/21(日) 23:41:51お前正気か?ふざけてんのか?
Awrapperを作ったとしてもAwrapperのメンバがA*に直接アクセスするのを制限できない問題について語れ
千回音読した後死ね
そんなモノ無い。でおしまい。
そもそも public である Awrapper::Func1 は、自身からA*を隠すのが目的ではありませんよね。
private である B::Func1 との違いを良く考えて下さい。
0881デフォルトの名無しさん
2010/03/22(月) 00:06:14>他に何か問題でもあるのか?
ぶっちゃけ言うとそれを見つけるのが漏れの目的。
馬鹿の思索に付き合わせてすまんかった。
とりあえず「単に無駄」の領域を出ませんねこりゃ。
敢えて言うなら、コレに意味があると思う人達が居るのが問題?
0883デフォルトの名無しさん
2010/03/22(月) 00:25:54無能すぎwww
0884デフォルトの名無しさん
2010/03/22(月) 00:26:45言いたい事は分かるけどね
プロマネが『B::Func1() は A::Func1() のラップ関数ですので将来の事を考えて B のメソッド実装において B::Func1() を使って下さい』
と言ったときに君は『その実装だと A::Func1() の使用を禁じる事ができませんので Awapper を用意すべきです』って返す訳だ
俺がプロマネだったら『帰れ』って言うね
0885884
2010/03/22(月) 01:03:10先に負け惜しみ書いて逃げてたのね、気付かずにレスして損した気分
コレって B::Func1() の事か?
完全なラッパー(生メソッドの使用を禁じる事ができる)でなくともラップの目的を果たせるのであれば意味は有るだろ
やはり何故ラップするのかって理由が判ってないんじゃないか?
B:Func1() と Awrapper で実装の手間も変わらないとか言うなよ、それこそ素人の証明になる
0886デフォルトの名無しさん
2010/03/22(月) 01:07:29おいもうそっとしておけ
やっと「オブジェクト指向的に問題ある」と言う妄言を撤回したんだから
0887デフォルトの名無しさん
2010/03/22(月) 01:11:59非常に見苦しかったが、決着はついた。
>885
>やはり何故ラップするのかって理由が判ってないんじゃないか?
将来性考えて云々は分かりますが、B::Func1を拡張する時点で
何処で使われているか確認しないと、危険だって事は分かってますか?
0889デフォルトの名無しさん
2010/03/22(月) 01:32:34俺たちがお前を貶めているんじゃなくて、お前が勝手に堕ちてってんだろ
悪いこと言わんからもう黙っとき
0890デフォルトの名無しさん
2010/03/22(月) 01:34:12拡張って何?
メソッドの機能を後で変更する話ならラップ関数に限定した話では無いよね
話をすり替えてないか?
884 名前:デフォルトの名無しさん[sage] 投稿日:2010/03/22(月) 00:26:45
>>876
言いたい事は分かるけどね
プロマネが『B::Func1() は A::Func1() のラップ関数ですので
将来の事を考えて B のメソッド実装において B::Func1() を使って下さい』
~~~~~~~~~~~~~~~~
0893デフォルトの名無しさん
2010/03/22(月) 01:58:50やはりラップの意味が判ってないね
『将来の事』というのは『環境の変化』を意味するのはラップの意図を理解していれば明白な事
A社が提供するライブラリ class A を使って何かの機能を実装していました
しかし、何かの理由でX社が提供するライブラリ class X を使用しないとならなくなりました
class A と class X ではインターフェイスも異なります
さて、ラッパーを噛ませないでBのメソッドがAのメソッドを直接コールしていたら修正作業はどうなりますか?
ラッパーを噛ませておいた場合はラッパー部分の修正だけで済みますけどね
後の環境変化に対して修正量を極力少なくするのがラッパーを噛ませる一番の理由だよ
そもそも Awrapper って書き方自体が変なんだよ
ラップは A を隠蔽するモノでは有るけど隠蔽対象が X になったり Y になったりした時に対応する為のもの
だから A が持つ機能で名前を付けるべきなんだよ
例えば WinSockWrapper なら winsock の機能をラップしたクラスとして妥当だけど CScokWrapper って名前にしちゃうと
意味が無いって事だね
まぁ CSock 自体が winsock をラップした様なもんだからこの例えは変だけど良いのが浮かばなかったから勘弁
そのケースも、例えば
class B {
public: Func2(){ m_pA->Func1(); }
private: A*m_pA;
};
と組んでいた場合、Awrapperを用意して↑のA*を書き換えれば、
Bの修正は1箇所で済むと思いますが。
(より適切な名前を付けるなら、Aadapterとすべきでしょうか。)
しかもこの方法なら、他にAを使っているクラスがあった場合に
Awrapperを使い回せます。
0895デフォルトの名無しさん
2010/03/22(月) 02:20:33勿論、B 以外のクラスでも A の機能を利用したい場合ならラッパークラスを作成するのは当然
B::Func1() はもっと手軽にラップを実現しようとした例で、もし B 以外のクラスも A を利用するならタコ実装だ
完全なラップ手法をとらなくとも用が足りてれば何の問題も無い
B::Func1() に意味が有ると言うのはそういう意味だ、いい加減に理解してくれ
0896デフォルトの名無しさん
2010/03/22(月) 07:14:48Awrapperを他のクラスで使いまわすとか言い出すのはタコ過ぎるだろw
0897デフォルトの名無しさん
2010/03/22(月) 09:20:40の書いたことは、いつもどおり通じないと思う…。
もう>>894には何も通じないとおもわれ。
Bのprivateメンバ変数を、Bがどう使うか、
BがBの都合によりどう呼び出すかは、
Bが決めることだから、
Bが用意した自分のためのprivateメソッドを、
Bが自分のために使うことは正常。
privateメソッドすら用意しなかった場合のことを考えると、
そのメリットが分かる。クラス実装上の保守性を高めている。
>>893
> そもそも Awrapper って書き方自体が変なんだよ
おれもそっちが気になる。
オブジェクト指向的に、っていうんなら、
クラス内部の実装のためのprivateメソッドがどうかというよりも、
Awrapperなんていうクラスを作ってしまうことが不気味。
0898砂漠の帝王 ◆.CzKQna1OU
2010/03/22(月) 09:22:440899デフォルトの名無しさん
2010/03/22(月) 09:52:45ラッパーって言葉は知ってたけど、その目的や存在意義を知らなかっただけでしょ
慌てて >>894 で見当違いなレスしてきたけど、今まで書いてきた事と整合性が取れてないよ
Awrapper から B を派生するのと B がラップメソッドを持つのを比較してたりしてたんだから
そして沈黙だし...
現場を知らない学生さんと見てるけど皆さんはどう思う?
0900デフォルトの名無しさん
2010/03/22(月) 09:54:18まさか折れるとは思わなかった。
0901デフォルトの名無しさん
2010/03/22(月) 09:58:19> void B::Func1() {_a->Func1();} と実装したところで、Bの他のメンバが
> a->Func1(); とFunc1を直接呼び出すのを禁止できないから、
> 集約するという役割は果たしていないと思うのですが。
イコール
折角Awrapperを実装したのに、タコ男君はBのメンバを実装中にAwrapperを無視してAへ直接アクセスしてしまいました。
これではアクセスをAwrapperに集約するという役割が果せていません。
このタコ男君にAwrapperの使用を強制するにはどうすれば良いのでしょうか??
結論
タコ男君、明日から来なくていいよ。
0902デフォルトの名無しさん
2010/03/22(月) 10:04:01ちょw的確な指摘だなw
0903デフォルトの名無しさん
2010/03/22(月) 10:17:06>>541 で『こーいうのが無駄だと言いたい』ではなく『何故こーいうのが必要なんですか』ってスタンスだったら
皆優しく接してたはずだろう
なんで >>541 みたいな書き方しかできないんだろうって思うよ
誰かが書いてたけど御免なさいって言えないのも悲しいし
0904デフォルトの名無しさん
2010/03/22(月) 10:23:26なんだかんだで楽しかったのに
0905デフォルトの名無しさん
2010/03/22(月) 10:37:50じゃ無く
発言は撤回しないけどキミらが貶したいなら勝手にすれば?(訳注:俺から見るとキミらの発言は「貶し」でしかないの意)
いやまてそんなことより実は○○の方が俺より酷くないか?(訳注:やっぱり俺だけ叩かれるのはイヤだの意)
だもんなw
これが釣りでも一字一句意識した煽りでもないんだとしたら、本当に屑野郎としか言いようが無い
0906デフォルトの名無しさん
2010/03/22(月) 10:44:150907デフォルトの名無しさん
2010/03/22(月) 10:49:570908デフォルトの名無しさん
2010/03/22(月) 10:52:49一つも口にする事が無かった◆79cfdX7bxM
合掌
0909デフォルトの名無しさん
2010/03/22(月) 10:56:100910デフォルトの名無しさん
2010/03/22(月) 11:03:39つ[鏡]
0911デフォルトの名無しさん
2010/03/22(月) 11:12:030912デフォルトの名無しさん
2010/03/22(月) 11:42:30流石に違うと思われ
インドリは、異論・指摘のある者全てをアラシ認定して暴れるから
奴のブログや、CodeZineでの並列処理関係の連載のコメント欄見れば分かる
いや、だからといって見る事はオススメしないけど
0913デフォルトの名無しさん
2010/03/22(月) 11:55:190914デフォルトの名無しさん
2010/03/22(月) 17:49:19ttp://indori.blog32.fc2.com/blog-entry-1003.html#cm
疲れた体に一服の清涼剤・・・
0915デフォルトの名無しさん
2010/03/22(月) 19:05:45別に言ってる事は、まともじゃね?
↑のURLしか見てないが
◆79cfdX7bxM=インドリと言ってる奴は相当の節穴
技術レベルが園児と高校生位は差があるっつの
インドリ憎しで汚物を撒き散らすな
0916デフォルトの名無しさん
2010/03/22(月) 19:07:180917デフォルトの名無しさん
2010/03/22(月) 19:15:59どっちが園児でどっちが高校生?
いや、素で・・・
0918デフォルトの名無しさん
2010/03/22(月) 19:20:49聞いた話によるとパイソンのインデントはアレなようで。
0919デフォルトの名無しさん
2010/03/22(月) 19:30:48ざっと読んだけど(目がちかちかする)、コメント欄でかみついてる方が何言ってるのかわからない。
並列処理で起こりうる問題点を話してるのに、グローバル変数をローカル変数に持って行ったら、
グローバルで参照しているところがみれなくなるとか、なにそれな指摘。
インドリという奴がどのコミュニティでどれだけ有名なのか、あるいは全く無名なのか知らないけど、
気に入らないならそこで叩けよ。
コードの不完全さを、運用でカバーするというスタンスはどうかと思いますよ。
他に方法が無いならともかく。
>896
>Awrapperを他のクラスで使いまわすとか言い出すのはタコ過ぎるだろw
使い回せるってのは>893が挙げた、AがXに変わった場合のケースですよ。
個々のクラスにラップ関数用意するのは、むしろ仕事増やしてるだけでしょうに。
クラス数×関数の数だけ修正が必要って事分かってますか?
>899
>そして沈黙だし...
メーカー系勤務なので今日も出勤です。
>901
>タコ男君、明日から来なくていいよ。
むしろこちらから願い下げです。
0921デフォルトの名無しさん
2010/03/22(月) 19:39:490922デフォルトの名無しさん
2010/03/22(月) 19:40:22ラッパーの話になってから、両者ともすげー読みづらいので読む気大幅ダウン。
Unix/Linuxのsoだとどうなのかな?
0923デフォルトの名無しさん
2010/03/22(月) 19:43:110924デフォルトの名無しさん
2010/03/22(月) 19:46:21いい加減自分に都合の良い前提を暗黙的に出したり引っ込めたりするのを止めろ
何時Awrapperは複数のクラスから参照される事になった
0925デフォルトの名無しさん
2010/03/22(月) 19:48:55◆79cfdX7bxMの相手をしてる方が何を主張したいのか良く解らない。
0926デフォルトの名無しさん
2010/03/22(月) 19:51:59主張すべきものは何も持ってないのであまり触らないであげて下さい。
0927デフォルトの名無しさん
2010/03/22(月) 19:54:37>>861が何を言いたいのか良くわからん。
derrivedという単語も知らんのかいな的な疑念もあるしw
0928デフォルトの名無しさん
2010/03/22(月) 19:56:440929デフォルトの名無しさん
2010/03/22(月) 19:56:47マゾっぽいんですね。わかります。
0930デフォルトの名無しさん
2010/03/22(月) 20:03:00privateであっても主語なんたらかんたらオブジェクト指向的に間違ってるなんたらかんたらを撤回させたいだけなんだがな。
>>920
>>882で撤回したと受け取っていいの?
凄い勢いの言い訳で撤回してるか微妙。
>敢えて言うなら、コレに意味があると思う人達が居るのが問題?
一応突っ込んでおくが、そんな奴居ないから。
お前のオブジェクト指向絡みの糞解釈を否定してるだけで誰一人その糞例を肯定していない。
0931デフォルトの名無しさん
2010/03/22(月) 20:04:140932デフォルトの名無しさん
2010/03/22(月) 20:05:090933デフォルトの名無しさん
2010/03/22(月) 20:07:48話の発端は>>521だから、そんな解釈はありえない。常識的に考えて。
0934デフォルトの名無しさん
2010/03/22(月) 20:08:04どうなんだろ的な話題を振ってみたりして。
class B {
public: void Func2(){ Func1(); }
private: void Func1(){ m_pA->Func1(); }
private: A*m_pA;
};
このようなコードにおいて、Func1() の存在意義として
A* が X* に変わった場合に、Func1()で吸収できると
>893は申し上げました。要はこうできると言いたいのでしょう。
class B {
public: void Func2(){ Func1(); }
private: void Func1(){ m_pX->Func3(); }
private: X* m_pX;
};
ですが、B::Func1など用意しておかなくても、
↓のよにすれば良いはずです。
class B {
public: void Func2(){ Func1(); }
private: void Func1(){ m_pA->Func1(); }
private: XA* m_pA;
};
class XA {
public: void Func1(){ m_pX->Func3(); }
private: X* m_pX;
};
この方法であればB以外のクラスでもA*を使っていた場合に
XAを使い回せる(他のクラスもA*をXA*に書き換えるだけで済む)はずです。
更にBが外部からAを受け取る形で実装されている場合、
XAをAから派生させて作ればもっと手間が減らせます。
0936デフォルトの名無しさん
2010/03/22(月) 20:09:25AWrapperという名前がおかしいという指摘に対する感想ね。
0937デフォルトの名無しさん
2010/03/22(月) 20:09:30マルチスレッドのデバッグでログ入れたりするから普通にアリ。完。
↓に注目。
>521
>どうしてもラッピングしたいなら、Mogeのエイリアスとなるクラスを用意して、
>そのクラスを使ってやるべき。
0939デフォルトの名無しさん
2010/03/22(月) 20:13:32>>895を読んだ上で言ってるのか?
0940デフォルトの名無しさん
2010/03/22(月) 20:13:37デバッグログなんか入れたら、予定外のコンテキストスイッチが起こるんじゃないか?
0941デフォルトの名無しさん
2010/03/22(月) 20:16:40お前には文脈と言う概念が無いんだな。
元々Hogeクラス一つのprivateメソッドで用が足りるはずの物に対しての話だろ。
何時Hoge1,Hoge2,Hoge3が現れてそれらがfunc()の中でMogeにアクセスする話になった?
アンカしろ。
0942デフォルトの名無しさん
2010/03/22(月) 20:17:45予定外のコンテキストスイッチとか言ってる時点でマルチスレッドプログラミングする資格無しw
0943デフォルトの名無しさん
2010/03/22(月) 20:18:16class Socketを作るという方法でラッパークラスを作るというのは間違ってないのよ。
誰もそれが間違いだなんて言ってない。
問題になってるのは、privateメソッドでopen()を呼ぶのがオブジェクト指向的に間違いという主張。
0944デフォルトの名無しさん
2010/03/22(月) 20:20:50> 問題になってるのは、privateメソッドでopen()を呼ぶのがオブジェクト指向的に間違いという主張。
ここだけ取り下げるのか取り下げないのか明確にしてくれ。
0945デフォルトの名無しさん
2010/03/22(月) 20:20:55動きかわって論理的なバグが出るなら直さなきゃならないものだし。
>>942
パフォーマンスとかの問題はあると思うけど。
0946デフォルトの名無しさん
2010/03/22(月) 20:23:29setter/getter使う派は、マルチスレッドなんて関係ない文脈での話ね。
0947デフォルトの名無しさん
2010/03/22(月) 20:25:47そうだ、この変数の変更はイベントにしようって経験が多数あっただけだろ
「オブジェクト指向的に」は既に取り下げました。
「privateメソッドでopen()を呼ぶのは間違い」は
「間違い」を「好ましくない」に改めます。
0949デフォルトの名無しさん
2010/03/22(月) 20:28:40そうなんだ。やっと安心してこのスレから離脱できる。
>>947
お前、話にならんわ。
0950デフォルトの名無しさん
2010/03/22(月) 20:31:13不覚にも涙が出そうになったよw
議論途中での間違いとかはもうどうでもいい。
俺も抜ける。
0951デフォルトの名無しさん
2010/03/22(月) 20:33:17じゃあ逆にsetter/getterを使う事の問題は?パフォーマンス上の理由以外で
0952デフォルトの名無しさん
2010/03/22(月) 20:44:37ビジネスロジックの「心底ウザい条件チェック」と「心底ウザい条件変更の多発」を経験してると、何だってsetter/getter経由にしたくなる
0953デフォルトの名無しさん
2010/03/22(月) 21:15:400954デフォルトの名無しさん
2010/03/22(月) 21:21:360955デフォルトの名無しさん
2010/03/22(月) 21:23:560956デフォルトの名無しさん
2010/03/22(月) 21:38:43と思ったが3年の歴史のあるスレがこの終り方はちょっと可哀想だわwww
0958デフォルトの名無しさん
2010/03/22(月) 21:49:02インデントはタブかスペースかなんてなんか長閑な話題でスタートしてたんだな。
0959デフォルトの名無しさん
2010/03/22(月) 22:34:130960デフォルトの名無しさん
2010/03/22(月) 22:35:36無駄なたらい回し、ってことじゃないの?本人じゃないから真意はわからんけど。
0961デフォルトの名無しさん
2010/03/23(火) 00:04:020962デフォルトの名無しさん
2010/03/23(火) 00:44:030963デフォルトの名無しさん
2010/03/23(火) 00:47:22コードが読みづらくなる。
つか、お前全部アクセッサ経由にしてるのか?
0964デフォルトの名無しさん
2010/03/23(火) 01:17:140965デフォルトの名無しさん
2010/03/23(火) 01:52:19齟齬が生じると思うのだけど。
個人的にはプロパティのある言語(LLやC#)ならともかく、
C++やJava(6.x系まで)では微妙な気がする。
0966デフォルトの名無しさん
2010/03/23(火) 01:57:550967デフォルトの名無しさん
2010/03/23(火) 03:18:430968デフォルトの名無しさん
2010/03/23(火) 04:05:37設計から導かれる setter/getter は 良い setter/getter。
実装から導かれる setter/getter は 悪い setter/getter。
0969デフォルトの名無しさん
2010/03/23(火) 04:07:130970934
2010/03/23(火) 11:21:23俺的にはいいも悪いも評価保留中だけど、それってどうなの的な話題ふり。
この議論は『Smalltalk Best Practice Patterns』が初出らしいんだけど、Smalltalk固有の
何かが関係しているのかどうかは不明。
ただ、俺が読んだ話(何で読んだかは忘れた)では、C++でprivateメンバ変数を
必ずアクセッサ経由で呼ぶという流派があって、その理由の一つは継承先で
getterを遅延評価に変えたりする可能性があるかららしい。
俺としては、そういう流派の人がもしいたら理由を聞きたい的なレベル。
0971934
2010/03/23(火) 11:22:31みたいな規約だったらどう思う?的なこと。
0972デフォルトの名無しさん
2010/03/23(火) 11:24:260973デフォルトの名無しさん
2010/03/23(火) 11:29:530974デフォルトの名無しさん
2010/03/23(火) 11:50:36今時のコンパイラなら空のアクセサを直接アクセスへのコード展開ぐらいしてくれるだろうし。
0975デフォルトの名無しさん
2010/03/23(火) 11:54:160976デフォルトの名無しさん
2010/03/23(火) 12:00:470977デフォルトの名無しさん
2010/03/23(火) 14:19:22> その理由の一つは継承先で
> getterを遅延評価に変えたりする可能性があるかららしい。
サブクラスがスーパークラスの getter に変更を加えるってピンと来ないな
privateメンバの getter でしょ、protectedメンバじゃなくて
0978デフォルトの名無しさん
2010/03/23(火) 14:24:06フツーにオーバーライドでは?
> privateメンバの getter でしょ、protectedメンバじゃなくて
えっ?
0979デフォルトの名無しさん
2010/03/23(火) 14:38:39privateのsetter/getterって誰がアクセスするの?
0980デフォルトの名無しさん
2010/03/23(火) 14:56:47アホを釣り上げて叩こうって意図?
0981デフォルトの名無しさん
2010/03/23(火) 17:56:12そしてクラス内でバッキングストアにアクセスするときもアクセサ使え、
って主張とちゃうの?是非はともかく。
1)
class Person {
public int age; // アクセサなんぞいらんわ
void aging() { age++; }
}
2)
class Person {
private int age;
public int getAge() { return age; }
public void setAge(int age){ this.age = age; }
public aging() { age++; } // private にアクセサ使うとか・・・
}
3)
class Person {
private int age;
public int getAge() { return age; }
public void setAge(int age){ this.age = age; }
public aging() { setAge(getAge() + 1); } // 継承対策っすよ
}
0982934
2010/03/23(火) 18:04:48全てのprivateメンバ変数に対するアクセスもsetter/getterを経由しろってのは、
Personの例でいえばこんな感じ。
class Person {
public:
void setName(const char* name) {
if (ミドルネームが存在したら) {
// isMiddleNameExist = true; こうはせずに
setIsMiddleNameExist(true); // こうしろ
}
}
protected:
virtual void setIsMiddleNameExist(bool b) {
isMiddleNameExist = b;
}
private:
bool isMiddleNameExist;
}
0984デフォルトの名無しさん
2010/03/23(火) 18:24:09クラス内でもフィールドの仕様が安定してないとかで変わるんじゃないの?
virtual 付けてたり、final みたいなオーバーライド禁止付けたりしないんであれば
アクセサ経由じゃないとオーバーライドの内容次第じゃおかしなことになるんじゃない?
0985デフォルトの名無しさん
2010/03/23(火) 20:23:03仕様は仕様の中で暮らしているかの違い
0986デフォルトの名無しさん
2010/03/23(火) 23:59:180987デフォルトの名無しさん
2010/03/24(水) 00:14:32それはもう手間の面でしか判断できん
0988デフォルトの名無しさん
2010/03/24(水) 00:27:40virtual付けないとオーバーライドできないけど?
0989デフォルトの名無しさん
2010/03/24(水) 00:28:26次スレいるのか?
0990デフォルトの名無しさん
2010/03/24(水) 00:38:340991デフォルトの名無しさん
2010/03/24(水) 03:15:580992デフォルトの名無しさん
2010/03/24(水) 07:23:580993デフォルトの名無しさん
2010/03/24(水) 09:21:05だから、「virtual 付けてたり」「finalみたいなオーバライド禁止尽けたりしないん」であれば
オーバーライドの内容次第でおかしくなるだろってこと。
0994デフォルトの名無しさん
2010/03/24(水) 10:03:570995デフォルトの名無しさん
2010/03/24(水) 17:06:21だから、「virtual”付けてたり”」「finalみたいなオーバライド禁止尽けたりしないん」であれば
オーバーライドの内容次第でおかしくなるだろってこと。
0996デフォルトの名無しさん
2010/03/24(水) 17:24:34privateメンバだぞ?
0997デフォルトの名無しさん
2010/03/24(水) 17:31:22>>981>>982 みれ
何ぞこのアホな幕引きは・・・
0998デフォルトの名無しさん
2010/03/24(水) 17:32:30要するに何が言いたいんだろう?
オーバーライドしようがしまいが、アクセッサ経由でしかアクセスできないだろ。
0999デフォルトの名無しさん
2010/03/24(水) 17:33:44privateメンバ変数の話だぞ?>>934見ろ馬鹿。
1000デフォルトの名無しさん
2010/03/24(水) 17:34:5910011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。