Úvod do Groovy pro Java experty

Transkript

Úvod do Groovy pro Java experty
Úvod do Groovy pro Java experty
Václav Pech
Senior Software Developer
JetBrains, Inc.
www.jetbrains.com
Něco o mně
• Václav Pech
– Programátor
– Nadšenec do Groovy
• JetBrains
– Dodavatel Vašich oblíbených nástrojů
• IntelliJ IDEA, TeamCity, ReSharper a další
www.jetbrains.com
2
Něco o prezentaci
• Část 1: Groovy syntaxe
– Nové obzory pro Java vývojáře
• Část 2: Příklady uplatnění pro Groovy
– Skriptování, Buildery, DSLs
• Otázky a odpovědi
•
POZOR!: Během prezentace bude ukazován a editován kód
www.jetbrains.com
3
Jeden jazyk to vše nezvládne
–
–
–
–
–
–
–
–
–
SQL
XHTML
JavaScript
XUL (XML UI Language)
SVG (Scalable Vector Graphics)
CSS (Cascading Stylesheets)
XPath
Velocity, XSL-T
…
– Groovy – Scripting, DSLs, builders, …
www.jetbrains.com
4
Groovy
• Dynamický, objektově orientovaný
skriptovací jazyk
– Syntaxe podobná Javě
• Včetně anotací a enumerací
• Snadné osvojení pro Java vývojáře
– Překládá se do Java bytecode
– Velmi snadná integrace s Javou
– Dynamické typování
www.jetbrains.com
5
Groovy
• Open sourced
• Od 2004 pod JSR 241: The Groovy
Programming Language
• V současnosti rozvíjen společností
G2one
• Podpora v IDE
• Pluginy pro všechna IDE
• JetGroovy plugin pro IntelliJ IDEA
• Runtime podpora
– Spring, Seam, …
www.jetbrains.com
6
Properties
www.jetbrains.com
7
Closures
www.jetbrains.com
8
Closures – implicitní parametr
www.jetbrains.com
9
Iterace
www.jetbrains.com
10
GDK
• java.util.Collection
– each(), find(), join(), min(), max() …
• java.lang.Object
– any(), every(), print(), invokeMethod(), …
• java.lang.Number
– plus(), minus(), power(), upto(), times(), …
• …
www.jetbrains.com
11
Operator overloading
www.jetbrains.com
12
Stringy a GStringy
www.jetbrains.com
13
Multi-line Stringy a GStringy
www.jetbrains.com
14
Operátory
• Spread
• def names = customers*.name
• [‘Java’, *[‘Groovy’, ‘Ruby’, ‘Scala’, ‘Jython’]]
• Safe dereference
• customer.shippingAddress?.street
• Membership
• if (code.language in [‘Java’, ‘Groovy’])
• Elvis
• return user.locale?:defaultLocale
www.jetbrains.com
15
Operátory
• Spaceship (compareTo)
• a <=> b
• Find and Match - =~, ==~
• methodName =~ ‘findAll(.*)Employees’
• Subscript
• map[‘key’] == map.key == map.get(‘key’)
• ‘VeryLongString’[4..-1]
• As
• new Thread({println ‘In parallel’} as Runnable)
www.jetbrains.com
16
Rozšíření syntaxe
• Rozšířené JDK třídy (GDK)
• Dynamické (duck) typování – volitelně!
• Rozšíření syntaxe
–
–
–
–
–
–
–
–
–
Properties
Closures
Named parameters (new Customer(name:’Joe’))
Kolekce a mapy
Přetěžování operátorů
GString (“Name: $name”)
GPath (employees.findAll{it.age>30}*.name)
Datový typ range (e.g. 9..29 or 0..-1)
Integrace regulárních výrazů
www.jetbrains.com
17
Testování
• Testy Java i Groovy kódu
• Spouštěné pomocí Ant či Maven
• Integrovaná podpora JUnit
• assert…(), shouldFail(), …
• Duck typing
• Mocking
– Integrovaná podpora stubů a mocků
www.jetbrains.com
18
Pasáže pro starší a pokročilé
• Buildery
– Konstrukce hierarchických datových
struktur
• Skriptování
– Přidávání a překlad kódu za běhu aplikace
• Silná podpora pro DSL
– Využívá schopnosti meta-programování
www.jetbrains.com
19
Buildery
• Konstrukce hierarchií
www.jetbrains.com
20
Buildery - GAnt
www.jetbrains.com
21
Buildery – Spring config
www.jetbrains.com
22
Buildery – domain classes
www.jetbrains.com
23
Skriptování
• Vyhodnocení Groovy kódu za běhu
– Vlastní kód či testy
– Implementace rozhraní
www.jetbrains.com
24
DSL
• Jednoúčelové jazyky
• Cílené na určitou problémovou doménu
• Poskytují přátelštější API
– Externí
• Vlastní gramatiky a parsery
• Vlastní syntaxe
– Interní
• Vnořené do hostovacího jazyka
• Syntaxe se řídí gramatikou hostovacího jazyka
www.jetbrains.com
25
DSL – práce s datumy
www.jetbrains.com
26
DSL – Hibernate criteria
www.jetbrains.com
27
DSL – manipulace s účty
www.jetbrains.com
28
Meta-programování
• Buildery
• Kategorie
• Změna postupu při vyvolání metod
•
•
•
•
•
•
Předefinovat invokeMethod()
Předefinovat methodMissing()
Předefinovat propertyMissing()
Přidat metodu nebo property k meta-třídě
Předefinovat invokeMethod() na meta-třídě
Přidat Expando meta-class na instanci
www.jetbrains.com
29
Dynamické vyvolání metod
MetaClass
GroovyObject
invokeMethod()
methods
getProperty()
properties
setProperty()
invokeMethod()
methodMissing()
propertyMissing()
www.jetbrains.com
30
Grails
• Framework pro tvorbu webovských
applikací
• MVC architektura
• Open sourced
• Cílem je co nejvíce zpříjemnit a
zefektivnit vývoj webovských aplikací
www.jetbrains.com
31
Technologie
www.jetbrains.com
32
Komunita
• G2One Inc. – G2One.com
– Guillaume Laforge (Groovy Project Lead)
– Graeme Rocher (Grails Project Lead)
• http://groovy.codehaus.org/
• http://grails.org/
• Novinky ze světa Groovy
– http://aboutgroovy.com
– http://groovyblogs.org
– http://groovy.dzone.com
www.jetbrains.com
33
Literatura
• Groovy in Action
• The Definitive Guide to Grails
www.jetbrains.com
34
Shrnutí
• Groovy
– Podařené rozšíření Javy
– Vylepšení syntaxe
– Buildery, Skriptování, DSL
– Kontakt: [email protected]
www.jetbrains.com
35
Otázky
www.jetbrains.com
36

