Creo que tienes una idea inválida de qué idempotente realmente significa . No importa si el resultado de la operación está relacionado con el valor actual de una variable. Te daré algunos ejemplos:
-
$i = 3 + 1$ es seguramente idempotente, mientras que
-
$i = i + 1$ seguramente no lo es. Sin embargo:
-
$i = i + 0$ es idempotente, aunque el nuevo valor se calcule a partir del valor actual. Lo mismo ocurre con:
-
$i = i * 1$ que también es idempotente. Sin embargo:
-
$i = rand(0, 1)$ es no-idempotente, aunque no se relacione con su valor anterior.
En resumen, decimos que el una operación es idempotente cuando al ejecutarla varias veces se obtiene exactamente el mismo resultado que al ejecutarla exactamente una vez .
Respondiendo a la pregunta planteada en el tema de este hilo, existen dos términos contrapuestos:
- Una operación es nula, cuando al realizarla cualquier número de veces tiene el mismo resultado que realizarla cero veces.
- Una operación es no idempotente, cuando al realizarla varias veces no se obtiene necesariamente el mismo resultado cada vez que se realiza.
Permítanme proporcionar otro ejemplo, ampliando el ejemplo que RJ Cuthbertson proporcionó. El ejemplo de RJ muestra cómo funcionan los métodos HTTP desde la perspectiva del cliente de un servicio. Sin embargo, echemos un vistazo al modelo interno del servicio:
- El método GET es nulo . Funcionamiento de En un recurso es consulta pura y no tiene impacto en el modelo interno.
- El método PUT es idempotente . Funcionamiento de poniendo un recurso permite al usuario designar la ubicación exacta en la que debe estar disponible. Colocar el mismo recurso en la misma ubicación varias veces produce el mismo estado interno del sistema que publicarlo exactamente una vez.
- El método POST no es idempotente . Al publicar un recurso, el servidor decide la ubicación en la que debe estar disponible. Si se publica el mismo recurso varias veces, estará disponible en varias ubicaciones.
Eso sí, se trata de una pura abstracción. El programador puede implementar cualquiera de estos métodos para hacer lo que quiera. Esta es la forma en que esperamos que se comporte, sin embargo.
2 votos
¿Recursivo? ¿Implícito?
0 votos
Ambas me parecen correctas en función de mis definiciones de esos términos y de cómo he formulado la pregunta. No estoy tan seguro de si evocan el significado deseado en la descripción de mi programa informático. Pero marcaré la pregunta como correcta si la publicas como respuesta.
0 votos
No tengo ningún problema en esperar a ver si surge algo más útil en el debate.
0 votos
Gracias Josh. Es reconfortante saber que es una pregunta tan interesante que la respuesta no es trivial :)
1 votos
En lenguaje informático, el valor que pueden expresarse como literales simples se denomina constante.
0 votos
Ahah, eso era tan obvio que no lo había pensado. Es suficiente para el documento que estoy escribiendo. Me gustaría saber si existe un término matemático para ello, aunque empiezo a preguntarme si el concepto de asignación de variables forma parte de las matemáticas.
0 votos
Otra sugerencia que se me acaba de ocurrir: asignación de valor absoluto frente a asignación de valor relativo.
0 votos
Esta pregunta es confusa. El último párrafo no tiene nada que ver con "idempotente".
0 votos
Sí, perdón por hacerte perder el tiempo.