Sospecho que no voy a echar un vistazo a esta pregunta, pero soy muy programador experimentado y espero que algunos de los lectores más abiertos presten atención.
Creo que se adapta mejor a los lenguajes de programación orientados a objetos para que sus procedimientos de retorno de valor (VRP) sean deterministas y puros.
'VRP' es el nombre académico moderno para una función que se llama como parte de una expresión y tiene un valor de retorno que reemplaza teóricamente la llamada durante la evaluación de la expresión. Por ejemplo, en una declaración como x = 1 + f(y)
la función f
está sirviendo como un VRP.
'Determinista' significa que el resultado de la función depende solo de los valores de sus parámetros. Si lo vuelve a llamar con los mismos valores de parámetro, seguramente obtendrá el mismo resultado.
'Puro' significa que no hay efectos secundarios: llamar a la función no hace nada excepto calcular el resultado. Esto puede interpretarse en el sentido de no importante efectos secundarios , en la práctica, por lo que si el VRP emite un mensaje de depuración cada vez que se llama, por ejemplo, eso probablemente se puede ignorar.
Por lo tanto, si, en C #, su función no es determinista y pura, le digo que debe hacerla una void
función (en otras palabras, no un VRP), y cualquier valor que necesite devolver debe devolverse en uno out
o en un ref
parámetro.
Por ejemplo, si tiene una función para eliminar algunas filas de una tabla de base de datos y desea que devuelva el número de filas que eliminó, debe declararlo de la siguiente manera:
public void DeleteBasketItems(BasketItemCategory category, out int count);
Si a veces desea llamar a esta función pero no obtener la count
, siempre puede declarar una sobrecarga.
Es posible que desee saber por qué este estilo se adapta mejor a la programación orientada a objetos. En términos generales, se ajusta a un estilo de programación que podría llamarse (un poco impreciso) 'programación de procedimientos', y es un estilo de programación de procedimientos que se adapta mejor a la programación orientada a objetos.
¿Por qué? El modelo clásico de los objetos es que tienen propiedades (también conocidos como atributos), y usted interroga y manipula el objeto (principalmente) mediante la lectura y actualización de esas propiedades. Un estilo de programación de procedimientos tiende a facilitarlo, ya que puede ejecutar código arbitrario entre operaciones que obtienen y establecen propiedades.
La desventaja de la programación de procedimientos es que, debido a que puede ejecutar código arbitrario por todas partes, puede obtener algunas interacciones muy obtusas y vulnerables a los errores a través de variables globales y efectos secundarios.
Entonces, simplemente, es una buena práctica señalar a alguien que lee su código que una función podría tener efectos secundarios al hacer que no devuelva ningún valor.