an elegant way to return a result

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
27 messages Options
12
Reply | Threaded
Open this post in threaded view
|

an elegant way to return a result

abdelghani ALIDRA
Hi guys,

what is the best way to express the following :
return (something aMsg) if it is not nil, return somethingElse elsewhere

I could stil write:

something aMsg
    ifNil:[^ something aMsg]
    ifNotNil:[^aNotherResult]

but it sounds a little bit weird

Regards.

Abdelghani
Reply | Threaded
Open this post in threaded view
|

Re: an elegant way to return a result

Peter Uhnak
No need to have both if you are returning the receiver.

^ something aMsg ifNotNil: [ aNotherResult ]

For example try printing these two lines
1 ifNotNil: [ true ]. "true"
nil ifNotNil: [ true ]. "nil"

If you are interested in the implementation details I highly recommend to look at the implementation.
ProtoObject>>ifNotNil: aBlock
and
UndefinedObject>>ifNotNil: aBlock.

Peter

On Tue, Jun 30, 2015 at 1:21 PM, abdelghani ALIDRA <[hidden email]> wrote:
Hi guys,

what is the best way to express the following :
return (something aMsg) if it is not nil, return somethingElse elsewhere

I could stil write:

something aMsg
    ifNil:[^ something aMsg]
    ifNotNil:[^aNotherResult]

but it sounds a little bit weird

Regards.

Abdelghani

Reply | Threaded
Open this post in threaded view
|

Re: an elegant way to return a result

EstebanLM
In reply to this post by abdelghani ALIDRA
all is valid and a matter of style. You can also do this:

^ something aMsg
    ifNotNil:[ aNotherResult ]
    ifNil:[ something aMsg ]

or this:

something aMsg ifNil:[ ^ something aMsg ].
^ aNotherResult

cheers,
Esteban

> On 30 Jun 2015, at 13:21, abdelghani ALIDRA <[hidden email]> wrote:
>
> Hi guys,
>
> what is the best way to express the following :
> return (something aMsg) if it is not nil, return somethingElse elsewhere
>
> I could stil write:
>
> something aMsg
>     ifNil:[^ something aMsg]
>     ifNotNil:[^aNotherResult]
>
> but it sounds a little bit weird
>
> Regards.
>
> Abdelghani


Reply | Threaded
Open this post in threaded view
|

Re: an elegant way to return a result

Henrik Sperre Johansen
In reply to this post by abdelghani ALIDRA

On 30 Jun 2015, at 1:21 , abdelghani ALIDRA <[hidden email]> wrote:

Hi guys,

what is the best way to express the following :
return (something aMsg) if it is not nil, return somethingElse elsewhere

I could stil write:

something aMsg
    ifNil:[^ something aMsg]
    ifNotNil:[^aNotherResult]

but it sounds a little bit weird

Regards.

Abdelghani

Assuming there's a bug in your code, and not the stated intent, the normal way is:

^something aMsg ifNil: [anotherResult]

Cheers,
Henry
Reply | Threaded
Open this post in threaded view
|

Re: an elegant way to return a result

jtuchel
In reply to this post by EstebanLM
Ah, C'mon Esteban!

This one is not a question of style:
> something aMsg ifNil:[ ^ something aMsg ].
> ^ aNotherResult
What the heck ... ??? ;-))))

Sorry, I couldn't resist ;-)
See you in Brescia!

Joachim


--
-----------------------------------------------------------------------
Objektfabrik Joachim Tuchel          mailto:[hidden email]
Fliederweg 1                         http://www.objektfabrik.de
D-71640 Ludwigsburg                  http://joachimtuchel.wordpress.com
Telefon: +49 7141 56 10 86 0         Fax: +49 7141 56 10 86 1


Reply | Threaded
Open this post in threaded view
|

Re: an elegant way to return a result

Peter Uhnak
Make sense if there's code in between.

