"Andrew C. Greenberg" writes:
Explanation of message sends for traditional programmers ... handler. ((Add a reference to the following topics here: (a) overriding, (b) dynamic binding, (c) polymorphism.))
Yeah, that old tradition of double dispatching, routine passing of lambdaesque functional parameters, and other things that make explaining:
String streamContents: [:s | foo process: s ]
in terms of function calls just cake. Or even better yet:
'Now here''s some Real Progress' displayProgressAt: Sensor cursorPoint from: 0 to: 10 during: [:bar | 1 to: 10 do: [:x | bar value: x. (Delay forMilliseconds: 500) wait]].
just simple to explain as a procedure call. And we routinely write such code in imperative language all the time, don't we?
With all due respect, while your points might be well taken, these types of operations took my breath away the first time I saw them, and I only really got it when I realized that a message send is a message send, and not a procedure call.
How may I understand these tiny examples? My own educational goals would be well served by understanding them clearly.
Dick