[Tutor] decomposing a problem
Cameron Simpson
cs at cskk.id.au
Tue Dec 25 20:44:04 EST 2018
On 26Dec2018 01:06, Alan Gauld <alan.gauld at yahoo.co.uk> wrote:
>On 26/12/2018 00:00, Avi Gross wrote:
>> great. Many things in python can be made to fit and some need work.
>> Dumb example is that sorting something internally returns None and
>> not the object itself.
>
>This is one of my few complaints about Python.
>In Smalltalk the default return value from
>any method is self. In Python it is None.
>self allows chaining of methods, None does not.
[...]
>Smalltalk uses this technique so much it has
>its own code layout idiom (Pythonised as
>follows):
>
>object
> .method1()
> .method2()
> .method3()
> ....
> .lastone()
While I see your point, the Python distinction is that methods returning
values tend to return _independent_ values; the original object is not
normally semanticly changed. As you know.
To take the builtin sorted() example, let us soppose object is a
collection, such as a list. I would not want:
object.sort()
to return the list because that method has a side effect on object.
By contract, I'd be happy with a:
object.sorted()
method returning a new list because it hasn't changes object, and it
returns a nice chaining capable object for continued use.
But that way lies a suite of doubled methods for most classes: one to
apply some operation to an object, modifying it, and its partner to
produce a new object (normally of the same type) being a copy of the
first object with the operation applied.
To me it is the side effect on the original object which weighs against
modification methods returning self.
Here's a shiny counter example for chaining.
thread1:
print(object.sorted())
thread2:
print(object.sorted(reverse=True))
The above employs composable methods. And they conflict. When methods
return a copy the above operation is, loosely speaking, safe:
thread1:
print(sorted(object))
thread2:
print(sorted(object,reverse=True))
Cheers,
Cameron Simpson <cs at cskk.id.au>
More information about the Tutor
mailing list