"Wenn" - Anweisung vs Java "switch" - Anweisung
Pattern matching in Kotlin ist schön und die Tatsache, die er nicht ausführen nächste pattern match ist gut, in 90% der Anwendungsfälle.
In Android, wenn die Datenbank aktualisiert wird, verwenden wir die Java-switch-Eigenschaft zu gehen, auf der nächsten Fall, wenn wir setzen Sie nicht ein break, um code, wie das suchen:
switch (oldVersion) {
case 1: upgradeFromV1();
case 2: upgradeFromV2();
case 3: upgradeFromV3();
}
Wenn also jemand eine app mit der version 1 des DB und verpasste die app-version mit DB-v2, bekommt er alle notwendigen upgrade-code ausgeführt.
Umgewandelt Kotlin, wir bekommen ein Durcheinander:
when (oldVersion) {
1 -> {
upgradeFromV1()
upgradeFromV2()
upgradeFromV3()
}
2 -> {
upgradeFromV2()
upgradeFromV3()
}
3 -> {
upgradeFromV3()
}
}
Wir haben hier nur 3-version vorstellen, bei der DB erreicht version 19 :/
Sowieso macht, wenn er in der gleichen Weise als Schalter? Ich habe versucht, weiterhin ohne Glück.
Ich denke, statistisch (keine Beweise, aber ich bin mir sicher, dass Kotlin-team verwendet Statistiken, um zu entscheiden), dass ein
switch
in Java hat fast immer eine break
in jedem Fall, daher ist es ungeeignet für den Allgemeinen Fall.InformationsquelleAutor Geob-o-matic | 2015-06-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfache, aber wortreiche Lösung ist:
Einer anderen Lösung mit Funktion Referenzen:
InformationsquelleAutor bashor
edit: Original-Antwort unten. Hier ist, was ich bin derzeit dabei:
Hier ist eine variation auf die Antwort @C. A. B. gab:
bearbeitet in meine aktuelle Lösung, die ist etwas schöner, meiner Meinung nach.
InformationsquelleAutor Julian Delphiki
Wie wäre es damit:
Hinzugefügt:
Ich mag die Idee von @lukle zu definieren, die upgrade-Pfad als Liste. Dies ermöglicht es zu definieren, verschiedene upgrade-Pfade für verschiedene Anfangsphase. Zum Beispiel:
Für die, die wir brauchen, um zu wissen, welche Elemente der Liste anwenden.
In diesem code Vs das gleiche sein könnte, als V-oder eine Art Sammlung von V-Werte mit überschrieben
equals(other: Any?): Boolean
Methode.InformationsquelleAutor C.A.B.
Es ist absolut möglich
Zitat aus der offiziellen Referenz : Ablaufsteuerung: wenn, wenn, für, während
So, wenn gleiche Bedingung Liste kurz ist, dann kann man die Liste noch zu trennen von der Koma oder Bereiche benutzen, wie Bedingung in 1..10 wie bereits in anderen Antworten
Vielen Dank für diese Antwort. Obwohl es nicht direkt die Frage beantworten, beantworten Sie eine Frage im Zusammenhang mit der Handhabung von verschiedenen Fällen in der gleichen Weise
Diese Antwort hat mir geholfen :), danke.
InformationsquelleAutor Yarh
Hier ist eine Mischung aus den beiden Antworten von bashor, mit ein wenig funktioneller Zucker:
InformationsquelleAutor lukle
Andere Variante von OP ' s Antwort:
Meine ursprüngliche Antwort impliziert, dass
oldVersion
müsste erhöht werden, innerhalb derwhen
- Anweisung. Ich habe bearbeitet die Antwort explizit zu zeigen, dassoldVersion
muss erhöht werden, um zu vermeiden, dass eine unendliche Rekursion. Danke für den Hinweis.InformationsquelleAutor arslancharyev31
Was Kotlin DSL für benutzerdefinierte Implementierung? So etwas wie dieses Ansatzes:
Druckt es:
case 1
case 2
case 4
UPD: Einige refactorings und Ausgabe Beispiel.
InformationsquelleAutor Victor Yevitchenko
Können Sie einfach die for-Schleife mit wenn.
InformationsquelleAutor John
InformationsquelleAutor lukDeveloper
Kotlin arbeitet mit einer anderen flow-control aufgerufen, wenn.
Ihrem code verwenden, wenn, kann auch sein.
Offensichtlich ist der code anders sein könnte, aber ich verstehe, dass deine Frage nur über die Verwendung von switch.
InformationsquelleAutor Bharat Vasoya