[erlang-questions] OO programming style in Erlang?

Ladislav Lenart <>
Tue Jan 23 18:30:53 CET 2007


Sean Hinde wrote:
>>
>> When I started the thread I didn't want to ask "How can
>> I write OO in Erlang" (the mail has a bad subject) but
>> rather "How to write properly in Erlang" which is what
>> I have stll trouble with (at least it seems to me that
>> way). But I guess that this, as everything, takes time
>> to learn...
> 
> One great way to pick up the idioms is to study code by the masters. The 
> OTP sources can be a great source of inspiration and examples of the 
> "right way".
> 
> Quite a bit (most) of the code in Jungerl also probably qualifies. Yaws 
> is high profile but probably not my favourite example of good erlang 
> style (too much use of get/put (yagpb) ).
> 
> mnesia is quite awesome, but rather heavyweight as a learning tool.
> 
> Suggestions for "Best Practice" open source erlang projects anyone?

Yes, this is certainly a good start. I will definitely
take a look at (some of) them.

>> Regarding OO, there is only a few programming languages
>> that are "OO enough for me" (picking only those I know):
>> Smalltalk, CLOS. I've also read some articles about Self
>> and it looks quite good but I have never programmed in it.
> 
> A certian Lisp/Smalltalk hacker round these parts keeps telling me that 
> Smalltalk is something like Erlang in concept, but I never quite 
> listened hard enough to see why ;-)

I'd say it is actually quite true. Joe Armstrong had a
presentation on this (well, last) year's ESUG (European
Smalltalk User Group Conferrence). In the begining of
his presentation, he said:
   "Erlang is Smalltalk Alan Kay wanted it to be."
and all the (presumably Smalltalk) audience laughed... :-)

But from a point of view of an experienced Smalltalker,
I must say that the shift from Smalltalk to Erlang is not
so trivial, mainly because of a quite complex and fixed
syntax. I got quite used to the idea of minimal language
syntax and extendable libraries over the years. And this
I miss a lot in Erlang. A simple example to illustrate my
point follows (maybe you will even tell me a simple way
how to do something like this in Erlang?)...

Let's suppose I have to write a lot of code like this
in Smalltalk:

   anObject isNil
     ifFalse: [anObject doSomething].

I can "extend the language" by providing a new method
which takes a block of code as its only argument:

   Object>>ifNotNilDo: oneArgBlock
     "This is the branch where object (self in this
      context) is not nil and so the block is evaluated
      (with the object as its argument)."
     ^oneArgBlock value: self.

   UndefinedObject>>ifNotNilDo: oneArgBlock
    "This is the branch where object (self in this
     context) is actually nil and so the block is ignored
     and nil is returned."
     ^self.

Now I can replace the code above with shorter and more
readable form:

   anObject ifNotNilDo: [:obj | obj doSomething].

Sorry for the Smalltalk excursion... :-)

Ladislav Lenart




More information about the erlang-questions mailing list