java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy

Groovy Π·Π° 15 ΠΌΠΈΠ½ΡƒΡ‚ – ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€

Groovy β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык программирования Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Java ΠΊΠ°ΠΊ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° языку Java с возмоТностями Python, Ruby ΠΈ Smalltalk.

Groovy ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Java-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ синтаксис с динамичСской компиляциСй Π² JVM Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΈ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Java ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ. Π―Π·Ρ‹ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² любом Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ скриптовый язык.

ВозмоТности Groovy (ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠ΅ Π΅Π³ΠΎ ΠΎΡ‚ Java):

β€” БтатичСская ΠΈ динамичСская типизация
β€” ВстроСнный синтаксис для списков, ассоциативных массивов, массивов ΠΈ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ
β€” Замыкания
β€” ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда java-ΠΊΠΎΠ΄ β€” это Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΉ groovy-ΠΊΠΎΠ΄.

Установка

Π’ IDE NetBeans 7.0 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° groovy ΠΈΠ΄Π΅Ρ‚ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ, для IDE Eclipse сущСствуСт ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΠ»Π°Π³ΠΈΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ здСсь.

Groovy

Π‘Π°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ java: Π² Groovy всё являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. ВсС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ сразу ΠΆΠ΅ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π’.Π΅. Β«int xΒ» Π½Π° самом Π΄Π΅Π»Π΅ являСтся Β«Integer xΒ»

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ всС ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ β€” нСизмСняСмыС, поэтому ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ вычислСнии Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π² Groovy

1) Java Strings β€” строки Π² ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…
2) Groovy Strings, ΠΎΠ½ΠΈ ΠΆΠ΅ GStrings β€” Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…
Π’ строках groovy ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ строки β€” нСльзя

К строкам ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ + ΠΈ *

Π’ groovy Π΅ΡΡ‚ΡŒ ΠΏΠΎΠΎΠ΄Π΅Ρ€ΠΆΠΊΠ° рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ конструкций языка:

ВстроСнная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° maps + lists

Π’Π°ΠΊ ΠΆΠ΅ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ конструкций языка ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ словари (maps) ΠΈ списки:

Ranges

ΠŸΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ элСмСнтам списков Π² groovy ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Range β€” это Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, поэтому Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ конструции, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ послСднСй. ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ индСксы, ΠΊΠ°ΠΊ Π² python, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ элСмСнты с ΠΊΠΎΠ½Ρ†Π° списка.

Range ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ· строк:

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, range ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ· любого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ next() ΠΈ prev().

Π¦ΠΈΠΊΠ»Ρ‹

Π¦ΠΈΠΊΠ»Ρ‹ Π² groovy Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² java, плюс ΠΊ Π½ΠΈΠΌ добавляСтся Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Β«foreachΒ»:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово return ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ β€” ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ послСднСй упомянутой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Ρ„ΡƒΠΊΡ†ΠΈΠΈ.

Closures

Closure β€” это анонимная функция

Π£ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ closure:

Доступно большоС количСство ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ замыкания:

Π’ closure Ρ‚Π°ΠΊ ΠΆΠ΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово return. Если явно Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ имя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ, Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ it.

Π’Π°ΠΊ ΠΊΠ°ΠΊ closure являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ closure, ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠΈΡ… порядков:

Π€Π°ΠΉΠ»Ρ‹

Для Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ Π΅ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ eachFile ΠΈ eachFileRecursive:

Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ тСкстовых Ρ„Π°ΠΉΠ»ΠΎΠ² β€” функция eachLine:

ΠŸΠΈΡΠ°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Ρ‹ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ:

ΠšΠ»Π°ΡΡΡ‹

НСизмСняСмыС классы Π·Π°Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Immutable:

ΠŸΡ€ΠΈ использовании этой Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ a, ΠΈ Ссли Π² Π½Π΅ΠΉ null ΠΈΠ»ΠΈ false, Ρ‚ΠΎ Π±Π΅Ρ€Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ слСдом Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π˜Π½Π°Ρ‡Π΅ бСрСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ a.

«?.» Safe navigation
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для избСТания ошибки NullPointerException

Π’Π΅Ρ€Π½Π΅Ρ‚ null, Ссли Ссли Π² user содСрТится null вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ€ΠΎΡΠ°Ρ‚ΡŒ NullPointerException.

«*.» Spread operator
ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ для всСх элСмСнтов ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ:

Π’Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠ½ΠΆΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для составлСния списков ΠΈ словарСй:

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ «==» ΡƒΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½ для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² β€” ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Β«isEquals()Β». ΠŸΠΎΠ»Π½Ρ‹ΠΉ список ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ для ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², доступСн здСсь: http://groovy.codehaus.org/Operator+Overloading.

