¿Es posible iniciar una variable en el cuerpo de la condición while para Kotlin?

En el código a continuación:

var verticesCount: Int // to read a vertices count for graph // Reading until we get a valid vertices count. while (!Assertions.checkEnoughVertices( verticesCount = consoleReader.readInt(null, Localization.getLocStr("type_int_vertices_count")))) // The case when we don't have enough vertices. println(String.format(Localization.getLocStr("no_enough_vertices_in_graph"), Assertions.CONFIG_MIN_VERTICES_COUNT)) val resultGraph = Graph(verticesCount) 

estamos obteniendo el siguiente error en la última línea:

 Error:(31, 33) Kotlin: Variable 'verticesCount' must be initialized 

Assertions.checkEnoughVertices acepta una variable de tipo segura como argumento (verticesCount: Int), por lo que es imposible que verticesCount no esté inicializado o nulo aquí (y no obtenemos los errores correspondientes en esas líneas).

¿Qué está pasando en la última línea cuando la variable ya inicializada se desinicializa de nuevo?

    La syntax que ha usado denota una llamada de function con arguments con nombre , no la asignación de una variable local. Entonces verticesCount = es solo una explicación para el lector de que el valor que se está pasando aquí para checkEnoughVertices corresponde al parámetro de esa function llamada verticesCount . No tiene nada que ver con la variable local llamada verticesCount declarada justo arriba, por lo que el comstackdor cree que aún debe inicializar esa variable.

    En Kotlin, la asignación a una variable ( a = b ) no es una expresión, por lo que no puede usarse como un valor en otras expresiones. Debe dividir la asignación y la condición while-loop para lograr lo que desea. Haría esto con un ciclo infinito + una condición dentro:

     var verticesCount: Int while (true) { verticesCount = consoleReader.readInt(...) if (Assertions.checkEnoughVertices(verticesCount)) break ... } val resultGraph = Graph(verticesCount)