Markus Schaaf
2024-04-18 20:10:46 UTC
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
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