20 class Hello { static String message = 'Hello’ String name
Hello(String name) { this.name = name } String greet() { return "$message, $name speaking" } } Fields and static fields require visibility You created both an instance property and a static property!
22 Get rid of the useless ‘def’ class Hello { private static String message = 'Hello' private def String name def Hello(def String name) { this.name = name } public def String greet() { def String result = "$message, $name speaking" return result } }
22 Get rid of the useless ‘def’ class Hello { private static String message = 'Hello' private def String name def Hello(def String name) { this.name = name } public def String greet() { def String result = "$message, $name speaking" return result } }
23 Get rid of the useless ‘def’ class Hello { private static String message = 'Hello' private String name Hello(String name) { this.name = name } String greet() { String result = "$message, $name speaking" return result } }
24 Get rid of the useless ‘def’ class Hello { private String message = 'Hello' private String name Hello(String name) { this.name = name } String greet() { def result = "$message, $name speaking" return result } } But it’s fine to use ‘def’ for local variables
57 Switch / case on steroids switch(obj) { case 123: "number 123"; break case "abc": "string abc"; break case String: "is a string"; break case [1, 2, 3]: "in list"; break case ~/.*o+.*/: "regex match"; break case { it < 3 }: "closure criteria"; break default: "unknown" }
73 Of the importance of contracts • Use explicit typing for • method signatures • properties & fields • Nice for • Java interoperability • documenting your APIs • IDE auto-completion and refactoring