IIC2233 / Syllabus

145 stars 13 forks source link

Efectos Secundarios, programación funcional #438

Open gracie-14 opened 2 weeks ago

gracie-14 commented 2 weeks ago

Prerrequisitos

(Marcar colocando una X entre los corchetes los ítems que ya hiciste, así: "[X]")

Duda

Hola! Tengo una duda sobre los efectos secundarios en la programación funcional.

Encontré un artículo que dice "A side effect is when a function alters some external variable." o sea que es un efecto secundario solo si modifica un variable externo a la función. (Fuente)

Sin embargo los contenidos incluyen un ejemplo de efecto secundario con un variable que es interno a la función:

Screenshot 2024-10-02 at 11 03 35 AM

Mi pregunta es: ¿El artículo está equivocado? ¿Cualquier tipo de variable mutable puede generar efectos secundarios? ¿O solo variables externos, que se pueda acceder fuera de la función?

Si los variables internos a la función, que no pueden ser accedidos por fuera, crean efectos secundarios, ¿cómo lo hacen? No entiendo como tienen un efecto secundario si se reinicia cada vez que se llama a la función, y si no se los puede modificar ni acceder fuera de la función. El variable interno de este ejemplo, copia_lista, siempre sigue los mismos pasos y tiene los mismos valores con el mismo input. ¿Cuál es el efecto secundario que produce?

¡Muchas gracias!

lucasvsj commented 2 weeks ago

Hola @gracie-14

El problema recae en que el tema de side-effect es un tema muy discutido dentro de la Programacion Funcional (FP). Existen autores que al mencionar side-effect solamente hacen referencia a el scope externo de la funcion (como se menciona en el foro que mandaste). Mientras que otros lo relacionan con ambos scopes posibles, tanto interno o externo.

Ahora bien todo nace por el concepto de inmutabilidad dentro de FP. Lo importante de este tema es que dentro de FP se deberia trabajar con variables inmutables, es decir que una vez definidas, no pueden modificar nada de ellas. Dado esto, es que se genera una discusion porque una variable local tampoco deberia ser modificada, pero hay autores que ven la inmutabilidad solo en temas globales, pero dentro de una funcion si aceptan crear variables y modificarlas mientras sean solamente locales.

Dado lo anterior, en los contenidos nos alineamos al bando de autores que defienden que todo debe ser inmutable, y por lo tanto, modificar una variable dentro de la funcion si genera un side-effect.

Espero que con esto quede mas claro este tema.

gracie-14 commented 2 weeks ago

Entendido! Gracias!