среда, 12 сентября 2012 г.

Красный блокнот

В летописи храма Утреннего Медного Гонга это записано в главе "Модульное тестирование":

Учитель Java Кайму иногда мог отвечать на вопросы одним словом null. Когда его спрашивали, что же это значит, он неизменно отвечал тем же непостижимым null.

Молодой монах, обособленный и болезненный, начал подмечать, какие вопросы вызывают такой ответ. Их он записывал в маленький красный блокнот, страницы которого заполнялись довольно быстро. Монаха видели медитирующим над этим блокнотом до поздней ночи.

"Ты ещё не постиг разум своего любимого учителя Кайму?" - стали однажды дразнить его братья.

"Null", - сказал монах.

За это другие монахи быстро схватили его стали пинать, пока он не покрылся синяками. Его драгоценную красную книжку они бросили в огонь.

Учитель Java услышал об этом и велел настоятелю клана разобраться. "Вот сорок восемь вопросов для молодого монаха", - сказал учитель. "Передайте мне его ответы".

Настоятель выполнил это. На большинство вопросов монах дал простой ответ. На несколько он ответил загадочным null. А остальные оставил без ответа.

Учитель Java погладил бороду, как только он изучил ответы, переданные ему настоятелем.

"За ответ на вопрос двенадцать дайте монаху по ушам, ибо он был нагл", - сказал учитель. "За ответ на вопрос тридцать один, высеките его ивовыми прутьями, ибо он увильнул от ответа. Затем выдайте ему еще один красный блокнот".

"А как быть с братьями, избившими его?" - спросил настоятель.

"Вознаградите их, ибо они послужили храму. Теперь я знаю алгоритм как опорочить монаха".

Original: The Red Notebook

λямбда

Посетил доклад коллег, участвующих в разработке лямбда-выражений для Java. Было весьма познавательно.

Во-первых, я узнал про effective final. Компилятор теперь сам может узнавать, является ли локальная переменная неизменяемой. Он позволяет использовать такие переменные в лямбда-выражениях и, возможно, будет позволять их использовать в анонимных классах. Теперь можно будет не писать final перед локальной переменной.

Во-вторых, узнал, что в Java будут две, как минимум, реализации лямбда-выражений. Одна, на базе анонимных классов, будет более медленной, но будет позволять, например, сериализацию. Вторая, использующая статический метод и вызов invokedynamic, была недавно добавлена для увеличения производительности.

Помимо обычных лямбда-выражений вида:
    (String s) -> System.out.println(s)
    x -> x + x
    (x, y) -> x + y
будет возможность использовать существующие методы:
unbound static
Comparator cmp = Integer::compare;
используется статический метод класса с двумя параметрами
unbound virtual
Comparator cmp = Integer::compareTo;
используется виртуальный метод класса с одним параметром, где вторым параметром является экземпляр этого класса
bound virtual
Comparator cmp1 = Integer::compare;
Comparator cmp2 = cmp1::compare;
используется виртуальный метод класса с двумя параметрами
Там ещё много чего было, это я пока для затравки написал.


Бабье лето

Что-то на улице непривычно жарко. Видимо недавно прилетевший друг привёз с Лазурного берега немного тёплого воздуха. Ничего, сейчас налетит ветерок с залива и всё будет по прежнему...