Помните легендарные Java Puzzlers? Да-да, те самые, с Джошом Блохом и Нилом Гафтером? Ну, по которым ещё книжку написали? Так вот, в Groovy всё ещё веселее.
В смысле — задачки ещё более странные, и ответы ещё более поразительные. Этот доклад для вас, Groovy-разработчики, мы покажем вам настоящие, большие и красивые подводные камни! И для вас, Java-разработчики, потому что таких вещей на Java-подобном синтакисе вы точно никогда не видели! И для вас, PHP-разработчики… хотя, нет, не для вас :)
Всем точно будет весело — ваши ведущие Женя и Барух будут зажигать, шутить, спорить, бросаться футболками в публику, и самое главное — заставят вас офигевать от Groovy.
105. List<Long> list = [1,2,3]
def now = new Date()
list << now
println list
106. List<Long> list = [1,2,3]
def now = new Date()
list << now
println list
107.
108.
109.
110.
111. List<Long> list = [1,2,3]
def now = new Date()
list << now
list << 'foo'
println list*.class.name
[java.lang.Long, java.lang.Long,
java.lang.Long, java.util.Date,
java.lang.String]
123. class Invite {
int attending = 1
}
def invite = new Invite()
def attendees = (invite.attending) +1
println attendees
124. class Invite {
int attending = 1
}
def invite = new Invite()
def attendees = (invite.attending) +1
println attendees
125.
126.
127.
128.
129.
130. def attendees = (new Invite().attending) + 1
println attendees
131. def invite = new Invite()
def attendees = invite.attending +1
Как убрать скобки?!
132.
133. class MrHyde {
def me() {
return this
}
}
class DrJekyll {
}
DrJekyll.mixin MrHyde
def drJekyll = new DrJekyll().me() as DrJekyll
def mrHide = new DrJekyll().me()
println "$drJekyll and $mrHide, are they the
same? ${(drJekyll.class).equals(mrHide.class)}"
134. class MrHyde {
def me() {
return this
}
}
class DrJekyll {
}
DrJekyll.mixin MrHyde
def drJekyll = new DrJekyll().me() as DrJekyll
def mrHide = new DrJekyll().me()
println "$drJekyll and $mrHide, are they the same?
${(drJekyll.class).equals(mrHide.class)}"
135.
136.
137.
138.
139.
140. def x = int
println x
if ((x = long)) {
println x
}
if (x = boolean ) {
println x
}
141. def x = int
println x
if ((x = long)) {
println x
}
if (x = boolean ) {
println x
}
142.
143.
144.
145.
146. class VanHalen {
public static jump() {
"Here are the ${lyrics()}"
}
def methodMissing(String name, def args) {
'lyrics'
}
}
println VanHalen.jump()
147. class VanHalen {
public static jump() {
"Here are the ${lyrics()}"
}
def methodMissing(String name, def args) {
'lyrics'
}
}
println VanHalen.jump()
148.
149.
150.
151.
152. class VanHalen {
public static jump() {
"Here are the ${lyrics()}"
}
static $static_methodMissing(String name, def args) {
'lyrics'
}
}
println VanHalen.jump()
153. class VanHalen {
public jump() {
"Here are the ${lyrics()}"
}
def methodMissing(String name, def args) {
'lyrics'
}
}
println new VanHalen().jump()
161. 1. Пишите читабельный код
2. Комментируйте все трюки
3. Иногда это баг
4. Пользуйте static code analysis - intellij
IDEA!
5. Rtfm
6. Don’t code like my brother
162. Мы только начали! (надо еще
форму придумать)
Засылайте Ваши паззлеры, поделки
и рисунки
- puzzlers jfrog.com
- Groovypuzzlers
163.
164. Вам понравилось?
Хвалите нас в твиттере
groovypuzzlers
- Groovypuzzlers
- jekaborisov
- jbaruch
Вам не поравилось?
/dev/null
Editor's Notes
CURRENT – JB
NEXT
2001 OracleWorld: Joshua Bloch, Neal Gafter