SQL запросы ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ просто:

Π’ groovy ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π±ΠΈΠ»Π΄Π΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ XML. Для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ создаСтся экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° MarkupBuilder, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ псСвдо-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ β€” Π½Π°Π·Π²Π°Π½ΠΈΠ΅ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‚Π΅Π³Π°:

Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° конструктору MarkupBuilder ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ любой PrintWriter:

ΠŸΠ°Ρ€ΡΠΈΠ½Π³ XML Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ простой:

Groovlets

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса GroovyServlet Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ скрипты Π½Π° Groovy ΠΊΠ°ΠΊ сСрвлСты.
Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, для этого Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ нСсколько строчСк Π² web.xml:

β€” request & response
β€” context, application, session
β€” out (= response.getWriter())
β€” sout (= response.getOutputStream())
β€” html (= new MarkupBuilder(out))

ΠžΡ‚Π΄Π°ΡΡ‚ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρƒ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ html-страницу.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Apache NetBeans 12.5

Π­Ρ‚ΠΎΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Groovy Π² IDE NetBeans. Π’ процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ создано ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° языкС Java, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ элСмСнт JFrame, Π° ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Groovy Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ простоС сообщСниС.

java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π€ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с этим ΡƒΡ‡Π΅Π±Π½Ρ‹ΠΌ курсом трСбуСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС ΠΈ рСсурсы.

ΠΏΠ°ΠΊΠ΅Ρ‚ Java, вСрсии 7.2, 7.3, 7.4, 8.0

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Groovy

Активация ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠ³ΠΎ модуля Groovy

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Groovy ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ установкС Java-вСрсии срСды IDE. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Groovy Π² IDE сначала Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Groovy Π² диспСтчСрС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ‘БСрвис’ > ‘ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ’ Π² Π³Π»Π°Π²Π½ΠΎΠΌ мСню, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ диспСтчСр ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡƒ УстановлСно Π² диспСтчСрС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ‘ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ свСдСния’ ΠΈ Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Groovy ΠΈ Grails Π² спискС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ввСсти groovy Π² ΠΏΠΎΠ»Π΅ поиска, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ список ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

УстановитС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ‘Groovy and Grails’ ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ‘ΠΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ’.

java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π€ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy

НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ ‘ΠΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ’ Π² ΠΎΠΊΠ½Π΅ ‘ΠœΠ°ΡΡ‚Π΅Ρ€ установки NetBeans IDE’, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Groovy.

НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ ‘Π—Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ’ Π² ΠΎΠΊΠ½Π΅ ‘ΠœΠ°ΡΡ‚Π΅Ρ€ установки NetBeans IDE’ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ установки ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ‘Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ’ Π² диспСтчСрС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ прилоТСния

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Java.

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ‘Π€Π°ΠΉΠ» > Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚’ (Ctrl-Shift-N; ⌘-Shift-N Π² Mac) Π² Π³Π»Π°Π²Π½ΠΎΠΌ мСню, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ мастСр создания ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ².

Π’ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Java Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ‘ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Java’. НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π”Π°Π»Π΅Π΅».

Π’ ΠΏΠΎΠ»Π΅ ‘Имя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°’ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ GroovyJavaDemo, Π° Π² ΠΏΠΎΠ»Π΅ ‘ΠœΠ΅ΡΡ‚ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°’ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΏΠ°ΠΏΠΊΡƒ, Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ создано ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π‘Π½ΠΈΠΌΠΈΡ‚Π΅ Ρ„Π»Π°ΠΆΠΎΠΊ «Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π³Π»Π°Π²Π½Ρ‹ΠΉ класс». НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π“ΠΎΡ‚ΠΎΠ²ΠΎ».

ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ ‘Π“ΠΎΡ‚ΠΎΠ²ΠΎ’ IDE создаСт ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отобраТаСтся Π² ΠΎΠΊΠ½Π΅ ‘ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹’.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ класса Java ΠΈ Ρ„Π°ΠΉΠ»Π° Groovy

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ элСмСнт JFrame ΠΈ класс Groovy.

Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ ΡƒΠ·Π΅Π» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² ΠΎΠΊΠ½Π΅ ‘ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹’ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ‘Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ > Π”Ρ€ΡƒΠ³ΠΎΠ΅’. ΠžΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ мастСра создания Ρ„Π°ΠΉΠ»ΠΎΠ².

Π’ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ‘Π€ΠΎΡ€ΠΌΡ‹ Swing GUI’ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ‘Π€ΠΎΡ€ΠΌΠ° JFrame’. НаТмитС ‘Π”Π°Π»Π΅Π΅’.

