После JavaFX теперь давайте посмотрим на Groovy . Обратите внимание, что я уже взглянул на него, когда был выпущен 1.0, и я написал одну из демонстрационных версий веб-сервисов XINS, используя Groovy.
Установка
Страница руководства по началу работы говорит нам загрузить установщик и настроить некоторые переменные среды. Каталог установки по умолчанию — C: \ Program Files \ Groovy \ Groovy-1.6.3, но, как кажется, возникают проблемы с пробелами в каталогах, я ‘ Я установлю его где-нибудь еще (и без какого-либо номера версии в имени каталога).
Инсталлятор достаточно умен, так как он устанавливает переменную окружения для вас и даже регистрирует .groovy и .gy в исполняемом файле groovy.
Groovy выпускается под лицензией Apache 2.0. У вас также есть плагин NetBeans. В меню «Инструменты» -> «Подключаемые модули» выберите «Groovy» и «Grails» и перезапустите IDE. Вы также можете запустить консоль Groovy с Web Start в «песочнице».
Язык
Руководство пользователя доступно по адресу http://groovy.codehaus.org/User+Guide .
Ключевые слова:
- Такой же как Java
- Def, это, как
- для (в)
Некоторые объяснения:
- Методы и классы по умолчанию общедоступны
- Внутренние классы не поддерживаются
- возврат и ; необязательны
Полный список зарезервированных ключевых слов доступен здесь .
Операторы:
Используйте .intdiv (), чтобы разделить целые числа.
def displayName = user.name?: «Anonymous» // Анонимный, когда user.name является нулевым
родительским элементом? .child, чтобы избежать if (parent! = null) …
Основные классы
- Стандартные классы Java
- GString
- GroovyServlet, SimpleTemplateEngine, GPATH
- AntBuilder, SwingBuilder, MarkupBuilder
Привет мир
Написание приложения
В файле NetBeans -> Новый проект -> Образцы -> Groovy -> Демонстрация Groovy-Java.
Демо уже может быть запущено.
Удалите файл Java, переименуйте другой файл в Helloworld.groovy и напишите
package demo
import groovy.swing.SwingBuilder
import javax.swing.JFrame
def swing = new SwingBuilder()
def frame = swing.frame(title:'Helloworld', size:[250,80]) {
def hello = label(text:"Helloworld!")
hello.font = hello.font.deriveFont(16.0f)
}
frame.show()
Документация
Javadoc: Что касается JavaFX, документация и примеры, кажется, пропускают этот шаг.
В Netbeans вы можете щелкнуть правой кнопкой мыши по проекту и выбрать « Создать Javadoc» , это приведет к ошибке. Исходные файлы и пакеты не указаны .
Распространение
В Groovy \ embeddable у вас есть groovy-all-1.6.3.jar, который содержит классы, необходимые для запуска приложения Groovy, если вы используете только классы из JavaSE и Groovy. Build.xml включает в себя банку цель, выполнить это поместит файлы приложений в DIST каталоге. Вы можете отредактировать nbproject / project.properties с помощью dist.jar = $ {dist.dir} /helloworld.jar и удалить макет Swing из библиотек (так как он не используется для helloworld). Вы также можете заменить dist \ lib \ groovy-all-1.5.5.jar на 1.6.3, так как плагин NetBeans поставляется с 1.5.5.
Концепции
закрытие
Закрытие позволяет рассматривать функцию как тип переменной (немного похоже на java.lang.reflect.Method).
def uppercaseClosure = { it.toUpperCase() }
def list = 'a'..'g'
def uppercaseList = []
list.collect( uppercaseList, uppercaseClosure )
def loginSA = database.login("sa", "")
loginSA()
def printSum = { a, b -> print a + b }
def printPlus1 = printSum.curry(1)
printPlus1(7) // prints 8
Строители в Groovy основаны на замыканиях.
Builders
Builders позволяет создавать объект структуры, используя декларацию вместо вызова методов. Синтаксис похож на JSON .
Примерами сборщиков в Groovy являются SwingBuilder (используется для helloworld), MarkupBuilder (для XML), ObjectGraphBuilder (для POJO), AntBuilder / Gant, GraphicsBuilder , HTTPBuilder .
Конечно, вы можете создать своего собственного строителя.
GString
def name = "James" // normal String
def text = """\
hello there ${name}
how are you today?
""" // GString because it uses ${} and multiline with the """
Шаблоны
Шаблоны позволяет вставлять текстовые и функциональные вызовы в текст.
def joe = [name:"John Doe"]
def engine = new SimpleTemplateEngine()
template = engine.createTemplate(text).make(joe)
assert template.toString() == "\nhello John Doe\nhow are you today?\n"
Используйте <% code%> для выполнения кода / функций в шаблоне.
Регулярные выражения
Вы можете использовать классы java.util.regex.Matcher и java.util.regex.Pattern, как в Java.
def pattern = ~/foo/ // Same as new Pattern("foo")
def matcher = "cheesecheese" =~ /cheese/ // Same as new Pattern("cheese").matcher("cheesecheese")
def matches = "cheesecheese" ==~ /cheese/ // Same as new Pattern("cheese").matcher("cheesecheese").matches();
Доступ к совпадению можно получить, как и коллекции. например
matcher [1]
для второго совпадения или
matcher [0, 1..2]
для набора первых 3 совпадений.
Коллекции
def list1 = [1, 2, 3, 4]
def list2 = 5..10
println("second element: ${list2[1]}")
def list3 = list2.findAll{ i -> i >= 7 } // Using closure to create a subset of list2
def list4 = list2[2..5] // Getting the same subset, 2 and 5 are indexes not values
def map1 = [name:"Gromit", likes:"cheese", id:1234]
def map2 = [(map1):"mouse"]
def list5 = list2*.multiply(2) // list5 contains list2 items * 2
Списки также могут быть определены в операторах for и switch: for (i в 1..10) или case 1,2,6..10:
<<, кажется, используется для добавления элементов, но я не смог найти его в документации ,
Классы и функции
У вас не так много документации о том, как это сделать.
package mypackage
import java.io.File
import groovy.swing.SwingBuilder
/**
* My class.
* @author Me
*/
class MyClass {
// class variable
def myVar = ""
/**
* My method
* @param text
* Some text.
*/
String addText(String text) {
myVar += text
}
void main(String[] args) {
print addText("hello")
}
}
Grails
I cannot talk about Groovy without mentioning Grails.Grails is a Server — Database framework inspired by Ruby on Rails and based on Spring + Hibernate. Grails heavily uses Groovy in order to minimize the code to write to create a server — database application.It uses GROM (Grails Object Relational Mapping) which is based on Hibernate.
The domain classes are simple POJOs containing the objects to manage/store/show. e.g. User, Book, Car, … Contraints can be defined in the constraints closure. e.g.def constraints = { firstName(blank:false) }
For relationship use static hasMany = [books: Book], static mappedBy, static belongsTo.
The controllers are the action classes, the classes methods will be called when a form is submitted. e.g. class UserController { def doLogin = { … } }
In configuration you have BootStrap.groovy to manage the application life cycle and DataSource.groovy to specify the location of the database.
The i18n directory contains the error messages.
The view (HTML pages) uses per default GSP (Groovy Server Pages).
To release the project, right click on the project and select Create War File.
Grails release includes a Petclinic demo.
Getting started articles here and here
There is a video demo on netbeans.tv
The reference documentation is available at http://grails.org/doc/1.1.1/.
Other
There are no examples with the release (except for ActiveX with Scriptom), examples are online
Code completion in NetBeans was weak.
Groovy supports annotations.
Groovy has bindings with groovy.beans.Bindable.
@Bindable String prop
textField(text:bind(source:this, sourceProperty:'prop'))
Grape is a system to include libraries in a repository. Grape will download the dependency Jar files if needed when starting your application. For Swing development, you have doOutside { } to execute code outside the EDT and inside it you can have edt { } when a part of the code needs to be on the EDT. Griffon is a groovy desktop application framework.
Integration with Java
From Groovy to Java, just use the Java class as you would do in Java. Note that 10.0 is a BigDecimal, 10.0f is a java.lang.Float and 10.0d is a java.lang.Double.
From Java to Groovy, use the javax.script.* classes.
Conclusion
Groovy introduces new concepts making code smaller to write. You need to make sure that the code compactness will not come to the cost of code readability. Buying a book could be useful for more examples and more documentation. Groovy developers seem to agree that the best IDE for Groovy/Grails is IntelliJ IDEA.
Pro’s
- Builders
- Useful for client and server side applications
- Collection
- Feature rich
- Windows installer
Con’s
- More complicated to learn than Java
- Examples are more code snippets than small applications. (More examples at sf.net)
- Version numbers everywhere