Skip to content

Instantly share code, notes, and snippets.

@pbalduino
Last active August 29, 2015 14:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pbalduino/bf6bac0fbde0019884c7 to your computer and use it in GitHub Desktop.
Save pbalduino/bf6bac0fbde0019884c7 to your computer and use it in GitHub Desktop.
Interfaces Java em Clojure
;; Demonstrando a criação de interfaces Java e seu uso no Clojure
(definterface Poligono
(^String nome [])
(arestas [])
(^long vertices [])
(^double perimetro [])
(^double area []))
(defn criar-quadrado [^double lado]
{:pre [(> lado 0)]}
(reify user.Poligono
(nome [this] "quadrado")
(arestas [this]
(repeat 4 lado))
(vertices [this]
(count (.arestas this)))
(perimetro [this]
(reduce + (.arestas this)))
(area [this]
(* lado lado))))
(def quadrado-3 (criar-quadrado 3.0))
(.area quadrado-3)
; 9.0
(.vertices quadrado-3)
; 4
(.perimetro quadrado-3)
; 12.0
(def quadrado-4 (criar-quadrado 4.0))
(.area quadrado-4)
; 16.0
(.vertices quadrado-4)
; 4
(.perimetro quadrado-4)
; 16
(criar-quadrado 0)
; AssertionError Assert failed: (> lado 0) user/criar-quadrado (NO_SOURCE_FILE:1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment