Newsgroups: pl.comp.lang.java
Subject: Java: Czego mi brak: Operator warunkowy
Date: Mon, 8 Dec 2008 07:08:32 -0800 (PST)
A więc brakuje mi operatora który by działał jak '.' z małym wyjątkiem
jeśli nadrzędny obiekt byłby null-em, wówczas null byłby zawsze
zwracany.
public static LockMode getLockModeSuggested(SomeHouse someHouse) {
return someHouse.?.mainEntry.?.reallyGoodLock.?.lockMode;
}
return getObject().?.getField().?.getSubfield();
Object tmp = getObject(); if (tmp == null) { return null; } else { Object tmp2 = tmp.getField(); if (tmp2 == null) { return null; } else { return tmp2.getSubfield(); } }
(return (.?. (getObject) (getField) (getSubfield)))
(declare Object tmp (getObject))
(if (== tmp null)
(return null)
(block
(declare Object tmp2 (. tmp (getField)))
(if (== tmp2 null)
(return null)
(return (. tmp2 (getSubfield))))))
To jeszcze nie Clojure, to wciąż Java (w przebraniu)!
(defmacro .?.
([x y] `(. x y))
([x y & args]
`(block
(declare Object tmp# ~x)
(if (== tmp# null)
(return null)
(.?. ~y ~@args)))))
> (+ 2 3) 5
> (defn funkcja [x]
(if (< x 100)
"mała liczba"
"duża liczba")))
#'user/funkcja
> (funkcja 4983)
"duża liczba"
{klucz1 wartość1
klucz2 wartość2
...
kluczN wartośćN}
:klucz:drugi-klucz[31 41 59 26 53]["ten wektor" :ma 4 ["elementy"]]#{31 41 59 26 53}
(map add-42 [1 2 3])
(43 44 45)
(filter even? (range 10))
(0 2 4 6 8)
(map (fn [x] (+ x 42)) [1 2 3])
(43 44 45)
(map #(+ % 42) [1 2 3])
(43 44 45)
(.toUpperCase "Hello") "HELLO" (.freeMemory (Runtime/getRuntime)) 21528704 (javax.swing.JOptionPane/showMessageDialog nil "Hello!")![]()
:server-port :uri
:server-name :query-string
:remote-addr :request-method
:scheme :content-type
:headers :content-length
:body :character-encoding
:status
:headers
:body
(doseq [you (audience)]
(thank! you))