something aMsg ifNil:[ ^ something aMsg ]. "yay for guards!"
"much more code"
^ aNotherResult

Peter
Reply | Threaded
Open this post in threaded view
|

Re: an elegant way to return a result

jtuchel
Am 30.06.15 um 13:40 schrieb Peter Uhnák:
> Make sense if there's code in between.
not sure what you're saying. I mean, sending the message twice makes
sense if you already know the outcome? Hmmm...

>
> something aMsg ifNil:[ ^ something aMsg ]. "yay for guards!"
> "much more code"
> ^ aNotherResult
>
> Peter


--
-----------------------------------------------------------------------
Objektfabrik Joachim Tuchel          mailto:[hidden email]
Fliederweg 1                         http://www.objektfabrik.de
D-71640 Ludwigsburg                  http://joachimtuchel.wordpress.com
Telefon: +49 7141 56 10 86 0         Fax: +49 7141 56 10 86 1


Reply | Threaded
Open this post in threaded view
|

Re: an elegant way to return a result

Peter Uhnak
Yeah, that should be >something aMsg ifNil: [ ^ nil ]<
I thought you were referring to something else originally. :)

On Tue, Jun 30, 2015 at 1:43 PM, [hidden email] <[hidden email]> wrote:
Am 30.06.15 um 13:40 schrieb Peter Uhnák:
Make sense if there's code in between.
not sure what you're saying. I mean, sending the message twice makes sense if you already know the outcome? Hmmm...


something aMsg ifNil:[ ^ something aMsg ]. "yay for guards!"
"much more code"
^ aNotherResult

Peter


--
-----------------------------------------------------------------------
Objektfabrik Joachim Tuchel          mailto:[hidden email]
Fliederweg 1                         http://www.objektfabrik.de
D-71640 Ludwigsburg                  http://joachimtuchel.wordpress.com
Telefon: +49 7141 56 10 86 0         Fax: +49 7141 56 10 86 1



Reply | Threaded
Open this post in threaded view
|

Re: an elegant way to return a result

abdelghani ALIDRA
In reply to this post by Peter Uhnak
Thanks eveybody,

^ something aMsg ifNotNil: [ aNotherResult ]
is much more prety indded :)

Abdelghani



De : Peter Uhnák <[hidden email]>
À : abdelghani ALIDRA <[hidden email]>; Any question about pharo is welcome <[hidden email]>
Envoyé le : Mardi 30 juin 2015 13h26
Objet : Re: [Pharo-users] an elegant way to return a result

No need to have both if you are returning the receiver.

^ something aMsg ifNotNil: [ aNotherResult ]

For example try printing these two lines
1 ifNotNil: [ true ]. "true"
nil ifNotNil: [ true ]. "nil"

If you are interested in the implementation details I highly recommend to look at the implementation.
ProtoObject>>ifNotNil: aBlock
and
UndefinedObject>>ifNotNil: aBlock.

Peter



On Tue, Jun 30, 2015 at 1:21 PM, abdelghani ALIDRA <[hidden email]> wrote:
Hi guys,

what is the best way to express the following :
return (something aMsg) if it is not nil, return somethingElse elsewhere

I could stil write:

something aMsg
    ifNil:[^ something aMsg]
    ifNotNil:[^aNotherResult]

but it sounds a little bit weird

Regards.

Abdelghani



Reply | Threaded
Open this post in threaded view
|

Re: an elegant way to return a result

EstebanLM
In reply to this post by jtuchel
ah yeah :)

I assumed

first "something aMsg" ~= second "something aMsg”

In case is the same, the correct way is as you say:

^ something aMsg ifNil: [ anotherResult ]

(sorry, he :P)

