groovy puzzlers по русски с joker 2014

165
GROOVY PUZZLERS СТРАННОЕ, НЕПОНЯТНОЕ И МАМОЧКИ-ЧТО-ЭТО-

Upload: baruch-sadogursky

Post on 27-Nov-2014

631 views

Category:

Technology


3 download

DESCRIPTION

Помните легендарные Java Puzzlers? Да-да, те самые, с Джошом Блохом и Нилом Гафтером? Ну, по которым ещё книжку написали? Так вот, в Groovy всё ещё веселее. В смысле — задачки ещё более странные, и ответы ещё более поразительные. Этот доклад для вас, Groovy-разработчики, мы покажем вам настоящие, большие и красивые подводные камни! И для вас, Java-разработчики, потому что таких вещей на Java-подобном синтакисе вы точно никогда не видели! И для вас, PHP-разработчики… хотя, нет, не для вас :) Всем точно будет весело — ваши ведущие Женя и Барух будут зажигать, шутить, спорить, бросаться футболками в публику, и самое главное — заставят вас офигевать от Groovy.

TRANSCRIPT

Page 1: Groovy puzzlers по русски с Joker 2014

GROOVY PUZZLERS

СТРАННОЕ НЕПОНЯТНОЕ И

МАМОЧКИ-ЧТО-ЭТО-ТАКОЕ

CLICK AND HACK

THE TYPING BROTHERS

1 Два клЕвых пацана на сцене

2 Прикольные загадки3 Вы голосуете за

правильный ответ4 Мы швыряемся вещами5 Официальный хэш

groovypuzzlers

ПЕРВОЕ ПРАВИЛО ПАЗЗЛЕРОВ

НЕ ЧИТИТЬ

ВСЁ ВЕРНО ДЛЯ ВЕРСИИ 237

ABSOLUTELY GROOVY

A3BNoSuchMethodErrorC-3DExecution Failure

-3abs()

ЧИНИМ

(-3)abs()

ИЛИ

int value = -3valueabs()

ИДЕЯ НИЧЕГО НЕ ПЕЧАТАЕТ ПОЧЕМУ

A-3B3C3 and

NullPointerExceptionD-3 and

NullPointerException

ДОБАВИМ PRINTLN

println (-3)abs()

УБЕЙТЕ ВСЕ СКОБКИ

КОМПИЛЯТОР РАЗБЕРЕТСЯ

-3Caught javalangNullPointerException Cannot invoke method abs() on null objectjavalangNullPointerException Cannot invoke method abs() on null object

at AbsolutelyGroovyrun(AbsolutelyGroovygroovy7)at comintellijrtexecutionapplicationAppMainmain(AppMainjava134)

println (-3)abs()

ldquoВсе проблемы в программировании можно решить добавив пару скобокrdquo

John McCarthy изобретатель LISP

ПРОСТО ДОБАВЬ СКОБОК

println ((-3)abs())

ИЛИ

int value = -3println valueabs()

PRIME CUTS

PRIME CUTSboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

САМ В ШОКЕ

ПОСМОТРИМ ЕЩЕ РАЗboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

boolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

AtrueBfalse

CNumberFormatException

DMissingMethodException

КАК 4 МОГЛО ОКАЗАТЬСЯ ПРОСТЫМ ЧИСЛОМhellip

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 2: Groovy puzzlers по русски с Joker 2014

CLICK AND HACK

THE TYPING BROTHERS

1 Два клЕвых пацана на сцене

2 Прикольные загадки3 Вы голосуете за

правильный ответ4 Мы швыряемся вещами5 Официальный хэш

groovypuzzlers

ПЕРВОЕ ПРАВИЛО ПАЗЗЛЕРОВ

НЕ ЧИТИТЬ

ВСЁ ВЕРНО ДЛЯ ВЕРСИИ 237

ABSOLUTELY GROOVY

A3BNoSuchMethodErrorC-3DExecution Failure

-3abs()

ЧИНИМ

(-3)abs()

ИЛИ

int value = -3valueabs()

ИДЕЯ НИЧЕГО НЕ ПЕЧАТАЕТ ПОЧЕМУ

A-3B3C3 and

NullPointerExceptionD-3 and

NullPointerException

ДОБАВИМ PRINTLN

println (-3)abs()

УБЕЙТЕ ВСЕ СКОБКИ

КОМПИЛЯТОР РАЗБЕРЕТСЯ

-3Caught javalangNullPointerException Cannot invoke method abs() on null objectjavalangNullPointerException Cannot invoke method abs() on null object

at AbsolutelyGroovyrun(AbsolutelyGroovygroovy7)at comintellijrtexecutionapplicationAppMainmain(AppMainjava134)

println (-3)abs()

ldquoВсе проблемы в программировании можно решить добавив пару скобокrdquo

John McCarthy изобретатель LISP

ПРОСТО ДОБАВЬ СКОБОК

println ((-3)abs())

ИЛИ

int value = -3println valueabs()

PRIME CUTS

PRIME CUTSboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

САМ В ШОКЕ

ПОСМОТРИМ ЕЩЕ РАЗboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

boolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

AtrueBfalse

CNumberFormatException

DMissingMethodException

КАК 4 МОГЛО ОКАЗАТЬСЯ ПРОСТЫМ ЧИСЛОМhellip

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 3: Groovy puzzlers по русски с Joker 2014

1 Два клЕвых пацана на сцене

2 Прикольные загадки3 Вы голосуете за

правильный ответ4 Мы швыряемся вещами5 Официальный хэш

groovypuzzlers

ПЕРВОЕ ПРАВИЛО ПАЗЗЛЕРОВ

НЕ ЧИТИТЬ

ВСЁ ВЕРНО ДЛЯ ВЕРСИИ 237

ABSOLUTELY GROOVY

A3BNoSuchMethodErrorC-3DExecution Failure

-3abs()

ЧИНИМ

(-3)abs()

ИЛИ

int value = -3valueabs()

ИДЕЯ НИЧЕГО НЕ ПЕЧАТАЕТ ПОЧЕМУ

