На информационном ресурсе применяются рекомендательные технологии (информационные технологии предоставления информации на основе сбора, систематизации и анализа сведений, относящихся к предпочтениям пользователей сети "Интернет", находящихся на территории Российской Федерации)

Груви улучшается

Guillaume Laforge (Гильом Лафорж) — проект менеджер Groovy обявляет о выходе первой беты 1.6 Багфиксы и улучшения.

Были добавлены 2 встроенные аннотации (Groovy полностью поддержирживает все возможности Java5!) : groovy.beans.Bindable и groovy.beans.Vetoable.

Groovy поддерживает аннотации давно, но ранее определения аннотаций могли были быть написаны только на java.

Теперь можно и на groovy.

Обе аннотации содержат в себе функионал который призван заменить стандартные Java-интерфейсы java.beans.PropertyChangeListener и java.beans.VetoableChangeListener и избавить разработчика от обилия классов-слушателей (listeners) и декларации дополнительных интерфейсов для бина.

Пример использования аннотации @Bindable

import groovy.beans.Bindable

class MyClass {

  @Bindable int id

  @Bindable String name

  def MyClass() {

    //this.propertyChange = {

    //    println it.propertyName + " changed from " + it.oldValue + " to " + it.newValue

    //}

  }

}


def x = new MyClass()

x.propertyChange = {

    println it.propertyName + " changed from " + it.oldValue + " to " + it.newValue

}

x.id = 10

x.name = "Hello"


Результат будет выглядеть так:

groovy Test.groovy

id changed from 0 to 10

name changed from null to Hello


Причем инициализацию свойства propertyChange можно проводить и в конструкторе (см. закомментированный код), но при этом нельзя
восплользоваться статической инициализацией (почему? Не знаю).


Тоесть такой пример работать не будет:


class MyClass {

  def propertyChange = {println it}

  @Bindable int id

}

def x = new MyClass()

x.id = 10

 

Среди прочего — очередное увеличение производительности.

class lookup caches позволяют ускорить компиляцию. Причем, чем больше проект, тем явственнее эти ускорения. И вообще, по словам менеджера, последние 10 месяцев команда делала сильный упор на производительность и добилась успехов в микробенчмарках от 150 до 460% увеличения скорости.


Кроме увеличения скорости - некоторые новые фичи:

Множественные присваивания


def listOfN(numOfElem) { 0..numOfElem }

def a, b

// variables will contain each successive element of the list
// and variables beyond the count of elements will be null

[a, b] = listOfN(0) // a list of one element
assert a == 0
assert b == null

// if there are more elements, they won't be assigned to any variable
[a, b] = listOfN(9) // a list of ten elements
assert a == 0
assert b == 1

// and you can swap variables with this notation
[a, b] = [b, a]
assert a == 1
assert b == 0


то есть, то, чем хвастались апологеты Ruby.

 

Авторы просят тестировать бету и делать enjoyПодмигивающий

 

наверх