137

New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 2: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

Who's speaking?

linkd.in/jbaruch

stackoverflow.com/users/402053/jbaruch

Page 3: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

Frogs ❤ ️Groovy

Page 4: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

Frogs ❤ ️Groovy

Hosting Groovy on Bintray

Hosting Groovy on Artifactory

Bintray UI is Grails

Artifactory plugins are Groovy

Gradle and Grails plugins on

Bintray

Page 5: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

First Season Was a Blast!

Page 6: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 7: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

BTW,

Page 8: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

1. Two entertaining guys on stage

Page 9: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 10: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

1. Two entertaining guys on stage 2. Funny Puzzling questions 3. You think and vote 4. Awesome Groovy t-shirts fly in the air 5. Official twitter handle!

groovypuzzlers

Page 11: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 12: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

Cédric?!

Page 13: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

All works (or doesn't work) in

Groovy 2.4.5

Page 14: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 15: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 16: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

'a'..'z'.each { println it }

B. NoSuchMethodError

C. z

D. Won’t run

A. a b c . . . z

Page 17: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 18: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

You knew it, right?

('a'..'z').each { println it }

Page 19: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

“All problems in computer science can be solved by another pair of parentheses”

John McCarthy, the inventor of LISP

Page 20: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

And the t-shirt goes to…

Page 21: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 22: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

def back = 'back'

def quotes = ["I'll be $back",

"I'll be ${-> back}",

"I'll be ${back}",

"I'll be "+back]

println quotes

back = 'Bach'

println quotes

How Many Bachs?

A.No Bachs

B.One Bach

C.Two Bachs

D.Three Bachs

Page 23: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 24: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

Only closures are evaluated at

runtime

Others are inlined

Page 25: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

def back = 'back'

def quotes = ["I'll be $back",

"I'll be ${-> back}",

"I'll be ${back}",

"I'll be "+back]

Only closures are evaluated at

runtime

Others are inlined

Page 26: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

def back = 'back'

def quotes = ["I'll be $back",

"I'll be ${-> back}",

"I'll be ${back}",

"I'll be "+back]

Only closures are evaluated at

runtime

Others are inlined

That is the only closure

Page 27: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

And the t-shirt goes to…

Page 28: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 29: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 30: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

How one prints 666?

A. def beast = '6' * Math.PI

B. def beast = '6' * '3'

C. def beast = '667' – 1

D. def beast = '6' + '6' + 0 + 6

Page 31: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 32: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

def beast = '6' * Math.PI

Page 33: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

def beast = '6' * 3.1415926…

Page 34: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 35: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

/**

* Repeat a String a certain number of times.

*

* @param self a String to be repeated

* @param factor the number of times the String should be repeated

* @return a String composed of a repetition

* @throws IllegalArgumentException if the number of repetitions is < 0

* @since 1.0

*/

public static String multiply(String self, Number factor) {

int size = factor.intValue();

}

Page 36: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

def beast = '6' * 3.1415926…

Page 37: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

def beast = '6' * 3

Page 38: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

Pop Quiz!

B. def beast = '6' * '3'

C. def beast = '667' – 1

D. def beast = '6' + '6' + 0 + 6

Page 39: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

Pop Quiz!

B. def beast = '6' * '3'

C. def beast = '667' – 1

D. def beast = '6' + '6' + (0 + 6)

Page 40: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

Pop Quiz!

B. def beast = '6' * '3'

C. def beast = '667' – 1

D. def beast = '6' + '6' + (0 + 6)

Yup, I am

watching

you!

Page 41: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

And the t-shirt goes to…

Page 42: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 43: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

class THERE_CAN_BE_ONLY_ONE { }

class MacLeod {

THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() {

Class clazz = THERE_CAN_BE_ONLY_ONE

return clazz.newInstance()

}

}

println new MacLeod().THERE_CAN_BE_ONLY_ONE

Page 44: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

class THERE_CAN_BE_ONLY_ONE { }

class MacLeod {

THERE_CAN_BE_ONLY_ONE

getTHERE_CAN_BE_ONLY_ONE() {

Class clazz = THERE_CAN_BE_ONLY_ONE

return clazz.newInstance()

}

}

println new MacLeod().THERE_CAN_BE_ONLY_ONE

A. Won't start

B. No such property: THERE_CAN_BE_ONLY_ONE for class: MacLeod

C. THERE_CAN_BE_ONLY_ONE@3d74bf60

D. Another Exception

Page 45: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 46: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

A.MultipleCompilationErrorsException

B.StackOverflowError

C.NullPointerException

D.Yet Another Exception

Page 47: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 48: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

class MacLeod {

THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() {

Class clazz = THERE_CAN_BE_ONLY_ONE

return clazz.newInstance()

}

}

Page 49: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

class MacLeod {

THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() {

Class clazz = getTHERE_CAN_BE_ONLY_ONE()

return clazz.newInstance()

}

}

Page 50: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

Let's Fix It! Class<THERE_CAN_BE_ONLY_ONE> clazz = THERE_CAN_BE_ONLY_ONE.class

Page 51: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

class MacLeod {

THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() {

Class<THERE_CAN_BE_ONLY_ONE> clazz = THERE_CAN_BE_ONLY_ONE.class

return clazz.newInstance()

}

}

Page 52: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 53: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

class MacLeod {

THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() {

Class<THERE_CAN_BE_ONLY_ONE> clazz = getTHERE_CAN_BE_ONLY_ONE().class

return clazz.newInstance()

}

}

Page 54: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

Let's Fix It! Class<THERE_CAN_BE_ONLY_ONE> clazz = (THERE_CAN_BE_ONLY_ONE as Class)

Page 55: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

class MacLeod {

THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() {

Class<THERE_CAN_BE_ONLY_ONE> clazz = (THERE_CAN_BE_ONLY_ONE as Class)

return clazz.newInstance()

}

}

Page 56: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 57: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

class MacLeod {

THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() {

Class<THERE_CAN_BE_ONLY_ONE> clazz = (getTHERE_CAN_BE_ONLY_ONE() as Class)

return clazz.newInstance()

}

}

Page 58: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

Let's Fix It!

Page 59: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

And the t-shirt goes to…

Page 60: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 61: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

@groovy.transform.InheritConstructors

class TreaayeMap extends HashMap {

}

TreaayeMap a = [5]

TreaayeMap b = [6]

println "${a.getClass()} ${a.equals(b)}"

A.class HashMap true

B.class TreaayeMap false

C.class TreaayeMap true

D.class HashMap false

Page 62: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 63: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 64: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 65: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

TreaayeMap a = [5]

Page 66: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

TreaayeMap a = [5]

Page 67: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

TreaayeMap a = [5]

Page 68: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

TreaayeMap a = [5] @groovy.transform.InheritConstructors

class TreaayeMap extends HashMap {

}

Page 69: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

TreaayeMap a = [5] @groovy.transform.InheritConstructors

class TreaayeMap extends HashMap {

}

/**

* Constructs an empty <tt>HashMap</tt> with the specified initial

* capacity and the default load factor (0.75).

*

* @param initialCapacity the initial capacity.

* @throws IllegalArgumentException if the initial capacity is negative.

*/

public HashMap(int initialCapacity)

Page 70: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

equals() doesn’t care about capacity,

mappings only

Page 71: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

And the t-shirt goes to…

Page 72: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 73: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

class Kitty { def fur }

def kitties = [new Kitty(fur: 'soft'),new Kitty(fur: 'warm'),new Kitty(fur: 'purr') ]

println kitties.collect { it.fur }

println kitties*.fur

println kitties.fur

How many of the printed lines will be the

same?

A.All different

B.2 similar, one different

C.All the same

D.Won't run

Page 74: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 75: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

class Kitty { def fur }

def kitties

println kitties.collect { it.fur }

println kitties*.fur

println kitties.fur

How many of the printed lines will be the

same?

A.All different

B.2 similar, one different

C.All the same

D.Won't compile

Page 76: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 77: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

class Kitty { def fur }

def kitties

println kitties.fur

Page 78: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

class Kitty { def fur }

def kitties

println kitties.fur

Page 79: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

class Kitty { def fur }

def kitties

println kitties.collect { it.fur }

Page 80: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

class Kitty { def fur }

def kitties

println kitties.collect { it.fur }

public static Collection asCollection(Object value) {

if (value == null) {

return Collections.EMPTY_LIST;

}

}

Page 81: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

class Kitty { def fur }

def kitties

println kitties*.fur

Page 82: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

class Kitty { def fur }

def kitties

println kitties*.fur

Page 83: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

class Kitty { def fur }

def kitties

println kitties*.fur

Page 84: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

[]

null

Caught:

java.lang.NullPointerException:

Cannot get property 'fur' on null object

Consistency, yeah.

Page 85: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

“All happy families are alike; each unhappy family is unhappy in its own way.”

Leo Tolstoy, “Anna Karenina”

Page 86: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

And the t-shirt goes to…

Page 87: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 88: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

ArrayList<String> expendables = ['Arnold', 'Chuck', Sly']

def expendable = //someone from the list

for(String hero in expendables) {

if(hero == expendable){

expendables.remove(hero)

}

}

println expendables

Page 89: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

ArrayList<String> expendables = ['Arnold', 'Chuck', Sly']

def expendable = //someone from the list

for(String hero in expendables) {

if(hero == expendable){

expendables.remove(hero)

}

}

println expendables

A.Can't avoid CME

B.Arnold

C.Chuck

D.Sly

Which one won’t cause a

ConcurrentModificationException?

Page 90: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 91: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 92: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

You have been warned.

Page 93: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

List expendables = Arrays.asList(new String[]{"Arnold", "Chuck", " Sly"});

String expendable = "Chuck";

Iterator iterator = expendables.iterator();

while(iterator.hasNext()) {

String hero = (String)iterator.next();

if(hero.equals(expendable)) {

expendables.remove(hero);

}

}

Let’s decompile this, baby!

Page 94: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

while(iterator.hasNext()) {

String hero = (String)iterator.next();

if(hero.equals(expendable)) {

// expendables.remove(hero); }

}

Page 95: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

while(iterator.hasNext()) {

String hero = (String)iterator.next();

if(hero.equals(expendable)) {

// expendables.remove(hero); }

}

public E next() {

checkForComodification();

cursor = i + 1;

}

Modifications are only

checked in the next

cycle

Getting ready for hasNext()

check in the next cycle public boolean hasNext() {

return cursor != size();

}

Exit on last element +1 == size()

Page 96: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

while(iterator.hasNext()) {

String hero = (String)iterator.next();

if(hero.equals(expendable)) {

// expendables.remove(hero); }

}

public E next() {

checkForComodification();

cursor = i + 1;

}

public boolean hasNext() {

return cursor != size();

}

After Sly cursor is 3

And size is 3 as well

All good. Now let’s mess with

it.

Page 97: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

while(iterator.hasNext()) {

String hero = (String)iterator.next();

if(hero.equals(expendable)) {

expendables.remove(hero);

}

}

public E next() {

checkForComodification();

cursor = i + 1;

}

public boolean hasNext() {

return cursor != size();

}

After Chuck the cursor is

2

And now the size now is

2!

It won’t get to the next() to run

checkForComodification!

Then we remove the

element

Page 98: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

Hey, what about me?!

Page 99: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

while(iterator.hasNext()) {

String hero = (String)iterator.next();

if(hero.equals(expendable)) {

expendables.remove(hero);

}

}

public E next() {

checkForComodification();

cursor = i + 1;

}

public boolean hasNext() {

return cursor != size();

}

After Sly the cursor is 3

But the size now is 2!

It will go to another loop and fail on

checkForComodification!

Then we remove the

element

Page 100: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

And the t-shirt goes to…

Page 101: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 102: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

String truth = 'false'

boolean groovyTruth = truth

println groovyTruth

Page 103: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

A.false

B.true

C.ClassCastException

D.Startup error

String truth = 'false'

boolean groovyTruth = truth

println groovyTruth

Page 104: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 105: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 106: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 107: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

And the t-shirt goes to…

Page 108: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 109: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

assert 1L == 1

println

1L.equals(1) A. Assertion failed

B. true

C. false

D. MissingMethodException

Page 110: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 111: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 112: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 113: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 114: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

And the t-shirt goes to…

Page 115: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 116: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 117: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

A. [[2, 3, 5], [2, 4, 8], [42, 73, 2147483647, 0]]

B. Won't run

C. [[null, null, null, 5]]

D. null

Page 118: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 119: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 120: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 121: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

No t-shirt for this guy

Page 122: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 123: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

def jailhouseRock

def loveMeTender

def rockAroundTheClock = [1,2,3]

jailhouseRock?:[] + loveMeTender?:[] + rockAroundTheClock?:[]

*Yes, we know, it's not Elvis' song.

Page 124: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

def jailhouseRock

def loveMeTender

def rockAroundTheClock = [1,2,3]

jailhouseRock?:[] + loveMeTender?:[] + rockAroundTheClock?:[]

A.[null]

B.null

C.[]

D.[1,2,3]

Page 125: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use
Page 126: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

def jailhouseRock

def loveMeTender

def rockAroundTheClock = [1,2,3]

jailhouseRock?:[] + loveMeTender?:[] + rockAroundTheClock?:[]

Page 127: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

def jailhouseRock

def loveMeTender

def rockAroundTheClock = [1,2,3]

jailhouseRock?:[null]?:[] + rockAroundTheClock?:[]

Page 128: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

def jailhouseRock

def loveMeTender

def rockAroundTheClock = [1,2,3]

jailhouseRock?:[null]?:[1,2,3]?:[]

Page 129: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

def jailhouseRock

def loveMeTender

def rockAroundTheClock = [1,2,3]

[null]

Page 130: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

Let's fix it

(jailhouseRock?:[])+(loveMeTender?:[])+(rockAroundTheClock?:[])

Love me tender!

Page 131: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

And the t-shirt goes to…

Page 132: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

Conclusions

Page 133: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

1. Write readable code

2. Comment neat tricks

3. Sometimes it is just a bug

4. Use static code analysis (intellij IDEA!)

5. Rtfm

6. Parentheses. Always use Parentheses.

Page 134: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

We keep going! (Look at the awesome t-shirts!)

Puzzlers? Gotchas? Fetal position inducing behavior?

- puzzlers jfrog.com

- Groovypuzzlers

Page 135: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

Jfrog always pays its debts

Page 136: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

Positive feedback? Fill the feedback form! Praise us on twitter groovypuzzlers - Groovypuzzlers - tlberglund - jbaruch

Negative feeback? /dev/null

Page 137: New Who's speaking? - Jfokus · 2019. 9. 11. · Frogs ️ Groovy Hosting Groovy on Bintray Hosting Groovy on Artifactory Bintray UI is Grails Artifactory plugins are Groovy ... Use

No, Thank you!