A-3B3C3 and

NullPointerExceptionD-3 and

NullPointerException

ДОБАВИМ PRINTLN

println (-3)abs()

УБЕЙТЕ ВСЕ СКОБКИ

КОМПИЛЯТОР РАЗБЕРЕТСЯ

-3Caught javalangNullPointerException Cannot invoke method abs() on null objectjavalangNullPointerException Cannot invoke method abs() on null object

at AbsolutelyGroovyrun(AbsolutelyGroovygroovy7)at comintellijrtexecutionapplicationAppMainmain(AppMainjava134)

println (-3)abs()

ldquoВсе проблемы в программировании можно решить добавив пару скобокrdquo

John McCarthy изобретатель LISP

ПРОСТО ДОБАВЬ СКОБОК

println ((-3)abs())

ИЛИ

int value = -3println valueabs()

PRIME CUTS

PRIME CUTSboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

САМ В ШОКЕ

ПОСМОТРИМ ЕЩЕ РАЗboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

boolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

AtrueBfalse

CNumberFormatException

DMissingMethodException

КАК 4 МОГЛО ОКАЗАТЬСЯ ПРОСТЫМ ЧИСЛОМhellip

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 4: Groovy puzzlers по русски с Joker 2014

ПЕРВОЕ ПРАВИЛО ПАЗЗЛЕРОВ

НЕ ЧИТИТЬ

ВСЁ ВЕРНО ДЛЯ ВЕРСИИ 237

ABSOLUTELY GROOVY

A3BNoSuchMethodErrorC-3DExecution Failure

-3abs()

ЧИНИМ

(-3)abs()

ИЛИ

int value = -3valueabs()

ИДЕЯ НИЧЕГО НЕ ПЕЧАТАЕТ ПОЧЕМУ

A-3B3C3 and

NullPointerExceptionD-3 and

NullPointerException

ДОБАВИМ PRINTLN

println (-3)abs()

УБЕЙТЕ ВСЕ СКОБКИ

КОМПИЛЯТОР РАЗБЕРЕТСЯ

-3Caught javalangNullPointerException Cannot invoke method abs() on null objectjavalangNullPointerException Cannot invoke method abs() on null object

at AbsolutelyGroovyrun(AbsolutelyGroovygroovy7)at comintellijrtexecutionapplicationAppMainmain(AppMainjava134)

println (-3)abs()

ldquoВсе проблемы в программировании можно решить добавив пару скобокrdquo

John McCarthy изобретатель LISP

ПРОСТО ДОБАВЬ СКОБОК

println ((-3)abs())

ИЛИ

int value = -3println valueabs()

PRIME CUTS

PRIME CUTSboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

САМ В ШОКЕ

ПОСМОТРИМ ЕЩЕ РАЗboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

boolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

AtrueBfalse

CNumberFormatException

DMissingMethodException

КАК 4 МОГЛО ОКАЗАТЬСЯ ПРОСТЫМ ЧИСЛОМhellip

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 5: Groovy puzzlers по русски с Joker 2014

ВСЁ ВЕРНО ДЛЯ ВЕРСИИ 237

ABSOLUTELY GROOVY

A3BNoSuchMethodErrorC-3DExecution Failure

-3abs()

ЧИНИМ

(-3)abs()

ИЛИ

int value = -3valueabs()

ИДЕЯ НИЧЕГО НЕ ПЕЧАТАЕТ ПОЧЕМУ

A-3B3C3 and

NullPointerExceptionD-3 and

NullPointerException

ДОБАВИМ PRINTLN

println (-3)abs()

УБЕЙТЕ ВСЕ СКОБКИ

КОМПИЛЯТОР РАЗБЕРЕТСЯ

-3Caught javalangNullPointerException Cannot invoke method abs() on null objectjavalangNullPointerException Cannot invoke method abs() on null object

at AbsolutelyGroovyrun(AbsolutelyGroovygroovy7)at comintellijrtexecutionapplicationAppMainmain(AppMainjava134)

println (-3)abs()

ldquoВсе проблемы в программировании можно решить добавив пару скобокrdquo

John McCarthy изобретатель LISP

ПРОСТО ДОБАВЬ СКОБОК

println ((-3)abs())

ИЛИ

int value = -3println valueabs()

PRIME CUTS

PRIME CUTSboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

САМ В ШОКЕ

ПОСМОТРИМ ЕЩЕ РАЗboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

boolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

AtrueBfalse

CNumberFormatException

DMissingMethodException

КАК 4 МОГЛО ОКАЗАТЬСЯ ПРОСТЫМ ЧИСЛОМhellip

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 6: Groovy puzzlers по русски с Joker 2014

ABSOLUTELY GROOVY

A3BNoSuchMethodErrorC-3DExecution Failure

-3abs()

ЧИНИМ

(-3)abs()

ИЛИ

int value = -3valueabs()

ИДЕЯ НИЧЕГО НЕ ПЕЧАТАЕТ ПОЧЕМУ

A-3B3C3 and

NullPointerExceptionD-3 and

NullPointerException

ДОБАВИМ PRINTLN

println (-3)abs()

УБЕЙТЕ ВСЕ СКОБКИ

КОМПИЛЯТОР РАЗБЕРЕТСЯ

-3Caught javalangNullPointerException Cannot invoke method abs() on null objectjavalangNullPointerException Cannot invoke method abs() on null object

at AbsolutelyGroovyrun(AbsolutelyGroovygroovy7)at comintellijrtexecutionapplicationAppMainmain(AppMainjava134)

println (-3)abs()

ldquoВсе проблемы в программировании можно решить добавив пару скобокrdquo

John McCarthy изобретатель LISP

ПРОСТО ДОБАВЬ СКОБОК

println ((-3)abs())

ИЛИ

int value = -3println valueabs()

PRIME CUTS

PRIME CUTSboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

САМ В ШОКЕ

ПОСМОТРИМ ЕЩЕ РАЗboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

boolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