> On 30 Jun 2015, at 13:43, [hidden email] wrote:
>
> Am 30.06.15 um 13:40 schrieb Peter Uhnák:
>> Make sense if there's code in between.
> not sure what you're saying. I mean, sending the message twice makes sense if you already know the outcome? Hmmm...
>
>>
>> something aMsg ifNil:[ ^ something aMsg ]. "yay for guards!"
>> "much more code"
>> ^ aNotherResult
>>
>> Peter
>
>
> --
> -----------------------------------------------------------------------
> Objektfabrik Joachim Tuchel          mailto:[hidden email]
> Fliederweg 1                         http://www.objektfabrik.de
> D-71640 Ludwigsburg                  http://joachimtuchel.wordpress.com
> Telefon: +49 7141 56 10 86 0         Fax: +49 7141 56 10 86 1
>
>


Reply | Threaded
Open this post in threaded view
|

Re: an elegant way to return a result

jtuchel
Ah, Okay, you are mentioning the one and only one case in which this
could make sense.... ;-)

Something like

stream next ifNil: [^stream next].

So there may be cases where the two sends do not return the same result.
But that is, of course, not what the OP suggested. Nevertheless, I was
too fast in criticizing ;-)

I would consider code like that "less easy" to maintain, however.

Nice thinking Kata ;-)

Joachim



Am 30.06.15 um 14:22 schrieb Esteban Lorenzano:

> ah yeah :)
>
> I assumed
>
> first "something aMsg" ~= second "something aMsg”
>
> In case is the same, the correct way is as you say:
>
> ^ something aMsg ifNil: [ anotherResult ]
>
> (sorry, he :P)
>
>> On 30 Jun 2015, at 13:43, [hidden email] wrote:
>>
>> Am 30.06.15 um 13:40 schrieb Peter Uhnák:
>>> Make sense if there's code in between.
>> not sure what you're saying. I mean, sending the message twice makes sense if you already know the outcome? Hmmm...
>>
>>> something aMsg ifNil:[ ^ something aMsg ]. "yay for guards!"
>>> "much more code"
>>> ^ aNotherResult
>>>
>>> Peter
>>
>> --
>> -----------------------------------------------------------------------
>> Objektfabrik Joachim Tuchel          mailto:[hidden email]
>> Fliederweg 1                         http://www.objektfabrik.de
>> D-71640 Ludwigsburg                  http://joachimtuchel.wordpress.com
>> Telefon: +49 7141 56 10 86 0         Fax: +49 7141 56 10 86 1
>>
>>
>
>


--
-----------------------------------------------------------------------
Objektfabrik Joachim Tuchel          mailto:[hidden email]
Fliederweg 1                         http://www.objektfabrik.de
D-71640 Ludwigsburg                  http://joachimtuchel.wordpress.com
Telefon: +49 7141 56 10 86 0         Fax: +49 7141 56 10 86 1


Reply | Threaded
Open this post in threaded view
|

Re: an elegant way to return a result

stepharo


Le 30/6/15 14:39, [hidden email] a écrit :
> Ah, Okay, you are mentioning the one and only one case in which this
> could make sense.... ;-)
>
> Something like
>
> stream next ifNil: [^stream next].

so ugly.
Please we should not teach how to do exception with blocks :)

>
> So there may be cases where the two sends do not return the same
> result. But that is, of course, not what the OP suggested.
> Nevertheless, I was too fast in criticizing ;-)
>
> I would consider code like that "less easy" to maintain, however.
>
> Nice thinking Kata ;-)
>
> Joachim
>
>
>
> Am 30.06.15 um 14:22 schrieb Esteban Lorenzano:
>> ah yeah :)
>>
>> I assumed
>>
>> first "something aMsg" ~= second "something aMsg”
>>
>> In case is the same, the correct way is as you say:
>>
>> ^ something aMsg ifNil: [ anotherResult ]
>>
>> (sorry, he :P)
>>
>>> On 30 Jun 2015, at 13:43, [hidden email] wrote:
>>>
>>> Am 30.06.15 um 13:40 schrieb Peter Uhnák:
>>>> Make sense if there's code in between.
>>> not sure what you're saying. I mean, sending the message twice makes
>>> sense if you already know the outcome? Hmmm...
>>>
>>>> something aMsg ifNil:[ ^ something aMsg ]. "yay for guards!"
>>>> "much more code"
>>>> ^ aNotherResult
>>>>
>>>> Peter
>>>
>>> --
>>> -----------------------------------------------------------------------
>>> Objektfabrik Joachim Tuchel mailto:[hidden email]
>>> Fliederweg 1 http://www.objektfabrik.de
>>> D-71640 Ludwigsburg http://joachimtuchel.wordpress.com
>>> Telefon: +49 7141 56 10 86 0         Fax: +49 7141 56 10 86 1
>>>
>>>
>>
>>
>
>


