Título: ¿Es posible hacer una función que incluya parte de un if? Publicado por: Tachikomaia en 26 Febrero 2024, 14:30 pm A continuación 2 funciones iguales hasta la marca roja y que son usadas en un mismo programa:
(https://i.ibb.co/fMyqNmW/Code-rep.png) Obviamente no se ve todo, pero no creo que importe, lo importante es que quiero convertir lo repetido (verde y amarillo) en una misma función, pero así como está termina (rojo) en medio de un if (que empezó en la zona amarilla, donde todo aún es igual). ¿Es posible hacer una función que incluya lo amarillo o debo conformarme con incluir sólo lo verde? Por si a alguien le interesa, las diferencias entre los códigos son: 1- El izquierdo crea variables en ciertos casos, hasta llegar a 15, y el otro nunca. 2- El izquierdo en cierto punto deja de ejecutarse y ejecuta al otro. Ese cuando deja de ejecutarse da un mensaje y termina el programa. Básicamente eso. Título: Re: ¿Es posible hacer una función que incluya parte de un if? Publicado por: Parado_larga_duracion_ESP en 26 Febrero 2024, 15:13 pm En eso yo siempre intento acordarme y seguir al máximo posible una característica de la programación funcional (https://es.m.wikipedia.org/wiki/Programaci%C3%B3n_funcional (https://es.m.wikipedia.org/wiki/Programaci%C3%B3n_funcional)), que parece que se llama transparencia referencial.
Explicado rápido, es que una función no use ni cambie nada de fuera de sí, y llevado al máximo, dados unos parámetros iguales la función siempre devolverá lo mismo. Con este principio en mente es como he podido escalar horizontalmente más mis proyectos. ¿Y qué tiene que ver? Pues que en verdad se puede hacer otra función, pero tendrías que aislar la lógica y pasarle algunos datos desde la primera función. Yo cuando tengo que refactorizar así, procuro seguir ese principio, porque te da tranquilidad saber que una función no va a dejar de funcionar por cualquier cosa, y localizas rápido de donde vienen los datos en cada algoritmo. https://es.m.wikipedia.org/wiki/Transparencia_referencial (https://es.m.wikipedia.org/wiki/Transparencia_referencial) Nota. Se me olvidó decir que puedes hacer una función escopeada, dentro del ámbito de la función principal. Pero si lo haces, tienes que pensar que esa función se replicará en instancias diferentes en cada llamada a la función principal. Las variables internas te serán accesibles directamente, pero es un mal patrón porque no escalas horizontalmente la aplicación. Sino en profundidad, que se traduce en consumo de memoria excedente. Título: Re: ¿Es posible hacer una función que incluya parte de un if? Publicado por: Tachikomaia en 28 Febrero 2024, 01:08 am Tu respuesta es como muy conceptual o abstracta, leí algunas cosas pero no entiendo bien del tema ^^u quiero un código no un método de programar que evita hacer ciertas cosas...
Lo simplifico, tengo un programa que tiene 4 estados. 1: Las definiciones iniciales. 2: Estado 2. 3: Estado 3. 4: Estado final. En los estados 2 y 3 se usa un código así: Código: // Hacer cosas A. Código: // Hacer cosas. Ahora se me ocurre que la función podría, desde la zona roja, tener un if que, dependiendo de en qué estado se esté ejecutando, siga de un modo u otro, lo cual no me gusta porque me gusta que se cargue (o llame a) lo mínimo necesario. Tampoco es muy legible, quizá es parte de a lo que se refería el link que pusiste. es que una función no use ni cambie nada de fuera de sí ¿Cual sería el problema si lo hiciera? Casi siempre lo hice así. Ayer hablando con GPT de un caso muy atípico me dió una función en la que se introducen parámetros, yo nunca o casi nunca hice una así. La usé porque parece totalmente necesaria para poner un operador variable en un if y así evitar cídigo, ya que esto no me funciona:Si CVal CVal CVal ni esto Si CVal eval(CVal) CVal GPT me dijo que use una función así: if (Comparacion(CVal, CVal, CVal)) { Debe hallarse un valor de C tal que C C C, algo como: "==" == "==" Código
Citar llevado al máximo, dados unos parámetros iguales la función siempre devolverá lo mismo. Tiene sentido, a menos que tenga random. ¿Cómo sería de otro modo? No imagino.Citar Pues que en verdad se puede hacer otra función, pero tendrías que aislar la lógica y pasarle algunos datos desde la primera función Todos los datos que uso están fuera de la función.Citar Nota. Se me olvidó decir que puedes hacer una función escopeada, dentro del ámbito de la función principal. Pero si lo haces, tienes que pensar que esa función se replicará en instancias diferentes en cada llamada a la función principal. Las variables internas te serán accesibles directamente, pero es un mal patrón porque no escalas horizontalmente la aplicación. Sino en profundidad, que se traduce en consumo de memoria excedente. Si puedes dame un ejemplo porque no sé si lo entiendo. |