__init__ is the initialiser
Rustom Mody
rustompmody at gmail.com
Fri Jan 31 23:02:10 EST 2014
Not any direct comments on this... Just some thoughts around a couple
of questions
1. Declarative and Imperative Terminology
2. Is OOP declarative or imperative
1. Python is an imperative language. It does a good amount of
functional stuff. Are its terms neutral? Look at sort
sort -- imperative
sorted -- functional
By contrast in scheme one would have something like
sort -- functional
sort! -- imperative
Or haskell
sort -- functional
unsafePerformSort -- imperative
If the simple term corresponds to the standard and therefore default,
this shows a fundamental difference in world-views
2. Is OOP functional, imperative or neutral?
In theory it is neutral:
If we only ever make and use value-objects (ie immutable objects) then
it is used declaratively
If we have mutable objects then OOP is being used imperatively
So much for the theory. In practice (in the words of Neal Ford):
OOP tries to encapsulate moving parts, FP tries to minimize the moving parts
IOW it seems (to me) OOP is almost always used as a clover-leaf on
wanton state-change ie. imperativeness.
This comes from the fact that while objects in programming languages
may pretend neutrality, philosphically objects and values are
fundamentally opposed:
Objects belong to 'this world' -- born change live die
Values belong to the platonic world -- 3 was 3 even without an exsting universe
In
hhttp://research.microsoft.com/en-us/um/people/gurevich/opera/123.pdf
(first few pages) Yuri Gurevich gives an entertaining account of how kids
learning math are platonically indoctrinated.
What most dyed-in-the-wool imperative programmers dont get is that
when we take a task that humans perform in 'this world' and abstract
it effectively into a program that a machine can (at least partly)
perform, this is only possible if we build a model of the action.
And models are intrinsically abstract entities ie platonic.
IOW to modify the standard dictum of philosophy:
"No philosophy is bad philosophy"
we have
"Imperative programmers are bad functional programmers"
What has this to do with how constructors are named?
Both 'constructor' and 'initializer' have (to my ears) an imperative sound
though initializer is perhaps more so -- evokes a picture of a life-story --
a saga! Constructor less so
This may be factored in to the choice of terminology
More information about the Python-list
mailing list