Apache Groovy

**Apache Groovy** — bul Java platformasına arnalǵan, Java sintaksisine sáykes keletuǵın obyektke baǵdarlanǵan programmalastırıw tili. Ol Python, Ruby hám Smalltalk tillerindegige uqsas ózgeshelikleri bar statikalıq hám dinamikalıq til bolıp tabıladı. Ol Java Platforması ushın programmalastırıw tili de, skriptlew tili retinde de qollanılıwı múmkin, Java virtual mashinası (JVM) bayt-kodına kompilyaciya etiledi hám basqa Java kodı hám kitapxanaları menen tegis óz-ara islesedi. Groovy Javaǵa uqsas figuralı qawsırmalı sintaksisti paydalanadı. Groovy jabıwlardı, kóp qatarlı qatarlardı hám qatarlarǵa jaylastırılǵan ańlatpalardı qollap-quwatlaydı. Groovydiń kúshiniń úlken bólimi onıń annotaciyalar arqalı iske túsiriletuǵın AST transformaciyalarında.

Groovy 1.0 2007-jıl 2-yanvarda, al Groovy 2.0 2012-jıl iyulda shıǵarıldı. 2-versiyadan baslap, Groovy statikalıq kompilyaciyalana aladı, bul tipti shıǵarıw hám ónimdarlıqtıń Javaǵa jaqın bolıwın usınadı. Groovy 2.4 Pivotal Software qáwenderligindegi sońǵı iri reliz boldı, bul qáwenderlik 2015-jıl martta tamamlandı. Sonnan berli Groovy óziniń basqarıw strukturasın Apache Programmalıq Támiynat Fondındaǵı Proektti Basqarıw Komitetine ózgertti.

## Tariyxı
Djeyms Streychen birinshi ret Groovydi islep shıǵıw haqqında 2003-jıl avgust ayında óz blogında ayttı. 2004-jıl martta Groovy Java Jámiyetshilik Processine (JCP) JSR 241 retinde usınıldı hám dawıs beriw arqalı qabıl etildi. 2004 hám 2006-jıllar arasında bir neshe versiyalar shıǵarıldı. JCP standartlastırıw jumısı baslanǵannan keyin, versiya nomerleniwi ózgerdi hám «1.0» dep atalǵan versiya 2007-jıl 2-yanvarda shıǵarıldı. 1.1 nomerli hár túrli beta hám reliz kandidatlarınan keyin, 2007-jıl 7-dekabrde Groovy 1.1 Final shıǵarıldı hám kirgizilgen kóplegen ózgerislerdi sáwlelendiriw ushın tez arada Groovy 1.5 dep qayta nomerlendi.

2007-jılı Groovy JAX 2007 innovaciya sıylıǵında birinshi orındı iyeledi. 2008-jılı Groovy veb-freymvorkı Grails JAX 2008 innovaciya sıylıǵında ekinshi orındı iyeledi.

2008-jıl noyabr ayında SpringSource Groovy hám Grails kompaniyasın (G2One) satıp aldı. 2009-jıl avgust ayında VMware SpringSource-tı satıp aldı.

2012-jıl aprel ayında, segiz jıllıq belsendiliksizlikten keyin, Specifikaciya jetekshisi JSR 241 statusın belsendi emes dep ózgertti.

Streychen proektten 2007-jılı Groovy 1.0 relizinen bir jıl aldın únsiz ketken edi. 2016-jıl oktyabr ayında Streychen bılay dedi: «Men ele de groovy-di (jenkins pipeline-ları júdá groovy!), java, go, typescript hám kotlin-di jaqsı kóremen».

2012-jıl 2-iyulda Groovy 2.0 shıǵarıldı, ol basqa jańa ózgeshelikler menen birge, statikalıq kompilyaciyalawdı hám statikalıq tip tekseriwin qostı.

EMC Corporation (EMC) hám VMware tárepinen 2013-jıl aprel ayında Pivotal Software birlesken kárxanası dúzilgende, Groovy hám Grails onıń ónim portfeliniń bir bólimin quradı. Pivotal 2015-jıl aprel ayınan baslap Groovy hám Grails-ke qáwenderlikti toqtattı. Sol ayda Groovy óziniń basqarıw strukturasın Codehaus repozitoriyasınan Apache Programmalıq Támiynat Fondınıń inkubatorı arqalı Proektti Basqarıw Komitetine (PMC) ózgertti. Groovy Apache inkubatorınan shıǵıp, 2015-jıl noyabr ayında joqarı dárejeli joybarǵa aylandı.

2020-jıl 7-fevralda Groovy 3.0 shıǵarıldı. 4.0 versiyası 2022-jıl 25-yanvarda shıǵarıldı.

## Ózgeshelikleri
Kópshilik jaramlı Java faylları sonday-aq jaramlı Groovy faylları bolıp tabıladı. Eki til uqsas bolsa da, Groovy kodı anaǵurlım ıqsham bolıwı múmkin, sebebi oǵan Java talap etetuǵın barlıq elementler kerek emes. Bul Java baǵdarlamashılarına anaǵurlım kóbirek Groovy programmalastırıw idiomaların iyelewden aldın, tanıs Java sintaksisinen baslap, Groovydi basqıshpa-basqısh úyreniwge imkaniyat beredi.

