<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>言語</title><link>http://blogs.wankuma.com/izmktr/category/1918.aspx</link><description>言語</description><managingEditor>出水 洸太郎</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>出水 洸太郎</dc:creator><title>[言語]private不要論</title><link>http://blogs.wankuma.com/izmktr/archive/2008/09/06/155708.aspx</link><pubDate>Sat, 06 Sep 2008 00:59:00 GMT</pubDate><guid>http://blogs.wankuma.com/izmktr/archive/2008/09/06/155708.aspx</guid><wfw:comment>http://blogs.wankuma.com/izmktr/comments/155708.aspx</wfw:comment><comments>http://blogs.wankuma.com/izmktr/archive/2008/09/06/155708.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blogs.wankuma.com/izmktr/comments/commentRss/155708.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/izmktr/services/trackbacks/155708.aspx</trackback:ping><description>&lt;P&gt;以前、privateは不要、という事を言ったことがあります。&lt;BR&gt;privateというのはアクセス修飾子のことです。&lt;/P&gt;
&lt;P&gt;privateはなくして、protected扱いにする。&lt;BR&gt;そして関数はすべてvirtualがついたものとする。&lt;BR&gt;これがprivate不要論の趣旨です。&lt;BR&gt;要するに、派生クラスは基底クラスを自由に扱えるべきだ、という考えです。&lt;/P&gt;
&lt;P&gt;Aというクラスに機能を追加したBというクラスを作ることができる、という説明を見て、&lt;BR&gt;機能追加したくても、アクセス修飾子でガードされれていたら手が出ない、と思ったからです。&lt;/P&gt;
&lt;P&gt;しかし、これは大きな間違いでした。&lt;BR&gt;正しいアプローチとしては、基底クラスそのものを書き換えてprivateを外したりsetterを作ればいいのです。&lt;BR&gt;もし、ソース編集の権利がなければ、再作成するしかないのです。&lt;/P&gt;
&lt;P&gt;派生ってのは関数の引数と同じようなものと考えられます。&lt;BR&gt;引数にない項目に対しては変更できないと同じように、&lt;BR&gt;書き換えられるもの、書き換えられないものというのが派生した場合にも存在するわけです。&lt;/P&gt;
&lt;P&gt;ただ、private不要論の発端だけは間違ってないような気がしていました。&lt;BR&gt;そのきっかけがC#のsealedで、派生禁止というアプローチがあったんだ！と気付きました。&lt;BR&gt;（Javaの方が先だと思うけど、私が知った順序なので。）&lt;/P&gt;
&lt;P&gt;基底クラスはどのように派生して使われるべきか設計段階で盛り込む必要があります。&lt;BR&gt;だったら、派生のことを考えていないクラスに対して派生するのがそもそもおかしいわけです。&lt;/P&gt;
&lt;P&gt;ということで、デフォルトでは派生禁止論を推します。&lt;/P&gt;
&lt;P&gt;#仮に派生可能というキーワードがあったらなんだろう&amp;#8230;deriveable ？？&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/izmktr/aggbug/155708.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>出水 洸太郎</dc:creator><title>[言語]ぼくのかんがえた超構文</title><link>http://blogs.wankuma.com/izmktr/archive/2008/08/08/152243.aspx</link><pubDate>Fri, 08 Aug 2008 03:12:00 GMT</pubDate><guid>http://blogs.wankuma.com/izmktr/archive/2008/08/08/152243.aspx</guid><wfw:comment>http://blogs.wankuma.com/izmktr/comments/152243.aspx</wfw:comment><comments>http://blogs.wankuma.com/izmktr/archive/2008/08/08/152243.aspx#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.wankuma.com/izmktr/comments/commentRss/152243.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/izmktr/services/trackbacks/152243.aspx</trackback:ping><description>&lt;P&gt;C言語のstructを初期化するにはこんな書き方をしていました。&lt;/P&gt;&lt;PRE class=Cpp name="code"&gt;struct Point{
  float x, y, z;
  int color;
};
struct Point pt[] = {
  {0.0f, 0.0f, 0.0f, 0x00ffffff},
  {1.0f, 0.0f, 0.0f, 0x00ff00ff},
  {0.0f, 1.0f, 0.0f, 0x00ffff00},
  {0.0f, 0.0f, 1.0f, 0x0000ffff},
};
&lt;/PRE&gt;
&lt;P&gt;C99ではこういう風にも書けます。&lt;/P&gt;&lt;PRE class=Cpp name="code"&gt;struct Point pt[] = {
  {.color = 0x00ffffff, .x = 0.0f, .y = 0.0f, .z = 0.0f},
  {.color = 0x00ff00ff, .x = 1.0f, .y = 0.0f, .z = 0.0f},
  {.color = 0x00ffff00, .x = 0.0f, .y = 1.0f, .z = 0.0f},
  {.color = 0x0000ffff, .x = 0.0f, .y = 0.0f, .z = 1.0f},
};
&lt;/PRE&gt;
&lt;P&gt;C++0xにもこの構文は取り入れられないようです。&lt;BR&gt;C++ではコンストラクタを使って初期化しろ、ってことなのでしょう。&lt;BR&gt;個人的に、structがメンバ関数を持てるってのが非常に抵抗があって、&lt;BR&gt;出来たらPOD型を保障するものであって欲しいのですが&amp;#8230;。&lt;/P&gt;
&lt;P&gt;さて、CにしろC++にしろ、最初の構文に対する糖衣構文が用意されたわけです。&lt;BR&gt;セミコロンで並べたものの順序に依存するってのは気持ち悪いんでしょうか。&lt;/P&gt;
&lt;P&gt;そのくせ、コンストラクタを使った場合、これも並び順で決定されるわけですが、&lt;BR&gt;セミコロンはダメでもカンマはOKというダブルスタンダードがありそうです。&lt;/P&gt;
&lt;P&gt;ってな事を考えていたら脳内でミックスされますた。&lt;/P&gt;&lt;PRE class=Cpp name="code"&gt;// 関数を宣言すると&amp;#8230;
int foo(float x, float y, float z, int color);
// 引数を構造体にしたものが自動的に宣言される
struct foo.param{
  float x;
  float y;
  float z;
  int color;
};
void sample(){
  //引数構造体(仮)を使えば&amp;#8230;
  foo.param prm
  prm.x = prm.y = prm.z = 0.0f;
  prm.color = 0x00ffffff;
  
  // こういう呼び出しも可能
  foo(prm);
}
//委譲も簡単に！
int hoo(foo.param p){ foo(p);}
&lt;/PRE&gt;
&lt;P&gt;C++は無理でもC#あたりはやってくれないかしら。&lt;/P&gt;
&lt;P&gt;参照？可変長引数？多重定義？？&lt;BR&gt;アー聞こえない聞こえない。(∩ﾟдﾟ) &lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/izmktr/aggbug/152243.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>