Discussion:
Kotlin: Block zeitig verlassen, goto simulieren
(zu alt für eine Antwort)
Markus Schaaf
2024-04-18 20:10:46 UTC
Permalink
Mal sehen, ob hier noch jemand liest, und dazu auch noch
Erfahrung mit Kotlin hat. :-)

Ich schreibe einen Parser für ein Netzwerkprotokoll. Viele kleine
Paketklassen, die einzelne Nachrichten repräsentieren etwa so:

class BlaMsg( val arg1: Type1 /*, ... */ ) {

fun write( buf: ByteBuffer ) { /* ... */ }

fun read( buf: Bytebuffer ) {
if( buf.get() != 0x20 ) throw IOException( "bad msg ..." )
val v = buf.get()
/* ... */
if( v and 0x01 != 0 ) throw IOException( "bad msg ..." )
/* ... */
}
}

Die Exception ist immer gleich, ich brauche an der Stelle keine
Varianz. Die ganze throw-Klausel könnte tatsächlich auch etwas
komplexer sein und ein paar lokale Werte verwursten. Goto gibt's
anscheinend nicht. Eine extra Funktion will ich sehr gerne
vermeiden. Also hatte ich die Idee:

do {
/* ... */
if( sometest() ) break
return
}
while( false )

throw IOException( "..." )

Allerdings scheint das kein typisches Idiom in der Sprache zu
sein. Jedenfalls labert Android-Studio dann immer von unreachable
Code. Der Editor und sogar der Compiler.

Hinweise, Ideen?

MfG
Markus Schaaf
2024-04-18 21:30:36 UTC
Permalink
Post by Markus Schaaf
Eine extra Funktion will ich sehr gerne
vermeiden.
Was, wie ich gerade herausfand, völlig blöde ist: Kotlin hat
lokale Funktionen, die Closures sind. Wie ihr seht, lerne ich die
Sprache erst. :-)

MfG

Loading...