Top Banner
121

The groovy puzzlers (as Presented at Gr8Conf US 2014)

Aug 27, 2014

Download

Software

GroovyPuzzlers

Remember the epic Java Puzzlers? Here’s the Groovy version, and we have some neat ones! Even though we are totally a Grails shop here at JFrog, some of these had us scratching our heads for days trying to figure them out.
And there is more! Contributions from the truly Groovy senseis, including @glaforge, @aalmiray, @tim_yates, @kenkousen make this talk an unforgettable journey to Groovy's O_O.
In this talk you’ll have the expected dose of fun and enlightenment hearing about our mistakes and failures, great and small, in hard core Groovy/Grails development.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 2: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 3: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 4: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 5: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 6: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 7: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 8: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 9: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 10: The groovy puzzlers (as Presented at Gr8Conf US 2014)

1. Funny Puzzling questions

2. You think and vote

3. Lots of T-shirts flying in the air

4. Official twitter handle!groovypuzzlers

5. Two entertaining guys on stage

Page 11: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 12: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 13: The groovy puzzlers (as Presented at Gr8Conf US 2014)

Cédric?!

Page 14: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 15: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 16: The groovy puzzlers (as Presented at Gr8Conf US 2014)

-3.abs()

Page 17: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 18: The groovy puzzlers (as Presented at Gr8Conf US 2014)

(-3).abs()

int value = -3value.abs()

Page 19: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 20: The groovy puzzlers (as Presented at Gr8Conf US 2014)

println (-3).abs()

Page 21: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 22: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 23: The groovy puzzlers (as Presented at Gr8Conf US 2014)

-3Caught: java.lang.NullPointerException: Cannot invoke method abs() on null objectjava.lang.NullPointerException: Cannot invoke method abs() on null object

at AbsolutelyGroovy.run(AbsolutelyGroovy.groovy:7)at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

println (-3).abs()

Page 24: The groovy puzzlers (as Presented at Gr8Conf US 2014)

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

John McCarthy, the inventor of LISP

Page 25: The groovy puzzlers (as Presented at Gr8Conf US 2014)

println ((-3).abs())

int value = -3println value.abs()

Page 26: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 27: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 28: The groovy puzzlers (as Presented at Gr8Conf US 2014)

def range = 1.0..10.0assert range.contains(5.0)println range.contains(5.6)

Page 29: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 30: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 31: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 32: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 33: The groovy puzzlers (as Presented at Gr8Conf US 2014)

Iterator iterator = (1.0..10.0).iterator()while (iterator.hasNext()) {

print "${iterator.next()} "}

1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0

Page 34: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 35: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 36: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 37: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 38: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 39: The groovy puzzlers (as Presented at Gr8Conf US 2014)

def key = 'x'def map = [key: 'treasure']def value = map.get(key)println value

Page 40: The groovy puzzlers (as Presented at Gr8Conf US 2014)

def key = 'x'def map = [key: 'treasure']def value = map.get(key)println value

Page 41: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 42: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 43: The groovy puzzlers (as Presented at Gr8Conf US 2014)

1.def map = [(key): 'treasure']

2.map.put(key, 'treasure')

3.map."$key" = 'treasure'

4.map[key] = 'treasure'

Page 44: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 45: The groovy puzzlers (as Presented at Gr8Conf US 2014)

def map = [2: 'treasure']def key = 2def value = map."$key"println value

Page 46: The groovy puzzlers (as Presented at Gr8Conf US 2014)

def map = [2: 'treasure']def key = 2def value = map."$key"println value

Page 47: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 48: The groovy puzzlers (as Presented at Gr8Conf US 2014)

def map = [2: 'treasure']println map.keySet().first().class.name

java.lang.Integer

Page 49: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 50: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 51: The groovy puzzlers (as Presented at Gr8Conf US 2014)

List<Integer> list = [1,2,3]def now = new Date()list << nowprintln list

Page 52: The groovy puzzlers (as Presented at Gr8Conf US 2014)

List<Integer> list = [1,2,3]def now = new Date()list << nowprintln list

Page 53: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 54: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 55: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 56: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 57: The groovy puzzlers (as Presented at Gr8Conf US 2014)

List<Integer> list = [1,2,3]def now = new Date()list << nowlist << 'foo'println list*.class.name

[java.lang.Integer, java.lang.Integer, java.lang.Integer, java.util.Date, java.lang.String]

