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 |
No need to have both if you are returning the receiver. 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:
|
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 |
In reply to this post by abdelghani ALIDRA
Assuming there's a bug in your code, and not the stated intent, the normal way is: ^something aMsg ifNil: [anotherResult] Cheers, Henry
|
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 |
Make sense if there's code in between. something aMsg ifNil:[ ^ something aMsg ]. "yay for guards!" "much more code" ^ aNotherResult Peter |
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 |
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: |
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. 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:
|
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 > > |
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 |
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 >>> >>> >> >> > > |
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 |
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 >>>>> >>>>> >>>> >>>> >>> >>> >> >> >> > > |
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 |
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 > >>>>> > >>>>> > >>>> > >>>> > >>> > >>> > >> > >> > >> > > > > > > > |
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 :
|
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 |
> So for me There is code critic that encourages you to use it for guards. :) Peter |
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 -- ----------------------------------------------------------------------- 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 |
Free forum by Nabble | Edit this page |