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

Groovy

1. Groovy - это язык программирования. Язык, который несмотря на то, что имеет много общего с такими скриптовыми языками, как Python и Ruby, все же является скорее general purpose языком.

2. В Groovy на уровне языка реализована работа с коллекциями. Например:
def list = [1, 2, 3] + [4, 5]
assert list[0] == 1
assert list[-1] == 5
assert list[0.

.2]==[1,2,3]

def map = [a:1, b:2]
assert map['a'] == 1
assert map.b == 2
Но этим уже не кого не удивишь.

3. В Groovy есть замыкания
def sum = {a,b -> a + b}
assert sum (1,2) == 3

def plusFive = sum.curry(5)
assert plusFive (10) == 15

Работа с замыканиями реализовна на все 100%. Это обыкновенные объекты и они подчиняются тем же правилам.
[a:1, b:2].each{key, value-> println "$key : $value"}
[a:1, b:2].each{println "${it.key}"}

В принципе и этим уже никого не удивишь. Во многих современных языках реализованы замыкания.

4. В Groovy есть мета классы. Это позволяет достичь небывалого уровня динамизма.
Это позволяет очень легко и непринужденно заменить поведение даже стандартных объектов и сделать, например, так, чтобы 2 + 2 == 5. Вы сразу же подумали о тестирование и mock объектах и правильно, все это очень изящно и легко реализуется в Groovy, в отличие от Java.

Но и в Ruby тоже присутствуют похожие возможности.

5. В Groovy можно использовать статическую типизацию и перегрузку методов. Вы можете написать def a = "some", а можете String a = "some". Причем перегрузка методов отличается от C++ и Java в лучшую сторону:
def foo(a){
println 'object'
}

def foo(String a){
println 'string'
}

def s = 'hello'
assert foo(s) == 'hello'
Т.е. это перегрузка во время выполнения.

Вот это уже кое что, чего в других динамических языках встретишь не часто - возможность определять тип переменной. Как мы увидим ниже это очень важная особенность Groovy.

6. А теперь главное: Groovy - второй язык для платформы Java, который был сертифицирован (первым был Java). Любой класс Java используется в Groovy так же, как и класс Groovy и наоборот. Очень важно понять разницу совместимости языков на уровне байт-кода и совместимости языков на высоком уровне. Groovy и Java – это полная совместимость. Пример:
//java
class A{
void foo(String s){...}
}

//Groovy
def a = new A ()
a.foo('hello')
Вы можете наследовать Java классы в Groovy, переопределять методы (вот зачем нужны были типы), в общем, делать все, что хотите. Вам все равно, написан ли это класс в Java или Groovy.

7. Groovy компилируется в байт-код. Используете эти jar, как и любые jar, написанные на java.

8. Текущая стабильная версия Groovy 1.0, но уже реализована 1.1. Вышла отличная книга Groovy in Action. Реализованы множество модулей.

9. Grails или Groovy on Rails. Калька с Ruby on Rails, НО: так как Groovy - это лучший друг Java, то почему бы не построить свой высокоуровненвый фреймворк на основе хорошо известных и эффективных Spring + Hibernate. Как результат Grails быстрее Ruby On Rails и работает на любом J2EE сервере. Причем, что интересно, вы можете писать бины для Spring на Groovy. Последние версии Spring framework поддерживают эту возможность.

10. Есть ещё сотни вещей, о которых нужно рассказать:

1. Концепция Builder

2. То, как в Groovy реализованы свойства:
Например, JavaBean в Groovy:
class MyBean{
String a
int b
}

def m = new MyBean(a: 'hello', b: 5)
assert m.b == 5
m.a = 'world'

А вот Java аналог:
class MyBean{
private String a;
private int b;

public void setA (String a){
this.a = a;
}

public String getA(){
return a;
}

public void setB(int b){
this.b = b;
}

public int getB(){
return b;
}
}

MyBean m = new MyBean ();
m.setA("hello");
m.setB(5);
m.getB();
m.setA("world");

Определения этих классов на уровне байт-кода одинаковы.

3. Поддержка сред разработки. Плагины для IntelliJ IDEA, Eclipse, NetBeans.
Причем плагин для Идеи уже поддерживает Debug и отлично работает с Grails.

4. Отличная работа с XML и реляционными базами данных.

5. Поддержка Oracle и IBM.

6. Поддержка фунционального программирования.
obj.class.methods.name.grep(~/get.*/).so

rt() - отсортированный список все геттеров объекта obj.

7. Возможность полностью изменить объект во время выполнения.

8. Необязательность скобок
println "hello"

9. Перегрузка операторов.

10. Да, не забудьте, что в отличие от Java в Groovy: ½ == 0.5

11. Если вы писали на Java хотя бы полгода, то чтобы начать писать на Groovy вам нужен всего 1 день. Ровно столько у меня ушло, чтобы прочесть Groovy in Action и довольно уверенно чувствовать себя в работе с этим языком.
наверх