¿Por qué hay tanto rumor sobre los cierres? [cerrado]


9

¿Por qué hay tanto rumor sobre los cierres entre los desarrolladores? En mi carrera nunca los usé intencionalmente, aunque no entiendo claramente cuáles son.

UPD: solo para aclarar. La pregunta es por qué el concepto de cierre se volvió tan parlante en estos días.


3
¿Cómo podría utilizar intencionalmente algo que no sabe de qué se trata? Entonces, básicamente, primero debería preguntarse (o buscar más bien) qué son los cierres.
Steven Jeuris

1
¿Leíste el artículo de Wikipedia? ¿Qué no entendiste al respecto?
Kevin Cline

2
¿En qué se basa su carrera?

44
¿Qué tipo de pregunta es esta? ¿Qué "zumbido"? Que no entiendes ¿Por qué no hiciste esa pregunta en su lugar?
Aaronaught

44
En defensa del OP, los cierres son un concepto antiguo, pero solo recientemente han sido el tema de conversación de la ciudad, por así decirlo. Y el concepto es, de hecho, muy simple para cualquiera que haya aprendido un poco más de matemáticas. Tampoco entiendo por qué la gente habla de ellos como si fueran algo muy difícil de comprender. Tal vez esa sea solo una manera de hacerse parecer más inteligentes: "mira, yo cierro los cierres que son tan difíciles de tocar, así que me muevo".
quant_dev

Respuestas:


22

Un cierre es un código que recuerda el mundo de donde vino mientras sigue siendo utilizable donde ha sido traído.

Un ejemplo es definir una función anónima en Java que sabe que está dentro de YourObject y puede manipular sus métodos y funciones. Esta función se entrega, por ejemplo, en Swing, donde se adentra en el interior, por ejemplo, un Listener, pero aún tiene una línea de vida de vuelta a sus raíces.

Este es un concepto muy poderoso, ya que le permite entregar código que, sin el conocimiento del código que lo usa, puede llegar a otras partes del código.


1
Si. Es una forma de inyectar no solo el procedimiento, sino el estado, en otro código. Esto permite un alto grado de flexibilidad en el diseño de algoritmos; puede diseñar métodos con plantilla que dependen de subrutinas con estado, que quizás ni siquiera conozca en tiempo de compilación. La desventaja es que el enlace a la fuente original de ese método, y por lo tanto el estado, puede romperse sin que el método consumidor lo sepa; cuando eso sucede, obtienes errores de tiempo de ejecución difíciles de encontrar.
KeithS

1
Ja, ja, función anónima en Java ... Divertido.
configurador

1
@configurator, no es gracioso, un hecho.


Java 7 no tiene cierres.

6

Los cierres son solo algo para resolver una variedad de problemas de una manera elegante. En realidad, en lenguajes de programación donde no existen cierres, se crean técnicas para implementar funciones similares.

Solo piense en functores en C ++ o Runnables en Java. Son solo técnicas que permiten funcionalidades similares a los cierres. Algún tipo de «cierres manuales».

Los cierres se están volviendo más populares porque están integrados en lenguajes populares: Javascript está creciendo debido a aplicaciones en línea (como google doc, por ejemplo), C # lo implementó, PHP lo implementó desde 5.3, y así sucesivamente.

Ahora que los cierres están disponibles en más y más tecnologías, se vuelve bastante sencillo que cada vez más personas estén interesadas en ellos.

Entonces, ¿qué son los cierres? Esto es bastante simple Un cierre es una función y un contexto para ejecutarlo. Esto se manipula como un objeto. ¿Por qué es útil esto? Esto es útil para conectar su propio código al código existente.

Aquí hay dos situaciones comunes que requieren eso: cuando las acciones son administradas por otro fragmento de código, como en subprocesos múltiples con un grupo de subprocesos, o cuando una acción tiene que ejecutarse en un evento elegido (utilizado a menudo en JavaScript para la interfaz de usuario).


¿Te entiendo claramente? Hay algunos "cierres manuales" (no realmente un cierre, pero algo que se asemeja a su comportamiento) y hay algunos "cierres VERDADEROS"?

El cierre es una capacidad de lenguaje. Algunos idiomas no tienen esa capacidad, por lo que debe cerrar manualmente utilizando las herramientas que el idioma le proporciona. Decir que son VERDADEROS o no no es un debate muy interesante en mi humilde opinión.
deadalnix

2
@gasan, siempre puedes sacar el ensamblaje y realizar manualmente cualquier patrón que desees con un montón de declaraciones GOTO. Del mismo modo, puede realizar manualmente un ciclo "for" con un ciclo "while" (en C ++). Los niveles más avanzados y más altos ofrecen una forma estandarizada de hacer cosas comunes.
Philip

6

Vi una cita divertida el otro día, fue en la línea de "las clases son datos con funciones. Los cierres son funciones con datos".

Sí, es una simplificación excesiva, pero ayuda a transmitir el punto.


1 Una buena manera de ver lo que es un cierre: D
deadalnix
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.