java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π€ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy

Π’ ΠΏΠΎΠ»Π΅ ‘Имя класса’ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ DisplayJFrame.

Π’ ΠΏΠΎΠ»Π΅ ‘ΠŸΠ°ΠΊΠ΅Ρ‚’ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ org.demo. НаТмитС ‘Π“ΠΎΡ‚ΠΎΠ²ΠΎ’.

java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π€ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy

ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ ‘Π“ΠΎΡ‚ΠΎΠ²ΠΎ’ Π² срСдС IDE создаСтся Ρ„ΠΎΡ€ΠΌΠ° JFrame, ΠΈ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ открываСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ».

Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ ΡƒΠ·Π΅Π» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² ΠΎΠΊΠ½Π΅ ‘ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹’ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ‘Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ > Π”Ρ€ΡƒΠ³ΠΎΠ΅’. ΠžΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ мастСра создания Ρ„Π°ΠΉΠ»ΠΎΠ².

Π’ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Groovy Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ‘Класс Groovy’. НаТмитС ‘Π”Π°Π»Π΅Π΅’.

java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π€ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy

Π’ ΠΏΠΎΠ»Π΅ ‘Имя класса’ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ GreetingProvider.

ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ ‘Π“ΠΎΡ‚ΠΎΠ²ΠΎ’ IDE создаСт Ρ„Π°ΠΉΠ» Groovy ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅.

Если Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΡƒΠ·Π΅Π» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² ΠΎΠΊΠ½Π΅ ‘ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹’, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π΄Π²Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ созданных Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠ΄ ΡƒΠ·Π»ΠΎΠΌ ‘Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹’.

Π’Ρ‹Π·ΠΎΠ² Ρ„Π°ΠΉΠ»Π° Groovy ΠΈΠ· класса Java

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ для взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠΌ Groovy ΠΈ классом Java.

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» GreetingProvider.groovy Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ (Ссли ΠΎΠ½ Π΅Ρ‰Π΅ Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚).

Π—Π°Π΄Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ привСтствия Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ (Π²Ρ‹Π΄Π΅Π»Π΅Π½ ΠΏΠΎΠ»ΡƒΠΆΠΈΡ€Π½Ρ‹ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ). Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ измСнСния.

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» DisplayJFrame.java Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ (Ссли ΠΎΠ½ Π΅Ρ‰Π΅ Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚) ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡƒ ‘ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅’.

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ (Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ‘Окно > ΠŸΠ°Π»ΠΈΡ‚Ρ€Π°’ Π² Π³Π»Π°Π²Π½ΠΎΠΌ мСню) ΠΈ ΠΏΠ΅Ρ€Π΅Ρ‚Π°Ρ‰ΠΈΡ‚Π΅ элСмСнт ‘ВСкстовоС ΠΏΠΎΠ»Π΅’ ( jTextField ) ΠΈ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ Π½Π° Ρ„ΠΎΡ€ΠΌΡƒ JFrame.

java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π€ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡƒ ‘Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄’ ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ исходный ΠΊΠΎΠ΄ Π² Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Ρ‡Π°ΡΡ‚ΡŒ Ρ‚Π΅Π»Π° класса, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр класса Groovy ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ getGreeting() Π² классС Groovy Π² конструкторС.

Для поиска Π² классС Java ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для класса Groovy, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠ·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°.

java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π€ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy

Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ ΡƒΠ·Π΅Π» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² ΠΎΠΊΠ½Π΅ «ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹» ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ «Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ».

Если Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ‘Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ’, IDE Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ сборку ΠΈ запуск прилоТСния.

java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π€ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy

Π’ тСкстовом ΠΏΠΎΠ»Π΅ Π² ΠΎΠΊΠ½Π΅ прилоТСния отобраТаСтся тСкст ΠΈΠ· класса Groovy.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° языкС Java, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ с Groovy.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния

IDE NetBeans Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π²Π΅Π±-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Grails, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ язык Groovy ΠΏΡ€ΠΈ Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ… Π½Π° Java. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎΠ± использовании ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Grails с IDE NetBeans см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Grails.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Groovy ΠΊΠ°ΠΊ скриптовый язык ΠΈ DSL для Java

Π—Π°Ρ‡Π΅ΠΌ?

ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ПО, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°Π΄Π°Ρ‡ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΈΠ»ΠΈ обслуТивания, я ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡΡŒ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ выполнСния сцСнариСв, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ дСйствий. И спСцифика Ρ‚Π°ΠΊΠΎΠ²Π°, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… сцСнариСв Π² ПО Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ пСрСсборки ΠΈΠ»ΠΈ пСрСзапуска ПО.