Reply | Threaded
Open this post in threaded view
|

Re: an elegant way to return a result

jtuchel
Stef,

you're shooting the wrong man! ;-) The crime was committed in your team
;-))))

See you in Brescia

Joachim

Am 30.06.15 um 19:19 schrieb stepharo:

>
>
> Le 30/6/15 14:39, [hidden email] a écrit :
>> Ah, Okay, you are mentioning the one and only one case in which this
>> could make sense.... ;-)
>>
>> Something like
>>
>> stream next ifNil: [^stream next].
>
> so ugly.
> Please we should not teach how to do exception with blocks :)
>>
>> So there may be cases where the two sends do not return the same
>> result. But that is, of course, not what the OP suggested.
>> Nevertheless, I was too fast in criticizing ;-)
>>
>> I would consider code like that "less easy" to maintain, however.
>>
>> Nice thinking Kata ;-)
>>
>> Joachim
>>
>>
>>
>> Am 30.06.15 um 14:22 schrieb Esteban Lorenzano:
>>> ah yeah :)
>>>
>>> I assumed
>>>
>>> first "something aMsg" ~= second "something aMsg”
>>>
>>> In case is the same, the correct way is as you say:
>>>
>>> ^ something aMsg ifNil: [ anotherResult ]
>>>
>>> (sorry, he :P)
>>>
>>>> On 30 Jun 2015, at 13:43, [hidden email] wrote:
>>>>
>>>> Am 30.06.15 um 13:40 schrieb Peter Uhnák:
>>>>> Make sense if there's code in between.
>>>> not sure what you're saying. I mean, sending the message twice
>>>> makes sense if you already know the outcome? Hmmm...
>>>>
>>>>> something aMsg ifNil:[ ^ something aMsg ]. "yay for guards!"
>>>>> "much more code"
>>>>> ^ aNotherResult
>>>>>
>>>>> Peter
>>>>
>>>> --
>>>> -----------------------------------------------------------------------
>>>>
>>>> Objektfabrik Joachim Tuchel mailto:[hidden email]
>>>> Fliederweg 1 http://www.objektfabrik.de
>>>> D-71640 Ludwigsburg http://joachimtuchel.wordpress.com
>>>> Telefon: +49 7141 56 10 86 0         Fax: +49 7141 56 10 86 1
>>>>
>>>>
>>>
>>>
>>
>>
>
>
>


--
-----------------------------------------------------------------------
Objektfabrik Joachim Tuchel          mailto:[hidden email]
Fliederweg 1                         http://www.objektfabrik.de
D-71640 Ludwigsburg                  http://joachimtuchel.wordpress.com
Telefon: +49 7141 56 10 86 0         Fax: +49 7141 56 10 86 1


Reply | Threaded
Open this post in threaded view
|

Re: an elegant way to return a result

stepharo
I know :D

Le 1/7/15 15:19, [hidden email] a écrit :

