I would only declare a variable if you thought you would want to use it many 
times, otherwise it makes your code harder to read.  I would say you should do 
what makes sense for your code.   

So mostly it is just a matter of style.

My 2c.
-Danny

-----Original Message-----
From: general-boun...@developer.marklogic.com 
[mailto:general-boun...@developer.marklogic.com] On Behalf Of 
abhinav.mish...@cognizant.com
Sent: Thursday, June 19, 2014 8:56 AM
To: general@developer.marklogic.com
Subject: Re: [MarkLogic Dev General] Evaluation of `declare variable` vs `let`

Correct Rob, " declare variable " evaluated lazily and is never evaluated more 
than once. So the expression in right side will never be evaluated until the 
declared variable accessed for the first time.

Thanks,
Abhinav
________________________________________
From: general-boun...@developer.marklogic.com 
[general-boun...@developer.marklogic.com] on behalf of Whitby, Rob 
[rob.whi...@springer.com]
Sent: Thursday, June 19, 2014 9:20 PM
To: MarkLogic Developer Discussion
Subject: Re: [MarkLogic Dev General] Evaluation of `declare variable` vs `let`

declare variable Š is lazily evaluated, which is great unless you never access 
the variable but expect it to cause a side-effect.


On 19/06/2014 16:28, "Retter, Adam (RBI-UK)" <adam.ret...@rbi.co.uk> wrote:

>Given a main module with no user defined functions, is it considered 
>better practice to use `declare variable` as opposed to `let`, the 
>reason I ask is twofold:
>
>1) I have started on a large code-base that seems to eschew `let` in 
>favour of using `declare variable`. This seems somewhat strange to me.
>
>2) We have seen different evaluation strategies, whereby a function 
>which returns an empty-sequence which is bound in a declare variable 
>clause, is never executed. Yet when we re-write that as a let binding, 
>the code is executed. I think perhaps the query optimiser in ML is 
>being too aggressive here?
>
>
>For example -
>
>declare variable $content-type as xs:string := 
>slib:validated-bulk-load-content-type();
>
>and then a few lines later we have -
>
>slib:normal-bulk-load-response ($etag-map, fn:count 
>($etag-map/store:etag-entry), $content-type)
>
>Subsequently the `slib:normal-bulk-load-response` calls 
>xdmp:set-response-content-type($content-type). However the 
>`slib:validated-bulk-content-type()` function is never evaluated, we 
>are certain of this because it eventually calls `fn:error`, yet the 
>error never occurs!
>
>If we switch the `declare variable $content-type` for a `let 
>$content-type` then we do see the error occurring!
>
>Cheers Adam.
>
>DISCLAIMER
>This message is intended only for the use of the person(s) ("Intended
>Recipient") to whom it is addressed. It may contain information, which 
>is privileged and confidential. Accordingly any dissemination, 
>distribution, copying or other use of this message or any of its 
>content by any person other than the Intended Recipient may constitute 
>a breach of civil or criminal law and is strictly prohibited. If you 
>are not the Intended Recipient, please contact the sender as soon as possible.
>Reed Business Information Limited. Registered Office: Quadrant House, 
>The Quadrant, Sutton, Surrey, SM2 5AS, UK.
>Registered in England under Company No. 151537
>
>_______________________________________________
>General mailing list
>General@developer.marklogic.com
>http://developer.marklogic.com/mailman/listinfo/general

_______________________________________________
General mailing list
General@developer.marklogic.com
http://developer.marklogic.com/mailman/listinfo/general
This e-mail and any files transmitted with it are for the sole use of the 
intended recipient(s) and may contain confidential and privileged information. 
If you are not the intended recipient(s), please reply to the sender and 
destroy all copies of the original message. Any unauthorized review, use, 
disclosure, dissemination, forwarding, printing or copying of this email, 
and/or any action taken in reliance on the contents of this e-mail is strictly 
prohibited and may be unlawful. Where permitted by applicable law, this e-mail 
and other e-mail communications sent to and from Cognizant e-mail addresses may 
be monitored.
_______________________________________________
General mailing list
General@developer.marklogic.com
http://developer.marklogic.com/mailman/listinfo/general
_______________________________________________
General mailing list
General@developer.marklogic.com
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to