Hello Martin,
You are right, but I disagree :).
It started by using #valueWithArguments: more often. I find it very bulky, hard to format nicely and difficult to read. This is because the block is the receiver. As last argument, the world looks brighter, because at the end the block formats better.
Compare:
^aList asArgumentsIn: [:a :b :c |
| x y |
x := a send: b with: c.
y := ‘multiline block’.
x printString, y]
with:
^[:a :b :c |
| x y |
x := a send: b with: c.
y := ‘multiline block’.
x printString, y
] valueWithArguments: aList
I see the second pattern used in two subsystems in VW, one also uses #cull…
Maybe I find it more difficult to read the second pattern, because the argument list is very far away from the list it associates with.
I think that I will settle with #asArgumentsIn: and see how it reads in real life.
As a shortcut, I can imagine an operator… (too bad that VW doesn’t support Unicode for operators…)
Thank you!
Von: Esug-list esug-list-bounces@lists.esug.org Im Auftrag von Martin McClure
Gesendet: Sonntag, 29. März 2020 17:50
An: Bruce Badger bwbadger@gmail.com; Tim Mackinnon tim@testit.works
Cc: esug-list@lists.esug.org Members esug-list@lists.esug.org
Betreff: Re: [Esug-list] destructDo:
After thinking about this message some more, it seemed to me that it was easier to come up with a good intention-revealing name if the block were the receiver and the array were the argument. It would be some kind of #valueWithArguments: selector. So I looked to see whether there was already such a thing, and sure enough, in Pharo there is #valueWithPossibleArgs:.
#valueWithPossibleArgs: will accept arrays (and I hope any SequenceableCollection) of any size -- trimming the end off if too large, padding with nils if too short.
On the principle of "if it's easy to come up with a good name, the design is probably pretty good" could this possibly be a better solution?
Regards,
-Martin
On 3/29/20 7:50 AM, Bruce Badger wrote:
We write code once, but read it many times. Given the relatively few times I would be using this (rather nice) thing, I'd be happy to type the full:
asArgumentsIn:
Christian, congratulations on coming up with something to get us all thinking and talking. Good timing too :-/
Very best wishes,
Bruce
On Sun, 29 Mar 2020 at 15:24, Tim Mackinnon mailto:tim@testit.works tim@testit.works wrote:
Agree with intention revealing - #argumentsIn: would contract it a bit more (not sure the as strictly needed as we aren’t returning a result). And #argsIn: might be a bit too concise.
Like this proposal though.
Tim
On Sun, 29 Mar 2020, at 2:28 PM, Helge Nowak via Esug-list wrote:
intention revealing trumps brevity
Am Sonntag, 29. März 2020, 00:58:49 MEZ hat Christian Haider <christian.haider@smalltalked-visuals.com mailto:christian.haider@smalltalked-visuals.com > Folgendes geschrieben:
Not bad! Captures the semantics nicely.
Just a bit long
Von: Esug-list <esug-list-bounces@lists.esug.org mailto:esug-list-bounces@lists.esug.org > Im Auftrag von Bert Freudenberg
Gesendet: Sonntag, 29. März 2020 00:12
An: esug-list@lists.esug.org mailto:esug-list@lists.esug.org
Betreff: Re: [Esug-list] destructDo:
On Sat, Mar 28, 2020 at 11:27 AM Pape, Tobias <Tobias.Pape@hpi.de mailto:Tobias.Pape@hpi.de > wrote:
What about
^stringsOfLine asComponentsIn: [:ignore :string2 :string3 :string4 |
self produktbereich: string2 profitcenter: string3 bezeichnung: string4]
?
Best regards
-Tobias
Agreed, "...In:" is better than "...Do" because the latter implies iteration in Smalltalk. (never mind ifNotNilDo: which broke the convention)
And since block arguments are called "arguments" how about
aCollection asArgumentsIn: [:arg1 :arg2 :arg3 | ... ]
PS: Happy Covid Bike Shedding ;)
Esug-list mailing list
Esug-list@lists.esug.org mailto:Esug-list@lists.esug.org
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org
Esug-list mailing list
Esug-list@lists.esug.org mailto:Esug-list@lists.esug.org
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org
Esug-list mailing list
Esug-list@lists.esug.org mailto:Esug-list@lists.esug.org
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org
Esug-list mailing list
Esug-list@lists.esug.org mailto:Esug-list@lists.esug.org
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org
Hi Tim,
I think that the „as” is essential and asArgsIn: would read as nice…
Von: Esug-list esug-list-bounces@lists.esug.org Im Auftrag von Tim Mackinnon
Gesendet: Sonntag, 29. März 2020 16:24
An: esug-list@lists.esug.org
Betreff: Re: [Esug-list] destructDo:
Agree with intention revealing - #argumentsIn: would contract it a bit more (not sure the as strictly needed as we aren’t returning a result). And #argsIn: might be a bit too concise.
Like this proposal though.
Tim
On Sun, 29 Mar 2020, at 2:28 PM, Helge Nowak via Esug-list wrote:
intention revealing trumps brevity
Am Sonntag, 29. März 2020, 00:58:49 MEZ hat Christian Haider <christian.haider@smalltalked-visuals.com mailto:christian.haider@smalltalked-visuals.com > Folgendes geschrieben:
Not bad! Captures the semantics nicely.
Just a bit long
Von: Esug-list <esug-list-bounces@lists.esug.org mailto:esug-list-bounces@lists.esug.org > Im Auftrag von Bert Freudenberg
Gesendet: Sonntag, 29. März 2020 00:12
An: esug-list@lists.esug.org mailto:esug-list@lists.esug.org
Betreff: Re: [Esug-list] destructDo:
On Sat, Mar 28, 2020 at 11:27 AM Pape, Tobias <Tobias.Pape@hpi.de mailto:Tobias.Pape@hpi.de > wrote:
What about
^stringsOfLine asComponentsIn: [:ignore :string2 :string3 :string4 |
self produktbereich: string2 profitcenter: string3 bezeichnung: string4]
?
Best regards
-Tobias
Agreed, "...In:" is better than "...Do" because the latter implies iteration in Smalltalk. (never mind ifNotNilDo: which broke the convention)
And since block arguments are called "arguments" how about
aCollection asArgumentsIn: [:arg1 :arg2 :arg3 | ... ]
PS: Happy Covid Bike Shedding ;)
Esug-list mailing list
Esug-list@lists.esug.org mailto:Esug-list@lists.esug.org
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org
Esug-list mailing list
Esug-list@lists.esug.org mailto:Esug-list@lists.esug.org
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org
On 29.03.2020, at 18:23, Christian Haider christian.haider@smalltalked-visuals.com wrote:
Hi Tim,
I think that the „as” is essential and asArgsIn: would read as nice…
But why contract the name? what would we gain?
Best regards
-Tobias
Von: Esug-list esug-list-bounces@lists.esug.org Im Auftrag von Tim Mackinnon
Gesendet: Sonntag, 29. März 2020 16:24
An: esug-list@lists.esug.org
Betreff: Re: [Esug-list] destructDo:
Agree with intention revealing - #argumentsIn: would contract it a bit more (not sure the as strictly needed as we aren’t returning a result). And #argsIn: might be a bit too concise.
Like this proposal though.
Tim
On Sun, 29 Mar 2020, at 2:28 PM, Helge Nowak via Esug-list wrote:
intention revealing trumps brevity
Am Sonntag, 29. März 2020, 00:58:49 MEZ hat Christian Haider christian.haider@smalltalked-visuals.com Folgendes geschrieben:
Not bad! Captures the semantics nicely.
Just a bit long
Von: Esug-list esug-list-bounces@lists.esug.org Im Auftrag von Bert Freudenberg
Gesendet: Sonntag, 29. März 2020 00:12
An: esug-list@lists.esug.org
Betreff: Re: [Esug-list] destructDo:
On Sat, Mar 28, 2020 at 11:27 AM Pape, Tobias Tobias.Pape@hpi.de wrote:
What about
^stringsOfLine asComponentsIn: [:ignore :string2 :string3 :string4 |
self produktbereich: string2 profitcenter: string3 bezeichnung: string4]
?
Best regards
-Tobias
Agreed, "...In:" is better than "...Do" because the latter implies iteration in Smalltalk. (never mind ifNotNilDo: which broke the convention)
And since block arguments are called "arguments" how about
aCollection asArgumentsIn: [:arg1 :arg2 :arg3 | ... ]
PS: Happy Covid Bike Shedding ;)
Esug-list mailing list
Esug-list@lists.esug.org
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org
Esug-list mailing list
Esug-list@lists.esug.org
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org
Esug-list mailing list
Esug-list@lists.esug.org
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org
--
Tobias Pape
Software Architecture Group | http://www.hpi.uni-potsdam.de/swa/
Future SOC Lab | https://hpi.de/future-soc-lab
Hasso-Plattner-Institut für Digital Engineering gGmbH | Universität Potsdam
Prof.-Dr.-Helmert-Str. 2-3, D-14482 Potsdam, Germany
Amtsgericht Potsdam, HRB 12184 | Geschäftsführung: Prof. Dr. Christoph Meinel
Dear Christian and Martin et al.,
one can simply reverse-ordering valueWith{Possible}Arguments: into
argumentsWithValue: - variants include asArgumentsEvaluating:,
useAsArgumentsIn:, asPossibleArgumentsTo: and etc.
Would it be too gross an abuse of the term to shorten 'possible' by
using 'cull' instead - cullArgumentsIn:, asArgumentsCulledEvaluating: ,
... ? (I'm ready to respect in advance any purist who would rather type
the longer word. :-) )
If Christian finds it makes for cleaner code, then I'm all for it. And
I endorse Tim's recommendation for clarity over brevity. Making it look
something like a reversed valueWith{Possible}Arguments: is one form of
clarity.
Just my 0.02p
Niall Ross
Martin McClure wrote:
After thinking about this message some more, it seemed to me that it
was easier to come up with a good intention-revealing name if the
block were the receiver and the array were the argument. It would be
some kind of #valueWithArguments: selector. So I looked to see whether
there was already such a thing, and sure enough, in Pharo there is
#valueWithPossibleArgs:.
#valueWithPossibleArgs: will accept arrays (and I hope any
SequenceableCollection) of any size -- trimming the end off if too
large, padding with nils if too short.
On the principle of "if it's easy to come up with a good name, the
design is probably pretty good" could this possibly be a better solution?
Regards,
-Martin
On 3/29/20 7:50 AM, Bruce Badger wrote:
We write code once, but read it many times. Given the relatively few
times I would be using this (rather nice) thing, I'd be happy to type
the full:
asArgumentsIn:
Christian, congratulations on coming up with something to get us all
thinking and talking. Good timing too :-/
Very best wishes,
Bruce
On Sun, 29 Mar 2020 at 15:24, Tim Mackinnon tim@testit.works wrote:
Agree with intention revealing - #argumentsIn: would contract it
a bit more (not sure the as strictly needed as we aren’t
returning a result). And #argsIn: might be a bit too concise.
Like this proposal though.
Tim
On Sun, 29 Mar 2020, at 2:28 PM, Helge Nowak via Esug-list wrote:
intention revealing trumps brevity
Am Sonntag, 29. März 2020, 00:58:49 MEZ hat Christian Haider
<christian.haider@smalltalked-visuals.com
<mailto:christian.haider@smalltalked-visuals.com>> Folgendes
geschrieben:
Not bad! Captures the semantics nicely.
Just a bit long
*Von:* Esug-list <esug-list-bounces@lists.esug.org
<mailto:esug-list-bounces@lists.esug.org>> *Im Auftrag von *Bert
Freudenberg
*Gesendet:* Sonntag, 29. März 2020 00:12
*An:* esug-list@lists.esug.org <mailto:esug-list@lists.esug.org>
*Betreff:* Re: [Esug-list] destructDo:
On Sat, Mar 28, 2020 at 11:27 AM Pape, Tobias
<Tobias.Pape@hpi.de <mailto:Tobias.Pape@hpi.de>> wrote:
What about
^stringsOfLine asComponentsIn: [:ignore :string2
:string3 :string4 |
self produktbereich: string2 profitcenter:
string3 bezeichnung: string4]
?
Best regards
-Tobias
Agreed, "...In:" is better than "...Do" because the latter
implies iteration in Smalltalk. (never mind ifNotNilDo: which
broke the convention)
And since block arguments are called "arguments" how about
aCollection asArgumentsIn: [:arg1 :arg2 :arg3 | ... ]
- Bert -
PS: Happy Covid Bike Shedding ;)
_______________________________________________
Esug-list mailing list
Esug-list@lists.esug.org <mailto:Esug-list@lists.esug.org>
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org
_______________________________________________
Esug-list mailing list
Esug-list@lists.esug.org <mailto:Esug-list@lists.esug.org>
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org
_______________________________________________
Esug-list mailing list
Esug-list@lists.esug.org <mailto:Esug-list@lists.esug.org>
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org
Esug-list mailing list
Esug-list@lists.esug.org
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org
Esug-list mailing list
Esug-list@lists.esug.org
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org
For stuffing stuff towards a block we can take inspiration from the
#inject:into: selector.
'how did that go?' into: [:firstCharacter :secondCharacter|
self halt ]
R