AtrueBfalse

CNumberFormatException

DMissingMethodException

КАК 4 МОГЛО ОКАЗАТЬСЯ ПРОСТЫМ ЧИСЛОМhellip

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 7: Groovy puzzlers по русски с Joker 2014

A3BNoSuchMethodErrorC-3DExecution Failure

-3abs()

ЧИНИМ

(-3)abs()

ИЛИ

int value = -3valueabs()

ИДЕЯ НИЧЕГО НЕ ПЕЧАТАЕТ ПОЧЕМУ

A-3B3C3 and

NullPointerExceptionD-3 and

NullPointerException

ДОБАВИМ PRINTLN

println (-3)abs()

УБЕЙТЕ ВСЕ СКОБКИ

КОМПИЛЯТОР РАЗБЕРЕТСЯ

-3Caught javalangNullPointerException Cannot invoke method abs() on null objectjavalangNullPointerException Cannot invoke method abs() on null object

at AbsolutelyGroovyrun(AbsolutelyGroovygroovy7)at comintellijrtexecutionapplicationAppMainmain(AppMainjava134)

println (-3)abs()

ldquoВсе проблемы в программировании можно решить добавив пару скобокrdquo

John McCarthy изобретатель LISP

ПРОСТО ДОБАВЬ СКОБОК

println ((-3)abs())

ИЛИ

int value = -3println valueabs()

PRIME CUTS

PRIME CUTSboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

САМ В ШОКЕ

ПОСМОТРИМ ЕЩЕ РАЗboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

boolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

AtrueBfalse

CNumberFormatException

DMissingMethodException

КАК 4 МОГЛО ОКАЗАТЬСЯ ПРОСТЫМ ЧИСЛОМhellip

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 8: Groovy puzzlers по русски с Joker 2014

ЧИНИМ

(-3)abs()

ИЛИ

int value = -3valueabs()

ИДЕЯ НИЧЕГО НЕ ПЕЧАТАЕТ ПОЧЕМУ

A-3B3C3 and

NullPointerExceptionD-3 and

NullPointerException

ДОБАВИМ PRINTLN

println (-3)abs()

УБЕЙТЕ ВСЕ СКОБКИ

КОМПИЛЯТОР РАЗБЕРЕТСЯ

-3Caught javalangNullPointerException Cannot invoke method abs() on null objectjavalangNullPointerException Cannot invoke method abs() on null object

at AbsolutelyGroovyrun(AbsolutelyGroovygroovy7)at comintellijrtexecutionapplicationAppMainmain(AppMainjava134)

println (-3)abs()

ldquoВсе проблемы в программировании можно решить добавив пару скобокrdquo

John McCarthy изобретатель LISP

ПРОСТО ДОБАВЬ СКОБОК

println ((-3)abs())

ИЛИ

int value = -3println valueabs()

PRIME CUTS

PRIME CUTSboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

САМ В ШОКЕ

ПОСМОТРИМ ЕЩЕ РАЗboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

boolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

AtrueBfalse

CNumberFormatException

DMissingMethodException

КАК 4 МОГЛО ОКАЗАТЬСЯ ПРОСТЫМ ЧИСЛОМhellip

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 9: Groovy puzzlers по русски с Joker 2014

ИДЕЯ НИЧЕГО НЕ ПЕЧАТАЕТ ПОЧЕМУ

A-3B3C3 and

NullPointerExceptionD-3 and

NullPointerException

ДОБАВИМ PRINTLN

println (-3)abs()

УБЕЙТЕ ВСЕ СКОБКИ

КОМПИЛЯТОР РАЗБЕРЕТСЯ

-3Caught javalangNullPointerException Cannot invoke method abs() on null objectjavalangNullPointerException Cannot invoke method abs() on null object

at AbsolutelyGroovyrun(AbsolutelyGroovygroovy7)at comintellijrtexecutionapplicationAppMainmain(AppMainjava134)

println (-3)abs()

ldquoВсе проблемы в программировании можно решить добавив пару скобокrdquo

John McCarthy изобретатель LISP

ПРОСТО ДОБАВЬ СКОБОК

println ((-3)abs())

ИЛИ

int value = -3println valueabs()

PRIME CUTS

PRIME CUTSboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

САМ В ШОКЕ

ПОСМОТРИМ ЕЩЕ РАЗboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

boolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

AtrueBfalse

CNumberFormatException

DMissingMethodException

КАК 4 МОГЛО ОКАЗАТЬСЯ ПРОСТЫМ ЧИСЛОМhellip

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 10: Groovy puzzlers по русски с Joker 2014

A-3B3C3 and

NullPointerExceptionD-3 and

NullPointerException

ДОБАВИМ PRINTLN

println (-3)abs()

УБЕЙТЕ ВСЕ СКОБКИ

КОМПИЛЯТОР РАЗБЕРЕТСЯ

-3Caught javalangNullPointerException Cannot invoke method abs() on null objectjavalangNullPointerException Cannot invoke method abs() on null object

at AbsolutelyGroovyrun(AbsolutelyGroovygroovy7)at comintellijrtexecutionapplicationAppMainmain(AppMainjava134)

println (-3)abs()

ldquoВсе проблемы в программировании можно решить добавив пару скобокrdquo

John McCarthy изобретатель LISP

ПРОСТО ДОБАВЬ СКОБОК

println ((-3)abs())

ИЛИ

int value = -3println valueabs()

PRIME CUTS

PRIME CUTSboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

САМ В ШОКЕ

ПОСМОТРИМ ЕЩЕ РАЗboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

boolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

AtrueBfalse

CNumberFormatException

DMissingMethodException

КАК 4 МОГЛО ОКАЗАТЬСЯ ПРОСТЫМ ЧИСЛОМhellip

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 11: Groovy puzzlers по русски с Joker 2014

УБЕЙТЕ ВСЕ СКОБКИ

КОМПИЛЯТОР РАЗБЕРЕТСЯ

-3Caught javalangNullPointerException Cannot invoke method abs() on null objectjavalangNullPointerException Cannot invoke method abs() on null object

