2011-02-04 13 views
11

Acabo de empezar a usar clojure hoy (sin embargo, he usado mucho Java y conozco paradigmas funcionales) y me preguntaba si era una buena idea construir una aplicación clojure con una interfaz compleja y razonable (arrastrando , soltar, panoramizar, acercar, ...) usando Swing?GUI complejo en clojure

puedo imaginar que una gran cantidad de las lógicas swing normal (especialmente en relación con OO) tiene que ser pasado por alto un modo u otro ..

I Asume que todo es posible, pero es posible de una manera que justificable?

Quiero decir, ¿no sería como golpear un clavo con un destornillador en lugar de un martillo?

Alguien aquí tienen experiencia en la construcción de GUI con Clojure (y por supuesto: es Oscilación el candidato ideal para eso?)

Gracias!

Respuesta

9

He encontrado que es relativamente fácil usar Swing para construir interfaces de usuario decentes en Clojure. Usted tiene un par de opciones acerca de cómo hacerlo, sin embargo:

  • escribir el código más o menos como lo haría en Java, simplemente utilizando la interoperabilidad de Java desde Clojure a llamar a las API de Swing pertinentes. This article hace un buen trabajo explicando cómo, con un poco de macro magia también para hacerte la vida más fácil.
  • Utilice una envoltura de GUI de Clojure para Swing, p. seesaw o clj-swing. Mi opinión es que estas herramientas tienen el potencial para ayudarle a escribir algo de código GUI muy ordenado en idiomática Clojure
+0

Gracias, veo que se puede hacer, sin embargo, ¿la complejidad adicional (que podría manejar en Java/swing) sería un nogo más adelante en la construcción de la aplicación? ¿No hay cosas que pueden pasarse por alto? En Swing solía construir mi propio MVC (donde datachange desencadenaba la GUI): ¿Supongo que todavía es posible? De nuevo, el ejemplo dado es agradable y útil, pero aún muy trivial ... – Peter

+0

Realmente no hay nada en Swing/Java que no pueda hacer en Clojure; en última instancia, es posible llamar a cualquier función Swing/Java a través de la interoperabilidad de Java si lo necesitas. Por supuesto, necesita administrar la complejidad a medida que su aplicación crece, pero yo diría que esto es realmente más fácil en Clojure que en Java/Swing (debido a funciones de orden superiores, plantillas repetitivas, macros, etc.) – mikera

+0

Es posible que también desee buscar en una biblioteca que escribí para facilitar la programación de GUI: https://github.com/jonasseglare/signe.Te permite ajustar el estado de tu programa representado como una estructura de datos inmutables dentro de un solo átomo. Proporciono tres ejemplos para ilustrar cómo funciona. – Rulle

6

Una característica realmente fresca del subsistema de Clojure software transactional memory es que le permite ajustar los relojes de variables: siempre que la variable es cambiado (por cualquier cosa), se ejecuta su devolución de llamada. Esto se presta a un poderoso tipo de programación de GUI donde la GUI se actualiza de manera automággica en función del estado de sus variables.

Un breve pero no trivial ejemplo de la GUI de Swing se describe en detalle en http://www.paullegato.com/blog/swing-clojure-gui-black-scholes/.

1

Dado que otros mencionan respuestas relacionadas con el swing, le haré una pregunta: ¿Es Swing un requisito? Si bien escribir código Swing en clojure es más placentero que en Java, sigue siendo Swing, con toda su verbosidad y molestias, especialmente en aplicaciones complejas con requisitos fijos.

¿Has considerado la interfaz de usuario web, donde Clojure se adapta mucho más natural? O SWT o QT Jambi, que también se puede hacer funcionar con Clojure.

+1

+1: Ningún swing es un requisito, por eso declaro: (y por supuesto: ¿es Swing el candidato ideal para eso?) Por supuesto que he tenido alguna experiencia con Swing, considero que es un plus. – Peter