Podobné dokumenty

Pokročilé techniky automa- tického testování v

Pokročilé techniky automa- tického testování v • Podpora pro testování ve Spring Frameworku 2.5 • Techniky a patterny testování různých vrstev aplikace - Data layer: database sandbox, automatic database model setup / update, database interface,...

Více

Statická analýza kódu

Statická analýza kódu Statická analýza kódu za kód bez chyb Václav Pech Senior Software Developer JetBrains, Inc.

Více

Michal Utíkal, M.E.

Michal Utíkal, M.E.  SQL, jQuery, Angular, TeamCity, Git, Svn, Xml, CSS Zkušenosti se softwarovou architekturou, prací v týmu a vývojem asynchronních aplikací Spolehlivost a odpovědnost, kritické myšlení, vysoké prac...

Více

[email protected] (+420) 773 400084

milan.karasek@algomica.cz (+420) 773 400084 Banking 2010 – 2013; total allocation 2 years 2 months customers: Profinit, Ceska Sporitelna - Designer (technical design) of new features of internet banking, definition of new proceses of analysi...

Více

Nástroje pro vývoj aplikací a jejich vazba na CASE

Nástroje pro vývoj aplikací a jejich vazba na CASE V teoretickém základu je nutno nejprve definovat termín CASE, jedná se o zkratku slov computeraided software engineering. Obsah této zkratky vystihuje nejlépe definice: „CASE is the use of computer...

Více

Sborník příspěvků

Sborník příspěvků webu jako odvozování. Vznikl proto formát RDFa, který umožňuje do XML dokumentů (a tedy i přímo do jazyka XHTML) zapisovat výroky RDF při použití syntaxe, která se přibližuje mikroformátům. Ze strá...

Více

Nástroje pro vývoj aplikací a jejich vazba na CASE

Nástroje pro vývoj aplikací a jejich vazba na CASE IntelliJ IDEA 8 (31) IntelliJ IDEA společnosti JetBrains se honosí několika oceněními za nejlepší Java IDE. V minulosti přinášelo do programování v Javě mnoho novinek, které byly z velké části pře...

Více

Naruby / pracovní list

Naruby / pracovní list jakéhosi zašpiněného nádechu; převládající stříbřité pablesky nyní stěží zazářily, plazily se při okrajích toho tvrdého a matného štítu ztlumeny v chladné tóny odřeného zinku. Ale ani potom nebylo ...

Více

Soutěžní řád a amatérská pravidla

Soutěžní řád a amatérská pravidla 1.13.1 Soutěžící jsou povinni dostavit se k soutěži včas a řádně oblečeni. Musí znát pravidla a soutěžní řád kulturistiky a musí být obeznámeni s propozicemi soutěže, na níž startují. 1.13.2 Soutěž...

Více