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) } 
  • ¿Cómo se usa Flowable.generate de Kotlin?
  • Smart Cast no funciona como se esperaba
  • ¿Por qué tengo que devolver Unit.INSTANCE al implementar en Java una function Kotlin que devuelve una Unidad?
  • Kotlin: No se puede usar GenericTypeIndicator para llamar al getValue de Firebase Database
  • Clase abstracta Kotlin java IllegalAccessError
  • Acceso a la function de extensión de Kotlin Campo privado de Java
  • Jinq en Kotlin: ¿cómo convertir lambda en Java Serialized Lambda?
  • ¿Por qué algunos methods de configuration de Java se convierten automáticamente en properties de Kotlin pero otros no?
  • Arquitectura del propio SDK - API de método asíncrono en Kotlin
  • Kotlin: atribuye visibilidad al object complementario
  • Conversión de la implementación Thread / Runnable de Java a Kotlin