wollok icon indicating copy to clipboard operation
wollok copied to clipboard

Null, void y la mar en coche

Open nscarcella opened this issue 4 years ago • 3 comments

  • null es un valor, representa la opcionalidad y es distinto a las abstracciones con las que pensamos la "no-inicialización" o el "no-retorno" (void).
  • void no es una expresión y, por lo tanto, no es referenciable.
  • El estado inicial de cualquier variable o atributo no debería ser ni void ni null. Es una tercer cosa que tampoco es un valor y representa no estar inicializado. El objetivo es que rompa el programa distinto que un null.

Hay una propuesta de ser más explicitos y sobre la naturaleza de null y decir que es un objeto. Conceptualmente, para un alumno, ya es un objeto. Podría estar bueno hacer que sea un object posta de lang (simplificaría bastante algunos chequeos y natives) pero puede ser muy costoso y no valer la pena.

Podríamos abrir otro ticket a más largo plazo para reificar el null. Una alternativa temporal sería crear un objeto null en lang e ignorarlo en wollok-xtend. Para esto tendríamos que hacer sanities de todas las operaciones de Object para null (creo que muchos ya existen) y hay que testear casos donde sea la propia vm la que le tira los mensajes.

Vamos a no cambiar "null" por "nothing" para no migrar mil ejemplos.

nscarcella avatar Sep 28 '20 00:09 nscarcella

Si el valor inicial de las variables pasase a ser algo que no es null, tendría sentido (y sería posible) sacar null del lenguaje directamente? En que casos querríamos que lo usen a diferencia de alguna otra alternativa?

JuanFdS avatar Nov 10 '20 00:11 JuanFdS

@JuanFdS Eso se charló ese día, y creo que consensuamos en dejar null para esos casos que realmente querés que un atributo no tenga ningún valor, contemplado por el dominio (y evitar forzar a modelar con Null Objects cuando podría no ser necesario).

PalumboN avatar Nov 10 '20 01:11 PalumboN

@PalumboN awww me perdí la discusión D:. Pero aun en esos casos es null la mejor opción? Que tan seguido aparece ese problema? Y no se podrían cubrir esos casos con algo como un Option al que se le puedan mandar mensajes?

Además, por más de que el lenguaje venga sin null, de ser absolutamente necesario no debería ser mas dificil que: object nada {} para que ahora exista y se pueda usar, no?

JuanFdS avatar Nov 11 '20 02:11 JuanFdS