Bueno, primer feature del Roadmap 2021. Hay muchos cambios:
se eliminó el constructor y los delegating methods de las clases (llamadas a self y super dentro del constructor)
se eliminó el fixture, ahora tenemos un método initialize (que permite variables locales)
se permite la inicialización lazy de atributos interactuando con los named parameters, y el método initialize, el orden es 1. definimos variables de la jerarquía, 2. llamamos a los named parameters, 3. inicializamos las referencias que no hayan quedado inicializadas por los named parameters, lo que permite hacer referencia a valores que me pasaron desde los named parameters, (podríamos eventualmente quejarnos si alguna referencia quedó en null, para achicar el scope lo dejé pendiente pero hay un test comentado en wollok-language) (*), 4. llamamos al initialize si está definido. Esto se implementó para object literals, named objects, classes y suites.
el initialize es un método común y corriente, no se puede reasignar consts, solo tiene el chiche de no requerir el override (para evitar confusiones cuando estamos en los primeros momentos de enseñar objetos), si lo ponés no pasa nada. Y si querés llamar a super no te pide que definas el override. La llamada a super() es explícita, el initialize() de Object no hace nada
hubo un refactor bastante fuerte del interpreter evaluator, por suerte justo un test de Wollok Game detectó un initializeAttribute que no iba, pero están pasando todos los tests
// this test is covered by validation but not by interpreter
// test "missing uninitialized attribute should fail instantiation" {
// assert.throwsException { new Ave(edad = 22) }
// }
Coverage decreased (-2.3%) to 83.846% when pulling 30109d7b32c0e5cd896ef3b4b378689da68464de on feature-removing-constructors into 1183b94bc480dd2a0ca5896085fd7dd6ec0d80ef on dev.
Bueno, primer feature del Roadmap 2021. Hay muchos cambios:
override
(para evitar confusiones cuando estamos en los primeros momentos de enseñar objetos), si lo ponés no pasa nada. Y si querés llamar a super no te pide que definas el override. La llamada a super() es explícita, el initialize() de Object no hace nada(*) el test es éste