at AbsolutelyGroovyrun(AbsolutelyGroovygroovy7)at comintellijrtexecutionapplicationAppMainmain(AppMainjava134)

println (-3)abs()

ldquoВсе проблемы в программировании можно решить добавив пару скобокrdquo

John McCarthy изобретатель LISP

ПРОСТО ДОБАВЬ СКОБОК

println ((-3)abs())

ИЛИ

int value = -3println valueabs()

PRIME CUTS

PRIME CUTSboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

САМ В ШОКЕ

ПОСМОТРИМ ЕЩЕ РАЗboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

boolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

AtrueBfalse

CNumberFormatException

DMissingMethodException

КАК 4 МОГЛО ОКАЗАТЬСЯ ПРОСТЫМ ЧИСЛОМhellip

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 12: Groovy puzzlers по русски с Joker 2014

-3Caught javalangNullPointerException Cannot invoke method abs() on null objectjavalangNullPointerException Cannot invoke method abs() on null object

at AbsolutelyGroovyrun(AbsolutelyGroovygroovy7)at comintellijrtexecutionapplicationAppMainmain(AppMainjava134)

println (-3)abs()

ldquoВсе проблемы в программировании можно решить добавив пару скобокrdquo

John McCarthy изобретатель LISP

ПРОСТО ДОБАВЬ СКОБОК

println ((-3)abs())

ИЛИ

int value = -3println valueabs()

PRIME CUTS

PRIME CUTSboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

САМ В ШОКЕ

ПОСМОТРИМ ЕЩЕ РАЗboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

boolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

AtrueBfalse

CNumberFormatException

DMissingMethodException

КАК 4 МОГЛО ОКАЗАТЬСЯ ПРОСТЫМ ЧИСЛОМhellip

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 13: Groovy puzzlers по русски с Joker 2014

ldquoВсе проблемы в программировании можно решить добавив пару скобокrdquo

John McCarthy изобретатель LISP

ПРОСТО ДОБАВЬ СКОБОК

println ((-3)abs())

ИЛИ

int value = -3println valueabs()

PRIME CUTS

PRIME CUTSboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

САМ В ШОКЕ

ПОСМОТРИМ ЕЩЕ РАЗboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

boolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

AtrueBfalse

CNumberFormatException

DMissingMethodException

КАК 4 МОГЛО ОКАЗАТЬСЯ ПРОСТЫМ ЧИСЛОМhellip

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 14: Groovy puzzlers по русски с Joker 2014

ПРОСТО ДОБАВЬ СКОБОК

println ((-3)abs())

ИЛИ

int value = -3println valueabs()

PRIME CUTS

PRIME CUTSboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

САМ В ШОКЕ

ПОСМОТРИМ ЕЩЕ РАЗboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

boolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

AtrueBfalse

CNumberFormatException

DMissingMethodException

КАК 4 МОГЛО ОКАЗАТЬСЯ ПРОСТЫМ ЧИСЛОМhellip

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 15: Groovy puzzlers по русски с Joker 2014

PRIME CUTS

PRIME CUTSboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

САМ В ШОКЕ

ПОСМОТРИМ ЕЩЕ РАЗboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

boolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

AtrueBfalse

CNumberFormatException

DMissingMethodException

КАК 4 МОГЛО ОКАЗАТЬСЯ ПРОСТЫМ ЧИСЛОМhellip

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 16: Groovy puzzlers по русски с Joker 2014

PRIME CUTSboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

САМ В ШОКЕ

ПОСМОТРИМ ЕЩЕ РАЗboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

boolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

AtrueBfalse

CNumberFormatException

DMissingMethodException

КАК 4 МОГЛО ОКАЗАТЬСЯ ПРОСТЫМ ЧИСЛОМhellip

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 17: Groovy puzzlers по русски с Joker 2014

САМ В ШОКЕ

ПОСМОТРИМ ЕЩЕ РАЗboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

boolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

AtrueBfalse

CNumberFormatException

DMissingMethodException

КАК 4 МОГЛО ОКАЗАТЬСЯ ПРОСТЫМ ЧИСЛОМhellip

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 18: Groovy puzzlers по русски с Joker 2014

ПОСМОТРИМ ЕЩЕ РАЗboolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

boolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

AtrueBfalse

CNumberFormatException

DMissingMethodException

КАК 4 МОГЛО ОКАЗАТЬСЯ ПРОСТЫМ ЧИСЛОМhellip

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 19: Groovy puzzlers по русски с Joker 2014

boolean isPrime(def x) if (x == 2) return true int limit = Mathsqrt(x) + 1 (2limit)each if (x it == 0) return false true

println isPrime(4 as Double)

AtrueBfalse

CNumberFormatException

DMissingMethodException

КАК 4 МОГЛО ОКАЗАТЬСЯ ПРОСТЫМ ЧИСЛОМhellip

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 20: Groovy puzzlers по русски с Joker 2014

КАК 4 МОГЛО ОКАЗАТЬСЯ ПРОСТЫМ ЧИСЛОМhellip

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 21: Groovy puzzlers по русски с Joker 2014

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 22: Groovy puzzlers по русски с Joker 2014

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 23: Groovy puzzlers по русски с Joker 2014

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 24: Groovy puzzlers по русски с Joker 2014

ДАВАЙТЕ РАЗБИРАТЬСЯ

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 25: Groovy puzzlers по русски с Joker 2014

ДАВАЙТЕ РАЗБИРАТЬСЯ

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 26: Groovy puzzlers по русски с Joker 2014

РЕШЕНИЕ ИСПОЛЬЗУЙ ANY() ИЛИ ПЕРЕОСМЫСЛИ АЛГОРИТМ

httpkousenitwordpresscom20140418responses-to-the-closure-of-no-return

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 27: Groovy puzzlers по русски с Joker 2014

class Conference def name def year

def gr = new Conference(name Greach year 2014)

greach println it

A class=class Conferencename=Greachyear=2014

B ConferenceXXXXXX

C Startup failure

D Greach 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 28: Groovy puzzlers по русски с Joker 2014

КАКОЙ ЖЕ ЭТО ITERABLE

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 29: Groovy puzzlers по русски с Joker 2014

RTFS (READ THE FING SOURCE)

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 30: Groovy puzzlers по русски с Joker 2014

MAX POWER

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 31: Groovy puzzlers по русски с Joker 2014

MAX POWERListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 32: Groovy puzzlers по русски с Joker 2014

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

A ClassCastExceptionB 9C 56Dnull

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 33: Groovy puzzlers по русски с Joker 2014

РАСКУСИЛ

gtgroovysh ((9 as Character) as Integer)===gt 57

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 34: Groovy puzzlers по русски с Joker 2014

ListltIntegergt list = [56 57 74]def max = listmax item -gt (item lt 50) item nullprintln max

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 35: Groovy puzzlers по русски с Joker 2014

СЕКУНДОЧКУ ТЕПЕРЬ ОНИ ВСЕ NULL

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 36: Groovy puzzlers по русски с Joker 2014

A ClassCastExceptionB 9C 56Dnull

ListltIntegergt list = [56 9 74]def max = listmax item -gt (item lt 50) item nullprintln max

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 37: Groovy puzzlers по русски с Joker 2014

КАК ЭТО ПОЛУЧИЛОСЬ

def random = new Random()

def randomList = []010each randomList ltlt randomnextInt()

assert randomListmax null == randomList[0]

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 38: Groovy puzzlers по русски с Joker 2014

ПЛОХОЕ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ НИГДЕ НЕ ОПИСАНО

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 39: Groovy puzzlers по русски с Joker 2014

ДЕТЕКТИВ

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 40: Groovy puzzlers по русски с Joker 2014

КТО УБИЙЦА

A NullPointerException

B ктоУбийцаI_closure1xxxxxxx

C Startup errorD Мориарти

Closure ктоУбийца() Мориарти println ктоУбийца()

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 41: Groovy puzzlers по русски с Joker 2014

ПИЧАЛЬКА

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 42: Groovy puzzlers по русски с Joker 2014

ПУСТЯКИ ДЕЛО ТО ЖИТЕЙСКОЕ

Closure ктоУбийца() -gt Мориарти

Closure ктоУбийца() return Мориарти

>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 43: Groovy puzzlers по русски с Joker 2014
>

The Final Countdown - fragment

Europe

Top Disco Hits vol 1 track 17

9743676

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 44: Groovy puzzlers по русски с Joker 2014

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 45: Groovy puzzlers по русски с Joker 2014

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9D10

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 46: Groovy puzzlers по русски с Joker 2014

КАК ТАК ТО НУ КАК ТАК ТО

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 47: Groovy puzzlers по русски с Joker 2014

class CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) ignoredprintStackTrace() countDowncounter = IntegerMIN_VALUE finally return countDown

println finalCountDown()counter

orgcodehausgroovyruntimetypehandlingGroovyCastException Cannot cast object 9 with class javalangInteger to class CountDownrsquo-2147483648

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 48: Groovy puzzlers по русски с Joker 2014

ЛУЧШЕ НЕ СТАЛОhellip

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 49: Groovy puzzlers по русски с Joker 2014

ЧТО ПРОИЗОШЛО

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 50: Groovy puzzlers по русски с Joker 2014

ИСПОЛЬЗУЙ ОТВЕТclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 51: Groovy puzzlers по русски с Joker 2014

ПОЧИНИЛИclass CountDown int counter = 10

CountDown finalCountDown() def countDown = new CountDown() try countDowncounter = --countDowncounter catch (ignored) println That will never happen countDowncounter = IntegerMIN_VALUE finally return countDown 42

println finalCountDown()counter

AStartup failureBThat will never happen

-2147483648C9

D42

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 52: Groovy puzzlers по русски с Joker 2014

ЭТО ВООБЩЕ КАК

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 53: Groovy puzzlers по русски с Joker 2014

PUBLIC - PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 54: Groovy puzzlers по русски с Joker 2014

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

ПОПРОБУЙ ПОЛУЧИТЬ PUBLIC PROPERTY

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 55: Groovy puzzlers по русски с Joker 2014

trait Public public String property = I am all public

class Property implements Public

Property publicProperty = new Property()

A publicPropertyproperty

B publicPropertyPublic__property

C publicPropertygetProperty()

D publicPropertyproperty

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 56: Groovy puzzlers по русски с Joker 2014

У МЕНЯ ДВА ВОПРОСА

1Что за дебильное имя

2 Откуда я мог это знать

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 57: Groovy puzzlers по русски с Joker 2014

ОТВЕТ НА 1 IN SOVIET RUSSIA

YOU DONrsquoT ACCESS PUBLIC

PROPERTY

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 58: Groovy puzzlers по русски с Joker 2014

ОТВЕТ НА 2

httpbetagroovy-langorgdocsgroovy-230htmldocumentationcore-traitshtml

А ты документацию читать не пробовал

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 59: Groovy puzzlers по русски с Joker 2014

ГДЕ КАРТА БИЛЛИ

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 60: Groovy puzzlers по русски с Joker 2014

ГДЕ КАРТА БИЛЛИ

def key = xdef map = [key treasure]def value = mapget(key)println value

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 61: Groovy puzzlers по русски с Joker 2014

def key = xdef map = [key treasure]def value = mapget(key)println value

ANoSuchElementExceptionBnullCtreasureDСиний экран смерти 1000

чертей

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 62: Groovy puzzlers по русски с Joker 2014

КАК ЭТО NULL

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 63: Groovy puzzlers по русски с Joker 2014

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 64: Groovy puzzlers по русски с Joker 2014

ЧИНИМ

1def map = [(key) treasure]2mapput(key treasure)3map[key] = treasure4map$key = treasure

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 65: Groovy puzzlers по русски с Joker 2014

