英語版
このページの英語版を見る

レガシーコード

古いDコードとの互換性を維持するため、多くのレガシー機能が引き続きサポートされている。 このページでは、サポートされている各レガシー機能について説明し、コードを最新化する方法を提案する。 を提案する。

レガシー機能
FeatureSummary
body キーワードbody 契約文の後 代わりに を使う。do
alias ターゲット・ファースト構文代わりにalias name = target を使用する。
構造体/共用体のポストブリット代わりにコピーコンストラクタを使う。

body キーワード

body は、"契約"ステートメントの後に関数/メソッドのボディを指定するために使用されるキーワードであった:

class Foo
{
    void bar(int i)
    in { assert(i >= 42); }
    body { /* 何か面白いことをする */ }

    string method(string s)
    out(v) { assert(v.length == s.length); }
    body { /* もっと面白いことをする */ }

    void noBody() { /* 契約もボディもない */ }
}

是正措置

代わりにdo キーワードを使用する(v2.075.0 で導入):

void bar(int i)
in { assert(i >= 42); }
do { 
/* ママ、bodyはないよ! */ }
根拠: body キーワードは、この単一の目的のためだけに使用されていた。 D文法は文脈にとらわれないことを目指しているため、この一般的な単語は予約されていた、 そのため、他の言語(たとえばjavascript)とのインターフェイスでトラブルが頻発した。 (例:javascript)やコードの自動生成と連動させる際に、頻繁にトラブルが発生した。