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, Π²Π΅ΡΡΠΈΠΈ 7.2, 7.3, 7.4, 8.0
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Groovy
ΠΠΊΡΠΈΠ²Π°ΡΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Groovy
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Groovy ΠΎΡΠΊΠ»ΡΡΠ΅Π½Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ Java-Π²Π΅ΡΡΠΈΠΈ ΡΡΠ΅Π΄Ρ IDE. ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Groovy Π² IDE ΡΠ½Π°ΡΠ°Π»Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Groovy Π² Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
ΠΡΠ±Π΅ΡΠΈΡΠ΅ ‘Π‘Π΅ΡΠ²ΠΈΡ’ > ‘ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ’ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΌΠ΅Π½Ρ, ΡΡΠΎΠ±Ρ ΠΎΡΠΊΡΡΡΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡ Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π² Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
ΠΡΠ±Π΅ΡΠΈΡΠ΅ ‘ΠΠΎΠΊΠ°Π·Π°ΡΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ’ ΠΈ Π½Π°ΠΉΠ΄ΠΈΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Groovy ΠΈ Grails Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π²Π΅ΡΡΠΈ groovy Π² ΠΏΠΎΠ»Π΅ ΠΏΠΎΠΈΡΠΊΠ°, ΡΡΠΎΠ±Ρ ΠΎΡΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ‘Groovy and Grails’ ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ ‘ΠΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ’.
ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ ‘ΠΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ’ Π² ΠΎΠΊΠ½Π΅ ‘ΠΠ°ΡΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ NetBeans IDE’, ΡΡΠΎΠ±Ρ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Groovy.
ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ ‘ΠΠ°Π²Π΅ΡΡΠΈΡΡ’ Π² ΠΎΠΊΠ½Π΅ ‘ΠΠ°ΡΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ NetBeans IDE’ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈ Π·Π°ΡΠ΅ΠΌ Π½Π°ΠΆΠΌΠΈΡΠ΅ ‘ΠΠ°ΠΊΡΡΡΡ’ Π² Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ Π²Ρ ΡΠ·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Java.
ΠΡΠ±Π΅ΡΠΈΡΠ΅ ‘Π€Π°ΠΉΠ» > Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ’ (Ctrl-Shift-N; β-Shift-N Π² Mac) Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΌΠ΅Π½Ρ, ΡΡΠΎΠ±Ρ ΠΎΡΠΊΡΡΡΡ ΠΌΠ°ΡΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ².
Π ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ Java Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ‘ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Java’. ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠ°Π»Π΅Π΅».
Π ΠΏΠΎΠ»Π΅ ‘ΠΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°’ Π²Π²Π΅Π΄ΠΈΡΠ΅ GroovyJavaDemo, Π° Π² ΠΏΠΎΠ»Π΅ ‘ΠΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°’ ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΏΠ°ΠΏΠΊΡ, Π³Π΄Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
Π‘Π½ΠΈΠΌΠΈΡΠ΅ ΡΠ»Π°ΠΆΠΎΠΊ «Π‘ΠΎΠ·Π΄Π°ΡΡ Π³Π»Π°Π²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ». ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠΎΡΠΎΠ²ΠΎ».
ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ ‘ΠΠΎΡΠΎΠ²ΠΎ’ IDE ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² ΠΎΠΊΠ½Π΅ ‘ΠΡΠΎΠ΅ΠΊΡΡ’.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Java ΠΈ ΡΠ°ΠΉΠ»Π° Groovy
Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ Π²Ρ ΡΠ·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ JFrame ΠΈ ΠΊΠ»Π°ΡΡ Groovy.
Π©Π΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΡΠ·Π΅Π» ΠΏΡΠΎΠ΅ΠΊΡΠ° Π² ΠΎΠΊΠ½Π΅ ‘ΠΡΠΎΠ΅ΠΊΡΡ’ ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ‘Π‘ΠΎΠ·Π΄Π°ΡΡ > ΠΡΡΠ³ΠΎΠ΅’. ΠΡΠΊΡΠΎΠ΅ΡΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΌΠ°ΡΡΠ΅ΡΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ².
Π ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ ‘Π€ΠΎΡΠΌΡ Swing GUI’ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ‘Π€ΠΎΡΠΌΠ° JFrame’. ΠΠ°ΠΆΠΌΠΈΡΠ΅ ‘ΠΠ°Π»Π΅Π΅’.
Π ΠΏΠΎΠ»Π΅ ‘ΠΠΌΡ ΠΊΠ»Π°ΡΡΠ°’ Π²Π²Π΅Π΄ΠΈΡΠ΅ DisplayJFrame.
Π ΠΏΠΎΠ»Π΅ ‘ΠΠ°ΠΊΠ΅Ρ’ Π²Π²Π΅Π΄ΠΈΡΠ΅ org.demo. ΠΠ°ΠΆΠΌΠΈΡΠ΅ ‘ΠΠΎΡΠΎΠ²ΠΎ’.
ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ ‘ΠΠΎΡΠΎΠ²ΠΎ’ Π² ΡΡΠ΅Π΄Π΅ IDE ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΎΡΠΌΠ° JFrame, ΠΈ Π² ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ°ΠΉΠ».
Π©Π΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΡΠ·Π΅Π» ΠΏΡΠΎΠ΅ΠΊΡΠ° Π² ΠΎΠΊΠ½Π΅ ‘ΠΡΠΎΠ΅ΠΊΡΡ’ ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ‘Π‘ΠΎΠ·Π΄Π°ΡΡ > ΠΡΡΠ³ΠΎΠ΅’. ΠΡΠΊΡΠΎΠ΅ΡΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΌΠ°ΡΡΠ΅ΡΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ².
Π ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ Groovy Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ‘ΠΠ»Π°ΡΡ Groovy’. ΠΠ°ΠΆΠΌΠΈΡΠ΅ ‘ΠΠ°Π»Π΅Π΅’.
Π ΠΏΠΎΠ»Π΅ ‘ΠΠΌΡ ΠΊΠ»Π°ΡΡΠ°’ Π²Π²Π΅Π΄ΠΈΡΠ΅ GreetingProvider.
ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ ‘ΠΠΎΡΠΎΠ²ΠΎ’ IDE ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ°ΠΉΠ» Groovy ΠΈ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Π΅Π³ΠΎ Π² ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅.
ΠΡΠ»ΠΈ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΡΠ·Π΅Π» ΠΏΡΠΎΠ΅ΠΊΡΠ° Π² ΠΎΠΊΠ½Π΅ ‘ΠΡΠΎΠ΅ΠΊΡΡ’, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π΄Π²Π° ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ ΡΠ°ΠΉΠ»Π° ΠΏΠΎΠ΄ ΡΠ·Π»ΠΎΠΌ ‘ΠΡΡ ΠΎΠ΄Π½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ’.
ΠΡΠ·ΠΎΠ² ΡΠ°ΠΉΠ»Π° Groovy ΠΈΠ· ΠΊΠ»Π°ΡΡΠ° Java
Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ Π²Ρ ΡΠ·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΠ΄ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ Groovy ΠΈ ΠΊΠ»Π°ΡΡΠΎΠΌ Java.
ΠΡΠΊΡΠΎΠΉΡΠ΅ ΡΠ°ΠΉΠ» GreetingProvider.groovy Π² ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ (Π΅ΡΠ»ΠΈ ΠΎΠ½ Π΅ΡΠ΅ Π½Π΅ ΠΎΡΠΊΡΡΡ).
ΠΠ°Π΄Π°ΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ°, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ (Π²ΡΠ΄Π΅Π»Π΅Π½ ΠΏΠΎΠ»ΡΠΆΠΈΡΠ½ΡΠΌ ΡΡΠΈΡΡΠΎΠΌ). Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
ΠΡΠΊΡΠΎΠΉΡΠ΅ ΡΠ°ΠΉΠ» DisplayJFrame.java Π² ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ (Π΅ΡΠ»ΠΈ ΠΎΠ½ Π΅ΡΠ΅ Π½Π΅ ΠΎΡΠΊΡΡΡ) ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡ ‘ΠΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅’.
ΠΡΠΊΡΠΎΠΉΡΠ΅ ΠΏΠ°Π»ΠΈΡΡΡ (Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ‘ΠΠΊΠ½ΠΎ > ΠΠ°Π»ΠΈΡΡΠ°’ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΌΠ΅Π½Ρ) ΠΈ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΈΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ‘Π’Π΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅’ ( jTextField ) ΠΈ ΠΏΠ°Π»ΠΈΡΡΡ Π½Π° ΡΠΎΡΠΌΡ JFrame.
ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡ ‘ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄’ ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π² Π²Π΅ΡΡ Π½ΡΡ ΡΠ°ΡΡΡ ΡΠ΅Π»Π° ΠΊΠ»Π°ΡΡΠ°, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Groovy ΠΈ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ getGreeting() Π² ΠΊΠ»Π°ΡΡΠ΅ Groovy Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅.
ΠΠ»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π² ΠΊΠ»Π°ΡΡΠ΅ Java ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° Groovy, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π²ΡΠΎΠ·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°.
Π©Π΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΡΠ·Π΅Π» ΠΏΡΠΎΠ΅ΠΊΡΠ° Π² ΠΎΠΊΠ½Π΅ «ΠΡΠΎΠ΅ΠΊΡΡ» ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ «ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ».
ΠΡΠ»ΠΈ Π²ΡΠ±ΡΠ°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ‘ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ’, IDE Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΡΠ±ΠΎΡΠΊΡ ΠΈ Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅ Π² ΠΎΠΊΠ½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΡΠ΅ΠΊΡΡ ΠΈΠ· ΠΊΠ»Π°ΡΡΠ° 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 ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΊΠ°Π·Π°ΡΡ β ΠΏΡΠΎΠ²Π΅ΡΡΠΉ Π² ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΡΠΈΠΏΡ, ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ !
ΠΠΎΠ·ΡΠΌΠ΅ΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊΠΎΠΉ ΠΊΠ»Π°ΡΡ:
ΠΠ½ ΠΊΠΎΠΌΠΏΠ»ΠΈΡΡΠ΅ΡΡΡ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ
@TypeChecked (ΡΡΠ° Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π° ΠΊΠ»Π°ΡΡΠ΅ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π΅), ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΎΡΠΈΠ±ΠΊΠΈ:
Π’Π°ΠΊΠΆΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΠΌΡ Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ @CompileStatic :
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΈΡΠ°ΡΡ Π½Π° 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: