I do not like it :)
also, you already have #in:
which is more generic and allows simplifications:
<my complex expression> in: [ :blah |
blah = myTest
ifTrue: [ blah some ] ]
ifFalse: [ blah other ] ]
and also the advantage is that you are not restricted to #ifTrue:ifFalse:
Esteban
On Jun 18, 2013, at 1:05 PM, Goubier Thierry <[email protected]> wrote:
>
>
> Le 18/06/2013 12:27, Camille Teruel a écrit :
>>
>> On 18 juin 2013, at 11:20, Goubier Thierry wrote:
>>
>>> Hi Camille,
>>>
>>> It's not bad as things goes, because it does look a bit like
>>> non-smalltalk code (i.e. the if then else structure) except that the
>>> precise meaning is very much Smalltalk :
>>
>> Ok the name may be confusing.
>> So if you rename it to something like #if:do:elseDo:, it would be more
>> smalltalkish and there is no confusion with classical if-then-else.
>
> Maybe, that would help.
>
>>> if: has a receiver, and there is a not so intuitive relationship
>>> between the bloc parameters and the receiver.
>>
>> Talking to an arbitrary object is the goal, since booleans are not very
>> talkative kind of object.
>> Compare
>>
>> | temp |
>> temp := <complexExpression>
>> temp isNil ifTrue: [...] ifFalse: [... temp ...]
>>
>> with:
>>
>> <complexExpression> ifNil: [ ... ] ifNotNil: [ :obj | ... obj ...]
>>
>> ifNil:ifNotNil: is not better only because it is shorter, it is better
>> because I am talking to the object I am auditing, not a stupid boolean
>> that knows nothing else but its truth value.
>
> Yes, but I know firsthand (because I used Smalltalk before that idiom was
> introduced) that it represent one more idiom to learn, and it's still not
> familiar.
>
> The same goes with withStreamDo: or what is that idiom again I sometimes
> encounter.
>
>>> Honestly, as far as code reviews goes, I'll prefer the temp
>>> refactoring. Understandable without having to search for the
>>> implementors of #if:then:else:
>>
>> I know this would break a long time tradition and people may not like
>> it, so that's a question of taste and style, not understandability.
>> There would be only one implementor, the implementation is really simple
>> and the selector is explicit.
>
>> Anyone can get use to it in less than 2 min.
>
> It's one more thing to get used to and to explain to beginners in say 10
> minutes per idiom... (describe, give an example, let them practice, rinse and
> repeat for each idiom).
>
> Add all the new idioms and, instead of explaining Smalltalk in half a day,
> you spend a few days doing explaining all those idioms and not doing more
> interesting stuff.
>
> Soon, you end up like ocaml, where your minimum introduction time is a week,
> not half a day.
>
>> Do everyone verify the implementors of do: , collect: , ifTrue:ifFalse:
>> ,... every time?
>
>> No because people learned what they do when they learned Smalltalk, and
>> I'm sure it didn't get them more than a few minutes.
>
> Yes, but add the ifNil: ifNotNil:, stream thingies I never remember, your
> variant of if-else, and, and ... On some of those, I have to look for the
> implementors, and I'm really happy to benefit from the smart suggestions in
> the new browsers. (Additionally, code patterns using cull: in pharo more
> often than not are very poorly documented about the arguments that are given
> to the block).
>
> Smalltalk is disruptive enough as it is (and still is after all those years)
> to try not to make it more complex. I'd prefer efforts making obvious really
> complex patterns instead of idioms with a not so great cognitive load to
> effectiveness.
>
> I'd be happy to have a shorter list of methods and extensions on Object, as
> well :)
>
> Thierry
> --
> Thierry Goubier
> CEA list
> Laboratoire des Fondations des Systèmes Temps Réel Embarqués
> 91191 Gif sur Yvette Cedex
> France
> Phone/Fax: +33 (0) 1 69 08 32 92 / 83 95
>