Enviar pesquisa
Carregar
Cleaner and Leaner Groovy
•
0 gostou
•
315 visualizações
R
Rowell Belen
Seguir
Groovy magic examples
Leia menos
Leia mais
Software
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 20
Baixar agora
Baixar para ler offline
Recomendados
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coin
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coin
soft-shake.ch
Entrepreneurship and Commerce in IT - 14 - Web Marketing Communications
Entrepreneurship and Commerce in IT - 14 - Web Marketing Communications
Sachintha Gunasena
Fork Join
Fork Join
Dmitry Buzdin
Concurrency Programming in Java - 07 - High-level Concurrency objects, Lock O...
Concurrency Programming in Java - 07 - High-level Concurrency objects, Lock O...
Sachintha Gunasena
Fork and join framework
Fork and join framework
Minh Tran
Concurrency Programming in Java - 01 - Introduction to Concurrency Programming
Concurrency Programming in Java - 01 - Introduction to Concurrency Programming
Sachintha Gunasena
Serverless Framework (2018)
Serverless Framework (2018)
Rowell Belen
Microservices with AWS Lambda and the Serverless Framework
Microservices with AWS Lambda and the Serverless Framework
Rowell Belen
Recomendados
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coin
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coin
soft-shake.ch
Entrepreneurship and Commerce in IT - 14 - Web Marketing Communications
Entrepreneurship and Commerce in IT - 14 - Web Marketing Communications
Sachintha Gunasena
Fork Join
Fork Join
Dmitry Buzdin
Concurrency Programming in Java - 07 - High-level Concurrency objects, Lock O...
Concurrency Programming in Java - 07 - High-level Concurrency objects, Lock O...
Sachintha Gunasena
Fork and join framework
Fork and join framework
Minh Tran
Concurrency Programming in Java - 01 - Introduction to Concurrency Programming
Concurrency Programming in Java - 01 - Introduction to Concurrency Programming
Sachintha Gunasena
Serverless Framework (2018)
Serverless Framework (2018)
Rowell Belen
Microservices with AWS Lambda and the Serverless Framework
Microservices with AWS Lambda and the Serverless Framework
Rowell Belen
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
Safe Software
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
KrzysztofKkol1
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?
Alexandre Beguel
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
Lionel Briand
Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conference
ssuser9e7c64
Osi security architecture in network.pptx
Osi security architecture in network.pptx
VinzoCenzo
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdf
maor17
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
Shane Coughlan
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
Andreas Kunz
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
osttopstonverter
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
Christian Birchler
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Drew Moseley
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
RTS corp
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
team-WIBU
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Rob Geurden
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
Christopher Curtin
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
Andrey Devyatkin
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slides
vaideheekore1
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero results
Jean Silva
2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
Marius Sescu
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
Expeed Software
Mais conteúdo relacionado
Último
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
Safe Software
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
KrzysztofKkol1
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?
Alexandre Beguel
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
Lionel Briand
Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conference
ssuser9e7c64
Osi security architecture in network.pptx
Osi security architecture in network.pptx
VinzoCenzo
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdf
maor17
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
Shane Coughlan
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
Andreas Kunz
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
osttopstonverter
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
Christian Birchler
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Drew Moseley
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
RTS corp
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
team-WIBU
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Rob Geurden
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
Christopher Curtin
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
Andrey Devyatkin
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slides
vaideheekore1
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero results
Jean Silva
Último
(20)
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conference
Osi security architecture in network.pptx
Osi security architecture in network.pptx
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdf
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slides
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero results
Destaque
2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
Marius Sescu
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
Expeed Software
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
Pixeldarts
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
marketingartwork
Skeleton Culture Code
Skeleton Culture Code
Skeleton Technologies
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
Neil Kimberley
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
contently
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
Albert Qian
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
Search Engine Journal
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
SpeakerHub
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
Clark Boyd
Getting into the tech field. what next
Getting into the tech field. what next
Tessa Mero
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Lily Ray
How to have difficult conversations
How to have difficult conversations
Rajiv Jayarajah, MAppComm, ACC
Introduction to Data Science
Introduction to Data Science
Christy Abraham Joy
Time Management & Productivity - Best Practices
Time Management & Productivity - Best Practices
Vit Horky
The six step guide to practical project management
The six step guide to practical project management
MindGenius
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
RachelPearson36
Destaque
(20)
2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
Skeleton Culture Code
Skeleton Culture Code
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
Getting into the tech field. what next
Getting into the tech field. what next
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
How to have difficult conversations
How to have difficult conversations
Introduction to Data Science
Introduction to Data Science
Time Management & Productivity - Best Practices
Time Management & Productivity - Best Practices
The six step guide to practical project management
The six step guide to practical project management
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Cleaner and Leaner Groovy
1.
CLEANER & LEANER GROOVY! ©
Rowell Belen
2.
@BUILDER @Builder class Premise { def
sqFeet def occupants def stories def heatingType def coolingType def homeType def yearBuilt } def premise = Premise.builder() .sqFeet(1200) .occupants(4) .stories(2) .heatingType('Furnace·(Gas)') .coolingType('Central·Air·Conditioning') .homeType('Single·Family·(detached)') .yearBuilt(1995).build() © Rowell Belen
3.
@TOSTRING @ToString(includeNames=true, ignoreNulls =
true, excludes="ssn") class Customer { String first, last int age Collection favItems String ssn } def customer = new Customer(first:'Tom', last:'Jones', age:21, favItems:['Books', 'Games'], ssn:'xxx-xx-xxxxx') assert customer.toString() == 'Customer(first:Tom, last:Jones, age:21, favItems:[Books, Games])' © Rowell Belen
4.
@EQUALSANDHASHCODE @EqualsAndHashCode class Actor { String
firstName, lastName } def magneto = new Actor(firstName:'Ian', lastName: 'McKellen') def gandalf = new Actor(firstName:'Ian', lastName: 'McKellen') assert magneto == gandalf © Rowell Belen
5.
@TUPLECONSTRUCTOR import groovy.transform.TupleConstructor @TupleConstructor class Athlete
{ String firstName, lastName } def a1 = new Athlete('Michael', 'Jordan') def a2 = new Athlete('Michael') assert a1.firstName == a2.firstName © Rowell Belen
6.
@LAZY class App { @Lazy AuthService
authService = { ctx.getBean('AuthService.class') }() @Lazy // defer expensive initialization ApplicationContext ctx = { new AnnotationConfigApplicationContext(AppConfig.class) }() @Lazy UserService userService Profile getProfile(user){ authService.login(user) userService.findProfile(user) } } © Rowell Belen
7.
@IMMUTABLE @Immutable class User { String
email Collection roles } def u = new User(email: 'email@host.com', roles: ['admin', 'user']) // Properties are readonly. shouldFail(ReadOnlyPropertyException) { u.email = 'new@email.com' } // Collections are also wrapped in immutable wrapper classes shouldFail(UnsupportedOperationException) { u.roles << 'new role' } © Rowell Belen
8.
@SINGLETON @Singleton class Zeus { ... } assert
Zeus.instance def ex = shouldFail(RuntimeException) { new Zeus() } assert ex.message == "Can't instantiate singleton Zeus. Use Zeus.instance" © Rowell Belen
9.
@DELEGATE class NoisySet { @Delegate Set
delegate = new HashSet() @Override boolean add(item) { println "adding $item" delegate.add(item) } } def ns = new NoisySet() ns.add(1) ns.addAll([2, 3]) assert ns.size() == 3 © Rowell Belen
10.
@MEMOIZED @Memoized Long fib(Integer n){ if
(n < 2) { return 1 } return fib(n - 1) + fib(n - 2) } © Rowell Belen
11.
@AUTOCLONE @AutoClone class Chef { String
name List<String> recipes } def name = 'Gordon Ramsay' def recipes = ['Snail porridge', 'Bacon & egg ice cream'] def c1 = new Chef(name: name, recipes: recipes) def c2 = c1.clone() assert c2.recipes == recipes © Rowell Belen
12.
"PIMP MY LIBRARY"
PATTERN © Rowell Belen
13.
@CATEGORY - OVERRIDE class
Energy { def usage(){ .. } // return joules } @Category(Energy) class Therms { def usage(){ .. } // override - return therms } use(Therms){ def energy = new Energy() energy.usage() // returns usage in Therms } © Rowell Belen
14.
@CATEGORY - ENHANCE class
Energy { def usage(){ .. } // return joules } @Category(Energy) class KilowattHour { def kwUsage(){ .. } // enhance with new method - return usage in kWh } use(KilowattHour){ def energy = new Energy() energy.usage() // returns in joules energy.kwUsage() // returns in kWh } © Rowell Belen
15.
WHAT ABOUT CONCURRENCY? © Rowell
Belen
16.
@WITHREADLOCK / @WITHWRITELOCK class
PhoneBook { private final phoneNumbers = [:] // multiple readers can access simultaneously // unless lock is obtained by writer @WithReadLock def getNumber(key) { phoneNumbers[key] } // readers will block until lock is released by the writer @WithWriteLock def addNumber(key, value) { phoneNumbers[key] = value } } © Rowell Belen
17.
Concurrent Map/Filter/Reduce Example import
static groovyx.gpars.GParsPool.withPool withPool { def numbers = [1, 2, 3, 4, 5, 6] assert [1, 4, 9] == numbers.parallel .map { it * it } .filter { it < 10 } .collection } withPool { assert 55 == [0, 1, 2, 3, 4].parallel .map { it + 1 } .map { it ** 2 } .reduce { a, b -> a + b } } withPool(10) {...} withPool(20, exceptionHandler) {...} © Rowell Belen
18.
Parallel Collections withPool { def
numbers = [1, 2, 3, 4, 5, 6] // dynamically enhanced with parallel processing capabilities numbers.eachParallel{ .. } numbers.eachWithIndexParallel{ .. } numbers.collectParallel{ .. } numbers.findAllParallel{ .. } numbers.findAnyParallel{ .. } numbers.findParallel{ .. } numbers.everyParallel{ .. } numbers.anyParallel{ .. } numbers.grepParallel{ .. } numbers.groupByParallel{ .. } numbers.foldParallel{ .. } numbers.minParallel{ .. } numbers.maxParallel{ .. } numbers.sumParallel{ .. } numbers.splitParallel{ .. } numbers.countParallel{ .. } numbers.foldParallel{ .. } } © Rowell Belen
19.
Implicit Task Coordination def
getDashboardData(req) { def results = new Dataflows() // These 3 tasks will execute in parallel task { results.user = fetchUserData(req) } task { results.weather = fetchWeatherData(req) } task { results.savings = fetchSavingsData(req) } // Blocks until results.user is bound task { results.devices = fetchDevices(req, results.user.defaultDevice) } results } © Rowell Belen
20.
ERRRMAHHHHGERDD!!! © Rowell Belen
Baixar agora