mutable i = 1;
i ^= 0;
assert(i == 1);
i ^= 1;
assert(i == 0);
Exchange values: <->
mutable a = 1;
mutable b = 2;
a <-> b;
assert(a == 2);
assert(b == 1);
List prepend (concatenation): ::=
mutable a = [2, 1];
a ::= 3;
assert(a == [3, 2, 1]);
C# 3.0 like lambds: =>
def a = [2, 1];
def b = a.Map(element => element *2);
assert(b == [4, 2]);
Use default value if null: ??
def a : int? = null;
def b = a ?? 42;
assert(b == 42);
def a : int? = 88;
def b = a ?? 42;
assert(b == 88);
def a : string = null;
def b = a ?? "default value";
assert(b == "default value");
def a : string = "some value";
def b = a ?? "default value";
assert(b == "some value");
Safe Navigation (Groovy like): ?.
class A { public i : int = 2; }
class B { public a : A = null; }
class C { public a : B = null; }
def b1 = B();
assert(b1?.a?.i == 0); // 0 is a default value of int (type of i field)