Java, Groovy & Scala: side to side 1 - No Fluff Just Stuff

Java, Groovy & Scala: side to side 1

Posted by: Andres Almiray on June 11, 2008

This is the first part of the series. I shamelessly borrowed Sundar's layout and categorization. These are the language versions I'm testing the code with in case anyone is interested
  • Java - Java5 (jdk1.6.0_06/jre1.6.0._10)
  • Groovy - 1.6-beta-2-SNAPSHOT
  • Scala - 2.7.1.final
Disclaimer: I know Groovy better than I know Scala, if someone spots a mistake please let me know :-)

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
  • generator: val x <- e e is a list-value expression, binding x to successive values in the list
  • definition: val x = e introduces x as a name for the value of e in the rest of the comprehension
  • filter: a Boolean expression, omits all bindings (values?) for which the expression is false
@Tony Morris has more info at http://blog.tmorris.net/type-safe-scala-sequence-comprehensions
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
  • false
  • null references
  • empty Map
  • empty List
  • Matcher with no matches
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
}
Andres Almiray

About Andres Almiray

Andres is a Java/Groovy developer and a Java Champion with more than 20 years of experience in software design and development. He has been involved in web and desktop application development since the early days of Java. Andres is a true believer in open source and has participated on popular projects like Groovy, Griffon, and DbUnit, as well as starting his own projects (Json-lib, EZMorph, GraphicsBuilder, JideBuilder). Founding member of the Griffon framework and Hackergarten community event. https://ch.linkedin.com/in/aalmiray

Why Attend the NFJS Tour?

  • » Cutting-Edge Technologies
  • » Agile Practices
  • » Peer Exchange

Current Topics:

  • Languages on the JVM: Scala, Groovy, Clojure
  • Enterprise Java
  • Core Java, Java 8
  • Agility
  • Testing: Geb, Spock, Easyb
  • REST
  • NoSQL: MongoDB, Cassandra
  • Hadoop
  • Spring 4
  • Cloud
  • Automation Tools: Gradle, Git, Jenkins, Sonar
  • HTML5, CSS3, AngularJS, jQuery, Usability
  • Mobile Apps - iPhone and Android
  • More...
Learn More »