> Stef,
>
> you're shooting the wrong man! ;-) The crime was committed in your
> team ;-))))
>
> See you in Brescia
>
> Joachim
>
> Am 30.06.15 um 19:19 schrieb stepharo:
>>
>>
>> Le 30/6/15 14:39, [hidden email] a écrit :
>>> Ah, Okay, you are mentioning the one and only one case in which this
>>> could make sense.... ;-)
>>>
>>> Something like
>>>
>>> stream next ifNil: [^stream next].
>>
>> so ugly.
>> Please we should not teach how to do exception with blocks :)
>>>
>>> So there may be cases where the two sends do not return the same
>>> result. But that is, of course, not what the OP suggested.
>>> Nevertheless, I was too fast in criticizing ;-)
>>>
>>> I would consider code like that "less easy" to maintain, however.
>>>
>>> Nice thinking Kata ;-)
>>>
>>> Joachim
>>>
>>>
>>>
>>> Am 30.06.15 um 14:22 schrieb Esteban Lorenzano:
>>>> ah yeah :)
>>>>
>>>> I assumed
>>>>
>>>> first "something aMsg" ~= second "something aMsg”
>>>>
>>>> In case is the same, the correct way is as you say:
>>>>
>>>> ^ something aMsg ifNil: [ anotherResult ]
>>>>
>>>> (sorry, he :P)
>>>>
>>>>> On 30 Jun 2015, at 13:43, [hidden email] wrote:
>>>>>
>>>>> Am 30.06.15 um 13:40 schrieb Peter Uhnák:
>>>>>> Make sense if there's code in between.
>>>>> not sure what you're saying. I mean, sending the message twice
>>>>> makes sense if you already know the outcome? Hmmm...
>>>>>
>>>>>> something aMsg ifNil:[ ^ something aMsg ]. "yay for guards!"
>>>>>> "much more code"
>>>>>> ^ aNotherResult
>>>>>>
>>>>>> Peter
>>>>>
>>>>> --
>>>>> -----------------------------------------------------------------------
>>>>>
>>>>> Objektfabrik Joachim Tuchel mailto:[hidden email]
>>>>> Fliederweg 1 http://www.objektfabrik.de
>>>>> D-71640 Ludwigsburg http://joachimtuchel.wordpress.com
>>>>> Telefon: +49 7141 56 10 86 0         Fax: +49 7141 56 10 86 1
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>>
>
>


Reply | Threaded
Open this post in threaded view
|

Re: an elegant way to return a result

Matthieu

This whole conversation really makes me want to ask: How do you know if some code is bad, good or completely ugly ? I've not been programming for long but I've already heard sentences like this: "Damn this piece of code is so bad !" so often that I am really wondering. What are the rules ? Performant code makes total sense but it seems there is something else.

Le 1 juil. 2015 23:36, "stepharo" <[hidden email]> a écrit :
I know :D

Le 1/7/15 15:19, [hidden email] a écrit :
Stef,

you're shooting the wrong man! ;-) The crime was committed in your team ;-))))

See you in Brescia

Joachim

Am 30.06.15 um 19:19 schrieb stepharo:


Le 30/6/15 14:39, [hidden email] a écrit :
Ah, Okay, you are mentioning the one and only one case in which this could make sense.... ;-)

Something like

stream next ifNil: [^stream next].

so ugly.
Please we should not teach how to do exception with blocks :)

So there may be cases where the two sends do not return the same result. But that is, of course, not what the OP suggested. Nevertheless, I was too fast in criticizing ;-)

I would consider code like that "less easy" to maintain, however.

Nice thinking Kata ;-)

Joachim



Am 30.06.15 um 14:22 schrieb Esteban Lorenzano:
ah yeah :)

I assumed

first "something aMsg" ~= second "something aMsg”

In case is the same, the correct way is as you say:

^ something aMsg ifNil: [ anotherResult ]

(sorry, he :P)

On 30 Jun 2015, at 13:43, [hidden email] wrote:

Am 30.06.15 um 13:40 schrieb Peter Uhnák:
Make sense if there's code in between.
not sure what you're saying. I mean, sending the message twice makes sense if you already know the outcome? Hmmm...

