Hi Clojurians,
I'm relatively new to the language and am trying to get used to its idioms.
One thing I'm accustomed to doing in things like java and C# is checking
values for validity and then bailing out early if they don't make sense.
For example, without this idiom in java you might do:
Object doSomething() {
Integer a = someComputation();
if(a != null) {
Integer b = anotherComputation(a, 42);
if(b != null && b.intValue() >= 0) {
return a / b;
}
else {
return null;
}
}
else {
return null;
}
}
... which is really only desirable if you believe in the "one exit point"
school of imperative programming. It is of course much better to do this:
Object doSomething() {
Integer a = someComputation();
if(a == null) { return null; }
Integer b = anotherComputation(a, 42);
if(b == null || b.intValue == 0) { return null; }
return a / b;
}
... which is much more literate. In Clojure, I have to write what is
effectively the first form:
(let [a (some-computation)]
(if (nil? a)
nil
(let [b (another-computation a 42)]
(if (or (nil? b) (= b 0))
nil
(/ a b)))))
While more concise, it suffers the same readability problems as the first
java version. I can easily imagine a macro to support this idiom:
(let-check [a (some-computation)
:check (nil? a) nil
b (another-computation a 42)
:check (or (nil? b) (< b 0)) nil]
(/ a b))
Which leads me to my question: does such a construct already exist? Or
perhaps am I doing it wrong? I've googled around for this, but I'm not
exactly sure what it's called.
Cheers,
Russell
--
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.