Estaba trabajando en algún código F # y estaba trabajando en una función para devolver una cadena aleatoria de un conjunto de cadenas. Vamos a decir que he tenido algo como esto:¿Está devolviendo un valor aleatorio de la función A Side Effect?
open System
let a = [|"a";"b";"c";"d"|]
let rstring (arr:string[]) =
let r = new Random()
arr.[r.Next(0,3)]
let resultstring = rstring a;;
Mi pregunta es la siguiente: Mi comprensión de la noción de programación funcional es que si una función dada tiene la misma entrada cada vez que debería devolver siempre la misma salida. Entonces, ¿en este caso particular, devolver una cadena diferente cada vez es un "efecto secundario"? Tengo curiosidad.
Si esta es una pregunta duplicada, solo apúntame al original y cerraré esto. No estoy seguro de qué cadena de búsqueda utilizaría para encontrar preguntas relacionadas con esta.
EDIT: Gracias por toda la información a todos. Parece que combiné los conceptos de transparencia referencial y la falta de efectos secundarios. Entonces, gracias a todos por ponerme directamente en la diferencia y gracias por sus respuestas.
Siempre devolver el mismo resultado para los mismos argumentos en realidad significa ser puro, no libre de efectos secundarios (las definiciones de los efectos secundarios ya se publicaron). – delnan
Cuando comienzas a elegir liendres, los "efectos secundarios" no son un concepto interesante en el software. La transparencia y/o la pureza referencial son los conceptos interesantes/útiles, y las funciones aleatorias/no determinadas no son referencialmente transparentes, y eso es lo que importa. Entonces, en cierto sentido, el OP está haciendo la pregunta incorrecta, o al menos no es una pregunta interesante/útil. La pregunta planteada por el título selecciona liendres sobre definiciones. Lo que importa para el software es que si su función devuelve valores diferentes para las mismas entradas, entonces lo abre a toda una clase de errores. – Brian
@delnan - pure por definición requiere que la función no tenga efectos secundarios. El hecho de que una función siempre devuelva los mismos resultados no la hace pura. –