void RegisterUser(string firstname, string lastname, int age);
誰かがfirstname
とlastname
引数をミックスすることが簡単ですので、私はそれらを呼び出すときに私は明示的にこのようなメソッドの引数に名前を付けるなどのような方法を考えてみましょう。ただし、age
では実際には必要ありません。例えば、私はこれが明快さの観点からはOKであると思うでしょう。
RegisterUser(firstname: "John", lastname: "Smith", 25);
しかし、次のエラーがスローされます:
名前付き引数の仕様は、すべての固定引数がもう一つの興味深いものがある
指定された後に表示される必要があり、その署名は
だったらvoid RegisterUser(int age, string firstname, string lastname);
これをfoll owsはエラーを発生しません
RegisterUser(25, firstname: "John", lastname: "Smith");
なぜC#はこのように設計されていますか?最初のシナリオが許可されていれば、コンパイラに問題はありますか?
私は、Pythonでさえこのデザインを強制することは確信しています。私は、もしPythonが何かを強制するならば、それはおそらく非常に必要であるという経験則です。議論の順序は非常に必要です。 – James
@Jamesはい、pythonは順序付けを強制しますが、C#では、引数を明示的に命名した後に引数を並べる必要はありません。しかし、引数の部分的な名前付けが行われたときに順序付けを行うと、コードを自己文書化しやすくなり、コードを理解しやすくなります。 –
両方の言語で明示的に引数の名前を付けることができます。おそらく、私はそのことを以前より貧弱に言いました。同じ関数呼び出しで順序付けられた引数から明示的な命名に移動できますが、元に戻ることはできません。両方の言語で同じです。 – James