-
-
Save alcidesfp/2492398 to your computer and use it in GitHub Desktop.
;; -*- 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) |
alcidesfp
commented
Apr 26, 2012
via email
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.
No, de hecho las definiciones de clases en Kawa no son inmutables, esta es una diferencia con respecto a Clojure AFAIK.