ぼくのかんがえたさいきょうすたいる(Dげんごへん)

http://www.digitalmars.com/d/2.0/dstyle.html
基本これに準拠するのだけど違うところだけ.

White Space

インデントは空白4文字だけ,タブなどいらぬ!

Comments

最近

/*
This is comment!
 */

でもいいかなぁと思ってたのだけど,やっぱり

/*
 * This is comment!
 */

に落ち着いている

Naming Conventions

プロパティと名前が被る時の命名にずっと悩んでいた.

class Foo
{
    private int foo;  // fooがコンフリクト!どうするか…

    int foo() { return foo; }
}

D言語での候補はm_foo,mFoo,_foo,foo_の4つ.結果今まで使っていたfoo_に落ち着いた.以下理由で,_fooとfoo_は本当感覚の問題になっている.

  • m_foo

これはC++D言語でも広く使われていて,最初これにしようかと思っていた.しかしm_がメンバ変数を表すことを考えると

struct Foo
{
    int bar;
    int baz;
}

のようなpublicなメンバ変数にもついてないとおかしい感じがする.しかしこれにm_がついてると邪魔すぎる.ということで,なんか統一感がないので止めることにした.

  • mFoo

m_fooと同じような問題があるし,mがメンバのmなのか何かの略語なのか分かりにくいのでどうにも嫌.このスタイルは最近知ったのだけど,意外に採用してる所があるようだ.

  • _foo

実は使っている人はあまり見ないのだけど,Andreiが使っているのでPhobosを読んでいると結構遭遇する.Igorも使っているので,今後D言語界隈では増えるかもしれない?
これは結構良い気がするのだけど,__gsharedとか__traitsとかのせいか_を前につけるのに微妙に抵抗がある(Perlなんかは_なシンボルは外部からは参照しないという暗黙の了解があるようだけども).

_foo = 1;
bar  = 2;

ローカル変数と混ざるとちょっと違和感があるのが問題か?これもあるしどうなんだろうと > "Names shall not begin with an underscore '_'."

  • foo_

Exceptional C++で「_を変数名の前につけるんじゃねー」的な教えがあるからか,Boostとかでも結構使われている(ADL回避もこれのようだ).

foo_ = 1;
bar  = 2;

で_fooよりは見たはいいのだけど

foo_.method;
bar.method;

メンバ関数呼び出しが伴ったりするとちょっとダサい.しかし,自分としてはまだこっちの方が許容できると言うことでfoo_で行くことにした.で,なんかプロパティがあるメンバ変数だけ_がついてるとダサいので,protected/privateなメンバ変数には_をつけることにした.

Const names / Enum member names

ケースバイケースになる

// Const
enum isFoo = false;
immutable MAX_SIZE = 10;

enum Mode
{
    READ,
    WRITE
}

enum Opcode
{
    mov,
    call,
    etc
}

こんなもんかなぁと.