第8章. 静的メソッドからトップレベル関数へ
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
スタンドアロン関数はソフトウェアの基本的な構成要素の1つである。 Javaではクラスのメソッドとして宣言しなければならないが、Kotlinではトップレベルのエンティティとして宣言することができる。 どのような場合にトップレベル関数を使うべきなのか、Javaからどのようにリファクタリングすればよいのか。
Javaスタティクス
Java では、メンバー値をフィールド、メンバー関数をメソッドと呼び出す。 デフォルト値では、フィールドの値はクラスのインスタンス単位であり、インスタンスが異なれば値も異なる。 メソッドもインスタンス単位であり、呼び出されたインスタンスの状態にアクセスできる。
しかし、フィールドをstatic 、クラスのすべてのインスタンス間で共有される。静的メソッドはこの共有された状態(および他のクラスの可視静的フィールド)にしかアクセスできないが、この制限の代わりに、クラスのインスタンスを必要とせずにメソッドを呼び出すことができる。
Javaを単純化するために、言語設計者はすべてのコードとデータをクラスに縛り付けた。 クラスにスコープされた静的ステートがあるのだから、クラスにスコープされた静的メソッドが必要だ。 独立したデータや関数を追加することもできたが、静的フィールドとメソッドで十分だ。 言語にオプションがあれば、開発者はそのどちらかを選ばなければならなくなるが、選択肢は少ないほうがいいことが多い。 設計者はこの言語設計の決定をJava仮想マシンに引き継いだが、Java仮想マシンにはトップレベルのコードやデータを表現する手段がない。
静的メソッドと非静的メソッドの両方が同じ型に作用するクラスがあることもある。たとえば、第3章で見た静的解析メソッドを持つEメールクラスなどだ。しかし、静的メソッドだけで構成されたクラスができることもよくある。共有する静的状態がない場合、これらのメソッドは実際には、java.util.Collections クラスのメソッドのように、クラス名を介して呼び出される、グループ化された独立した関数にすぎない: ...