I'm reading _The Joy of Clojure_ right now, and they touch on it,
which is nice coming from Scheme/Racket.

On Thu, Sep 27, 2012 at 10:40 AM, Russell Whitaker
<russell.whita...@gmail.com> wrote:
> On Thu, Sep 27, 2012 at 8:26 AM, arekanderu <arekand...@gmail.com> wrote:
>> Thank you Meikel for your so helpful replies.
>>
>
> Thanks also from a lurker, to whom these facts were a useful surprise:
> I'd wondered
> the same myself.
>
> Cheers, R
>
>>
>> On Thursday, September 27, 2012 4:19:44 PM UTC+3, Meikel Brandmeyer
>> (kotarak) wrote:
>>>
>>> Hi,
>>>
>>> Am Donnerstag, 27. September 2012 12:16:41 UTC+2 schrieb arekanderu:
>>>
>>>> I am new to clojure and I have two questions about do and the way it
>>>> should be used.
>>>>
>>>> Question 1: Which of the following two functions is more idiomatic and
>>>> why? Both functions produce the same result.
>>>>
>>>> <code>
>>>> (defn my-fn [java-object]
>>>>   (. java-object firstFunc)
>>>>   (. java-object secondFunc)
>>>>   (. java-object thirdFunc)
>>>>   java-object)
>>>> </code>
>>>
>>>
>>> The first because defn includes an implicit do. So the second example is
>>> actually (do (do ...)).
>>>
>>> In this case you could also use doto:
>>>
>>> (defn my-fn
>>>   [pojo]
>>>   (doto pojo
>>>     .firstFunc
>>>     .secondFunc
>>>     .thirdFunc))
>>>
>>>
>>>>
>>>> Question 2: Again, which one is more idiomatic and why? Both functions
>>>> produce the same result.
>>>>
>>>> <code>
>>>> (defn my-fn [java-object bar]
>>>>   (let [bar-bar (. java-object getSomething)
>>>>         _       (if (not (is-bar? bar))
>>>>                   (. java-object (setSomething bar-bar)))]
>>>>     java-object))
>>>> </code>
>>>>
>>>> <code>
>>>> (defn my-fn [java-object bar]
>>>>   (let [bar-bar (. java-object getSomething)]
>>>>     (do
>>>>       (if (not (is-bar? bar))
>>>>         (. java-object (setSomething bar-bar)))
>>>>      java-object)))
>>>> </code>
>>>
>>>
>>> The third:
>>>
>>> (defn my-fn
>>>   [pojo bar]
>>>   (let [bar-bar (.getSomething pojo)]
>>>     (when-not (is-bar? bar)
>>>       (.setSomething pojo bar-bar))
>>>     pojo)))
>>>
>>> let also (just like defn) includes an implicit do for the body.
>>>
>>> Hope this helps.
>>>
>>> Kind regards
>>> Meikel
>>>
>
> --
> Russell Whitaker
> http://twitter.com/OrthoNormalRuss / http://orthonormalruss.blogspot.com/
> http://www.linkedin.com/pub/russell-whitaker/0/b86/329
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en



-- 
((λ (x) (x x)) (λ (x) (x x)))
http://www.wisdomandwonder.com/
ACM, AMA, COG, IEEE

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to