¿Por qué no se permite `return` en el bloque de inicio de Kotlin?

Si compilo esto:

class CsvFile(pathToFile : String) { init { if (!File(pathToFile).exists()) return // Do something useful here } } 

Me sale un error:

Error: (18, 13) Kotlin: 'return' no está permitido aquí

No quiero discutir con el comstackdor, pero tengo curiosidad sobre la motivación detrás de esta restricción.

Esto no está permitido debido a un posible comportamiento contrario a la intuición con respecto a varios bloques init { ... } , que pueden conducir a errores sutiles:

 class C { init { if (someCondition) return } init { // should this block run if the previous one returned? } } 

Si la respuesta es 'no', el código se vuelve frágil: agregar un return en un bloque de init afectaría a los otros bloques.

Una posible solución que le permite finalizar un solo bloque de init es usar alguna function con lambda y un retorno labeldo :

 class C { init { run { if (someCondition) return@run /* do something otherwise */ } } } 

O use un constructor secundario explícitamente definido:

 class C { constructor() { if (someCondition) return /* do something otherwise */ } } 
  • illegalArgumentsException en super.onCreate (saveInstanceState) en Kotlin
  • ¿Es posible anular Java getter (método) con Kotlin val (propiedad)?
  • Lista de carga de ConfigurationProperties desde YML
  • Por qué no puedo hacer reference a los arguments del constructor dentro de la class al definir el object
  • ¿Los methods de extensión y las properties de extensión son malas prácticas?
  • Evaluación dinámica de cadenas con plantilla en Kotlin
  • findViewById ClassCastExcpetion
  • Java.lang.ClassNotFoundException: no encontró la class Kotlin
  • Cómo restablecer FrameLayout o eliminar el caching de layout
  • Teclear argumento no reconocido en Kotlin
  • BigInteger en Kotlin