1

これは奇妙な質問のように思えるかもしれませんが、コンストラクターで引数を順序付けする方法、特にコンストラクターがサブクラスで「得る」引数を追加する場所に関する規則はありますか? 次のようなコードを読んでいることに気付いた後、1つあるはずです(コードはGroovyですが、それは質問には関係ありません):

class Matter {
    double volume
    double mass

    Matter (double m, double v) {
        mass = m; volume = v;
    }
}

class Food extends Matter {
    double nutrition

    Food (double m, double v, double n) {
        super (m,v); nutrition = n;
    }
}

class Apple extends Food {
    double sweetness

    Apple (double s, double m, double v, double n) {
        super (m,v,n); sweetness = s;
    }

}

class GreenApple extends Apple {
    double acidity

    GreenApple (double a, double m, double n, double s, double v) {
        super (s,m,v,n); acidity = a;
    }
}

上で説明したように、GreenApple に到達すると、コンストラクターの引数にあった順序はなくなります。ただし、プログラマーが新しい引数をランダムに追加したわけではないことに注意してください。Food の作成者は、新しい引数は後ろに追加する必要があると考え、Apple の作成者はそれらを前に追加する必要があると考え、GreenApple のプログラマーは次のように考えました。引数はアルファベット順にソートする必要がありますが、一緒にすると、コンストラクターがかなり乱雑になります (ここではタイプ セーフは役に立ちません。これらはすべて double です)。

偶然にも (実際にはそうではありませんが)、これらは私が存在する可能性がある 3 つの規則でもあります。それで、私の質問は今、そのような慣習はありますか? もしあるとすれば、それは何ですか? また、言語間で違いはありますか?

4

1 に答える 1

0

私の知る限りでは、引数をアルファベット順にソートするなどの「難しい」規則はありません。コンストラクターまたはその問題に関する関数のIMHO引数は、最も重要なものから最も重要でないものに並べ替える必要があります。もちろん、それは解釈の対象ですが、チーム メンバー間の良好なコミュニケーションが解決できない問題ではありません。

実際、ほとんどの場合、コンストラクターの引数を外部から渡す必要がある場合は、サブクラスがコンストラクターの引数を並べ替えないことを期待します。しかし、例外を設ける非常に正当な理由が存在する可能性があります。

于 2014-02-12T21:11:38.517 に答える