НавСрноС, самыми простыми ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Ρ‚Π°ΠΊΠΈΡ… сцСнариСв, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ всС ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ Π² Ρ‚ΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ β€” bat ΠΈΠ»ΠΈ sh.

Π’ своСй ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, я ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ XML для описания сцСнариСв. Π’ случаС, Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π°Ρ€Π°Π½Π΅Π΅ Π½Π°Π±ΠΎΡ€Π° дСйствий ΠΈ ΠΈΡ… простого плоского Π½Π°Π±ΠΎΡ€Π° Π±Π΅Π· Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ β€” XML Π½Π΅ ΠΏΠ»ΠΎΡ… для использования. Π’ΡƒΡ‚ ΠΈ фиксированная структура, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» сцСнария, ΠΈ простота самого языка XML, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ с Π½ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ программистам. Однако Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ вСтвлСния ΠΈΠ»ΠΈ ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Π² XML, Π½Π° ΠΌΠΎΠΉ взгляд, ΠΎΡ‡Π΅Π½ΡŒ Π½Π°ΠΊΠ»Π°Π΄Π½ΠΎ ΠΈ сродни написанию своСго ΠΌΠΈΠ½ΠΈ языка. Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π½Π°Π±ΠΎΡ€Π° дСйствий Ρ‡Π°Ρ‰Π΅ всСго Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ исходного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π΄Π° ΠΈ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ рСализация ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ XML сцСнария Ρ‚Ρ€ΡƒΠ΄ΠΎΠ·Π°Ρ‚Ρ€Π°Ρ‚Π½Π°.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Π² поисках Π±ΠΎΠ»Π΅Π΅ простого ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ инструмСнта, для описания сцСнариСв, Π²Π·ΠΎΡ€ Π±Ρ‹Π» ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ ΠΊ скриптовым языкам. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Java, Ρ‚ΠΎ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΠΈΠΌΠ΅Ρ‚ΡŒ возмоТности ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ скриптового языка ΠΈ Java. Π’ ΠΈΡ‚ΠΎΠ³Π΅, Π²Ρ‹Π±ΠΎΡ€ ΠΏΠ°Π» Π½Π° Groovy – динамичСский язык Π½Π° Π±Π°Π·Π΅ JVM, Π»Π΅Π³ΠΊΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ с Java, простой ΠΈ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… возмоТностСй для нашСй Π·Π°Π΄Π°Ρ‡ΠΈ.

Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹

Π― Π½Π΅ Π±ΡƒΠ΄Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ основы Groovy, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π² сСти Π΄Π°ΠΆΠ΅ Π½Π° русском ΡƒΠΆΠ΅ прСдостаточно. ΠžΡΡ‚Π°Π½ΠΎΠ²Π»ΡŽΡΡŒ лишь Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… для нас ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Ρ….

Groovy позволяСт Π½Π°ΠΌ ΠΈΠ· Java ΠΊΠΎΠ΄Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π΅ скомпилированный исходный Groovy ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎ позволяСт Π½Π°ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ сцСнарии Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ Π² runtime.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ выполнСния Groovy скрипта Π² Java. Для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Groovy Π² Π’Π°ΡˆΠ΅ΠΌ Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² зависимости лишь ΠΎΠ΄Π½Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Β«groovyΒ» Π½ΡƒΠΆΠ½ΠΎΠΉ Π’Π°ΠΌ вСрсии.

НапишСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Groovy ΠΊΠΎΠ΄ Π² Ρ„Π°ΠΉΠ»Π΅ x:\GroovyScript.groovy:

Код для выполнСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ скрипта Π² Π’Π°ΡˆΠ΅ΠΌ Java ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ:

Π’ ΠΈΡ‚ΠΎΠ³Π΅ выполнСния, Π² консоль вывСдСтся 2 строки, пСрвая ΠΈΠ· скрипта, вторая β€” ΠΈΠ· Java, с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ выполнСния скрипта:

Groovy script
result=16

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ нСсСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² скриптС, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ возмоТности динамичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ выполнСния – всСго Π΄Π²Π΅ строчки ΠΊΠΎΠ΄Π° ΠΈ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ выполнСния скриптов.

НСмного ΠΎ Java ΠΊΠΎΠ΄Π΅. GroovyShell – это класс прСдоставляСмый Groovy для выполнСния groovy скриптов. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ способы выполнСния groovy скриптов, ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ смотритС Ρ‚ΡƒΡ‚