ЕЩЕ КАРТЫ БИЛЛИ

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 66: Groovy puzzlers по русски с Joker 2014

ЕЩЕ КАРТЫ БИЛЛИdef map = [2 treasure]def key = 2def value = map$keyprintln value

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 67: Groovy puzzlers по русски с Joker 2014

def map = [2 treasure]def key = 2def value = map$keyprintln value

ANoSuchElementExceptionBnullCtreasureDKernel Panic киту в глотку

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 68: Groovy puzzlers по русски с Joker 2014

А СЕЙЧАС ТО-ЧТО

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 69: Groovy puzzlers по русски с Joker 2014

ПО УМОЛЧАНИЮ КЛЮЧ ЭТО СТРИНГ ПОЛЮБОМУ ЕСЛИ НЕ ЦИФРЫ

def map = [2 treasure]println mapkeySet()first()classname

javalangInteger

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 70: Groovy puzzlers по русски с Joker 2014

НАМ НУЖНА КАРТА

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 71: Groovy puzzlers по русски с Joker 2014

НАМ НУЖНА КАРТА

def key = xdef map = [$key treasure]def value = map[x]println value

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 72: Groovy puzzlers по русски с Joker 2014

ANoSuchElementExceptionBnullCtreasureDПолундра Startup error

def key = xdef map = [$key treasure]def value = map[x]println value

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 73: Groovy puzzlers по русски с Joker 2014

ЧТО ОПЯТЬ

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 74: Groovy puzzlers по русски с Joker 2014

STRING ЭТО НЕ GSTRING А ТИП ВАЖЕН

def map = [$key treasure]println mapkeySet()first()classname

orgcodehausgroovyruntimeGStringImpl

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 75: Groovy puzzlers по русски с Joker 2014

OUT OF RANGE

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 76: Groovy puzzlers по русски с Joker 2014

AAssertion FailedBfalseCtrueDNullPointerException

OUT OF RANGEdef range = 10100assert rangecontains(50)println rangecontains(56)

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 77: Groovy puzzlers по русски с Joker 2014

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 1

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 78: Groovy puzzlers по русски с Joker 2014

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 79: Groovy puzzlers по русски с Joker 2014

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 2

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 80: Groovy puzzlers по русски с Joker 2014

ПУТЬ К ОСМЫСЛЕНИЮ ШАГ 3

Iterator iterator = (10100)iterator()while (iteratorhasNext()) print $iteratornext()

10 20 30 40 50 60 70 80 90 100

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 81: Groovy puzzlers по русски с Joker 2014

РЕШЕНИЕ ПРОСТОЕ НО СТРАННОЕ

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 82: Groovy puzzlers по русски с Joker 2014

GROOVY ТЫ УТВЕРЖДАЕШЬ ЧТО ДИАПАЗОН 10100 НЕ СОДЕРЖИТ 56

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 83: Groovy puzzlers по русски с Joker 2014

ЧТО БЫ СДЕЛАЛИ МЫbullНас не интересует какой класс представляет 10100

bullНазовите его ldquoRealRangerdquo или ldquoContinuousRangerdquo или как угодно

bullИ пусть делегирует в containsWithinBounds

bullПочините наконец GROOVY-2771

bullThank you

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 84: Groovy puzzlers по русски с Joker 2014

POWER RANGE(RS)

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 85: Groovy puzzlers по русски с Joker 2014

УБИРАЕМ ЕДИНИЧКУ

A -1012345678

C[0 2 3 4 5 6 7 8 9]

D[-1 0 1 2 3 4 5 6 7 8]

[09]each println(it - 1)

B0123456789

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 86: Groovy puzzlers по русски с Joker 2014

[09]each println(it - 1)

Это неправильные скобки

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 87: Groovy puzzlers по русски с Joker 2014

(09)each println(it - 1)

Другое дело

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 88: Groovy puzzlers по русски с Joker 2014

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 89: Groovy puzzlers по русски с Joker 2014

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 90: Groovy puzzlers по русски с Joker 2014

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 91: Groovy puzzlers по русски с Joker 2014

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 92: Groovy puzzlers по русски с Joker 2014

ОБМАНУЛИ ДУРАКА

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 93: Groovy puzzlers по русски с Joker 2014

ОБМАНУЛИ ДУРАКА

[0 2 3 4 5 6 7 8 9]

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 94: Groovy puzzlers по русски с Joker 2014

SAVE THE DATE

JOKERCONF IS COMING

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 95: Groovy puzzlers по русски с Joker 2014

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

JAVA2 КТО ПОМНИТ

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 96: Groovy puzzlers по русски с Joker 2014

ListltLonggt list = [123]def now = new Date()list ltlt nowprintln list

AStartup FailureB[1 2 3 WED Oct 17

161511 CDT 2014]C[1 2 3 1410388511456]DClassCastException

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 97: Groovy puzzlers по русски с Joker 2014

А Я ЗНАЮ ЧТО СЛУЧИЛОСЬ

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 98: Groovy puzzlers по русски с Joker 2014

ERASURE

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 99: Groovy puzzlers по русски с Joker 2014

ERASURE

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 100: Groovy puzzlers по русски с Joker 2014

А ГДЕ МОИ ПРОВЕРКИ

ВО ВРЕМЯ КОМПИЛЯЦИИ

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 101: Groovy puzzlers по русски с Joker 2014

laquoВ GROOVY МОЖНО ЗАСУНУТЬ ЧТО УГОДНО КУДА УГОДНОraquo

ListltLonggt list = [123]def now = new Date()list ltlt nowlist ltlt fooprintln listclassname

[javalangLong javalangLong javalangLong javautilDate javalangString]

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 102: Groovy puzzlers по русски с Joker 2014

COMPILESTATIC

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 103: Groovy puzzlers по русски с Joker 2014

π ndash ТОРТ И ЧИСЛО

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 104: Groovy puzzlers по русски с Joker 2014

DOUBLE THE PI

double value = 3println $value14isDouble()

A trueB MissingPropertyExceptionC falseDMissingMethodException

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 105: Groovy puzzlers по русски с Joker 2014

