- Java - Java5 (jdk1.6.0_06/jre1.6.0._10)
- Groovy - 1.6-beta-2-SNAPSHOT
- Scala - 2.7.1.final

Feature | Java | Groovy | Scala |
---|---|---|---|
Type System | Static with few dynamic checks inserted as needed. | Dynamic, optional static types. | Static, with type inference. |
Comments |
/* * multiline comment */ /** * javadoc comment */ // single line comment |
/* * multiline comment */ /** * groovydoc comment */ // single line comment |
/* * multiline comment */ /** * scaladoc comment */ // single line comment |
End of statement | ; | a new line will do most in most cases. Use ; when ambiguous | a new line will do most in most cases. Use ; when ambiguous |
Control Statements - if |
if (condition) { // statements } if (condition) { // statements } else if (condition) { // statements } else { // statements } |
if (condition) { // statements } if (condition) { // statements } else if (condition) { // statements } else { // statements } |
if (condition) { // statements } if (condition) { // statements } else if (condition) { // statements } else { // statements } |
Control Statements - ternary operator | (condition) ? true_statement : false_statement |
(condition) ? true_statement : false_statement
Elvis operator, a refinement over the ternary operator. If the condition expression is true then said condition expression will be the true_statement condition ?: false_statement |
if (condition) true_statement else false_statement |
Control Statements - while |
while (condition) { // statements } do { // statements } while (condition); |
while (condition) { // statements } |
while (condition) { // statements } do { // statements } while (condition) |
Control Statements - for |
for (init; condition; increment ) { // statements } for (Type t: iterable ) { // statements } |
for (init; condition; increment ) { // statements } for (Type t: iterable ) { // statements } for ( variable in iterable ) { // statements } Every single object in Groovy is iterable, default impl returns the object itself |
for ( t <- list-value ) { // statements } list-value may also be an Array for ( s ) yield statement s may be one of
|
Control Statements - switch |
switch (target) { case constant_expr: // statements [break] ... default: // statements } |
switch (target) { case constant_expr: // statements [break] ... default: // statements } * target may be any object * case statements may use same expressions as in Java plus Strings, Matchers, regular expression, closures, ranges, any object that supports isCase()
|
Not supported Scala has a similar feature as Groovy's any object as case (case classes and matchers, they deserve a more detailed explanation) |
Control Statements - conditions | conditions must be evaluated in a boolean context |
conditions may be evaluated in many contexts,
this is known as the Groovy Truth, some rules
follow (this is not a complete set, please
refer to Groovy in Action or Groovy's site)
evaluates to false
|
conditions must be evaluated in a Boolean context |
String Literals | "Hello Java" |
"Hello Groovy" // double quote 'Hello Groovy' // single quoute """Hello Groovy""" // multiline // variable interpolation name = "Groovy" "Hello ${name}" // evals to Hello Groovy |
"Hello Scala" """Hello Scala""" // multiline @Daniel mentions Scala supports triple-quote too |
Class declaration |
class HelloWorld { // fields // methods } |
class HelloWorld { // fields // methods } |
class HelloWorld { // fields // methods } // defines a singleton object object HelloWorld { // fields // methods } |