¿Quizás esto se deba al principio de separación comando-consulta ?
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 métodos de objeto que tienen o no efectos secundarios (es decir, que alteran el objeto). La aplicación de CQS a las asignaciones de variables va más allá de lo habitual, pero se aplica la misma idea.
Un corto ilustración de por qué CQS es útil: Considere un lenguaje F / OO híbrido hipotético con una List
clase que tiene métodos Sort
, Append
, First
, y Length
. En imperativo estilo OO, uno podría querer 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 un estilo más funcional, es más probable que uno escriba 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()
Estos parecen estar intentando 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.
El uso de SCC, sin embargo, nos gustaría insistir en que si Append
y Sort
modificar la lista, deben devolver el tipo de unidad, lo que nos impide la creación de errores mediante el uso de la segunda forma cuando no debería. Por lo tanto, la presencia de efectos secundarios también se vuelve implícita en la firma del método.