ПРОСЁК

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 106: Groovy puzzlers по русски с Joker 2014

ПРОСЁК

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 107: Groovy puzzlers по русски с Joker 2014

ПРОСЁК

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 108: Groovy puzzlers по русски с Joker 2014

A trueB MissingPropertyExceptionC falseDMissingMethodException

DOUBLE THE PI

double value = 3println $value14isDouble()

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 109: Groovy puzzlers по русски с Joker 2014

ЕСЛИ НЕ МОЖЕТ БЫТЬ ПРОПЕРТИ ЗАЧЕМ ПАРИТЬСЯ

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 110: Groovy puzzlers по русски с Joker 2014

ПОСМОТРИ НА TOSTRING() В КЛАССЕ DOUBLE

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 111: Groovy puzzlers по русски с Joker 2014

ЗНАЕШЬ ЧТО ОЗНАЧАЕТ СОКРАЩЕНИЕ RSVP

СПРОСИ ФРАНЦУЗОВ

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 112: Groovy puzzlers по русски с Joker 2014

RSVP

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 113: Groovy puzzlers по русски с Joker 2014

class Invite int attending = 1

def invite = new Invite()def attendees = (inviteattending) +1println attendees

A Startup FailureB 1C 2D MissingPropertyException

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 114: Groovy puzzlers по русски с Joker 2014

А ВОТ ПОЧЕМУ

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 115: Groovy puzzlers по русски с Joker 2014

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

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

НАПРИМЕР

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 116: Groovy puzzlers по русски с Joker 2014

ПОЧИНИТЬ ЧТО УГОДНО ЧТО НЕ ПОХОЖЕ НА КАСТИНГ

def invite = new Invite()def attendees = inviteattending +1

НУ ИЛИ УБРАТЬ СКОБКИ

Как убрать скобки

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 117: Groovy puzzlers по русски с Joker 2014

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 118: Groovy puzzlers по русски с Joker 2014

class MrHyde def me() return this

class DrJekyll

DrJekyllmixin MrHyde

def drJekyll = new DrJekyll()me() as DrJekyll

def mrHide = new DrJekyll()me()println $drJekyll and $mrHide are they the same $(drJekyllclass)equals(mrHideclass)

A DrJekyllxxxxxx and MrHydeyyyyyyy are they the same true

B DrJekyllxxxxxx and MrHydeyyyyyyy are they the same false

C DrJekyllxxxxxx and DrJekyllxxxxxx are they the same true

D MrHydeyyyyyyyand MrHydeyyyyyyy are they the same false

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 119: Groovy puzzlers по русски с Joker 2014

ВСТРАИВАЕМ ОДИН КЛАСС В ДРУГОЙ

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 120: Groovy puzzlers по русски с Joker 2014

В КОДЕ MIXINMETACLASS

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 121: Groovy puzzlers по русски с Joker 2014

WHY SO PRIMITIVE

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 122: Groovy puzzlers по русски с Joker 2014

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 123: Groovy puzzlers по русски с Joker 2014

WHY SO PRIMITIVEdef x = intprintln x

if ((x = long)) println x

if (x = boolean ) println x

A Startup ErrorB int long

booleanC javalangInte

ger javalangLong javalangBoolean

Dint

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 124: Groovy puzzlers по русски с Joker 2014

НУ ЭТО ЯСНО А ПОЧЕМУ

порядокточно непорядок

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 125: Groovy puzzlers по русски с Joker 2014

А ЭТО

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 126: Groovy puzzlers по русски с Joker 2014

(GROOVY) TRUTH МОЖЕТ РАНИТЬ ТАК ЧТО ПРОСТО ДОБАВЬ СКОБОК

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 127: Groovy puzzlers по русски с Joker 2014

JUMP AKA ПРОПАВШИЕ СЛОВА

>

14863602

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 128: Groovy puzzlers по русски с Joker 2014

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 129: Groovy puzzlers по русски с Joker 2014

JUMP AKA ПРОПАВШИЕ СЛОВАclass VanHalen

public static jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println VanHalenjump()

A Here are the lyrics

B Here are the null

C Startup failureD MissingMethodExcep

tion

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 130: Groovy puzzlers по русски с Joker 2014

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 131: Groovy puzzlers по русски с Joker 2014

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 132: Groovy puzzlers по русски с Joker 2014

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 133: Groovy puzzlers по русски с Joker 2014

I CANT BELIEVE YOU FELL FOR THE OLDEST TRICK IN THE BOOK

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 134: Groovy puzzlers по русски с Joker 2014

РЕШЕНИЕ СТАТИЧЕСКИЙ METHODMISSINGclass VanHalen

public static jump() Here are the $lyrics()

static $static_methodMissing(String name def args) lyrics

println VanHalenjump()

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 135: Groovy puzzlers по русски с Joker 2014

ЕЩЁ ЛУЧШЕ ndash ИСПОЛЬЗУЙ ООП

class VanHalen

public jump() Here are the $lyrics()

def methodMissing(String name def args) lyrics

println new VanHalen()jump()

>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 136: Groovy puzzlers по русски с Joker 2014
>

null

10161629

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 137: Groovy puzzlers по русски с Joker 2014

WHATrsquoS THE METACLASS БАРУХ

def map = [metaClass lsquofrequency]println Whats the $mapmetaClass Барух

AMissingMethodExceptionBWhats the

orgcodehausgroovyruntimeHandleMetaClassYYYYYYY [groovylangMetaClassImplYYYYYYY[class javautilLinkedHashMap]] Барух

CWhatrsquos the javautilLinkedHashMapXXXXXX Барух

DWhatrsquos the frequency Барух

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 138: Groovy puzzlers по русски с Joker 2014

СРАБОТАЛО НО

НЕ ФАКТ ЧТО ЭТО ХОРОШО

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 139: Groovy puzzlers по русски с Joker 2014

ПОМНИШЬ ДЖЕЙМС ГОСЛИНГ ПРЕДУПРЕЖДАЛ

