Groovy & Java 8
A very simple comparison
@ JaverosMX, Mexico City
30/Marzo/2015Domingo Suárez Torres (@domix)
Agenda
• Background
• A little bit about Groovy
• Why is important to upgrade to Java 8
• Comparison
• Very small :’(
Groovy, just a little
• Optionally typed & dynamic language for the
JVM
• Static-typing and static compilation capabilities
• Scripting capabilities, Domain-Specific
Language authoring, runtime and compile-time
meta-programming and functional programming
Seamlessly and transparently
integrates and interoperates with
Java and any third-party libraries
Java 8 matters
• Java 7 EOL. April 2015
• Java 6 < go figure.
• “Brand new” techniques, patterns, paradigms. Built in the language.
• Very soon libraries and frameworks will adopt those improvements.
• Enhancements
• Nashorn
• Invoke-dynamic
• Java 8 arrived late to the party. Better late than never.
Java 8 features
• New Syntax
• Stream API
• Profiles
• JavaFX
• Date/Time API
• Nashorn
• Pack200
• JDBC
• Concurrency
• JAXP
• Hotspot
• Java Mission Control
Java 8 syntax
• Lambda expressions
• Method references
• static & default methods in interfaces
• Repeating annotations
• Annotation on types
• Improved type inference
• Method parameter reflection
Comparison
Feature similarities
• Java 8
• Lambda expressions
• Default methods
• Optional types
• Stream API
• Method references
• Groovy
• Closures
• Traits
• Truth & null handling
• GDK Collections
• Method closures
Code as data
• Interfaces with one method (functional interface)
• Single Abstract Method interfaces (SAM Interfaces)
• Inner classes are annoying due verbosity.
• Java 8 Lambda Expressions, Groovy Closures.
• JVM functions became almost first-class
citizens.
Java 8 Lambdas
Lambda expressions
Groovy Closures
• Since 2003.
• Is an open, anonymous, block of code that can take
arguments.
• Return a value and be assigned to a variable.
• A closure may reference variables declared in its
surrounding scope.
• Can also contain free variables which are defined outside
of its surrounding scope. In opposition to the formal
definition of a closure.
Closures in action
GDK (Groovy Dev Kit)
Closures behind scenes
• Groovy creates an inner anonymous class
• groovy.lang.Closure implements
• Cloneable
• Runnable
• GroovyCallable
• java.util.concurrent.Callable
• Serializable
Java 8 with Groovy
Java 8
Default methods
Default methods
• Non-abstract method implementations to
interfaces by utilizing the default keyword
• Also know as Extension Methods
Default methods
Default methods
• Can be static methods
• We can use them to implement multiple
inheritance
• Naming conflict¡
Groovy Traits
Traits
• The same idea as default methods in Java
• Interface with method bodies
• Can be stateful
• Multiple inheritance
Stream API
java.util.Stream
• Represents a sequence of elements on which one or
more operations can be performed.
• Stream operations are either intermediate or terminal.
• While terminal operations return a result of a certain type,
intermediate operations return the stream itself so you
can chain multiple method calls in a row.
• Streams are created on a source (Collection)
• Stream operations can either be executed sequential or
parallel.
Streams usage
Streams with
method references
Map-Reduce
GDK Collections
Groovy GDK
• Groovy add lots of enhancements into the
standard JDK
• Groovy “injects” additional methods on the
standard Java libraries
• GDK adds syntactic sugar to Java APIs for
better and easier usage.
Using GDK facilities
GDK and Java 8
• Some GDK facilities will be deprecated in favor
of Stream
• Stream is more efficient and performant
• Groovy will focus in better integration with Java 8
enhancements
Java 8 Optionals
java.util.Optional<T>
• NPE is awkward.
• A optional is a container object which may or
may not contain a non-null value.
• Additional methods that depend on the
presence or absence of a contained value are
provided, such as orElse() (return a default value
if value not present) and ifPresent() (execute a
block of code if the value is present).
Optional usage
Stream/Optional
real life example
Groovy Truth
Groovy Truth
• Everything that’s null, empty, zero-sized, equal to
zero is false. Otherwise is true
• Groovy Truth is quite simple: just implement a
custom asBoolean() method.
Null handling in Groovy
What to do?
• IMO, Java 8 is a great release
• Groovy is a madure alternative language for the
JVM
• My recommendation is to use both languages
Java 8 highlights
• Lambdas
• Stream API
• Nashorn. Avatar project
Groovy Highlights
• Traits
• Metaprogramming
• AST Transformations
• DSL authoring
• Android support
• @TypeChecked @CompileStatic
Contact
• @domix
• domingo.suarez@gmail.com
• #JaverosMX
Picture credits
• https://www.flickr.com/photos/eneas/3108310839/
• https://www.flickr.com/photos/eneas/6395912803/
• https://www.flickr.com/photos/80651083@N00/5641290457/
• https://www.flickr.com/photos/annuar_martinez/3282050044/
• https://www.flickr.com/photos/luismontemayor/2550701324/
• https://www.flickr.com/photos/guseher/2393646953/
• https://www.flickr.com/photos/annuar_martinez/2342099774/
• https://www.flickr.com/photos/luismontemayor/4306210583/
• https://www.flickr.com/photos/lastingimages/12262034856/
• https://www.flickr.com/photos/atejada/14169147706/
• https://www.flickr.com/photos/luismontemayor/3018556662/
• https://www.flickr.com/photos/eneas/2290156408/
• https://www.flickr.com/photos/122274109@N03/16154663524/
• https://www.flickr.com/photos/krynowekeine/2755263171/
• https://www.flickr.com/photos/nino_ary/2901716788/
• https://www.flickr.com/photos/eneas/5279761/
• https://www.flickr.com/photos/lastingimages/12373124983/
• https://www.flickr.com/photos/rmgg-photos/8503188042/
• https://www.flickr.com/photos/luajr/15127961825/
• https://www.flickr.com/photos/gtercero/8740734623/
• https://www.flickr.com/photos/egmzcp15/5237066174/
• https://www.flickr.com/photos/rouleau/109405487/
• https://www.flickr.com/photos/xavier333/2257501542/
• https://www.flickr.com/photos/pvcg/3087911579/
• https://www.flickr.com/photos/notocajrs/12785034584/
• https://www.flickr.com/photos/nahual_neo/8005123271/
• https://www.flickr.com/photos/chicotown/3189442699/
• https://www.flickr.com/photos/kootenayhulio/5497898774/
• https://www.flickr.com/photos/maybemaq/16579363326/
• https://www.flickr.com/photos/luajr/15484454837/
Picture credits
• https://www.flickr.com/photos/nahual_neo/4290121443/
• https://www.flickr.com/photos/70120970@N08/8493760801/
• https://www.flickr.com/photos/gustavothomastheatre/15823470423/
• https://www.flickr.com/photos/graficris_lgs/15543907818/
• https://www.flickr.com/photos/gustavothomastheatre/15708898754/
• https://www.flickr.com/photos/john_colby/8430729849/
• https://www.flickr.com/photos/egmzcp15/4144937818/
• https://www.flickr.com/photos/10066932@N03/2552609658/
• https://www.flickr.com/photos/bdebaca/2987372965/
• https://www.flickr.com/photos/beco/23806123

javerosmx-2015-marzo-groovy-java8-comparison

  • 1.
    Groovy & Java8 A very simple comparison @ JaverosMX, Mexico City 30/Marzo/2015Domingo Suárez Torres (@domix)
  • 2.
    Agenda • Background • Alittle bit about Groovy • Why is important to upgrade to Java 8 • Comparison • Very small :’(
  • 3.
    Groovy, just alittle • Optionally typed & dynamic language for the JVM • Static-typing and static compilation capabilities • Scripting capabilities, Domain-Specific Language authoring, runtime and compile-time meta-programming and functional programming
  • 4.
    Seamlessly and transparently integratesand interoperates with Java and any third-party libraries
  • 6.
    Java 8 matters •Java 7 EOL. April 2015 • Java 6 < go figure. • “Brand new” techniques, patterns, paradigms. Built in the language. • Very soon libraries and frameworks will adopt those improvements. • Enhancements • Nashorn • Invoke-dynamic • Java 8 arrived late to the party. Better late than never.
  • 7.
    Java 8 features •New Syntax • Stream API • Profiles • JavaFX • Date/Time API • Nashorn • Pack200 • JDBC • Concurrency • JAXP • Hotspot • Java Mission Control
  • 8.
    Java 8 syntax •Lambda expressions • Method references • static & default methods in interfaces • Repeating annotations • Annotation on types • Improved type inference • Method parameter reflection
  • 10.
  • 11.
    Feature similarities • Java8 • Lambda expressions • Default methods • Optional types • Stream API • Method references • Groovy • Closures • Traits • Truth & null handling • GDK Collections • Method closures
  • 12.
    Code as data •Interfaces with one method (functional interface) • Single Abstract Method interfaces (SAM Interfaces) • Inner classes are annoying due verbosity. • Java 8 Lambda Expressions, Groovy Closures. • JVM functions became almost first-class citizens.
  • 13.
  • 15.
  • 17.
    Groovy Closures • Since2003. • Is an open, anonymous, block of code that can take arguments. • Return a value and be assigned to a variable. • A closure may reference variables declared in its surrounding scope. • Can also contain free variables which are defined outside of its surrounding scope. In opposition to the formal definition of a closure.
  • 18.
  • 19.
  • 20.
    Closures behind scenes •Groovy creates an inner anonymous class • groovy.lang.Closure implements • Cloneable • Runnable • GroovyCallable • java.util.concurrent.Callable • Serializable
  • 21.
  • 22.
  • 23.
    Default methods • Non-abstractmethod implementations to interfaces by utilizing the default keyword • Also know as Extension Methods
  • 24.
  • 25.
    Default methods • Canbe static methods • We can use them to implement multiple inheritance • Naming conflict¡
  • 27.
  • 28.
    Traits • The sameidea as default methods in Java • Interface with method bodies • Can be stateful • Multiple inheritance
  • 31.
  • 32.
    java.util.Stream • Represents asequence of elements on which one or more operations can be performed. • Stream operations are either intermediate or terminal. • While terminal operations return a result of a certain type, intermediate operations return the stream itself so you can chain multiple method calls in a row. • Streams are created on a source (Collection) • Stream operations can either be executed sequential or parallel.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
    Groovy GDK • Groovyadd lots of enhancements into the standard JDK • Groovy “injects” additional methods on the standard Java libraries • GDK adds syntactic sugar to Java APIs for better and easier usage.
  • 38.
  • 39.
    GDK and Java8 • Some GDK facilities will be deprecated in favor of Stream • Stream is more efficient and performant • Groovy will focus in better integration with Java 8 enhancements
  • 40.
  • 41.
    java.util.Optional<T> • NPE isawkward. • A optional is a container object which may or may not contain a non-null value. • Additional methods that depend on the presence or absence of a contained value are provided, such as orElse() (return a default value if value not present) and ifPresent() (execute a block of code if the value is present).
  • 42.
  • 43.
  • 44.
  • 45.
    Groovy Truth • Everythingthat’s null, empty, zero-sized, equal to zero is false. Otherwise is true • Groovy Truth is quite simple: just implement a custom asBoolean() method.
  • 46.
  • 47.
    What to do? •IMO, Java 8 is a great release • Groovy is a madure alternative language for the JVM • My recommendation is to use both languages
  • 48.
    Java 8 highlights •Lambdas • Stream API • Nashorn. Avatar project
  • 49.
    Groovy Highlights • Traits •Metaprogramming • AST Transformations • DSL authoring • Android support • @TypeChecked @CompileStatic
  • 50.
  • 51.
    Picture credits • https://www.flickr.com/photos/eneas/3108310839/ •https://www.flickr.com/photos/eneas/6395912803/ • https://www.flickr.com/photos/80651083@N00/5641290457/ • https://www.flickr.com/photos/annuar_martinez/3282050044/ • https://www.flickr.com/photos/luismontemayor/2550701324/ • https://www.flickr.com/photos/guseher/2393646953/ • https://www.flickr.com/photos/annuar_martinez/2342099774/ • https://www.flickr.com/photos/luismontemayor/4306210583/ • https://www.flickr.com/photos/lastingimages/12262034856/ • https://www.flickr.com/photos/atejada/14169147706/ • https://www.flickr.com/photos/luismontemayor/3018556662/ • https://www.flickr.com/photos/eneas/2290156408/ • https://www.flickr.com/photos/122274109@N03/16154663524/ • https://www.flickr.com/photos/krynowekeine/2755263171/ • https://www.flickr.com/photos/nino_ary/2901716788/ • https://www.flickr.com/photos/eneas/5279761/ • https://www.flickr.com/photos/lastingimages/12373124983/ • https://www.flickr.com/photos/rmgg-photos/8503188042/ • https://www.flickr.com/photos/luajr/15127961825/ • https://www.flickr.com/photos/gtercero/8740734623/ • https://www.flickr.com/photos/egmzcp15/5237066174/ • https://www.flickr.com/photos/rouleau/109405487/ • https://www.flickr.com/photos/xavier333/2257501542/ • https://www.flickr.com/photos/pvcg/3087911579/ • https://www.flickr.com/photos/notocajrs/12785034584/ • https://www.flickr.com/photos/nahual_neo/8005123271/ • https://www.flickr.com/photos/chicotown/3189442699/ • https://www.flickr.com/photos/kootenayhulio/5497898774/ • https://www.flickr.com/photos/maybemaq/16579363326/ • https://www.flickr.com/photos/luajr/15484454837/
  • 52.
    Picture credits • https://www.flickr.com/photos/nahual_neo/4290121443/ •https://www.flickr.com/photos/70120970@N08/8493760801/ • https://www.flickr.com/photos/gustavothomastheatre/15823470423/ • https://www.flickr.com/photos/graficris_lgs/15543907818/ • https://www.flickr.com/photos/gustavothomastheatre/15708898754/ • https://www.flickr.com/photos/john_colby/8430729849/ • https://www.flickr.com/photos/egmzcp15/4144937818/ • https://www.flickr.com/photos/10066932@N03/2552609658/ • https://www.flickr.com/photos/bdebaca/2987372965/ • https://www.flickr.com/photos/beco/23806123