Den 05.03.2010 10:08, skrev Peter Hugosson-Miller:
> On 5 mar 2010, at 09.33, Fernando olivero <[email protected]> wrote:
>
>   
>> The problem is the side effects, is suddenly Boolean>>and: stops to  
>> be lazy.
>> Possibly evaluating blocks that shouldn't be evaluated.
>>     
> No, but there is one subtle difference anyway: both #and: and #or:  
> will return a Boolean (the receiver) if the block argument isn't  
> executed, whereas #ifTrue: and #ifFalse: will return nil in that case.  
> So if you do something with the return value, then the bytecode will  
> be different for sure.
>
> But it's academic anyway: the use of #and: and #or: gives the reader a  
> very strong hint that the argument block (if executed) is supposed to  
> return a Boolean, so to use it purely for branching in the code could  
> be seen as misleading.
>
> --
> Cheers,
> Peter
>   
I like that argument turned on its head, namely that ifTrue: ifFalse:
gives the reader a very strong hint that the argument blocks are used
purely for branching, thus using them to (eventually) return a boolean
can be seen as misleading :)

i.e. I tend to prefer to use Igors and: example for code I often see written

a < b ifTrue: [... a couple of actions, then returning true or false ...]
        ifFalse: [^false]

Cheers,
Henry
>   
>> Fernando
>>
>> On Mar 5, 2010, at 8:22 AM, Igor Stasenko wrote:
>>
>>     
>>> Hello,
>>> I just realized, that one can completely avoid using ifTrue/ifFalse
>>> branches, but use #or: and #and: instead.
>>>
>>> a > b ifTrue: [ ... ]
>>> could be written as:
>>> a > b and: [ ... ]
>>>
>>> a > b ifFalse: [ ... ]
>>> could be written as:
>>> a > b or: [ ... ]
>>>
>>> and
>>> a > b ifTrue: [ self foo ] ifFalse: [ self bar ]
>>> could be written as:
>>>
>>> a > b and: [ self foo]; or:[ self bar ]
>>>
>>> :)
>>>
>>> -- 
>>> Best regards,
>>> Igor Stasenko AKA sig.
>>>
>>> _______________________________________________
>>> Pharo-project mailing list
>>> [email protected]
>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>>       
>>
>> _______________________________________________
>> Pharo-project mailing list
>> [email protected]
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>     
> _______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
>
>   

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to