Exception handling is used a lot.

Check senders of #on:do:

457 in my Pharo 3.0

That's not counting the 303 #ensure: that are used transparently in things
like:

aFileRef readStreamDo: [ :s | s upToEnd ]

Phil


On Mon, Jan 5, 2015 at 2:12 PM, kilon alios <kilon.al...@gmail.com> wrote:

> I dont know javascript well nor pharo but I am coming from python and for
> this scenario it would make more sense to me to use an exception than an
> actual check. At least that is the way Python deals with this situation
> which is an approach I really like.
>
> I know Pharo has exception handling as well, but unlike Python where
> exception handling is very popular I have barely seen it used by pharo
> coders. I am curious why .
>
> On Mon, Jan 5, 2015 at 3:01 PM, Sebastian Sastre <
> sebast...@flowingconcept.com> wrote:
>
>>
>> On Jan 5, 2015, at 10:38 AM, p...@highoctane.be wrote:
>>
>> In business apps, the need for default values happen all the time, so the
>> idiom has value (not sure for the message name though).
>>
>>
>> Totally. In real apps, having to compare against uninitialized variable
>> or nil as response or empty string happens so often that having this method
>> makes it quite convenient (AKA lots of code becomes one-liners).
>>
>> We could use
>>
>> x := [ self thing ] ifError: [ someDefault ]
>>
>>
>> I understand you’re setting a similar, quite not like it example but in
>> any case this one raises and catches an exception and that sounds quite
>> less efficient if compared to return self (when object is not nil and is
>> not an empty collection/string)
>>
>> for these purposes. Triggering errors is not too nice still.
>>
>> Now, what if self itself is nil or empty?
>>
>> BTW, isEmptyOrNil exists in the image for Collections and
>> UndefinedObject. Empty has no meaning for Object, so why test against empty
>> in the name?
>>
>> Note that is not a testing method, it’s a conditional executor of the
>> closure.
>> The reason why was already mentioned, is to allow you to write this
>> one-liner convenience:
>> someVar := self thing ifNilOrEmpty: [blah]
>>
>> `self thing` could be an expensive process that returns something or nil
>> or an empty collection. *If* you get nil or empty as result then you
>> would get the block values resulting in having blah at someVar
>>
>>
>> In the image, I see that we do have #default: anObject in several places.
>> It seems to serve the same intent.
>>
>> What is the idiom for such things in Pharo? Importing idioms from other
>> languages works but if we do have one already, we will introduce confusion.
>>
>>
>> how can you do that one-liner without introducing *ifNilOrEmpty:* ?
>>
>>
>>
>> Phil
>>
>>
>>
>> On Mon, Jan 5, 2015 at 1:19 PM, Tudor Girba <tu...@tudorgirba.com> wrote:
>>
>>> This is not about taste. This is about not promoting the use of nil or
>>> dependency or the meaning of empty collection.
>>>
>>> A better way is to look at the upstream logic and modify that one so
>>> that it does not need to know about nil or empty.
>>>
>>> Cheers,
>>> Doru
>>>
>>>
>>>
>>> On Mon, Jan 5, 2015 at 1:17 PM, Sebastian Sastre <
>>> sebast...@flowingconcept.com> wrote:
>>>
>>>> taste is taste but would you care to illustrate your point with
>>>> examples?
>>>> I’m curious about it
>>>>
>>>>
>>>>
>>>> > On Jan 5, 2015, at 6:12 AM, stepharo <steph...@free.fr> wrote:
>>>> >
>>>> > You summarise well the kind of code I do not like.
>>>> > isNil everywhere and horrible tests.
>>>> >
>>>> > Stef
>>>> >
>>>> >
>>>> > Le 4/1/15 23:27, Sebastian Sastre a écrit :
>>>> >> Hi guys,
>>>> >>
>>>> >> I’ve started to use this little one:
>>>> >>
>>>> >> Object>>ifNilOrEmpty: aBlock
>>>> >>
>>>> >>      self ifNil: [ ^ aBlock value ].
>>>> >>
>>>> >>      (self isCollection and: [
>>>> >>      self isEmpty ]) ifTrue: [ ^ aBlock value ].
>>>> >>
>>>> >>      ^ self.
>>>> >>
>>>> >>
>>>> >> It allows you to do the widely known JavaScript one-liner:
>>>> >>
>>>> >> var stuff = this.thing || ‘some default value for when this.thing is
>>>> undefined, null or an empty string’.
>>>> >>
>>>> >> but in smalltalk in this way:
>>>> >>
>>>> >> stuff := self thing ifNilOrEmpty: [ ‘some default value for when
>>>> self thing is nil or an empty string’ ]
>>>> >>
>>>> >> simple thing feels practical and nice :)
>>>> >>
>>>> >>
>>>> >>
>>>> >
>>>> >
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> www.tudorgirba.com
>>>
>>> "Every thing has its own flow"
>>>
>>
>>
>>
>>
>>
>>
>

Reply via email to