No, una función "impura" es una función con efectos secundarios.
En otras palabras, no importa cuántas veces se lo llama, una función pura afectará nada aparte de su salida.
Por ejemplo, foo
es impura, aunque retorno a cero:
int x;
int foo() { x++; return 0; }
int bar() { return x; }
Si foo
eran puros, llamándolo no afectaría al resultado de bar()
.
printf
es impuro porque su resultado tiene "efectos secundarios", específicamente, imprime algo en la pantalla (o en un archivo, etc.).
Si fuera puro, podría llamarlo mil millones de veces y estar seguro de que no pasaría nada malo.
Pero si realmente llama al printf
un millón de veces, ciertamente es una diferencia para el usuario: llena su pantalla (o espacio en disco, o lo que sea). Entonces claramente no es puro.
Además: Si su salida fue redirigida para ser su propia entrada (algo inútil, pero aún así), entonces llamar a printf
afectaría lo que recibiría de getchar
. :) Así que es directamente observable de esa manera, también.
Si bien es correcto, esta respuesta no tiene nada que ver con 'printf'. Tampoco aborda ** WHY ** 'printf' es impuro (externo, en lugar de efectos secundarios internos). –
¿Todas las funciones son impuras? ¡Tienen tiempo de ejecutar (filosofía)! BTW - 'barra' regresa x –
@DavidTitarenco: ¡Tienes razón, acabo de añadir eso, gracias! – Mehrdad