¿Las funciones con parámetros tienen alguna ventaja sobre las funciones sin ninguna?

No todas las funciones con parámetros tienen ninguno, pero hay funciones con parámetros que tienen uno.

Los fragmentos de programa que cumplen las Condiciones de Bernstein se pueden llamar un número arbitrario de veces simultáneamente. Las condiciones se mantienen trivialmente para invocaciones separadas de una función Pura, es decir , una que solo lee sus argumentos y solo escribe en su contexto local y valor de retorno. Si un compilador puede detectar esta propiedad en una función, puede aplicar estrategias de optimización más agresivas al código que genera, y eso puede reducir el tiempo de ejecución. Si su programa es paralelo, no habrá restricciones sobre cómo secuenciar múltiples llamadas a dicha función (más allá de lo que es evidente desde donde el contexto de llamada pone los valores de retorno), que también puede reducir el tiempo de ejecución, al eliminar la necesidad de sincronización .

Sin embargo, para fines de pureza funcional, el uso de parámetros es una condición necesaria pero no suficiente : también debe haber alguna garantía de que la lógica de la función no pueda manipular el contexto del entorno de llamada, ya sea a través de semántica de llamada por referencia, estado de alcance global, o mediante llamadas a funciones adicionales que pueden contener cualquiera de esos. La pureza funcional es lo suficientemente beneficiosa como para que algunos lenguajes hagan todo lo posible para que pueda escribir tantas funciones puras como sea posible por diseño.

En principio, podría escribir un bloque de código puro pero sin parámetros que una sintaxis de lenguaje podría disfrazarse para llamarse una función, pero para todos los propósitos, el resultado se llamaría más constantemente una constante.

¿Es la pregunta si alguna vez es ventajoso, en la programación funcional, pasar argumentos formales de funciones en lugar de usar un alcance cerrado (incluidos el alcance global y los cierres)? Entonces, sí: por ejemplo, es común al responder a eventos, que los datos específicos de eventos provengan de fuentes externas que solo tienen una referencia al cierre y que esperan inyectar sus datos específicos de eventos a través de argumentos formales.

En un lenguaje imperativo, no. Los parámetros ocupan espacio en algún lugar, por lo que una función sin parámetros claramente usa menos espacio que una función que lo hace.

En un lenguaje funcional, su pregunta no tiene sentido, ya que una función sin parámetros no es función en absoluto. Hablando claramente, una función en un lenguaje funcional debe tomar un parámetro, independientemente de si se usa ese parámetro. Valores que hacen cómputo (por ejemplo, en haskell, let x :: IO Int = print "hello" >> return 1 ) son simplemente valores que tienen efectos secundarios, pero no son funciones.

Depende de tu idioma. Si pasa parámetros, el compilador o el entorno de tiempo de ejecución puede elegir colocarlos en la pila en lugar del montón. Esto ahorra tiempo porque no necesita limpiar explícitamente la pila; se invalidará automáticamente una vez que regrese la función.

Esta pequeña ventaja puede tener mayores y mayores impactos, ya que facilita que la CPU se dé cuenta de que necesita almacenar en caché estas cosas, ya que las necesitará, pero eso requiere mucha medición para ver.

No.