I spent couple of months learning Scala and got overwhelmed by number of different constructs it had, After looking at partial functions, partially-applied functions, pattern matching, actor syntax, I gave a thought to learning Clojure which doesn't have too much in terms of syntax but looking at the how Java inter-operability is handled, it looks very difficult to get use to.
for example: things like doto, new and .
Every time I start typing a function, there are times I write (1 + 2) instead of (+ 1 2).
It looks like I will have to completely forget how I write imperativeregular programs to get use to this syntax.
Also finding it difficult to deal with side-effects that do and let form have. ThingsAren't they similar to what functions with void type are ?
Things like registering a callback,things normal I?/O, how can such things be side-effects free.
Till now all I really liked about Functional Programming is that, immutability makes concurrency easier when dealing with shared data, functions as first class objects and having higher-order functions, apply,map and reduce with functions and lists .
I wanted to know, are there practical benefits I will get once I am use to this syntax ? I f I continue to learn Scala and avoid using var, and always use recursion instead of loops. I can do all the above things and still write understandable code.