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) } 
  • ¿Por qué algunos methods de configuration de Java se convierten automáticamente en properties de Kotlin pero otros no?
  • Kotlin Vertx Type Mismatch encontrado Future <Unit> expected Handler <AsyncResult <Void >>
  • Mocking methods de Kotlin con Java + Mockito
  • Clase abstracta Kotlin java IllegalAccessError
  • Llamar a kotlin funciones que son palabras key en java de java?
  • Jinq en Kotlin: ¿cómo convertir lambda en Java Serialized Lambda?
  • Kotlin: No se puede usar GenericTypeIndicator para llamar al getValue de Firebase Database
  • Kotlin: cómo pasar la matriz a la anotación de Java
  • Referencia no resuelta de Kotlin: println de gradle en la CLI
  • String :: toByteArray () no se comstack en Kotlin
  • Kotlin utiliza la interfaz de callback de Java