something aMsg ifNil:[ ^ something aMsg ]. "yay for guards!"
"much more code"
^ aNotherResult

Peter

--
-----------------------------------------------------------------------
Objektfabrik Joachim Tuchel mailto:[hidden email]
Fliederweg 1 http://www.objektfabrik.de
D-71640 Ludwigsburg http://joachimtuchel.wordpress.com
Telefon: <a href="tel:%2B49%207141%2056%2010%2086%200" value="+4971415610860" target="_blank">+49 7141 56 10 86 0         Fax: <a href="tel:%2B49%207141%2056%2010%2086%201" value="+4971415610861" target="_blank">+49 7141 56 10 86 1













Reply | Threaded
Open this post in threaded view
|

Re: an elegant way to return a result

jtuchel
In reply to this post by abdelghani ALIDRA
Just found this on twitter:

http://www.cs.wm.edu/~denys/pubs/ICSE%2715-BadSmells-CRC.pdf

Am 01.07.2015 23:35 schrieb stepharo <[hidden email]>:

>
> I know :D
>
> Le 1/7/15 15:19, [hidden email] a écrit :
> > Stef,
> >
> > you're shooting the wrong man! ;-) The crime was committed in your
> > team ;-))))
> >
> > See you in Brescia
> >
> > Joachim
> >
> > Am 30.06.15 um 19:19 schrieb stepharo:
> >>
> >>
> >> Le 30/6/15 14:39, [hidden email] a écrit :
> >>> Ah, Okay, you are mentioning the one and only one case in which this
> >>> could make sense.... ;-)
> >>>
> >>> Something like
> >>>
> >>> stream next ifNil: [^stream next].
> >>
> >> so ugly.
> >> Please we should not teach how to do exception with blocks :)
> >>>
> >>> So there may be cases where the two sends do not return the same
> >>> result. But that is, of course, not what the OP suggested.
> >>> Nevertheless, I was too fast in criticizing ;-)
> >>>
> >>> I would consider code like that "less easy" to maintain, however.
> >>>
> >>> Nice thinking Kata ;-)
> >>>
> >>> Joachim
> >>>
> >>>
> >>>
> >>> Am 30.06.15 um 14:22 schrieb Esteban Lorenzano:
> >>>> ah yeah :)
> >>>>
> >>>> I assumed
> >>>>
> >>>> first "something aMsg" ~= second "something aMsg”
> >>>>
> >>>> In case is the same, the correct way is as you say:
> >>>>
> >>>> ^ something aMsg ifNil: [ anotherResult ]
> >>>>
> >>>> (sorry, he :P)
> >>>>
> >>>>> On 30 Jun 2015, at 13:43, [hidden email] wrote:
> >>>>>
> >>>>> Am 30.06.15 um 13:40 schrieb Peter Uhnák:
> >>>>>> Make sense if there's code in between.
> >>>>> not sure what you're saying. I mean, sending the message twice
> >>>>> makes sense if you already know the outcome? Hmmm...
> >>>>>
> >>>>>> something aMsg ifNil:[ ^ something aMsg ]. "yay for guards!"
> >>>>>> "much more code"
> >>>>>> ^ aNotherResult
> >>>>>>
> >>>>>> Peter
> >>>>>
> >>>>> --
> >>>>> -----------------------------------------------------------------------
> >>>>>
> >>>>> Objektfabrik Joachim Tuchel mailto:[hidden email]
> >>>>> Fliederweg 1 http://www.objektfabrik.de 
> >>>>> D-71640 Ludwigsburg http://joachimtuchel.wordpress.com 
> >>>>> Telefon: +49 7141 56 10 86 0         Fax: +49 7141 56 10 86 1
> >>>>>
> >>>>>
> >>>>
> >>>>
> >>>
> >>>
> >>
> >>
> >>
> >
> >
>
>
>
Reply | Threaded
Open this post in threaded view
|

