Am 21.03.2018 um 09:27 schrieb Cédric Champeau:
[...]
In any case, I was doubtful as you are here before actually using it in Kotlin. After a few weeks, it became clear to me this syntax was both more concise and more self-explanatory.

For me {} was always very clear, for {} starts a new scope, it is a block, that can return something. I did never even once think about these as expressions. That is why I really not often speak about closure expressions, but about attached and open blocks or Closure. And in that matter:

double x
double y
double surface(double x, double y) = x * y

I find it very unclear if the x is the field/property x or the method parameter. That is because normally = does not create a new scope. And especially normally = does not allow referencing variables from the left side declaration. For example:

class X {
def foo = 1
def bar() {
  def foo = foo*2
}}

This is allowed in Groovy and Java, because the semantics are very clear. Since = does not do a forward declaration the local variable foo is not defined on the RHS. Thus the foo on the RHS can only mean the property/field.

class X {
def foo = 1
def bar(foo) {
  def foo = foo*2
}}

This is not allows, because the block already declares a foo and another local variable of the name foo is not allowed

class X {
def foo = 1
def bar(foo) {
  def bar = foo*2
}}

This is allowed and again the semantics are clear, because the parameter is a local scope that shadows the class scope, thus in the declaration of bar the foo in RHS means the foo from the method parameter.

double surface(double x, double y) = x * y

breaks with the former declaration and scoping logic. You can try rescue this by saying the = in the method declaration has nothing to do with the = in a declaration or assignment otherwise. But if I always have to do the expansion to the other version to understand what happens, then it is not easier for me.

On top of that I am a real bad fit for this style, because except for demo purposes I rarely write methods that contains only a single line of code. Maybe you could show real world examples that show the real coolness of this?

bye Jochen


Reply via email to