2009-02-01 16 views
11

programación funcional .. es como clásico (Mark Twain's type). Durante la lectura de otros artículos sobre SICP, donde las personas están hablando de los grandes cierres de impacto tuvieron en no pensar, tengo acuerda de esto, que leí hace añoscierres y objetos

Los cierres son objetos de pobre objetos son el cierre del hombre pobre

(no recuerdo fuente exacta pero fue la piedra Rosetta programadores, o zen de la programación, o tau de la programación ... Google se ha convertido en tan lleno de gente que no puede ir a la fuente original)

así co-programadores ... ¿Cuál es su opinión ... son cierre algo que siempre estabas perdiendo ... o solo un poco de azúcar sintáctico, que un preprocesador puede hacer !!

Respuesta

18

http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg03277.html

El venerable maestro Qc Na caminaba con su alumno, Anton. Con la esperanza de inducir al maestro a una discusión, Anton dijo: "Maestro, he oído que los objetos son algo muy bueno, ¿es cierto?" Qc Na miró con pena al su alumno y respondió: "Alumno tonto: los objetos son simplemente cierres de de un hombre pobre".

Castigado, Anton se despidió de su amo y regresó a su celda, con la intención de estudiar los cierres. Leyó cuidadosamente toda la serie de papeles "Lambda: The Ultimate ..." y sus primos, e implementó un pequeño intérprete de esquema con un sistema de objetos basado en el cierre. Aprendió mucho y deseaba informar a su maestro sobre su progreso.

En su siguiente paseo con Qc Na, Anton trató de impresionar a su maestro por la diciendo "Maestro, he estudiado diligentemente la materia, y ahora entender que los objetos son realmente los cierres de un hombre pobre." Qc Na respondió golpeando Anton con su bastón, diciendo "¿Cuándo aprenderás? Los cierres son objetos de un pobre ". En ese momento, Anton se iluminó.

- Anton van Straaten

+1

¿Es esa la fuente original de la cita o simplemente otra cita de la misma? – AnthonyWJones

+0

El mensaje vinculado es la fuente original de este koan en particular. Surgió en respuesta a una discusión sobre la dualidad de cierre/objeto, por lo que esa noción ha existido por más tiempo que esta narración en particular. Siga el enlace para más detalles. – bendin

+0

¿Qué es 'Qc Na' /' Anton' una devolución de llamada a? Miré a mi alrededor, buscando esos términos solo aparece referencias al koan mismo. –

3

Los cierres son mucho más que azúcar sintáctica, aunque creo que depende un tanto de tu definición de "azúcar sintáctico".

Para mí, Java 1.5 para cada uno era azúcar sintáctica, pero, por ejemplo, los bloques de Ruby van mucho más allá. Los cierres proporcionan un nivel conveniente de abstracción, que es útil para la declaración de intenciones implícita, un gran paso hacia la sintaxis DSL-ish.

4

He estado usando cierres durante mucho tiempo en Javascript. Algunas veces formaban un 'objeto', otras veces son una forma útil de proporcionar datos de instancia a una devolución de llamada.

Por lo que a mí respecta, son otra herramienta útil en la caja pero va más allá del azúcar. Sugar se relaciona con algo que podría razonablemente hacer con otra sintaxis un tanto más complicada. Conseguir cierres en un idioma que no los respalde directamente sería muy difícil.

+0

Peor aún, la implementación de la funcionalidad proporcionada por los cierres en un idioma que no los admite directamente ofuscará sus intenciones en cualquier lugar que se use. Ellos * son * azúcar; pero cuando estás haciendo dulces de roca no debes descartar la importancia del azúcar ... – Shog9

+0

@ Shog9: Estoy completamente de acuerdo con tu primera oración. No sé si estoy de acuerdo o no con el segundo ya que me resulta difícil de comprender. – AnthonyWJones

+3

Lo siento, termino cortando demasiado cuando estoy limitado a 300chars. El caramelo de roca es simplemente azúcar cristalizado; si no te gusta el azúcar, no tiene sentido. Muchos constructos de programación de alto nivel (cierres, objetos) son simplemente herramientas para comunicarse con otros programadores: el azúcar. Escribimos caramelos de roca – Shog9

3

Los cierres y los bloques anónimos son construcciones de programación bastante importantes y aprovecho la falta de rapidez en Java, C++, C y en cualquier otro idioma que les falte. Son especialmente útiles con cosas asincrónicas y eventos. También hacen que las funciones de toma de funciones sean más agradables de usar y brindan opciones para hacer más cosas sin una sintaxis adicional. (ver: smalltalk y esquema)

+0

No delegados y lambdas de C# c lo cubren bastante bien? – krosenvold

+0

Los delegados parecen ser una característica interesante. Dejo caer el C# de la lista. – Cheery

+0

@Cherry: ¿por qué sueltas C# de la lista? – AnthonyWJones

2

Los cierres son como objetos en los lenguajes OO. Pero los lenguajes funcionales carecen de subtipificación y herencia.

+1

Usted los conoce a todos, ¿verdad? – Ingo