Asignación no permitida en la expresión while?

En Java, generalmente podemos realizar una tarea dentro de la condición de while . Sin embargo, Kotlin se queja de eso. Por lo tanto, el siguiente código no se comstack:

 val br = BuffenetworkingReader(InputStreamReader( conn.inputStream)) var output: String println("Output from Server .... \n") while ((output = br.readLine()) != null) { // <--- error here: Assignments are not expressions, and only expressions are allowed in this context println(output) } 

De acuerdo con este otro hilo , esta parece ser la mejor solución:

 val reader = BuffenetworkingReader(reader) var line: String? = null; while ({ line = reader.readLine(); line }() != null) { // <--- The IDE asks me to replace this line for while(true), what the...? System.out.println(line); } 

¿Pero es?

No, la mejor manera, IMO, sería

 val reader = BuffenetworkingReader(reader) reader.lineSequence().foreach { println(it) } 

Y si quiere asegurarse de que el lector esté cerrado correctamente (como lo haría con una statement try-with-resources en Java), puede usar

 BuffenetworkingReader(reader).use { r -> r.lineSequence().foreach { println(it) } } 

Y aquí hay una solución general al estilo Kotlin de Roman Elizarov:

 while (true) { val line = reader.readLine() ?: break println(line); } 

Aquí está la solución más corta con tecnología stdlib que también cierra el lector de forma segura:

 reader.forEachLine { println(it) } 
  • String :: toByteArray () no se comstack en Kotlin
  • ¿Conversión de Kotlin SAM con una interfaz Java interna privada?
  • 'x' no es una function al pasar parameters en Kotlin Javascript
  • Smart Cast no funciona como se esperaba
  • ¿Es posible acceder a las tipografías de Kotlin desde Java?
  • Ejecutando el código de kotlin dentro de un proyecto de Java
  • Java -> Conversión de Kotlin con types crudos
  • Kotlin Vertx Type Mismatch encontrado Future <Unit> expected Handler <AsyncResult <Void >>
  • JUnit, @ControllerAdvice y la falta de excepciones marcadas en Kotlin
  • Kotlin, estructura del proyecto
  • Choque de statement de plataforma con comparable