これがこの質問をするのに適切なフォーラムかどうかはわかりませんが、コードについて言及しているので、ここで質問しています。
本「Groovy in action」のセクション 7.1.4 (名前付きパラメーター) で、著者は、名前付きパラメーターの使用は、「オプションのパラメーターを持つ不変クラスを作成する際に頻繁に発生する」と述べています。
クラスの不変性は、オプションのパラメーターと何の関係がありますか? この 2 つのトピックは完全に直交していると思いました。
これがこの質問をするのに適切なフォーラムかどうかはわかりませんが、コードについて言及しているので、ここで質問しています。
本「Groovy in action」のセクション 7.1.4 (名前付きパラメーター) で、著者は、名前付きパラメーターの使用は、「オプションのパラメーターを持つ不変クラスを作成する際に頻繁に発生する」と述べています。
クラスの不変性は、オプションのパラメーターと何の関係がありますか? この 2 つのトピックは完全に直交していると思いました。
オプションのパラメータを持つ不変クラスを作成する際に頻繁に発生します
上記の文は、「クラスパラメータ」などがないため、少しぼやけています。メソッド/コンストラクタパラメータに関連しているとしか考えられません。
コンストラクターについて話しているとき、Groovyの名前付きパラメーターは、オプションのパラメーターについて話しているときに意味があります。
@groovy.transform.Immutable
class Person {
String firstName
String lastName
Integer age
}
def p = new Person(age: 42, lastName: 'Doe')
上記の例は、不変のPerson
インスタンスを作成する方法を示しています。はfirstName
名前付きパラメーターとして提供されていません。オプションです。実際、名前付きパラメーターを使用すると、すべての組み合わせに対してコンストラクターを実際に実装しなくても、コンストラクター呼び出しを行うときに任意のパラメーターの組み合わせを指定できます。
Haki氏によるこのブログ投稿に示されているように、インスタンス/静的メソッド呼び出しで名前付きパラメーターを使用する可能性もあります。
そのステートメントの鍵は、不変のクラスを扱っている場合、コンストラクターで状態を設定する機会が1回しかないことを意味します。通常、セッターを介して(可変)オブジェクトを一度に1つずつ操作して、目的の状態を構築することができます。不変の場合、オプションのparamsなどの機能が利用できない場合は、代わりに、インスタンス化状態の可能なすべてのセットに対してctorを作成する必要があります。多くのフィールドを持つクラスの場合、これは厄介になる可能性があります。