Skip to content

Instantly share code, notes, and snippets.

@alcidesfp
Last active October 15, 2015 05:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save alcidesfp/2492398 to your computer and use it in GitHub Desktop.
Save alcidesfp/2492398 to your computer and use it in GitHub Desktop.
Ejemplo Swing Kawa
;; -*- coding:utf-8; mode:Scheme -*-
"Shows howto use Java Swing classes in Kawa Scheme"
(define-alias JLabel javax.swing.JLabel)
(define-alias JButton javax.swing.JButton)
;;========================================================================
(define-simple-class SimpleFrame (javax.swing.JFrame)
;; members
(label ::JLabel init: (JLabel "Swing Application in Kawa"))
(button init: (JButton "Click Me!"
action-listener: (lambda (event)(on-click-btn))))
;;----------------------------------------------------------------------
;; methods
((*init*) ;constructor
(invoke-special javax.swing.JFrame (this) '*init* "Hello Swing in Kawa")
(format #t "Initializing ...~%")
;; initialize UI
(add label java.awt.BorderLayout:CENTER)
(add button java.awt.BorderLayout:SOUTH)
(setDefaultCloseOperation javax.swing.JFrame:EXIT_ON_CLOSE)
(pack))
;;----------------------------------------------------------------------
((on-click-btn) ;event handler
(label:setText "You clicked the button!")))
;;========================================================================
(define (main)
(let ((frame (SimpleFrame)))
(frame:setVisible #t)))
(main)
@yngwie74
Copy link

Bueno, no es tan compacta como esperaba, pero también es entendible siendo que de algún modo se tienen que ajustar al modelo de objetos de java. Quizás eso también explique lo legible que me pareció el código, a diferencia del 99.99_% del lisp que he leído hasta hoy ;-)

(supongo que es como ver dentro de la matrix... aún no me llega la iluminación) :-(

@alcidesfp
Copy link
Author

alcidesfp commented Apr 26, 2012 via email

@yngwie74
Copy link

Si, esta versión es más compacta, pero realmente la única característica "nueva" que me llama la atención es la inicialización del handler del evento click. Aunque java tiene el 50% del sintaxis necesario para hacer algo similar, la falta absoluta de closures/referencias a funciones lo pone completamente fuera de su alcance.

Para un programador de Algol 68 como yo, de hecho la versión anterior resulta más legible, pero es algo similar a lo que sucede con la versión "pythónica" de algo cuando no estás familiarizado con los dialectos locales de la comunidad. En este caso, me queda clarísimo que definir los elementos de la clase de esta forma es mucho más idiomático. Me pregunto si las definiciones de clase como la anterior son inherentemente inmutables? Esa es la impresión que me da esta versión como un completo novato en lisp.

@alcidesfp
Copy link
Author

No, de hecho las definiciones de clases en Kawa no son inmutables, esta es una diferencia con respecto a Clojure AFAIK.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment