Ich schreibe Kotlin-Code und eine der Features, die es hat, sind Erweiterungsmethoden, die effektiv die gleichen wie normale Funktionen sind, außer dass die Syntax, die Sie verwenden, aussieht wie eine Instanz Methodenaufruf.Wann Erweiterungsmethoden zu verwenden?
Normale Funktion
fun blah(x: Int) { println(x) }
val f = blah(1)
Erweiterungsmethode
fun Int.blah() { println(this) }
val f = 1.blah()
Soweit ich verstehe, C# Erweiterungsmethoden in ähnlicher Weise arbeiten.
Im Prinzip könnte jede Nicht-Nullartigkeitsfunktion als eine Erweiterungsmethode geschrieben werden, indem der Typ des ersten Parameters links vom Funktionsnamen verschoben und der Funktionskörper angepasst und die Sites dementsprechend aufgerufen werden (wie in diesem Beispiel). .
Sollte ich alle meine Funktionen als Erweiterungsmethoden schreiben, dann? Keiner von denen? Welchen Grundsatz sollte ich verwenden, um zu entscheiden, welche Funktionen normal zu schreiben sind, und welche als eine Erweiterungsmethode für einen der Eingänge zu schreiben?
IMO, sollten Sie vermeiden, Objekte zu erweitern, die Sie nicht besitzen –
@AlexeiLevenkov Das ist über Erweiterungsmethode vs Vererbung. Ich frage nach Erweiterungsmethode vs normale Funktion/statische Methode. – Jesse
@ MarcusHöglund Warum denkst du das? Sie können Ihre Erweiterungsfunktionen erweitern. Sie sind nicht global. Meiner Meinung nach ist das Schreiben von Erweiterungen für Klassen, die Sie nicht besitzen, einer der besten Anwendungsfälle für Erweiterungsfunktionen. Sie können lesbare DSLs schreiben. – marstran