ЧТО OPERATOR OVERLOADING ЭТО ПЛОХО

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 140: Groovy puzzlers по русски с Joker 2014

ПЕРЕБОР OPERATOR OVERLOADING

Если переопределён для он не может быть переопредён и для

mapmetaClass

mapget(metaClass)

mapgetMetaClass()

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 141: Groovy puzzlers по русски с Joker 2014

ВЫВОДЫ

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 142: Groovy puzzlers по русски с Joker 2014

1 Пишите читабельный код2 Комментируйте все трюки3 Иногда это баг4 Пользуйте static code analysis

- intellij IDEA5 Rtfm6 Donrsquot code like my brother

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 143: Groovy puzzlers по русски с Joker 2014

Мы только начали (надо еще форму придумать)

Засылайте Ваши паззлеры поделки и рисунки

- puzzlers jfrogcom- Groovypuzzlers

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 144: Groovy puzzlers по русски с Joker 2014

ПАЗЗЛЕРЫ ВСЕГДА ПЛАТЯТ СВОИ ДОЛГИ

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 145: Groovy puzzlers по русски с Joker 2014

Вам понравилосьХвалите нас в твиттере groovypuzzlers- Groovypuzzlers - jekaborisov- jbaruch

Вам не поравилосьdevnull

  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165
Page 146: Groovy puzzlers по русски с Joker 2014
  • Groovy puzzlers
  • Slide 2
  • Slide 3
  • Slide 4
  • Всё верно для версии 237
  • Slide 6
  • Absolutely Groovy
  • Slide 8
  • Slide 9
  • чиним
  • Идея ничего не печатает Почему
  • Добавим Println
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Просто добавь скобок
  • Prime cuts
  • Prime cuts (2)
  • Сам в шоке
  • Посмотрим еще раз
  • Slide 22
  • Как 4 могло оказаться простым числомhellip
  • Давайте разбираться
  • Давайте разбираться (2)
  • Давайте разбираться (3)
  • Давайте разбираться (4)
  • Давайте разбираться (5)
  • Решение используй Any() или переосмысли алгоритм
  • Slide 30
  • Slide 31
  • Какой же это iTERABLE
  • RTFS (Read the Fing source)
  • Max power
  • Max power (2)
  • Slide 36
  • Раскусил
  • Slide 38
  • секундочку теперь они все null
  • Slide 40
  • Slide 41
  • Как это получилось
  • Плохое значение по умолчанию нигде не описано
  • Детектив
  • Кто убийца
  • Пичалька
  • Пустяки дело то житейское
  • Slide 48
  • Slide 49
  • Slide 50
  • Как так то Ну как так то
  • Slide 52
  • Лучше не сталоhellip
  • Что произошло
  • Используй ответ
  • Починили
  • Это вообще как
  • Slide 59
  • Slide 60
  • Попробуй получить public property
  • Slide 62
  • У меня два вопроса
  • Ответ на 1
  • Ответ на 2
  • Где карта билли
  • Где карта билли (2)
  • Slide 68
  • Как это null
  • По умолчанию ключ это стринг полюбому
  • чиним (2)
  • Еще карты билли
  • Еще карты билли (2)
  • Slide 74
  • А сейчас то-что
  • По умолчанию ключ это стринг полюбому если не цифры
  • Нам нужна карта
  • Нам нужна карта (2)
  • Slide 79
  • Что опять
  • String Это не gstring а тип важен
  • Out of range
  • Out of range (2)
  • Slide 84
  • Путь к осмыслению Шаг 1
  • Путь к осмыслению Шаг 2
  • Путь к осмыслению Шаг 2 (2)
  • Путь к осмыслению Шаг 3
  • Решение простое но странное
  • groovy ты утверждаешь что диапазон 10100 не содержит 56
  • Что бы сделали мы
  • Power range(rs)
  • Убираем единичку
  • Slide 94
  • Slide 95
  • Slide 96
  • Обманули дурака
  • Обманули дурака (2)
  • Обманули дурака (3)
  • Обманули дурака (4)
  • Обманули дурака (5)
  • Обманули дурака (6)
  • Slide 103
  • Slide 104
  • Java2 кто помнит
  • Slide 106
  • А я знаю что случилось
  • Erasure
  • Erasure (2)
  • Slide 110
  • laquoв Groovy можно засунуть что угодно куда угодноraquo
  • CompileStatic
  • π ndash торт и число
  • Double the pi
  • Просёк
  • Просёк (2)
  • Просёк (3)
  • Double the pi (2)
  • Slide 119
  • Если не может быть проперти зачем париться
  • Посмотри на tostring() в классе double
  • Знаешь что означает сокращение rsvp
  • RSVP
  • Slide 124
  • Slide 125
  • Slide 126
  • Slide 127
  • А вот почему
  • Slide 129
  • Починить что угодно что не похоже на кастинг
  • Починить что угодно что не похоже на кастинг (2)
  • Slide 132
  • Slide 133
  • Slide 134
  • Slide 135
  • Встраиваем один класс в другой
  • В коде Mixinmetaclass
  • Slide 138
  • Why so primitive
  • Why so primitive (2)
  • Why so primitive (3)
  • Ну это ясно а почему
  • А это
  • (Groovy) truth может ранить так что просто добавь скобок
  • Jump Aka Пропавшие слова
  • Jump Aka Пропавшие слова (2)
  • Jump Aka Пропавшие слова (3)
  • I cant believe you fell for the oldest trick in the book
  • I cant believe you fell for the oldest trick in the book (2)
  • I cant believe you fell for the oldest trick in the book (3)
  • I cant believe you fell for the oldest trick in the book (4)
  • Решение статический methodmissing
  • Ещё лучше ndash используй ООП
  • Slide 154
  • Whatrsquos the metaclass Барух
  • Slide 156
  • Slide 157
  • ПЕРЕБОР operator overloading
  • Slide 159
  • выводы
  • Slide 161
  • Slide 162
  • Паззлеры всегда платят свои долги
  • Slide 164
  • Slide 165