DSL – domain-specific language ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык. Π―Π·Ρ‹ΠΊ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ основныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области Ρ‡Π΅Ρ€Π΅Π· Π½Π°Π±ΠΎΡ€ простых ΠΈ понятных высокоуровнСвых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠ΄ достаточно простой, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ сцСнарии ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ большим ΠΈ слоТным. И Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ‚Π°ΠΊΠΈΠΌΠΈ скриптами смогут Ρ‚ΠΎΠ»ΡŒΠΊΠΎ groovy-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибок Π±Π΅Π· тСстирования Π±ΡƒΠ΄Π΅Ρ‚ слоТно. Π’ случаС Π·Π°Ρ€Π°Π½Π΅Π΅ извСстных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² сцСнариях, всю бизнСс Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ вынСсти Π² ΠΊΠΎΠ΄ (java ΠΈΠ»ΠΈ groovy β€” Π½Π΅Π²Π°ΠΆΠ½ΠΎ), ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Ρ‡Π΅Ρ€Π΅Π· Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Рассмотрим нСбольшой ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ВрСбуСтся Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π°Ρ€Ρ…ΠΈΠ²Π°Ρ†ΠΈΠΉ, распаковку Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ², ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ увСдомлСния.
Один ΠΈΡ… кусочков сцСнария ΠΌΠΎΠ³ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ – ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ состояниС процСсса ΠΈ Π² случаС Π΅Π³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π·Π°Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅:

//import
…
//check state
Process p = getProcess ( … )
int state = p. getCompleteState ( … )
if ( state == 1 ) <
//doSomeLogicForArchive
Zip z = new Zip ( … )
z. makeZip ( … )
> else <
//doAnotherLogic
return
>
//doSomeLogicForSendNotify
Smtp smtp = new Smtp ( … )
Message m = new Message ( … )
smtp. send ( to,m. )

Код получаСтся достаточно большим, ΠΈ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ понятСн, Π² основном, лишь программистам. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΅Π³ΠΎ упростим ΠΈ вынСсСм Ρ‚Ρ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… дСйствия Π² класс ArchiveScript со статичСскими ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. Π‘ΠΊΡ€ΠΈΠΏΡ‚ послС вынСсСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

Π£ΠΆΠ΅ Π»ΡƒΡ‡ΡˆΠ΅? β€” Π›ΡƒΡ‡ΡˆΠ΅, Π½ΠΎ всС Π΅Ρ‰Π΅ Π΅ΡΡ‚ΡŒ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ – ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΈ названия класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΠΆΠ΅ стоило Π±Ρ‹ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ. И Π² Groovy Π΅ΡΡ‚ΡŒ подобная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ – Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ задания Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса для скрипта Π²Π½Π΅ самого скрипта. Класс ArchiveScript для этого Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Script ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ статичСскими. Код скрипта ΠΏΡ€ΠΈ этом Π΅Ρ‰Π΅ упрощаСтся – исчСзаСт ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΈ прСфикс класса:

Π£ΠΆΠ΅ достаточно Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Π’ случаС Ссли ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° вСтвлСния условия однострочный, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΈ ΠΎΡ‚ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок. А Π² случаС Groovy часто ΠΈ ΠΎΡ‚ скобок справа ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Код выполнСния скрипта Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ услоТняСтся β€” Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ CompilerConfiguration, ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ scriptBaseClass Ρ€Π°Π²Π½ΠΎΠ΅ ΠΈΠΌΠ΅Π½ΠΈ созданного Π½Π°ΠΌΠΈ класса ArchiveScript ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² GroovyShell:

CompilerConfiguration conf = new CompilerConfiguration ( ) ;
conf. setScriptBaseClass ( «package.ArchiveScript» ) ;
GroovyShell shell = new GroovyShell ( conf ) ;

Π”Π°Π»Π΅Π΅, Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим, ΠΊΠ°ΠΊ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² скриптС ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅. Π’ случаС опрСдСлСния Π² классС ArchiveScript ΠΌΠ΅Ρ‚ΠΎΠ΄Π° makeArchive Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅:

def makeArchive ( sourcePath, destPath, deleteSource )

Π’ скриптС Π²Ρ‹Π·ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» Π±Ρ‹ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

И Ссли Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ наглядности ΠΈ Π΄Π°ΠΆΠ΅ удобствС Groovy позволяСт Π½Π°ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Ρ‚Π°ΠΊ:

Однако Π² этом случаС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ HashMap ΠΈ, соотвСтствСнно, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² makeArchive Π² классС ArchiveScript Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ:

Если ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Ρ‚ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ наш скрипт ΠΌΠΎΠ³ Π±Ρ‹ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

