Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.3K
Visualizações
¿Es pura una función que llama a Math.random()?

¿Es la siguiente una función pura?

 function test(min,max) { return Math.random() * (max - min) + min; }

Tengo entendido que una función pura sigue estas condiciones:

  1. Devuelve un valor calculado a partir de los parámetros.
  2. No hace ningún trabajo más que calcular el valor de retorno.

Si esta definición es correcta, ¿es mi función una función pura? ¿O mi comprensión de lo que define una función pura es incorrecta?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

No, no es. Dada la misma entrada, esta función devolverá valores diferentes. Y luego no puede construir una 'tabla' que mapee la entrada y las salidas.

Del artículo de Wikipedia para la función pura :

La función siempre evalúa el mismo valor de resultado dados los mismos valores de argumento. El valor del resultado de la función no puede depender de ninguna información oculta o estado que pueda cambiar mientras continúa la ejecución del programa o entre diferentes ejecuciones del programa, ni puede depender de ninguna entrada externa de dispositivos de E/S.

Además, otra cosa es que una función pura se puede reemplazar con una tabla que representa el mapeo de la entrada y la salida, como se explica en este hilo .

Si desea reescribir esta función y cambiarla a una función pura, también debe pasar el valor aleatorio como argumento

 function test(random, min, max) { return random * (max - min) + min; }

y luego llamarlo de esta manera (ejemplo, con 2 y 5 como mínimo y máximo):

 test( Math.random(), 2, 5)
over 4 years ago · Santiago Trujillo Relatório

0

La respuesta simple a su pregunta es que Math.random() viola la regla #2.

Muchas otras respuestas aquí han señalado que la presencia de Math.random() significa que esta función no es pura. Pero creo que vale la pena decir por qué Math.random() contamina las funciones que lo usan.

Como todos los generadores de números pseudoaleatorios, Math.random() comienza con un valor "semilla". Luego usa ese valor como punto de partida para una cadena de manipulaciones de bits de bajo nivel u otras operaciones que dan como resultado una salida impredecible (pero no realmente aleatoria ).

En JavaScript, el proceso involucrado depende de la implementación y, a diferencia de muchos otros lenguajes, JavaScript no proporciona ninguna forma de seleccionar la semilla :

La implementación selecciona la semilla inicial del algoritmo de generación de números aleatorios; el usuario no puede elegirlo ni restablecerlo.

Es por eso que esta función no es pura: JavaScript esencialmente usa un parámetro de función implícito sobre el que no tienes control. Está leyendo ese parámetro a partir de datos calculados y almacenados en otro lugar y, por lo tanto, viola la regla n. ° 2 en su definición.

Si quisiera hacer de esto una función pura, podría usar uno de los generadores de números aleatorios alternativos que se describen aquí . Llame a ese generador seedable_random . Toma un parámetro (la semilla) y devuelve un número "aleatorio". Por supuesto, este número no es aleatorio en absoluto; está únicamente determinada por la semilla. Es por eso que esta es una función pura. La salida de seedable_random es solo "aleatoria" en el sentido de que es difícil predecir la salida en función de la entrada.

La versión pura de esta función necesitaría tomar tres parámetros:

 function test(min, max, seed) { return seedable_random(seed) * (max - min) + min; }

Para cualquier triple dado de parámetros (min, max, seed) , esto siempre devolverá el mismo resultado.

Tenga en cuenta que si desea que la salida de seedable_random sea realmente aleatoria, ¡necesitará encontrar una manera de aleatorizar la semilla! Y cualquiera que sea la estrategia que utilice, inevitablemente no será pura, porque requerirá que recopile información de una fuente fuera de su función. Como me recuerdan mtraceur y jpmc26 , esto incluye todos los enfoques físicos: generadores de números aleatorios de hardware , cámaras web con tapas de lentes , colectores de ruido atmosférico , incluso lámparas de lava . Todos estos implican el uso de datos calculados y almacenados fuera de la función.

over 4 years ago · Santiago Trujillo Relatório

0

Una función pura es una función en la que el valor de retorno solo está determinado por sus valores de entrada, sin efectos secundarios observables.

Al usar Math.random, está determinando su valor por algo diferente a los valores de entrada. No es una función pura.

fuente

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda