translateBy: vs translatedBy:

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

translateBy: vs translatedBy:

SergeStinckwich
In Pharo 4.0, there is a Rectangle>>translateBy: aFactor method.
The same method in VW is called translatedBy:

In Pharo, there is also a translatedToBeWithin: and
translatedAndSquishedToBeWithin:
and scaledBy:

Just to be consistent, this is maybe better to use translatedBy:
instead of translateBy: ?

--
Serge Stinckwich
UCBN & UMI UMMISCO 209 (IRD/UPMC)
Every DSL ends up being Smalltalk
http://www.doesnotunderstand.org/

Reply | Threaded
Open this post in threaded view
|

Re: translateBy: vs translatedBy:

Aliaksei Syrel
Hi Serge,

I vote for renaming to Rectangle>>translatedBy:, because it returns a new translated rectangle instance.
For example in bloc there is BlUserInputEvent and it has two methods: translateBy: and translatedBy:.
First one actually modifies position (mutates object) the second one creates a translated copy of the event.
Hence Rectangle is suppose to be immutable I think translatedBy: is better name.

Cheers,
Alex

On Tue, May 26, 2015 at 2:41 PM, Serge Stinckwich <[hidden email]> wrote:
In Pharo 4.0, there is a Rectangle>>translateBy: aFactor method.
The same method in VW is called translatedBy:

In Pharo, there is also a translatedToBeWithin: and
translatedAndSquishedToBeWithin:
and scaledBy:

Just to be consistent, this is maybe better to use translatedBy:
instead of translateBy: ?

--
Serge Stinckwich
UCBN & UMI UMMISCO 209 (IRD/UPMC)
Every DSL ends up being Smalltalk
http://www.doesnotunderstand.org/


Reply | Threaded
Open this post in threaded view
|

Re: translateBy: vs translatedBy:

Peter Uhnak
I vote for renaming to Rectangle>>translatedBy:, because it returns a new translated rectangle instance.

-1
There is no benefit in renaming a single method, apart from creating more confusion.
If anything, the whole Rectangle API would have to be changed, as there is plethora of similar methods (expandBy:, extendBy:, merge:, etc.)

Pretty much all Rectangle messages are immutable and create new Rectangle, thus I feel it is unnecessary to state it explicitly.

In VW there is plenty of methods (e.g. left:) that mutates it, thus unlike Pharo a clear distinction is required.

Peter
Reply | Threaded
Open this post in threaded view
|

Re: translateBy: vs translatedBy:

Ben Coman
On Tue, May 26, 2015 at 9:38 PM, Peter Uhnák <[hidden email]> wrote:
>> I vote for renaming to Rectangle>>translatedBy:, because it returns a new
>> translated rectangle instance.
>
>
> -1
> There is no benefit in renaming a single method, apart from creating more
> confusion.

I wouldn't say "no benefit".  Consistent conventions are beneficial.
It could be useful to bring these into line with the general "-ed"
convention of returning a new object.      I don't see how this would
create confusion, though it might create work.  Whether its worth the
work is a slightly different question.

> If anything, the whole Rectangle API would have to be changed, as there is
> plethora of similar methods (expandBy:, extendBy:, merge:, etc.)

For a better feel of the work involved...

Rectangle methods select: [ :m | m sourceCode includesSubstring: '^
Rectangle ' ].
    Rectangle>>#intersect:
    Rectangle>>#quickMerge:
    Rectangle>>#encompass:
    Rectangle>>#intersect:ifNone:

Rectangle methods select: [ :m | m sourceCode includesSubstring:
'^Rectangle ' ].
    Rectangle>>#intersect:
    Rectangle>>#translateBy:
    Rectangle>>#scaleBy:
    Rectangle>>#merge:
    Rectangle>>#compressTo:
    Rectangle>>#expandTo:
    Rectangle>>#roundTo:
    Rectangle>>#truncateTo:

The following already follow the convention...
    Rectangle>>#compressed
    Rectangle>>#expanded
    Rectangle>>#rounded
    Rectangle>>#truncated

> Pretty much all Rectangle messages are immutable and create new Rectangle,
> thus I feel it is unnecessary to state it explicitly.
>
> In VW there is plenty of methods (e.g. left:) that mutates it, thus unlike
> Pharo a clear distinction is required.

Still, it is reasonable to consider the impact of inconsistent
conventions on the rest of the system outside of Rectangle.

cheers -ben

Reply | Threaded
Open this post in threaded view
|

Re: translateBy: vs translatedBy:

Peter Uhnak
That's not all, many methods return new rectangles via Point's API, namely Point>>{#corner: #extent: #rectangle:}

I don't know if I can perform static analysis of the code (are there tools for that in Pharo?) to see which methods exactly return Rectangle

rectMethods := #(#corner: #extent: #rectangle:).
(Point methods select: [ :m | rectMethods includes: m selector ] thenCollect: [ :m | m senders ]) flattened select: [ :s | s className = #Rectangle ]. "an Array(
Rectangle>>#areasOutside:
Rectangle>>#withSideOrCorner:setToPoint:minExtent:limit:
Rectangle>>#withBottom:
Rectangle>>#bottom:
Rectangle>>#areasOverlapingOutside:
Rectangle>>#floor
Rectangle>>#allAreasOutsideList:startingAt:do:
Rectangle>>#scaledAndCenteredIn:
Rectangle>>#squishedWithin:
Rectangle>>#ceiling
Rectangle>>#withHeight:
Rectangle>>#rectanglesAt:height:
Rectangle>>#scaleFrom:to:
Rectangle>>#withLeft:
Rectangle>>#left:
Rectangle>>#withTop:
Rectangle>>#right:
Rectangle>>#top:
Rectangle>>#innerCorners
Rectangle>>#interpolateTo:at:
Rectangle>>#withWidth:
Rectangle>>#quickMergePoint:
Rectangle>>#withRight:
Rectangle>>#rotateBy:centerAt:
Rectangle>>#withSideOrCorner:setToPoint:minExtent:limit:
Rectangle>>#flipBy:centerAt:)
"

This list is maybe a bit excessive (sometimes it returns self, sometimes new rectangle -- e.g. floor).


On Tue, May 26, 2015 at 6:14 PM, Ben Coman <[hidden email]> wrote:
On Tue, May 26, 2015 at 9:38 PM, Peter Uhnák <[hidden email]> wrote:
>> I vote for renaming to Rectangle>>translatedBy:, because it returns a new
>> translated rectangle instance.
>
>
> -1
> There is no benefit in renaming a single method, apart from creating more
> confusion.

I wouldn't say "no benefit".  Consistent conventions are beneficial.
It could be useful to bring these into line with the general "-ed"
convention of returning a new object.      I don't see how this would
create confusion, though it might create work.  Whether its worth the
work is a slightly different question.

> If anything, the whole Rectangle API would have to be changed, as there is
> plethora of similar methods (expandBy:, extendBy:, merge:, etc.)

For a better feel of the work involved...

Rectangle methods select: [ :m | m sourceCode includesSubstring: '^
Rectangle ' ].
    Rectangle>>#intersect:
    Rectangle>>#quickMerge:
    Rectangle>>#encompass:
    Rectangle>>#intersect:ifNone:

Rectangle methods select: [ :m | m sourceCode includesSubstring:
'^Rectangle ' ].
    Rectangle>>#intersect:
    Rectangle>>#translateBy:
    Rectangle>>#scaleBy:
    Rectangle>>#merge:
    Rectangle>>#compressTo:
    Rectangle>>#expandTo:
    Rectangle>>#roundTo:
    Rectangle>>#truncateTo:

The following already follow the convention...
    Rectangle>>#compressed
    Rectangle>>#expanded
    Rectangle>>#rounded
    Rectangle>>#truncated

> Pretty much all Rectangle messages are immutable and create new Rectangle,
> thus I feel it is unnecessary to state it explicitly.
>
> In VW there is plenty of methods (e.g. left:) that mutates it, thus unlike
> Pharo a clear distinction is required.

Still, it is reasonable to consider the impact of inconsistent
conventions on the rest of the system outside of Rectangle.

cheers -ben


Reply | Threaded
Open this post in threaded view
|

Re: translateBy: vs translatedBy:

Ben Coman
>
> On Tue, May 26, 2015 at 6:14 PM, Ben Coman <[hidden email]> wrote:
>>
>> On Tue, May 26, 2015 at 9:38 PM, Peter Uhnák <[hidden email]> wrote:
>> >> I vote for renaming to Rectangle>>translatedBy:, because it returns a
>> >> new
>> >> translated rectangle instance.
>> >
>> >
>> > -1
>> > There is no benefit in renaming a single method, apart from creating
>> > more
>> > confusion.
>>
>> I wouldn't say "no benefit".  Consistent conventions are beneficial.
>> It could be useful to bring these into line with the general "-ed"
>> convention of returning a new object.      I don't see how this would
>> create confusion, though it might create work.  Whether its worth the
>> work is a slightly different question.
>>
>> > If anything, the whole Rectangle API would have to be changed, as there
>> > is
>> > plethora of similar methods (expandBy:, extendBy:, merge:, etc.)
>>
>> For a better feel of the work involved...
>>
>> Rectangle methods select: [ :m | m sourceCode includesSubstring: '^
>> Rectangle ' ].
>>     Rectangle>>#intersect:
>>     Rectangle>>#quickMerge:
>>     Rectangle>>#encompass:
>>     Rectangle>>#intersect:ifNone:
>>
>> Rectangle methods select: [ :m | m sourceCode includesSubstring:
>> '^Rectangle ' ].
>>     Rectangle>>#intersect:
>>     Rectangle>>#translateBy:
>>     Rectangle>>#scaleBy:
>>     Rectangle>>#merge:
>>     Rectangle>>#compressTo:
>>     Rectangle>>#expandTo:
>>     Rectangle>>#roundTo:
>>     Rectangle>>#truncateTo:
>>
>> The following already follow the convention...
>>     Rectangle>>#compressed
>>     Rectangle>>#expanded
>>     Rectangle>>#rounded
>>     Rectangle>>#truncated
>>
>> > Pretty much all Rectangle messages are immutable and create new
>> > Rectangle,
>> > thus I feel it is unnecessary to state it explicitly.
>> >
>> > In VW there is plenty of methods (e.g. left:) that mutates it, thus
>> > unlike
>> > Pharo a clear distinction is required.
>>
>> Still, it is reasonable to consider the impact of inconsistent
>> conventions on the rest of the system outside of Rectangle.
>>
>> cheers -ben
>>
>


On Wed, May 27, 2015 at 1:16 AM, Peter Uhnák <[hidden email]> wrote:

> That's not all, many methods return new rectangles via Point's API, namely
> Point>>{#corner: #extent: #rectangle:}
>
> I don't know if I can perform static analysis of the code (are there tools
> for that in Pharo?) to see which methods exactly return Rectangle
>
> rectMethods := #(#corner: #extent: #rectangle:).
> (Point methods select: [ :m | rectMethods includes: m selector ]
> thenCollect: [ :m | m senders ]) flattened select: [ :s | s className =
> #Rectangle ]. "an Array(
> Rectangle>>#areasOutside:
> Rectangle>>#withSideOrCorner:setToPoint:minExtent:limit:
> Rectangle>>#withBottom:
> Rectangle>>#bottom:
> Rectangle>>#areasOverlapingOutside:
> Rectangle>>#floor
> Rectangle>>#allAreasOutsideList:startingAt:do:
> Rectangle>>#scaledAndCenteredIn:
> Rectangle>>#squishedWithin:
> Rectangle>>#ceiling
> Rectangle>>#withHeight:
> Rectangle>>#rectanglesAt:height:
> Rectangle>>#scaleFrom:to:
> Rectangle>>#withLeft:
> Rectangle>>#left:
> Rectangle>>#withTop:
> Rectangle>>#right:
> Rectangle>>#top:
> Rectangle>>#innerCorners
> Rectangle>>#interpolateTo:at:
> Rectangle>>#withWidth:
> Rectangle>>#quickMergePoint:
> Rectangle>>#withRight:
> Rectangle>>#rotateBy:centerAt:
> Rectangle>>#withSideOrCorner:setToPoint:minExtent:limit:
> Rectangle>>#flipBy:centerAt:)
> "
>
> This list is maybe a bit excessive (sometimes it returns self, sometimes new
> rectangle -- e.g. floor).
>

Good   Point   ;)

However the "-ed" convention doesn't make sense for many of those...
    #areasdOutside: , #areasedOutside , #areaOutsided:  ?
... and #areasOutside is obviously a different rectangle than the original.

The scope might be restricted to only those where the usual convention
makes the names misleading, for example:
   #merge

cheers -ben

Reply | Threaded
Open this post in threaded view
|

Re: translateBy: vs translatedBy:

Damien Pollet
There is a discussion of such idioms in the I will present at ESUG. I only looked at the API of String, but I'm sure most naming idioms apply to any class. The question is, how do you ensure they are applied and complete?

On 27 May 2015 at 01:14, Ben Coman <[hidden email]> wrote:
>
> On Tue, May 26, 2015 at 6:14 PM, Ben Coman <[hidden email]> wrote:
>>
>> On Tue, May 26, 2015 at 9:38 PM, Peter Uhnák <[hidden email]> wrote:
>> >> I vote for renaming to Rectangle>>translatedBy:, because it returns a
>> >> new
>> >> translated rectangle instance.
>> >
>> >
>> > -1
>> > There is no benefit in renaming a single method, apart from creating
>> > more
>> > confusion.
>>
>> I wouldn't say "no benefit".  Consistent conventions are beneficial.
>> It could be useful to bring these into line with the general "-ed"
>> convention of returning a new object.      I don't see how this would
>> create confusion, though it might create work.  Whether its worth the
>> work is a slightly different question.
>>
>> > If anything, the whole Rectangle API would have to be changed, as there
>> > is
>> > plethora of similar methods (expandBy:, extendBy:, merge:, etc.)
>>
>> For a better feel of the work involved...
>>
>> Rectangle methods select: [ :m | m sourceCode includesSubstring: '^
>> Rectangle ' ].
>>     Rectangle>>#intersect:
>>     Rectangle>>#quickMerge:
>>     Rectangle>>#encompass:
>>     Rectangle>>#intersect:ifNone:
>>
>> Rectangle methods select: [ :m | m sourceCode includesSubstring:
>> '^Rectangle ' ].
>>     Rectangle>>#intersect:
>>     Rectangle>>#translateBy:
>>     Rectangle>>#scaleBy:
>>     Rectangle>>#merge:
>>     Rectangle>>#compressTo:
>>     Rectangle>>#expandTo:
>>     Rectangle>>#roundTo:
>>     Rectangle>>#truncateTo:
>>
>> The following already follow the convention...
>>     Rectangle>>#compressed
>>     Rectangle>>#expanded
>>     Rectangle>>#rounded
>>     Rectangle>>#truncated
>>
>> > Pretty much all Rectangle messages are immutable and create new
>> > Rectangle,
>> > thus I feel it is unnecessary to state it explicitly.
>> >
>> > In VW there is plenty of methods (e.g. left:) that mutates it, thus
>> > unlike
>> > Pharo a clear distinction is required.
>>
>> Still, it is reasonable to consider the impact of inconsistent
>> conventions on the rest of the system outside of Rectangle.
>>
>> cheers -ben
>>
>


On Wed, May 27, 2015 at 1:16 AM, Peter Uhnák <[hidden email]> wrote:
> That's not all, many methods return new rectangles via Point's API, namely
> Point>>{#corner: #extent: #rectangle:}
>
> I don't know if I can perform static analysis of the code (are there tools
> for that in Pharo?) to see which methods exactly return Rectangle
>
> rectMethods := #(#corner: #extent: #rectangle:).
> (Point methods select: [ :m | rectMethods includes: m selector ]
> thenCollect: [ :m | m senders ]) flattened select: [ :s | s className =
> #Rectangle ]. "an Array(
> Rectangle>>#areasOutside:
> Rectangle>>#withSideOrCorner:setToPoint:minExtent:limit:
> Rectangle>>#withBottom:
> Rectangle>>#bottom:
> Rectangle>>#areasOverlapingOutside:
> Rectangle>>#floor
> Rectangle>>#allAreasOutsideList:startingAt:do:
> Rectangle>>#scaledAndCenteredIn:
> Rectangle>>#squishedWithin:
> Rectangle>>#ceiling
> Rectangle>>#withHeight:
> Rectangle>>#rectanglesAt:height:
> Rectangle>>#scaleFrom:to:
> Rectangle>>#withLeft:
> Rectangle>>#left:
> Rectangle>>#withTop:
> Rectangle>>#right:
> Rectangle>>#top:
> Rectangle>>#innerCorners
> Rectangle>>#interpolateTo:at:
> Rectangle>>#withWidth:
> Rectangle>>#quickMergePoint:
> Rectangle>>#withRight:
> Rectangle>>#rotateBy:centerAt:
> Rectangle>>#withSideOrCorner:setToPoint:minExtent:limit:
> Rectangle>>#flipBy:centerAt:)
> "
>
> This list is maybe a bit excessive (sometimes it returns self, sometimes new
> rectangle -- e.g. floor).
>

Good   Point   ;)

However the "-ed" convention doesn't make sense for many of those...
    #areasdOutside: , #areasedOutside , #areaOutsided:  ?
... and #areasOutside is obviously a different rectangle than the original.

The scope might be restricted to only those where the usual convention
makes the names misleading, for example:
   #merge

cheers -ben




--
Damien Pollet
type less, do more [ | ] http://people.untyped.org/damien.pollet
Reply | Threaded
Open this post in threaded view
|

Re: translateBy: vs translatedBy:

Ben Coman
On Wed, May 27, 2015 at 8:51 PM, Damien Pollet <[hidden email]> wrote:
> There is a discussion of such idioms in the I will present at ESUG. I only
> looked at the API of String, but I'm sure most naming idioms apply to any
> class. The question is, how do you ensure they are applied and complete?

Hard to be perfect but maybe...

Extract pairs of past participle (p.p.)[1] and transitive verb (v.t.)
[1] from a dictionary like [2],
e.g. Merged (imp. & p.p.) of Merge
       Merge (v.t.) to absorb.

and if the method...
A. returns same object -- check its method name is (v.t.) form
B. returns different object of same species -- check form is (p.p.)
C. returns different type of object -- ignore.

Actually maybe coverage doesn't need to be perfect. There just needs
to be enough consistency that the convention can relied on (and
publicised!), and humans can update rules for edges cases as they are
arise.

cheers -ben

[1] http://en.wiktionary.org/wiki/Wiktionary:Abbreviations_in_Webster
[2] http://www.mso.anu.edu.au/~ralph/OPTED/v003/wb1913_m.html
[3] http://www.mso.anu.edu.au/~ralph/OPTED/



>
> On 27 May 2015 at 01:14, Ben Coman <[hidden email]> wrote:
>>
>> >
>> > On Tue, May 26, 2015 at 6:14 PM, Ben Coman <[hidden email]> wrote:
>> >>
>> >> On Tue, May 26, 2015 at 9:38 PM, Peter Uhnák <[hidden email]> wrote:
>> >> >> I vote for renaming to Rectangle>>translatedBy:, because it returns
>> >> >> a
>> >> >> new
>> >> >> translated rectangle instance.
>> >> >
>> >> >
>> >> > -1
>> >> > There is no benefit in renaming a single method, apart from creating
>> >> > more
>> >> > confusion.
>> >>
>> >> I wouldn't say "no benefit".  Consistent conventions are beneficial.
>> >> It could be useful to bring these into line with the general "-ed"
>> >> convention of returning a new object.      I don't see how this would
>> >> create confusion, though it might create work.  Whether its worth the
>> >> work is a slightly different question.
>> >>
>> >> > If anything, the whole Rectangle API would have to be changed, as
>> >> > there
>> >> > is
>> >> > plethora of similar methods (expandBy:, extendBy:, merge:, etc.)
>> >>
>> >> For a better feel of the work involved...
>> >>
>> >> Rectangle methods select: [ :m | m sourceCode includesSubstring: '^
>> >> Rectangle ' ].
>> >>     Rectangle>>#intersect:
>> >>     Rectangle>>#quickMerge:
>> >>     Rectangle>>#encompass:
>> >>     Rectangle>>#intersect:ifNone:
>> >>
>> >> Rectangle methods select: [ :m | m sourceCode includesSubstring:
>> >> '^Rectangle ' ].
>> >>     Rectangle>>#intersect:
>> >>     Rectangle>>#translateBy:
>> >>     Rectangle>>#scaleBy:
>> >>     Rectangle>>#merge:
>> >>     Rectangle>>#compressTo:
>> >>     Rectangle>>#expandTo:
>> >>     Rectangle>>#roundTo:
>> >>     Rectangle>>#truncateTo:
>> >>
>> >> The following already follow the convention...
>> >>     Rectangle>>#compressed
>> >>     Rectangle>>#expanded
>> >>     Rectangle>>#rounded
>> >>     Rectangle>>#truncated
>> >>
>> >> > Pretty much all Rectangle messages are immutable and create new
>> >> > Rectangle,
>> >> > thus I feel it is unnecessary to state it explicitly.
>> >> >
>> >> > In VW there is plenty of methods (e.g. left:) that mutates it, thus
>> >> > unlike
>> >> > Pharo a clear distinction is required.
>> >>
>> >> Still, it is reasonable to consider the impact of inconsistent
>> >> conventions on the rest of the system outside of Rectangle.
>> >>
>> >> cheers -ben
>> >>
>> >
>>
>>
>> On Wed, May 27, 2015 at 1:16 AM, Peter Uhnák <[hidden email]> wrote:
>> > That's not all, many methods return new rectangles via Point's API,
>> > namely
>> > Point>>{#corner: #extent: #rectangle:}
>> >
>> > I don't know if I can perform static analysis of the code (are there
>> > tools
>> > for that in Pharo?) to see which methods exactly return Rectangle
>> >
>> > rectMethods := #(#corner: #extent: #rectangle:).
>> > (Point methods select: [ :m | rectMethods includes: m selector ]
>> > thenCollect: [ :m | m senders ]) flattened select: [ :s | s className =
>> > #Rectangle ]. "an Array(
>> > Rectangle>>#areasOutside:
>> > Rectangle>>#withSideOrCorner:setToPoint:minExtent:limit:
>> > Rectangle>>#withBottom:
>> > Rectangle>>#bottom:
>> > Rectangle>>#areasOverlapingOutside:
>> > Rectangle>>#floor
>> > Rectangle>>#allAreasOutsideList:startingAt:do:
>> > Rectangle>>#scaledAndCenteredIn:
>> > Rectangle>>#squishedWithin:
>> > Rectangle>>#ceiling
>> > Rectangle>>#withHeight:
>> > Rectangle>>#rectanglesAt:height:
>> > Rectangle>>#scaleFrom:to:
>> > Rectangle>>#withLeft:
>> > Rectangle>>#left:
>> > Rectangle>>#withTop:
>> > Rectangle>>#right:
>> > Rectangle>>#top:
>> > Rectangle>>#innerCorners
>> > Rectangle>>#interpolateTo:at:
>> > Rectangle>>#withWidth:
>> > Rectangle>>#quickMergePoint:
>> > Rectangle>>#withRight:
>> > Rectangle>>#rotateBy:centerAt:
>> > Rectangle>>#withSideOrCorner:setToPoint:minExtent:limit:
>> > Rectangle>>#flipBy:centerAt:)
>> > "
>> >
>> > This list is maybe a bit excessive (sometimes it returns self, sometimes
>> > new
>> > rectangle -- e.g. floor).
>> >
>>
>> Good   Point   ;)
>>
>> However the "-ed" convention doesn't make sense for many of those...
>>     #areasdOutside: , #areasedOutside , #areaOutsided:  ?
>> ... and #areasOutside is obviously a different rectangle than the
>> original.
>>
>> The scope might be restricted to only those where the usual convention
>> makes the names misleading, for example:
>>    #merge
>>
>> cheers -ben
>>
>
>
>
> --
> Damien Pollet
> type less, do more [ | ] http://people.untyped.org/damien.pollet