И это ΡƒΠΆΠ΅ Π½Π΅ слишком слоТный ΠΈ достаточно Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ свой ΠΌΠΈΠ½ΠΈ-DSL с нСсколькими ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ функциями, спСцифичными для нашСй Π·Π°Π΄Π°Ρ‡ΠΈ. А Ρ‚Π°ΠΊΠΆΠ΅ всС Π΅Ρ‰Π΅ ΠΈΠΌΠ΅Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всю ΠΌΠΎΡ‰ΡŒ исходного языка.

Π—Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ я рассмотрСл лишь ΠΌΠ°Π»ΡƒΡŽ Ρ‚ΠΎΠ»ΠΈΠΊΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ DSL. Π’ Groovy Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ своСго DSL, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ DSL-ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° для Eclipse ΠΈ для IntelliJ Idea

ВСстированиС

Π₯ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ нСсколько слов ΠΎ тСстировании сцСнариСв. Каким Π±Ρ‹ простым Π½Π΅ Π±Ρ‹Π» скрипт, ошибки ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ Π² Π½Π΅ΠΌ. Π”Π°ΠΆΠ΅ Ссли Π’Ρ‹ ΠΏΠΈΡˆΠΈΡ‚Π΅ сцСнарии Π² IDE, ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ синтаксиса Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ. Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ лишь ΠΏΡ€ΠΈ Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ. Π’Π°ΠΊ ΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ скрипта.
Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°ΠΌ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ дСйствия ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ тСстирования сцСнария, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Π½Π° ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΡŽ. Groovy позволяСт Π½Π°ΠΌ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ путями. ΠŸΠΎΠΊΠ°ΠΆΡƒ нСсколько ΠΈΠ· Π½ΠΈΡ….

Π—Π°ΠΌΠ΅Π½Π° Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ скрипта

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ класс ArchiveSciptMock ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ интСрфСйс Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ArchiveScript, ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π½ΡƒΠΆΠ½ΠΎΠ΅ Π½Π°ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (ΠΈΠ»ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‰ΠΈΠΉ). ΠŸΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ CompilerConfiguration ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π΅Π³ΠΎ имя вмСсто ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π°.

CompilerConfiguration conf = new CompilerConfiguration ( ) ;
conf. setScriptBaseClass ( «package.ArchiveScriptMock» ) ;

Π—Π°ΠΌΠ΅Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС скрипта

Π”Ρ€ΡƒΠ³ΠΈΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ Π±Π΅Π· создания Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ mock класса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π° mock Π² самом ArchiveScript. Π’ groovy это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊΠΈΠΌ способом:

НСдостатком ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ способа я Π±Ρ‹ считал Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ написания Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π’Π°ΠΊ ΠΊΠ°ΠΊ Ссли Π² ArchiveScriptMock ΠΌΠ΅Ρ‚ΠΎΠ΄ makeArchive Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ:

def makeArchive ( params ) <
//makeArchiveInternal params.sourcePath, params.destPath, params.deleteSource
>

Π’ΠΎ ΠΌΡ‹ Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ всС Π»ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π±Ρ‹Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹. НуТно Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅ Π½Π° это:

Π― Π±Ρ‹ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ нСбольшой Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ ArchiveScript β€” ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ArchiveScript фасадом ΠΈ всю Π»ΠΎΠ³ΠΈΠΊΡƒ пСрСнСсти Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ класс. НапримСр, Π² Java класс Archive.
Π Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ β€” Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ†Π΅Π»Π΅ΠΉ тСстирования, Π½ΠΎ ΠΈ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… сообраТСний, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для отдСлСния повСдСния ΠΎΡ‚ способа выполнСния (Π½Π΅Ρ‚ зависимости ΠΎΡ‚ Script). Π’ ΠΈΡ‚ΠΎΠ³Π΅, послС измСнСния, ArchiveScript ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ Π²ΠΈΠ΄:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈ сцСнарий Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π—Π°ΠΌΠ΅Π½ΠΈΠΌ Archive Π½Π° Π΅Π³ΠΎ mock ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ скрипт:

ЕстСствСнно ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Archive ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ java mock Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², ΠΎΠ΄Π½Π°ΠΊΠΎ, Π½Π°ΠΌ ΠΏΠΎΠΊΠ° достаточно ΠΈ этого.

Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» достаточно Π³ΠΈΠ±ΠΊΠΈΠΉ инструмСнт для написания сцСнариСв, Π±Π΅Π· нСдостатков, ΠΎΠ·Π²ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π² Π½Π°Ρ‡Π°Π»Π΅ тСкста, Π° Ρ‚Π°ΠΊΠΆΠ΅ достаточно простотой Π² использовании. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ коррСктности сцСнария Ρ‚Π°ΠΊ ΠΆΠ΅ Π½Π΅ Π±Ρ‹Π» потСрян β€” использованиС mock повСдСния позволяСт Π½Π°ΠΌ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² достаточной ΠΌΠ΅Ρ€Π΅, ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ с исходными ΠΊΠΎΠ΄Π°ΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° β€” groovydsl. ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Gradle Ρ‡Π΅Ρ€Π΅Π· Π²Ρ€Π°ΠΏΠΏΠ΅Ρ€.