Javada bolmaǵan Groovy ózgesheliklerine statikalıq hám dinamikalıq tiplestiriw (def gilt sózi menen), operatorlardı artıqsha júklew, dizimler hám associativ massivler (kartalar) ushın jergilikli sintaksis, turaqlı ańlatpalar ushın jergilikli qollap-quwatlaw, polimorfli iteraciya, qatar interpolyaciyası, qosımsha járdemshi metodlar hám null kórsetkishlerdi avtomat túrde tekseriw ushın qáwipsiz navigaciya operatorı ?. (mısalı, `variable?.method()` yamasa `variable?.field`) kiredi.

2-versiyadan baslap, Groovy sonday-aq modullikti (proekt paydalanatuǵın tek ǵana jar faylların jetkerip beriw, usılayınsha Groovy kitapxanasınıń kólemin azaytıw), tip tekseriwin, statikalıq kompilyaciyanı, Project Coin sintaksis jaqsılanıwların, multicatch blokların hám Java 7-de kirgizilgen `invokedynamic` kórsetpesin paydalanıp, úziliksiz ónimdarlıqtı arttırıwdı qollap-quwatlaydı.

Groovy XML hám HTML sıyaqlı belgilew tillerin ishki Hújjet Obyekt Modeli (DOM) sintaksisin qollanıw arqalı tábiyiy túrde qollap-quwatlaydı. Bul ózgeshelik bir qıylı hám qısqa sintaksis penen programmalastırıw metodologiyası járdeminde kóplegen túrdegi hár túrli maǵlıwmat aktivlerin anıqlawǵa hám basqarıwǵa imkaniyat beredi.

Javadan ayırmashılıǵı, Groovy derek kodı faylı, eger ol hár qanday klass anıqlamasınan tıs kodtı óz ishine alsa, eger ol main metodı bar klass bolsa, yamasa ol Runnable yamasa GroovyTestCase bolsa, (kompilyaciyalanbaǵan) skript retinde orınlanıwı múmkin. Groovy skripti orınlanıwdan aldın tolıq analizlenedi, kompilyaciya etiledi hám generaciya etiledi (Python hám Ruby sıyaqlı). Bul jasırın túrde júz beredi hám kompilyaciyalanǵan versiya process artefaktı retinde saqlanbaydı.

### GroovyBeans, qásiyetler
GroovyBeans — bul Groovydiń JavaBeans versiyası. Groovy jasırın túrde getterler hám setterlerdi payda etedi. Tómendegi kodta `setColor(String color)` hám `getColor()` jasırın túrde payda etiledi. Sońǵı eki qatar, color-ǵa tikkeley kiriwge urınǵan sıyaqlı kórinedi, biraq negizinde jasırın payda etilgen metodlardı shaqıradı.
```groovy
class AGroovyBean {
  String color
}

def myGroovyBean = new AGroovyBean()

myGroovyBean.setColor('baby blue')
assert myGroovyBean.getColor() == 'baby blue'

myGroovyBean.color = 'pewter'
assert myGroovyBean.color == 'pewter'
```
Groovy Javanıń massiv sintaksisin esletetuǵın, dizimler hám kartalar menen islesiw ushın ápiwayı, izbe-iz sintaksisti usınadı.
```groovy
def movieList = ['Dersu Uzala', 'Ran', 'Seven Samurai'] // Massivke uqsaydı, biraq bul dizim
assert movieList[2] == 'Seven Samurai'
movieList[3] = 'Casablanca' // Dizimge element qosadı
assert movieList.size() == 4

def monthMap = [ 'January' : 31, 'February' : 28, 'March' : 31 ] // Kartanı járiyalaydı
assert monthMap['March'] == 31 // Jazıwǵa kiredi
monthMap['April'] = 30 // Kartaǵa jazıw qosadı
assert monthMap.size() == 4
```


### Prototip keńeytpesi
Groovy `ExpandoMetaClass`, Keńeytpe Modulleri (tek Groovy 2-de), Objective-C-ge uqsas Kategoriyalar hám `DelegatingMetaClass` arqalı prototip keńeytpesin qollap-quwatlaydı.

`ExpandoMetaClass` Rubydiń ashıq klass koncepciyasına uqsas, klassqa kirgizilgen ózgerislerdi ańsat ańlatıw ushın arnawlı taraw tili (DSL) usınadı:
```groovy
Number.metaClass {
  sqrt = { Math.sqrt(delegate) }
}

assert 9.sqrt() == 3
assert 4.sqrt() == 2
```
Groovydegi kodqa prototiplew arqalı kirgizilgen ózgerisler Javada kórsetilmeydi, sebebi Groovydegi hárbir atribut/metod shaqırıwı metaklass registri arqalı ótedi. Ózgertilgen kodqa Javadan tek metaklass registrine barıw arqalı ǵana kiriwge boladı.

## Derekler

__BÖLİDİMÖNDEMEW__