Page 58: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 59: The groovy puzzlers (as Presented at Gr8Conf US 2014)

def map = [metaClass: ]println "What's the $map.metaClass, Andres?"

Page 60: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 61: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 62: The groovy puzzlers (as Presented at Gr8Conf US 2014)

map.metaClass

map.get('metaClass')

map.getMetaClass()

Page 63: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 64: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 65: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 66: The groovy puzzlers (as Presented at Gr8Conf US 2014)

[0..9].each { println(it - 1) }

Page 67: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 68: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 69: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 70: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 71: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 72: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 73: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 74: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 75: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 76: The groovy puzzlers (as Presented at Gr8Conf US 2014)

boolean isPrime(def x) {if (x == 2) return trueint limit = Math.sqrt(x) + 1(2..limit).each {

if (x % it == 0) {return false

}}true

}

println isPrime("4" as Double)

Page 77: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 78: The groovy puzzlers (as Presented at Gr8Conf US 2014)

boolean isPrime(def x) {if (x == 2) return trueint limit = Math.sqrt(x) + 1(2..limit).each {

if (x % it == 0) {return false

}}true

}

println isPrime("4" as Double)

Page 79: The groovy puzzlers (as Presented at Gr8Conf US 2014)

boolean isPrime(def x) {if (x == 2) return trueint limit = Math.sqrt(x) + 1(2..limit).each {

if (x % it == 0) {return false

}}true

}

println isPrime("4" as Double)

Page 80: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 81: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 82: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 83: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 84: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 85: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 86: The groovy puzzlers (as Presented at Gr8Conf US 2014)

http://kousenit.wordpress.com/2014/04/18/responses-to-the-closure-of-no-return/

Page 87: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 88: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 89: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 90: The groovy puzzlers (as Presented at Gr8Conf US 2014)

class VanHalen {

public static jump() {"Here are the ${lyrics()}"

}

def methodMissing(String name, def args) {'lyrics'

}}

println VanHalen.jump()

Page 91: The groovy puzzlers (as Presented at Gr8Conf US 2014)

class VanHalen {

public static jump() {"Here are the

${lyrics()}"}

defmethodMissing(String name, def args) {

'lyrics'}

}

println VanHalen.jump()

Page 92: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 93: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 94: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 95: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 96: The groovy puzzlers (as Presented at Gr8Conf US 2014)

class VanHalen {

public static jump() {"Here are the ${lyrics()}"

}

static $static_methodMissing(String name, def args) {'lyrics'

}}

println VanHalen.jump()

Page 97: The groovy puzzlers (as Presented at Gr8Conf US 2014)

class VanHalen {

public jump() {"Here are the ${lyrics()}"

}

def methodMissing(String name, def args) {'lyrics'

}}

println new VanHalen().jump()

Page 98: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 99: The groovy puzzlers (as Presented at Gr8Conf US 2014)

double value = 3println "$value.14".isDouble()

Page 100: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 101: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 102: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 103: The groovy puzzlers (as Presented at Gr8Conf US 2014)

double value = 3println "$value.14".isDouble()

Page 104: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 105: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 106: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 107: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 108: The groovy puzzlers (as Presented at Gr8Conf US 2014)

class Invite {int attending = 1

}

def invite = new Invite()def attendees = (invite.attending) +1println attendees

Page 109: The groovy puzzlers (as Presented at Gr8Conf US 2014)

class Invite {int attending = 1

}

def invite = new Invite()def attendees = (invite.attending) +1println attendees

Page 110: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 111: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 112: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 113: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 114: The groovy puzzlers (as Presented at Gr8Conf US 2014)

def attendees = (new Invite().attending) + 1println attendees

def invite = new Invite()println (invite.attending +1)

Page 115: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 116: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 117: The groovy puzzlers (as Presented at Gr8Conf US 2014)

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. Don’t code like my brother

Page 118: The groovy puzzlers (as Presented at Gr8Conf US 2014)

We have just started!(may end up in proper overalls)

Puzzlers? Gotchas? Fetal position inducing behavior?

- puzzlers jfrog.com

- Groovypuzzlers

Page 119: The groovy puzzlers (as Presented at Gr8Conf US 2014)
Page 120: The groovy puzzlers (as Presented at Gr8Conf US 2014)

Positive feedback?

Praise us on twittergroovypuzzlers

- aalmiray

- jbaruch

Negative feeback?

/dev/null

Page 121: The groovy puzzlers (as Presented at Gr8Conf US 2014)