НСкоторыС ΠΈΠ΄Π΅ΠΈ взяты ΠΈΠ· ΠΊΠ½ΠΈΠ³ΠΈ Groovy for Domain-Specific Languiages, Fergal Dearle, 2010

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Groovy ΠΊΠ°ΠΊ Π»ΡƒΡ‡ΡˆΠ°Ρ Java

Groovy ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ Ρ€Π°Π·Π½ΠΎΠΌΡƒ β€” для скриптов, для Grails, для быстрого написания ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ², для DSL ΠΈ Ρ‚.Π΄.

МСня ΠΆΠ΅ Groovy всСгда ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Π» ΠΊΠ°ΠΊ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½Π°Ρ Java. Π’ самом Π΄Π΅Π»Π΅ β€” ΠΏΠΎΡ‡Ρ‚ΠΈ любой Java ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Groovy β€” Ρ‚.Π΅. Ссли Π½Π΅ помнишь ΠΊΠ°ΠΊ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² Groovy-way, ΠΌΠΎΠΆΠ½ΠΎ всСгда ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ принято Π² Java, Π° Ссли помнишь β€” Π²ΠΎΡ‚ Ρ‚Π΅Π±Π΅ ΠΈ Closures, ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ списки, ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅Ρ‰Π΅ΠΉ.

ЕдинствСнноС, Ρ‡Ρ‚ΠΎ мСшало ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Groovy для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ production ΠΊΠΎΠ΄Π° β€” отсутствиС ошибок компиляции Π² большом числС случаСв. НапримСр Ссли Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΡˆΡŒ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΎΠ±Ρ€Π°Ρ‰Π°Π΅ΡˆΡŒΡΡ ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Ρ‚.Π΄.

Для ΠΌΠ½ΠΎΠ³ΠΈΡ… Groovy Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ это Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ (см. Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρƒ с XML Π² Groovy), Π½ΠΎ Ссли я ΠΏΠΈΡˆΡƒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΌΠ½Π΅ это ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚.

Π’Π°ΠΊ Π²ΠΎΡ‚, Π½Π°ΠΊΠΎΠ½Π΅Ρ† Π² Groovy 2.0 появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ β€” провСряй Π² этом классС Ρ‚ΠΈΠΏΡ‹, сущСствованиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…!

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊΠΎΠΉ класс:

java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π€ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy

Он комплируСтся Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Но Ссли ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ
@TypeChecked (эта аннотация ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π° классС ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅), Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ошибки:

java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π€ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy

Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° автоматичСски Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ, Ссли ΠΌΡ‹ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ для класса ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ @CompileStatic :

java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy. Π€ΠΎΡ‚ΠΎ java Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ groovy

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° Groovy всё Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ писалось Π½Π° Java ΠΈ Π½Π΅ Π±ΠΎΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… компилятором.

ΠŸΠΎΠ»Π½Ρ‹ΠΉ список ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь.

Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Π΅Ρ‰Π΅ классно, Ссли Π±Ρ‹ сдСлали ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎ аннотации…

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Groovy

