私はKotlinコードを書いていますが、その機能には拡張メソッドがあります。これは、使用する構文をインスタンスメソッド呼び出しのように見せている以外は、通常の関数と実質的に同じです。拡張メソッドはいつ使用しますか?
正常な機能
fun blah(x: Int) { println(x) }
val f = blah(1)
拡張メソッド私の知る限り理解し
fun Int.blah() { println(this) }
val f = 1.blah()
、C#の拡張メソッドも同様に動作します。
原則として、最初のパラメータの型を関数名の左側に移動し、関数本体を調整してそれに応じてサイトを呼び出すことにより、文字通り任意の非null関数を拡張メソッドとして記述できます(この例のように) 。
すべての機能を拡張メソッドとして記述する必要がありますか?そのなかで何も?どんな機能を正常に書くのか、そして入力の一つの拡張方法として書くのかを決定するために私はどのような原則を使うべきですか?
一般的に、あなたは自分が所有していないオブジェクトを拡張しないでください。 –
@AlexeiLevenkovそれは拡張メソッドと継承についてです。私は、拡張メソッドと通常の関数/静的メソッドについて質問しています。 – Jesse
@MarcusHöglundなぜそれを考えるのですか?拡張機能のスコープを設定することができます。彼らはグローバルではありません。私の意見では、あなたが所有していないクラスにエクステンションを書くことは、エクステンション関数の最良のユースケースの1つです。それは、あなたが読みやすいDSLを書いてみましょう。 – marstran