Re: an elegant way to return a result

stepharo
In reply to this post by Matthieu
Hi matthieu

on my side:
   
    stream next ifNil: [^stream next].

When you execute a block (far away from the place it was created), it acts as an exception, it stops the execution of currently executed methods and
return to its home context (method that led to the creation of the block) Read deep into Pharo because this is a great chapter.
So people should avoid to put return statement into a block since a block returns already the value of its last expression.

So for me
    arg: [ ^ ... ]

is a big warning.

Stef



Le 1/7/15 23:55, Matthieu Lacaton a écrit :

This whole conversation really makes me want to ask: How do you know if some code is bad, good or completely ugly ? I've not been programming for long but I've already heard sentences like this: "Damn this piece of code is so bad !" so often that I am really wondering. What are the rules ? Performant code makes total sense but it seems there is something else.

Le 1 juil. 2015 23:36, "stepharo" <[hidden email]> a écrit :
I know :D

Le 1/7/15 15:19, [hidden email] a écrit :
Stef,

you're shooting the wrong man! ;-) The crime was committed in your team ;-))))

See you in Brescia

Joachim

Am 30.06.15 um 19:19 schrieb stepharo:


Le 30/6/15 14:39, [hidden email] a écrit :
Ah, Okay, you are mentioning the one and only one case in which this could make sense.... ;-)

Something like

stream next ifNil: [^stream next].

so ugly.
Please we should not teach how to do exception with blocks :)

So there may be cases where the two sends do not return the same result. But that is, of course, not what the OP suggested. Nevertheless, I was too fast in criticizing ;-)

I would consider code like that "less easy" to maintain, however.

Nice thinking Kata ;-)

Joachim



Am 30.06.15 um 14:22 schrieb Esteban Lorenzano:
ah yeah :)

I assumed

first "something aMsg" ~= second "something aMsg”

In case is the same, the correct way is as you say:

^ something aMsg ifNil: [ anotherResult ]

(sorry, he :P)

On 30 Jun 2015, at 13:43, [hidden email] wrote:

Am 30.06.15 um 13:40 schrieb Peter Uhnák:
Make sense if there's code in between.
not sure what you're saying. I mean, sending the message twice makes sense if you already know the outcome? Hmmm...

something aMsg ifNil:[ ^ something aMsg ]. "yay for guards!"
"much more code"
^ aNotherResult

Peter

--
-----------------------------------------------------------------------
Objektfabrik Joachim Tuchel mailto:[hidden email]
Fliederweg 1 http://www.objektfabrik.de
D-71640 Ludwigsburg http://joachimtuchel.wordpress.com
Telefon: <a moz-do-not-send="true" href="tel:%2B49%207141%2056%2010%2086%200" value="+4971415610860" target="_blank">+49 7141 56 10 86 0         Fax: <a moz-do-not-send="true" href="tel:%2B49%207141%2056%2010%2086%201" value="+4971415610861" target="_blank">+49 7141 56 10 86 1














Reply | Threaded
Open this post in threaded view
|

Re: an elegant way to return a result

Ben Coman
On Fri, Jul 3, 2015 at 5:23 AM, stepharo <[hidden email]> wrote:

> Hi matthieu
>
> on my side:
>
>     stream next ifNil: [^stream next].
>
> When you execute a block (far away from the place it was created), it acts
> as an exception, it stops the execution of currently executed methods and
> return to its home context (method that led to the creation of the block)
> Read deep into Pharo because this is a great chapter.
> So people should avoid to put return statement into a block since a block
> returns already the value of its last expression.
>
> So for me
>     arg: [ ^ ... ]
>
> is a big warning.
>
> Stef

Is there a code critic for that ? :)
cheers -ben

Reply | Threaded
Open this post in threaded view
|

Re: an elegant way to return a result

Peter Uhnak
> So for me
>     arg: [ ^ ... ]
>
> is a big warning.
>
> Stef

Is there a code critic for that ? :)

There is code critic that encourages you to use it for guards. :)

Peter

Reply | Threaded
Open this post in threaded view
|

Re: an elegant way to return a result

jtuchel
In reply to this post by stepharo
Stef,

So we're finding more and more problems in just a single line of code ;-)

Do you see advantages in this piece of code? Would it be friendlier to the Compiler/VM or a programmer in your opinion?


|nextOrNextAfterNext|

nextOrNextAfterNext := stream next ifNil: [stream next].
^nextOrNextAfterNext

Joachim



Am 02.07.15 um 23:23 schrieb stepharo:
Hi matthieu

on my side:
   
    stream next ifNil: [^stream next].

When you execute a block (far away from the place it was created), it acts as an exception, it stops the execution of currently executed methods and
return to its home context (method that led to the creation of the block) Read deep into Pharo because this is a great chapter.
So people should avoid to put return statement into a block since a block returns already the value of its last expression.

So for me
    arg: [ ^ ... ]

is a big warning.

Stef



Le 1/7/15 23:55, Matthieu Lacaton a écrit :

This whole conversation really makes me want to ask: How do you know if some code is bad, good or completely ugly ? I've not been programming for long but I've already heard sentences like this: "Damn this piece of code is so bad !" so often that I am really wondering. What are the rules ? Performant code makes total sense but it seems there is something else.

Le 1 juil. 2015 23:36, "stepharo" <[hidden email]> a écrit :
I know :D

Le 1/7/15 15:19, [hidden email] a écrit :
Stef,

you're shooting the wrong man! ;-) The crime was committed in your team ;-))))

See you in Brescia

Joachim

Am 30.06.15 um 19:19 schrieb stepharo:


Le 30/6/15 14:39, [hidden email] a écrit :
Ah, Okay, you are mentioning the one and only one case in which this could make sense.... ;-)

Something like

stream next ifNil: [^stream next].

so ugly.
Please we should not teach how to do exception with blocks :)

So there may be cases where the two sends do not return the same result. But that is, of course, not what the OP suggested. Nevertheless, I was too fast in criticizing ;-)

I would consider code like that "less easy" to maintain, however.

Nice thinking Kata ;-)

Joachim



Am 30.06.15 um 14:22 schrieb Esteban Lorenzano:
ah yeah :)

I assumed

first "something aMsg" ~= second "something aMsg”

In case is the same, the correct way is as you say:

^ something aMsg ifNil: [ anotherResult ]

(sorry, he :P)

On 30 Jun 2015, at 13:43, [hidden email] wrote:

Am 30.06.15 um 13:40 schrieb Peter Uhnák:
Make sense if there's code in between.
not sure what you're saying. I mean, sending the message twice makes sense if you already know the outcome? Hmmm...

something aMsg ifNil:[ ^ something aMsg ]. "yay for guards!"
"much more code"
^ aNotherResult

Peter

--
-----------------------------------------------------------------------
Objektfabrik Joachim Tuchel mailto:[hidden email]
Fliederweg 1 http://www.objektfabrik.de
D-71640 Ludwigsburg http://joachimtuchel.wordpress.com
Telefon: <a moz-do-not-send="true" href="tel:%2B49%207141%2056%2010%2086%200" value="+4971415610860" target="_blank">+49 7141 56 10 86 0         Fax: <a moz-do-not-send="true" href="tel:%2B49%207141%2056%2010%2086%201" value="+4971415610861" target="_blank">+49 7141 56 10 86 1
















-- 
-----------------------------------------------------------------------
Objektfabrik Joachim Tuchel          [hidden email]
Fliederweg 1                         http://www.objektfabrik.de
D-71640 Ludwigsburg                  http://joachimtuchel.wordpress.com
Telefon: +49 7141 56 10 86 0         Fax: +49 7141 56 10 86 1

12