Π”Π°Π½Π½Ρ‹ΠΉ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ прСдставляСт ΠΈΠ· сСбя руководство ΠΏΠΎ языку программирования Groovy

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Установка ΠΈ настройка [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

На страницС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ установки (ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ установив Java (JDK)). ПослС установки ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ доступны Groovy Console ΠΈ Groovy Shell Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π΅Π³ΠΎ.

Π’Π°ΠΊΠΆΠ΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ прямо ΠΈΠ· Groovy Web Console.

ΠŸΠ΅Ρ€Π΅Π΄ запуском ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² путях Π’Π°ΡˆΠ΅ΠΉ ОБ Π±Ρ‹Π»ΠΈ прописаны пСрСмСнная GROOVY_HOME ΠΈ ΠΏΡƒΡ‚ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ PATH ΠΊ исполняСму Ρ„Π°ΠΉΠ»Ρƒ groovy.bat (ΠΈΠ»ΠΈ groovy.sh)

Π’Π°ΠΊΠΆΠ΅ Ρ„Π°ΠΉΠ» с ΠΊΠΎΠ΄ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Java. ДСлаСтся это Ρ‚Π°ΠΊ:

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈ Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. По Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ, пСрвая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° просто Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ привСтствиС ΠΌΠΈΡ€Ρƒ:

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ Π΅Ρ‘ Π² Ρ„Π°ΠΉΠ» helloworld.groovy ΠΈ запуститС.

На экранС появится надпись:

На этом Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ.

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΈ дСмонстрация Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ называСтся Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, пропускаСмая ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ (ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ компиляции).

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° этапС компиляции ΠΈΠ»ΠΈ Π½Π°Π΄ΠΎ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ этот Ρ‚ΠΈΠΏ, Π² Groovy опрСдСляСтся ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом def (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ var Π² Java):

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π’ Groovy Π΅ΡΡ‚ΡŒ 2 Ρ‚ΠΈΠΏΠ° строк:

Бписки [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Groovy содСрТит Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ списков. Бписки ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡƒΡ‚Π΅ΠΌ пСрСчислСния элСмСнтов Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках:

ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ элСмСнтам списка осущСствляСтся ΠΏΠΎ индСксу, ΠΊΠ°ΠΊ ΠΊ массиву Π² Java:

НовыС элСмСнты ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² список Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, совмСстноС использованиС списков ΠΈ ranges:

Π’Π°ΠΊΠΆΠ΅, для индСксирования ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ списки:

Π’Π°ΠΊΠΆΠ΅, Groovy прСдоставляСт встроСнный Ρ†ΠΈΠΊΠ», для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° элСмСнтов списка, ΠΈΠ»ΠΈ элСмСнтов любого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ интСрфСйс java.lang.Iterable:

Map (Ассоциативный массив) [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Аналогично ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ массивам (спискам), Groovy ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ синтаксис для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с maps (ассоциативными массивами). ОбъявлСниС выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π’Π°ΠΊΠΆΠ΅, сущСствуСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ синтаксис для объявлСния пустых map:

Доступ ΠΊ элСмСнтам осущСствляСтся ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, с использованиСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° [], ΠΈΠ»ΠΈ ΠΆΠ΅ с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π΅ΠΌ:

Аналогично производится ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ элСмСнтов:

Для хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² качСствС ΠΊΠ»ΡŽΡ‡Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ скобки ():

УсловноС исполнСниС [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Одной ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… особСнностСй любого языка программирования являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ Π² Ρ€Π°Π·Π½Ρ‹Ρ… условиях. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это состоит Π² использовании IF конструкции. НапримСр:

НС Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡ‚Π΅ΡΡŒ ΠΎ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС, это просто ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, сСйчас ΡƒΡ‚Ρ€ΠΎ ΠΈΠ»ΠΈ Π²Π΅Ρ‡Π΅Ρ€. ΠžΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° выполняСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: сначала оцСниваСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках ΠΈ Π² зависимости ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° true (истинно) ΠΈΠ»ΠΈ false (Π»ΠΎΠΆΠ½ΠΎ) выполняСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ»ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½ΠΈΠΆΠ΅ Ρ€Π°Π·Π΄Π΅Π» логичСскиС выраТСния.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ​​блок else Π½Π΅ трСбуСтся, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°:

ЛогичСскиС выраТСния [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π‘ΠΎΠ»Π΅Π΅ слоТныС логичСскиС выраТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π±ΡƒΠ»Π΅Π²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚, ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, послСднСС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Closures (Замыкания) [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Бинтаксис замыкания : < [closureArguments->] statements >

Π’ замыканиях ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ присутствуСт пСрСмСнная it ΠΈ ссылаСтся Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π² Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΈ:

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ замыкания Π² классС ΠΈ Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²:

Если Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ интСрфСйс(Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ), Ρ‚ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ Ρ‚Π°ΠΊ:

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс Expando для создания динамичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (ΠΊΠ°ΠΊ замыкания) ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ:

Π Π°Π±ΠΎΡ‚Π° с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π Π°Π±ΠΎΡ‚Π° со строками [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Classes and Objects (ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹) [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

ОписаниС ΠΈ созданиС класса(ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ класс ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ доступа public, Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ доступа private, Π½ΠΎ компилятор groovy сам сдСлаСт для этих ΠΏΠΎΠ»Π΅ΠΉ Π³Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ ΠΈ сСттСры с доступом public):

Groovy добавляСт ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌΡƒ классу конструктор ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏΠ° Map Ссли Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π΄Ρ€ΡƒΠ³ΠΎΠΉ конструктор.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ @MapConstrutor ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ классу конструктор с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Map:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *