With #extent: and #corner: we "just know" that these are for creating
Rectangles. Just like we have learned that the symbol + is not about two
things crossing, but about adding things together, especially when it is
surrounded by numbers. Creating a new "well-known" word from the very
beginning is harder and you suddenly realize that all of the selectors
without "rectangle" in their name only make sense when you assume a 2D
graphics environment as the context, as opposed to, well, banking software,
maybe? But since the class Point is for 2D coordinates in such an
environment anyway, this can be justified.
Maybe you should ask yourself how you would like the expression to read if
it were the printString of the Rectangle. And when you think about it,
switch on and off in your mind the assumption that you already know you are
creating a rectangle when you evaluate the result. For #extent:, you have
to assume that, don't you? Otherwise ***@5 extent: ***@10 could also be a
circle... interestingly, then I would assume it to be centered at ***@5
already. ***@5 corner: ***@10 seems less ambiguous to me. After all, circles
don't have corners...
(***@0 extent: ***@10) printString
==> '***@5 inflate: ***@10' ? Does not seem natural to me. This relates to
Nicolas's verb vs. noun argument.
==> '***@5 surroundedBy: ***@10'
==> '***@5 inTheMiddleOf: ***@10' (well, misleading example... think of '***@50
inTheMiddleOf: ***@10' instead)
==> '***@5 amidst: ***@10'
==> '***@10 around: ***@5'
==> '***@10 withCenter: ***@5'
==> '***@10 centeredAt: ***@5'
(repeating other's suggestions now, purposely uncommented)
==> '***@5 extendTo: ***@10'
==> '***@5 spreadTo: ***@10'
==> '***@5 spreadToExtent: ***@10'
==> '***@5 rectangleWithExtent: ***@10'
==> '***@10 asRectangleCentredAt: ***@5'
==> '***@5 centredRectangleWithExtent: ***@10'
==> '***@5 centredRectangleExtent: ***@10'
Am Mi., 5. Dez. 2018 um 22:32 Uhr schrieb Nicolas Cellier <
Post by Nicolas Cellier
Post by marcel.taeumel
Yet, such an infix notation for rectangle creation would not be much of an
improvement over Rectangle class >> center:extent:.
Very interesting. :-) Thoughts?
Balloons inflate, and Smalltalk is quite associated with balloons... :)
I like spread because there is a kind of isotropic notion, we extend in
The lexical field of symmetry may fit: we construct a rectangle by taking
- image of aPoint by symmetry around myself,
- and aPoint.
centerPoint mirror: cornerPoint.
centerPoint reflect: cornerPoint.
We could also think of pivoting or unfolding in the 3rd dimension...
But I find the intention very hard to grasp... It's not obvious that the
message should answer a Rectangle rather than a Point.
And the meaning of argument slipped from extent to corner which is a
We understand corner: and extent: because we may think of them as
attributes of a Rectangle... (or just because we're used to them?)
In this case, diagonal: may fit too, but the difference with extent: is
thin, and I don't find the notion of isotropic spread in it.
In fact, diagonal: might be to vertex:vertex: what corner: is to
origin:corner: because we can define a rectangle by any of its diagonals...
Geometrically, we may also see self and extentPoint as defining the
diagonal by a center and a diameter of circumscribing circle...
So its a kind of circumExtent: that we pass to the center... Not very
clear that it will answer a Rectangle...