Quizás esto se deba al principio command-query separation?
CQS tiende a ser popular en la intersección de OO y estilos de programación funcional, ya que crea una distinción obvia entre los métodos de objeto que tienen o no tienen efectos secundarios (es decir, que alteran el objeto). Aplicar CQS a asignaciones variables es llevarlo más allá de lo habitual, pero se aplica la misma idea.
breve ilustración de por qué CQS es útil: Considere un lenguaje híbrido hipotético F/OO con una clase List
que tiene métodos Sort
, Append
, First
, y Length
. En el estilo OO imprescindible, uno podría desear escribir una función como esta:
func foo(x):
var list = new List(4, -2, 3, 1)
list.Append(x)
list.Sort()
# list now holds a sorted, five-element list
var smallest = list.First()
return smallest + list.Length()
Mientras que en el estilo más funcional, se haría más probable que escribir algo como esto:
func bar(x):
var list = new List(4, -2, 3, 1)
var smallest = list.Append(x).Sort().First()
# list still holds an unsorted, four-element list
return smallest + list.Length()
Estas parecen ser tratando para hacer lo mismo, pero obviamente uno de los dos es incorrecto, y sin saber más sobre el comportamiento de los métodos, no podemos decir cuál.
Usando CQS, sin embargo, insistiríamos en que si Append
y Sort
alteran la lista, deben devolver el tipo de unidad, impidiéndonos crear errores utilizando el segundo formulario cuando no deberíamos. La presencia de efectos secundarios, por lo tanto, también queda implícita en la firma del método.
David Pollack ha publicado información de primera mano, bastante respaldada por el comentario que el propio Martin Odersky dejó en su respuesta. Creo que uno puede aceptar con seguridad la respuesta de Pollack. –