Groovy - Hızlı Kılavuz

Groovy, Java platformuna dayanan nesne yönelimli bir dildir. Groovy 1.0, Groovy 2.4 ile 2 Ocak 2007'de piyasaya sürüldü. Groovy, Apache License v 2.0 aracılığıyla dağıtılır.

Groovy'nin Özellikleri

Groovy aşağıdaki özelliklere sahiptir -

  • Hem statik hem de dinamik yazım desteği.
  • Operatör aşırı yükleme desteği.
  • Listeler ve ilişkilendirilebilir diziler için yerel sözdizimi.
  • Normal ifadeler için yerel destek.
  • XML ve HTML gibi çeşitli biçimlendirme dilleri için yerel destek.
  • Groovy, Java ve Groovy'nin sözdizimi çok benzer olduğundan Java geliştiricileri için basittir.
  • Mevcut Java kitaplıklarını kullanabilirsiniz.
  • Groovy, java.lang.Object'i genişletir.

Groovy'nin resmi web sitesi http://www.groovy-lang.org/

Groovy ortam kurulumunu elde etmenin çeşitli yolları vardır.

Binary download and installation- Windows Installer bölümünü almak için www.groovy-lang.org/download.html bağlantısına gidin . Groovy yükleyiciyi indirmeye başlamak için bu seçeneğe tıklayın.

Yükleyiciyi başlattıktan sonra, kurulumu tamamlamak için aşağıda verilen adımları izleyin.

Step 1 - Dil yükleyicisini seçin.

Step 2 - Sonraki ekranda İleri düğmesine tıklayın.

Step 3 - 'Kabul Ediyorum' düğmesini tıklayın.

Step 4 - Varsayılan bileşenleri kabul edin ve İleri düğmesine tıklayın.

Step 5 - Uygun hedef klasörü seçin ve ardından İleri düğmesine tıklayın.

Step 6 - Kurulumu başlatmak için Kur düğmesine tıklayın.

Step 7 - Kurulum tamamlandığında, yapılandırmayı başlatmak için İleri düğmesine tıklayın.

Step 8 - Varsayılan seçenekleri seçin ve İleri düğmesini tıklayın.

Step 9 - Varsayılan dosya ilişkilendirmelerini kabul edin ve İleri düğmesini tıklayın.

Step 10 - Kurulumu tamamlamak için Bitir düğmesine tıklayın.

Yukarıdaki adımlar izlendikten sonra, Groovy için tam teşekküllü bir entegre geliştirme ortamına sahip olmanıza gerek kalmadan Groovy dilinin farklı yönlerini test etmeye yardımcı olan Groovy kurulumunun parçası olan groovy kabuğu başlatabilirsiniz. Bu, groovysh komutunu komut isteminden çalıştırarak yapılabilir.

Harika ikili dosyaları maven veya gradle yapınızın bir parçası olarak dahil etmek istiyorsanız, aşağıdaki satırları ekleyebilirsiniz

Gradle

'org.codehaus.groovy:groovy:2.4.5'

Uzman

<groupId>org.codehaus.groovy</groupId> 
<artifactId>groovy</artifactId>  
<version>2.4.5</version>

Groovy'nin temel sözdizimini anlamak için önce basit bir Hello World programına bakalım.

İlk Merhaba Dünya Programınızı Oluşturma

İlk merhaba dünya programınızı oluşturmak, aşağıdaki kod satırını girmek kadar basittir -

class Example {
   static void main(String[] args) {
      // Using a simple println statement to print output to the console
      println('Hello World');
   }
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

Hello World

Groovy'de İthalat İfadesi

Import deyimi, kodunuzda kullanılabilecek diğer kitaplıkların işlevlerini içe aktarmak için kullanılabilir. Bu,import anahtar kelime.

Aşağıdaki örnek, HTML veya XML biçimlendirmesi oluşturmak için muhtemelen en çok kullanılan sınıflardan biri olan MarkupBuilder sınıfının basit bir içe aktarımının nasıl kullanılacağını gösterir.

import groovy.xml.MarkupBuilder 
def xml = new MarkupBuilder()

Varsayılan olarak, Groovy kodunuza aşağıdaki kitaplıkları dahil eder, bu nedenle bunları açıkça içe aktarmanız gerekmez.

import java.lang.* 
import java.util.* 
import java.io.* 
import java.net.* 

import groovy.lang.* 
import groovy.util.* 

import java.math.BigInteger 
import java.math.BigDecimal

Groovy'de Jetonlar

Bir belirteç, bir anahtar sözcük, bir tanımlayıcı, bir sabit, bir dize değişmezi veya bir semboldür.

println(“Hello World”);

Yukarıdaki kod satırında, iki simge vardır, birincisi println anahtar sözcüğü ve diğeri "Merhaba Dünya" dize hazır bilgisidir.

Groovy için yorumlar

Kodunuzu belgelemek için yorumlar kullanılır. Groovy'deki yorumlar tek satır veya çok satırlı olabilir.

Tek satır açıklamalar, satırın herhangi bir konumunda // kullanılarak tanımlanır. Aşağıda bir örnek gösterilmiştir -

class Example {
   static void main(String[] args) {
      // Using a simple println statement to print output to the console
      println('Hello World');
   }
}

Çok satırlı açıklamalar, çok satırlı yorumun başında / * ve sonunu belirtmek için * / ile tanımlanır.

class Example {
   static void main(String[] args) {
      /* This program is the first program
      This program shows how to display hello world */
      println('Hello World');
   }
}

Noktalı virgül

Java programlama dilinden farklı olarak, her ifadenin bitiminden sonra noktalı virgül kullanılması zorunlu değildir, isteğe bağlıdır.

class Example {
   static void main(String[] args) {
      def x = 5
      println('Hello World');  
   }
}

Yukarıdaki programı çalıştırırsanız, ana yöntemdeki her iki ifade de herhangi bir hata oluşturmaz.

Tanımlayıcılar

Tanımlayıcılar değişkenleri, işlevleri veya diğer kullanıcı tanımlı değişkenleri tanımlamak için kullanılır. Tanımlayıcılar bir harf, dolar veya alt çizgiyle başlar. Bir sayı ile başlayamazlar. İşte bazı geçerli tanımlayıcı örnekleri -

def employeename 
def student1 
def student_name

nerede def Groovy'de bir tanımlayıcıyı tanımlamak için kullanılan bir anahtar kelimedir.

Hello World programımızda bir tanımlayıcının nasıl kullanılabileceğine dair bir kod örneği.

class Example {
   static void main(String[] args) {
      // One can see the use of a semi-colon after each statement
      def x = 5;
      println('Hello World'); 
   }
}

Yukarıdaki örnekte, değişken x tanımlayıcı olarak kullanılır.

Anahtar kelimeler

Adından da anlaşılacağı gibi anahtar sözcükler, Groovy Programlama dilinde ayrılmış özel sözcüklerdir. Aşağıdaki tablo Groovy'de tanımlanan anahtar sözcükleri listeler.

gibi iddia etmek kırmak durum
tutmak sınıf sabit devam et
def varsayılan yapmak Başka
Sıralama genişler yanlış En sonunda
için git Eğer uygular
ithalat içinde örneği arayüz
yeni Çek paket dönüş
Süper değiştirmek bu atmak
atar kişisel özellik doğru Deneyin
süre

Beyaz boşluklar

Boşluk, Java ve Groovy gibi bir programlama dilinde boşlukları, sekmeleri, yeni satır karakterlerini ve yorumları tanımlamak için kullanılan terimdir. Boşluk, bir ifadenin bir bölümünü diğerinden ayırır ve derleyicinin bir ifadedeki bir öğenin nerede olduğunu belirlemesini sağlar.

Örneğin, aşağıdaki kod örneğinde, anahtar kelime arasında beyaz bir boşluk var defve x değişkeni. Bu, derleyicinin bunu bilmesi içindef kullanılması gereken anahtar kelimedir ve bu x, tanımlanması gereken değişken adı olmalıdır.

def x = 5;

Değişmezler

Bir literal, groovy'de sabit bir değeri temsil eden bir gösterimdir. Harika dil tam sayılar, kayan nokta sayıları, karakterler ve dizeler için notasyonlara sahiptir. İşte Groovy programlama dilindeki değişmez değer örneklerinden bazıları -

12 
1.45 
‘a’ 
“aa”

Herhangi bir programlama dilinde, çeşitli bilgi türlerini depolamak için çeşitli değişkenler kullanmanız gerekir. Değişkenler, değerleri saklamak için ayrılmış bellek konumlarından başka bir şey değildir. Bu, bir değişken oluşturduğunuzda, değişkenle ilişkili değeri depolamak için bellekte biraz yer ayırdığınız anlamına gelir.

Dize, karakter, geniş karakter, tam sayı, kayan nokta, Boole, vb. Gibi çeşitli veri türlerinin bilgilerini depolamak isteyebilirsiniz. Bir değişkenin veri türüne bağlı olarak, işletim sistemi belleği ayırır ve ayrılmışta nelerin saklanabileceğine karar verir. hafıza.

Yerleşik Veri Türleri

Groovy, çok çeşitli yerleşik veri türleri sunar. Groovy'de tanımlanan veri türlerinin listesi aşağıdadır -

  • byte- Bu, bir bayt değerini temsil etmek için kullanılır. Bir örnek 2'dir.

  • short- Bu, kısa bir sayıyı temsil etmek için kullanılır. Bir örnek 10'dur.

  • int- Bu, tam sayıları temsil etmek için kullanılır. Bir örnek 1234'tür.

  • long- Bu, uzun bir sayıyı temsil etmek için kullanılır. Bir örnek 10000090'dır.

  • float- Bu, 32 bitlik kayan nokta sayılarını temsil etmek için kullanılır. Bir örnek 12.34'tür.

  • double- Bu, bazen gerekli olabilecek daha uzun ondalık sayı temsilleri olan 64 bitlik kayan noktalı sayıları temsil etmek için kullanılır. Bir örnek 12.3456565'tir.

  • char- Bu, tek bir karakter değerini tanımlar. Bir örnek "a" dır.

  • Boolean - Bu, doğru veya yanlış olabilen bir Boole değerini temsil eder.

  • String - Bunlar, içinde temsil edilen metin değişmezleridir the formkarakter zinciri. Örneğin "Merhaba Dünya".

Sınır değerler

Aşağıdaki tablo, sayısal ve ondalık değişmezler için izin verilen maksimum değerleri gösterir.

bayt -128 ila 127
kısa -32.768 ila 32.767
int -2.147.483.648 ile 2.147.483.647
uzun -9,223,372,036,854,775,808 ile +9,223,372,036,854,775,807 arası
yüzen 1.40129846432481707e-45 ila 3.40282346638528860e + 38
çift 4.94065645841246544e-324d ila 1.79769313486231570e + 308d

Sınıf Sayısal

Türler İlkel türlere ek olarak, aşağıdaki nesne türlerine (bazen sarmalayıcı türleri olarak adlandırılır) izin verilir -

  • java.lang.Byte
  • java.lang.Short
  • java.lang.Integer
  • java.lang.Long
  • java.lang.Float
  • java.lang.Double

Ek olarak, aşağıdaki sınıflar isteğe bağlı kesinlik aritmetiğini desteklemek için kullanılabilir -

İsim Açıklama Misal
java.math.BigInteger Değişmez keyfi hassas işaretli integral sayılar 30 g
java.math.BigDecimal Değişmez keyfi hassas işaretli ondalık sayılar 3,5 g

Aşağıdaki kod örneği, farklı yerleşik veri türlerinin nasıl kullanılabileceğini gösterir -

class Example { 
   static void main(String[] args) { 
      //Example of a int datatype 
      int x = 5; 
		
      //Example of a long datatype 
      long y = 100L; 
		
      //Example of a floating point datatype 
      float a = 10.56f; 
		
      //Example of a double datatype 
      double b = 10.5e40; 
		
      //Example of a BigInteger datatype 
      BigInteger bi = 30g; 
		
      //Example of a BigDecimal datatype 
      BigDecimal bd = 3.5g; 
		
      println(x); 
      println(y); 
      println(a); 
      println(b); 
      println(bi); 
      println(bd); 
   } 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

5 
100 
10.56 
1.05E41 
30 
3.5

Groovy'deki değişkenler iki şekilde tanımlanabilir - native syntax veri türü için veya sonraki için by using the def keyword. Değişken tanımları için, ya açıkça bir tür adı sağlamak ya da yerine "def" kullanmak zorunludur. Bu, Groovy ayrıştırıcı tarafından gereklidir.

Önceki bölümde açıklandığı gibi Groovy'de aşağıdaki temel değişken türleri vardır -

  • byte- Bu, bir bayt değerini temsil etmek için kullanılır. Bir örnek 2'dir.

  • short- Bu, kısa bir sayıyı temsil etmek için kullanılır. Bir örnek 10'dur.

  • int- Bu, tam sayıları temsil etmek için kullanılır. Bir örnek 1234'tür.

  • long- Bu, uzun bir sayıyı temsil etmek için kullanılır. Bir örnek 10000090'dır.

  • float- Bu, 32 bitlik kayan nokta sayılarını temsil etmek için kullanılır. Bir örnek 12.34'tür.

  • double- Bu, bazen gerekli olabilecek daha uzun ondalık sayı temsilleri olan 64 bitlik kayan noktalı sayıları temsil etmek için kullanılır. Bir örnek 12.3456565'tir.

  • char- Bu, tek bir karakter değerini tanımlar. Bir örnek "a" dır.

  • Boolean - Bu, doğru veya yanlış olabilen bir Boole değerini temsil eder.

  • String - Bunlar, içinde temsil edilen metin değişmezleridir the formkarakter zinciri. Örneğin "Merhaba Dünya".

Groovy ayrıca, sonraki bölümlerde göreceğimiz diziler, yapılar ve sınıflar gibi ek değişken türlerine de izin verir.

Değişken Beyanlar

Değişken bildirimi, derleyiciye değişken için depolamanın nerede ve ne kadar oluşturulacağını söyler.

Aşağıda, değişken bildirimine bir örnek verilmiştir -

class Example { 
   static void main(String[] args) { 
      // x is defined as a variable 
      String x = "Hello";
		
      // The value of the variable is printed to the console 
      println(x);
   }
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

Hello

Değişkenleri Adlandırma

Bir değişkenin adı harflerden, rakamlardan ve alt çizgi karakterinden oluşabilir. Bir harf veya alt çizgiyle başlamalıdır. Büyük ve küçük harfler farklıdır çünkü Groovy, tıpkı Java gibi büyük / küçük harfe duyarlı bir programlama dili.

class Example { 
   static void main(String[] args) { 
      // Defining a variable in lowercase  
      int x = 5;
	  
      // Defining a variable in uppercase  
      int X = 6; 
	  
      // Defining a variable with the underscore in it's name 
      def _Name = "Joe"; 
		
      println(x); 
      println(X); 
      println(_Name); 
   } 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

5 
6 
Joe

Bunu görebiliriz x ve X büyük / küçük harf duyarlılığı nedeniyle iki farklı değişkendir ve üçüncü durumda, _Name'in bir alt çizgiyle başladığını görebiliriz.

Değişkenleri Yazdırma

Bir değişkenin geçerli değerini println işlevi ile yazdırabilirsiniz. Aşağıdaki örnek bunun nasıl elde edilebileceğini göstermektedir.

class Example { 
   static void main(String[] args) { 
      //Initializing 2 variables 
      int x = 5; 
      int X = 6; 
	  
      //Printing the value of the variables to the console 
      println("The value of x is " + x + "The value of X is " + X);  
   }
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

The value of x is 5 The value of X is 6

Operatör, derleyiciye belirli matematiksel veya mantıksal işlemleri gerçekleştirmesini söyleyen bir semboldür.

Groovy aşağıdaki operatör türlerine sahiptir -

  • Aritmetik operatörler
  • İlişkisel operatörler
  • Mantıksal operatörler
  • Bitsel operatörler
  • Atama operatörleri

Aritmetik operatörler

Groovy dili, herhangi bir dil gibi normal Aritmetik işleçlerini destekler. Aşağıda Groovy'de bulunan Aritmetik operatörler verilmiştir -

Örnek Göster

Şebeke Açıklama Misal
+ İki işlenenin eklenmesi 1 + 2 3 verir
- İlk işlenenden ikinci işleneni çıkarır 2-1 1 verir
* Her iki işlenenin çarpımı 2 * 2 4 verecek
/ Paydaya göre pay bölümü 3/2 1.5 verecek
% Modül İşleci ve bir tamsayı / kayan bölümden sonra kalan kısım % 3 2 1 verir
++ Artımlı operatörler, bir operandın değerini 1 artırmak için kullanılır

int x = 5;

x ++;

x 6 verecek

- Artımlı operatörler, bir operandın değerini 1 azaltmak için kullanılır

int x = 5;

x--;

x 4 verecek

İlişkisel operatörler

İlişkisel operatörler, nesnelerin karşılaştırılmasına izin verir. Groovy'de bulunan ilişkisel operatörler aşağıdadır -

Örnek Göster

Şebeke Açıklama Misal
== İki nesne arasındaki eşitliği test eder 2 == 2 doğru verecektir
! = İki nesne arasındaki farkı test eder 3! = 2 doğru verecektir
< Sol nesnelerin sağ işlenenden daha küçük olup olmadığını kontrol eder. 2 <3 doğru verecektir
<= Sol nesnelerin sağ işlenenden küçük veya ona eşit olup olmadığını kontrol eder. 2 <= 3 doğru verecektir
> Sol nesnelerin sağ işlenenden daha büyük olup olmadığını kontrol eder. 3> 2 doğru verecektir
> = Sol nesnelerin sağ işlenenden büyük veya ona eşit olup olmadığını kontrol eder. 3> = 2 doğru verecektir

Mantıksal operatörler

Mantıksal operatörler, Boole ifadelerini değerlendirmek için kullanılır. Groovy'de bulunan mantıksal operatörler aşağıdadır -

Örnek Göster

Şebeke Açıklama Misal
&& Bu, mantıksal "ve" operatörüdür true && true verecek
|| Bu, mantıksal "veya" operatörüdür doğru || doğru doğru verecek
! Bu, mantıksal "değil" operatörüdür ! false doğru verecektir

Bitsel Operatörler

Groovy, dört bitsel operatör sağlar. Aşağıdakiler Groovy'de bulunan bitsel operatörlerdir -

Örnek Göster

Sr.No Operatör ve Açıklama
1

&

Bu bitsel "ve" operatörüdür

2

|

Bu bitsel "veya" operatörüdür

3

^

Bu bitsel "xor" veya Exclusive veya operatördür

4

~

Bu, bitsel olumsuzlama operatörüdür

İşte bu operatörleri gösteren doğruluk tablosu.

p q p & q p | q p ^ q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

Atama operatörleri

Groovy dili ayrıca atama operatörleri sağlar. Groovy'de bulunan atama operatörleri aşağıdadır -

Örnek Göster

Şebeke Açıklama Misal
+ = Bu, soldaki işlenene sağ işlenen ekler ve sonucu sol işlenenlere atar.

def A = 5

A + = 3

Çıktı 8 olacak

- = Bu, sağ operandı soldaki operanddan çıkarır ve sonucu sol operanda atar

def A = 5

A- = 3

Çıktı 2 olacak

* = Bu, sağ işleneni sol işlenenle çarpar ve sonucu sol işlenene atar

def A = 5

A * = 3

Çıktı 15 olacak

/ = Bu, sol işleneni sağ işlenenle böler ve sonucu sol işlenene atar

def A = 6

A / = 3

Çıktı 2 olacak

% = Bu, iki işlenen kullanarak modülü alır ve sonucu sol işlenenlere atar

def A = 5

A% = 3

Çıktı 2 olacak

Aralık Operatörleri

Groovy, aralık kavramını destekler ve .. notasyonu yardımıyla aralık operatörlerinin notasyonunu sağlar. Aralık operatörünün basit bir örneği aşağıda verilmiştir.

def range = 0..5

Bu sadece, alt sınırı 0 ve üst sınırı 5 olan aralık adı verilen yerel bir değişkene depolanan basit bir tam sayı aralığını tanımlar.

Aşağıdaki kod parçacığı, çeşitli operatörlerin nasıl kullanılabileceğini gösterir.

class Example { 
   static void main(String[] args) { 
      def range = 5..10; 
      println(range); 
      println(range.get(2)); 
   } 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

İtibaren println ifadesi, aralık ifadesinde tanımlanan tüm sayı aralığının görüntülendiğini görebilirsiniz.

Get ifadesi, parametre olarak bir dizin değerini alan tanımlanmış aralıktan bir nesne almak için kullanılır.

[5, 6, 7, 8, 9, 10] 
7

Operatör Önceliği

Aşağıdaki tablo tüm harika operatörleri öncelik sırasına göre listeler.

Sr.No Operatörler ve İsimler
1

++ -- + -

ön artırma / azaltma, tekli artı, tekli eksi

2

* / %

çarpma, div, modulo

3

+ -

toplama çıkarma

4

== != <=>

eşittir, eşit değildir, karşılaştır

5

&

ikili / bitsel ve

6

^

ikili / bit tabanlı xor

7

|

ikili / bitsel veya

8

&&

mantıksal ve

9

||

mantıksal veya

10

= **= *= /= %= += -= <<= >>= >>>= &= ^= |=

Çeşitli atama operatörleri

Şimdiye kadar, birbiri ardına sıralı bir şekilde yürütülen ifadeler gördük. Ek olarak, Groovy'de bir programın mantığındaki kontrol akışını değiştirmek için ifadeler sağlanır. Daha sonra, ayrıntılı olarak göreceğimiz kontrol ifadeleri akışı olarak sınıflandırılırlar.

S.No. İfadeler ve Açıklama
1 While İfadesi

While ifadesi önce koşul ifadesi (bir Boole değeri) değerlendirilerek yürütülür ve sonuç doğruysa while döngüsündeki ifadeler çalıştırılır.

2 Açıklama için

For ifadesi, bir dizi değeri yinelemek için kullanılır.

3 for-in Bildirimi

For-in ifadesi, bir dizi değerde yineleme yapmak için kullanılır.

Döngü Kontrol İfadeleri

S.No. İfadeler ve Açıklama
1 Break İfadesi

Break deyimi, döngülerin ve anahtar deyimlerinin içindeki kontrol akışını değiştirmek için kullanılır.

2 Devam İfadesi

Continue ifadesi break ifadesini tamamlar. Kullanımı while ve for döngüleri ile sınırlıdır.

Karar verme yapıları, programcının, program tarafından değerlendirilecek veya test edilecek bir veya daha fazla koşulu, koşulun geçerli olduğu belirlenirse yürütülecek bir ifade veya ifadeyle birlikte belirtmesini gerektirir. trueve isteğe bağlı olarak, koşul olarak belirlenirse yürütülecek diğer ifadeler false.

Sr.No. İfadeler ve Açıklama
1 if İfadesi

Bu ifadenin genel çalışması, ilk olarak if ifadesinde bir koşulun değerlendirilmesidir. Koşul doğruysa, daha sonra ifadeleri yürütür.

2 if / else İfadesi

Bu ifadenin genel çalışması, ilk olarak if ifadesinde bir koşulun değerlendirilmesidir. Koşul doğruysa, daha sonra ifadeleri yürütür ve else koşulundan önce durur ve döngüden çıkar. Koşul yanlışsa, daha sonra else deyim bloğundaki ifadeleri yürütür ve döngüden çıkar.

3 İç İçe If İfadesi

Bazen birden fazla if ifadesinin birbirinin içine gömülü olması gerekir.

4 Switch İfadesi

Bazen iç içe geçmiş if-else ifadesi o kadar yaygındır ve o kadar sık ​​kullanılır ki, switch deyimi adı verilen daha kolay bir ifade tasarlanmıştır.

5 Yuvalanmış Anahtar Bildirimi

İç içe geçmiş bir anahtar ifadeleri kümesine sahip olmak da mümkündür.

Groovy'de bir yöntem, bir dönüş türüyle veya defanahtar kelime. Yöntemler herhangi bir sayıda argüman alabilir. Bağımsız değişkenleri tanımlarken türlerin açıkça tanımlanması gerekli değildir. Genel, özel ve korumalı gibi değiştiriciler eklenebilir. Varsayılan olarak, herhangi bir görünürlük değiştiricisi sağlanmadıysa, yöntem geneldir.

Bir yöntemin en basit türü, aşağıda gösterildiği gibi parametresi olmayan yöntemdir -

def methodName() { 
   //Method code 
}

Aşağıda basit bir yöntem örneği verilmiştir

class Example {
   static def DisplayName() {
      println("This is how methods work in groovy");
      println("This is an example of a simple method");
   } 
	
   static void main(String[] args) {
      DisplayName();
   } 
}

Yukarıdaki örnekte, DisplayName, konsola bazı metinlerin çıktısını almak için kullanılan iki println deyiminden oluşan basit bir yöntemdir. Statik ana yöntemimizde, sadece DisplayName yöntemini çağırıyoruz. Yukarıdaki yöntemin çıktısı -

This is how methods work in groovy 
This is an example of a simple method

Yöntem Parametreleri

Bir yöntem, davranışı bir veya daha fazla parametrenin değeriyle belirlenirse daha genel olarak kullanışlıdır. Yöntem parametrelerini kullanarak değerleri çağrılan yönteme aktarabiliriz. Parametre adlarının birbirinden farklı olması gerektiğini unutmayın.

Aşağıda gösterildiği gibi parametrelere sahip en basit yöntem türü -

def methodName(parameter1, parameter2, parameter3) { 
   // Method code goes here 
}

Aşağıda, parametrelerle basit bir yöntem örneği verilmiştir

class Example {
   static void sum(int a,int b) {
      int c = a+b;
      println(c);
   }  
	
   static void main(String[] args) {
      sum(10,5);
   } 
}

Bu örnekte, 2 parametreli bir toplama yöntemi oluşturuyoruz, a ve b. Her iki parametre de tiptedirint. Daha sonra ana yöntemimizden toplam yöntemini çağırıyoruz ve değerleri değişkenlere aktarıyoruza ve b.

Yukarıdaki yöntemin çıktısı 15 değeri olacaktır.

Varsayılan Parametreler

Groovy'de, yöntemler içindeki parametreler için varsayılan değerleri belirtmek için bir hüküm vardır. Parametreler için yönteme herhangi bir değer aktarılmazsa, varsayılan olanlar kullanılır. Hem varsayılan olmayan hem de varsayılan parametreler kullanılırsa, varsayılan parametrelerin parametre listesinin sonunda tanımlanması gerektiğine dikkat edilmelidir.

Aşağıda, parametreli basit bir yöntem örneği verilmiştir -

def someMethod(parameter1, parameter2 = 0, parameter3 = 0) { 
   // Method code goes here 
}

İki sayının eklenmesi için daha önce baktığımız aynı örneğe bakalım ve bir varsayılan ve diğer varsayılan olmayan parametresi olan bir yöntem oluşturalım -

class Example { 
   static void sum(int a,int b = 5) { 
      int c = a+b; 
      println(c); 
   } 
	
   static void main(String[] args) {
      sum(6); 
   } 
}

Bu örnekte, iki parametreli bir toplama yöntemi oluşturuyoruz, a ve b. Her iki parametre de int türündedir. Bu örnek ile önceki örnek arasındaki fark, bu durumda için varsayılan bir değer belirlememizdir.b 5. Yani ana yöntemimizden toplam yöntemini çağırdığımızda, sadece 6 olan bir değeri geçme seçeneğimiz var ve bu parametreye atanacak a içinde sum yöntem.

Yukarıdaki yöntemin çıktısı 11 değeri olacaktır.

class Example {
   static void sum(int a,int b = 5) {
      int c = a+b;
      println(c);
   } 
	
   static void main(String[] args) {
      sum(6,6);
   } 
}

Ayrıca 2 değer ileterek de toplama yöntemini çağırabiliriz, yukarıdaki örneğimizde 6'nın 2 değerini geçiyoruz. 6'nın ikinci değeri aslında parametreye atanan varsayılan değerin yerini alacaktır. b.

Yukarıdaki yöntemin çıktısı, 12 değeri olacaktır.

Yöntem Dönüş Değerleri

Yöntemler ayrıca değerleri çağıran programa geri döndürebilir. Bu, bir yöntemin bir çeşit hesaplama yaptığı ve ardından istenen değeri arama yöntemine döndürdüğü modern programlama dilinde gereklidir.

Aşağıda, dönüş değeri olan basit bir yöntem örneği verilmiştir.

class Example {
   static int sum(int a,int b = 5) {
      int c = a+b;
      return c;
   } 
	
   static void main(String[] args) {
      println(sum(6));
   } 
}

Yukarıdaki örneğimizde, bu sefer int türünde olan toplam yöntemimiz için bir dönüş türü belirlediğimize dikkat edin. Yöntemde, toplam değeri çağıran ana programa göndermek için return ifadesini kullanıyoruz. Yöntemin değeri artık ana yöntem için mevcut olduğundan,println konsoldaki değeri görüntülemek için işlev.

Yukarıdaki yöntemin çıktısı 11 değeri olacaktır.

Örnek yöntemleri

Yöntemler normalde, Java dili gibi Groovy içindeki sınıflar içinde uygulanır. Bir sınıf, özelliklerini ve davranışlarını tanımlayan farklı nesneler oluşturmak için bir plandan veya bir şablondur. Sınıf nesneleri, kendi sınıfı tarafından tanımlanan özellikleri ve davranışları sergiler. Dolayısıyla davranışlar, sınıfın içinde yöntemler oluşturularak tanımlanır.

Sınıfları daha sonraki bir bölümde daha ayrıntılı olarak göreceğiz, ancak Aşağıda, bir sınıfta yöntem uygulamasına bir örnek verilmiştir. Önceki örneklerimizde, yöntemimizi statik yöntemler olarak tanımlamıştık, bu da bu yöntemlere doğrudan sınıftan erişebileceğimiz anlamına geliyordu. Sonraki yöntem örneği, yöntemlere sınıfın nesneleri oluşturularak erişildiği örnek yöntemleridir. Yine daha sonraki bir bölümde sınıfları göreceğiz, şimdilik yöntemleri nasıl kullanacağımızı göstereceğiz.

Aşağıda, yöntemlerin nasıl uygulanabileceğine dair bir örnek verilmiştir.

class Example { 
   int x; 
	
   public int getX() { 
      return x; 
   } 
	
   public void setX(int pX) { 
      x = pX; 
   } 
	
   static void main(String[] args) { 
      Example ex = new Example(); 
      ex.setX(100); 
      println(ex.getX()); 
   } 
}

Yukarıdaki örneğimizde, bu sefer sınıf yöntemlerimiz için statik bir özellik belirlemediğimize dikkat edin. Ana fonksiyonumuzda aslında Example sınıfının bir örneğini yaratıyoruz ve ardından 'ex' nesnesinin yöntemini çağırıyoruz.

Yukarıdaki yöntemin çıktısı 100 değeri olacaktır.

Yerel ve Harici Parametre Adları

Groovy, tesisin tıpkı java gibi yerel ve global parametrelere sahip olmasını sağlar. Aşağıdaki örnekte,lx yalnızca işlevi içinde bir kapsamı olan yerel bir parametredir getX() ve xTüm Example sınıfının içinden erişilebilen global bir özelliktir. Değişkene erişmeye çalışırsaklx dışında getX() fonksiyon, bir hata alacağız.

class Example { 
   static int x = 100; 
	
   public static int getX() { 
      int lx = 200; 
      println(lx); 
      return x; 
   } 
	
   static void main(String[] args) { 
      println(getX()); 
   }  
}

Yukarıdaki programı çalıştırdığımızda aşağıdaki sonucu alacağız.

200 
100

Özellikler için bu yöntem

Tıpkı Java'da olduğu gibi groovy, örnek üyelerine thisanahtar kelime. Aşağıdaki örnek, ifadeyi ne zaman kullandığımızı gösterirthis.x, örneğini ifade eder ve değerini belirler x buna göre.

class Example { 
   int x = 100; 
	
   public int getX() { 
      this.x = 200; 
      return x; 
   } 
	
   static void main(String[] args) {
      Example ex = new Example(); 
      println(ex.getX());
   }
}

Yukarıdaki programı çalıştırdığımızda konsolda yazdırılan 200 sonucunu alacağız.

Groovy, G / Ç ile çalışırken bir dizi yardımcı yöntem sağlar. Groovy, dosyalar için aşağıdaki işlevleri sağlamak için daha kolay sınıflar sağlar.

  • Dosyaları okuma
  • Dosyalara yazma
  • Dosya ağaçlarının üzerinden geçme
  • Veri nesnelerini dosyalara okuma ve yazma

Buna ek olarak, Dosya G / Ç işlemleri için her zaman aşağıda listelenen normal Java sınıflarını kullanabilirsiniz.

  • java.io.File
  • java.io.InputStream
  • java.io.OutputStream
  • java.io.Reader
  • java.io.Writer

Dosyaları okuma

Aşağıdaki örnek, Groovy'deki bir metin dosyasının tüm satırlarının çıktısını alacaktır. YöntemeachLine metin dosyasının her satırının okunmasını sağlamak amacıyla Groovy'deki File sınıfında yerleşiktir.

import java.io.File 
class Example { 
   static void main(String[] args) { 
      new File("E:/Example.txt").eachLine {  
         line -> println "line : $line"; 
      } 
   } 
}

File sınıfı, dosya adını parametre olarak alan yeni bir nesneyi başlatmak için kullanılır. Daha sonra eachLine'ın işlevini alır, onu line adlı bir değişkene koyar ve buna göre yazdırır.

Dosya aşağıdaki satırları içeriyorsa, yazdırılacaktır.

line : Example1
line : Example2

Bir Dosyanın İçeriğini Tüm Dize Olarak Okuma

Dosyanın tüm içeriğini bir dize olarak almak istiyorsanız, file sınıfının text özelliğini kullanabilirsiniz. Aşağıdaki örnek bunun nasıl yapılabileceğini göstermektedir.

class Example { 
   static void main(String[] args) { 
      File file = new File("E:/Example.txt") 
      println file.text 
   } 
}

Dosya aşağıdaki satırları içeriyorsa, yazdırılacaktır.

line : Example1 
line : Example2

Dosyalara Yazma

Dosyalara yazmak istiyorsanız, bir dosyaya metin çıktısı almak için writer sınıfını kullanmanız gerekir. Aşağıdaki örnek bunun nasıl yapılabileceğini göstermektedir.

import java.io.File 
class Example { 
   static void main(String[] args) { 
      new File('E:/','Example.txt').withWriter('utf-8') { 
         writer -> writer.writeLine 'Hello World' 
      }  
   } 
}

Example.txt dosyasını açarsanız, dosyaya yazdırılan "Merhaba Dünya" sözcüklerini göreceksiniz.

Bir Dosyanın Boyutunu Alma

Dosyanın boyutunu elde etmek istiyorsanız, dosyanın boyutunu elde etmek için dosya sınıfının length özelliğini kullanabilirsiniz. Aşağıdaki örnek bunun nasıl yapılabileceğini göstermektedir.

class Example {
   static void main(String[] args) {
      File file = new File("E:/Example.txt")
      println "The file ${file.absolutePath} has ${file.length()} bytes"
   } 
}

Yukarıdaki kod dosyanın boyutunu bayt cinsinden gösterecektir.

Bir Dosyanın Dizin Olup Olmadığını Test Etme

Bir yolun dosya mı yoksa dizin mi olduğunu görmek istiyorsanız, isFile ve isDirectoryFile sınıfının seçeneği. Aşağıdaki örnek bunun nasıl yapılabileceğini göstermektedir.

class Example { 
   static void main(String[] args) { 
      def file = new File('E:/') 
      println "File? ${file.isFile()}" 
      println "Directory? ${file.isDirectory()}" 
   } 
}

Yukarıdaki kod aşağıdaki çıktıyı gösterecektir -

File? false 
Directory? True

Bir Dizin Oluşturma

Yeni bir dizin oluşturmak istiyorsanız, mkdirFile sınıfının işlevi. Aşağıdaki örnek bunun nasıl yapılabileceğini göstermektedir.

class Example {
   static void main(String[] args) {
      def file = new File('E:/Directory')
      file.mkdir()
   } 
}

E: \ Dizin dizini mevcut değilse oluşturulacaktır.

Bir Dosyayı Silme

Bir dosyayı silmek isterseniz, File sınıfının silme işlevini kullanabilirsiniz. Aşağıdaki örnek bunun nasıl yapılabileceğini göstermektedir.

class Example {
   static void main(String[] args) {
      def file = new File('E:/Example.txt')
      file.delete()
   } 
}

Dosya varsa silinecektir.

Dosyalar kopyalanıyor

Groovy ayrıca içeriği bir dosyadan diğerine kopyalama işlevi de sağlar. Aşağıdaki örnek bunun nasıl yapılabileceğini göstermektedir.

class Example {
   static void main(String[] args) {
      def src = new File("E:/Example.txt")
      def dst = new File("E:/Example1.txt")
      dst << src.text
   } 
}

Example1.txt dosyası oluşturulacak ve Example.txt dosyasının tüm içeriği bu dosyaya kopyalanacaktır.

Dizin İçeriklerini Alma

Groovy ayrıca bir sürücüdeki sürücüleri ve dosyaları listelemek için işlevsellik sağlar.

Aşağıdaki örnek, bir makinedeki sürücülerin, listRoots File sınıfının işlevi.

class Example { 
   static void main(String[] args) { 
      def rootFiles = new File("test").listRoots() 
      rootFiles.each { 
         file -> println file.absolutePath 
      }
   }
}

Makinenizde bulunan sürücülere bağlı olarak çıktı değişebilir. Standart bir makinede çıktı aşağıdakine benzer olacaktır -

C:\ 
D:\

Aşağıdaki örnek, belirli bir dizindeki dosyaların nasıl listeleneceğini gösterir. eachFile File sınıfının işlevi.

class Example {
   static void main(String[] args) {
      new File("E:/Temp").eachFile() {  
         file->println file.getAbsolutePath()
      }
   } 
}

Çıktı, E: \ Temp dizinindeki tüm dosyaları görüntüler.

Bir dizindeki tüm dosyaları ve alt dizinlerini yinelemeli olarak görüntülemek istiyorsanız, o zaman eachFileRecurseFile sınıfının işlevi. Aşağıdaki örnek bunun nasıl yapılabileceğini göstermektedir.

class Example { 
   static void main(String[] args) {
      new File("E:/temp").eachFileRecurse() {
         file -> println file.getAbsolutePath()
      }
   }
}

Çıktı, E: \ Temp dizinindeki ve varsa alt dizinlerindeki tüm dosyaları görüntüler.

Groovy, "isteğe bağlı olarak" yazılmış bir dildir ve bu ayrım, dilin temellerini anlarken önemli bir noktadır. Derleyicinin her değişken için tüm türleri bildiği ve derleme zamanında sözleşmeleri anlayıp yerine getirebildiği "güçlü" bir dil olan Java ile karşılaştırıldığında. Bu, yöntem çağrılarının derleme zamanında belirlenebileceği anlamına gelir.

Groovy'de kod yazarken, geliştiricilere bir tür sağlama veya vermeme esnekliği verilir. Bu, uygulamada biraz basitlik sunabilir ve doğru bir şekilde kullanıldığında, uygulamanıza sağlam ve dinamik bir şekilde hizmet verebilir.

Groovy'de isteğe bağlı yazım, 'def' anahtar sözcüğü aracılığıyla yapılır. Aşağıda, kullanımının bir örneği verilmiştir.def yöntem -

class Example { 
   static void main(String[] args) { 
      // Example of an Integer using def 
      def a = 100; 
      println(a); 
		
      // Example of an float using def 
      def b = 100.10; 
      println(b); 
		
      // Example of an Double using def 
      def c = 100.101; 
      println(c);
		
      // Example of an String using def 
      def d = "HelloWorld"; 
      println(d); 
   } 
}

Yukarıdaki programdan, bu tür değerleri içerse bile tek tek değişkenleri Tamsayı, float, double veya string olarak tanımlamadığımızı görebiliriz.

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

100 
100.10 
100.101
HelloWorld

İsteğe bağlı yazım, geliştirme sırasında güçlü bir yardımcı program olabilir, ancak kodun çok geniş ve karmaşık hale geldiği sonraki geliştirme aşamalarında sürdürülebilirlikte sorunlara yol açabilir.

Groovy'de isteğe bağlı yazmayı kod tabanınızı sürdürülemez bir karmaşaya sokmadan nasıl kullanabileceğinizi anlamak için, uygulamalarınızda "ördek yazma" felsefesini benimsemek en iyisidir.

Yukarıdaki kodu ördek yazarak yeniden yazarsak, aşağıda verilen gibi görünecektir. Değişken isimleri, temsil ettikleri türe benzemeyen ve kodu daha anlaşılır kılan adlardır.

class Example { 
   static void main(String[] args) { 
      // Example of an Integer using def 
      def aint = 100; 
      println(aint); 
		
      // Example of an float using def 
      def bfloat = 100.10; 
      println(bfloat); 
		
      // Example of an Double using def 
      def cDouble = 100.101; 
      println(cDouble);
		
      // Example of an String using def 
      def dString = "HelloWorld"; 
      println(dString); 
   } 
}

Groovy'de Sayılar aslında nesneler olarak temsil edilir, hepsi Tamsayı sınıfının bir örneğidir. Bir nesnenin bir şey yapmasını sağlamak için, sınıfında bildirilen yöntemlerden birini çağırmamız gerekir.

Groovy, tamsayı ve kayan nokta sayılarını destekler.

  • Tam sayı, kesir içermeyen bir değerdir.
  • Kayan noktalı sayı, ondalık kesir içeren ondalık bir değerdir.

Groovy'deki sayılara bir örnek aşağıda gösterilmiştir -

Integer x = 5; 
Float y = 1.25;

Nerede x Tamsayı türünde ve y şamandıradır.

Groovy'de sayıların nesneler olarak tanımlanmasının nedeni, genellikle sayılar üzerinde işlem yapmak için gereksinimlerin olmasıdır. İlkel türler yerine bir sınıf sağlama kavramı, sarmalayıcı sınıflar olarak bilinir.

Varsayılan olarak aşağıdaki sarmalayıcı sınıfları Groovy'de sağlanır.

Sarmalayıcı sınıfının nesnesi, ilgili ilkel veri türünü içerir veya sarar. İlkel veri türlerini nesneye dönüştürme işlemine kutu adı verilir ve bu derleyici tarafından halledilir. Nesneyi karşılık gelen ilkel türe dönüştürme işlemine kutudan çıkarma adı verilir.

Misal

Aşağıda bir boks ve kutudan çıkarma örneği verilmiştir -

class Example { 
   static void main(String[] args) {
      Integer x = 5,y = 10,z = 0; 
		
      // The the values of 5,10 and 0 are boxed into Integer types 
      // The values of x and y are unboxed and the addition is performed 
      z = x+y; 
      println(z);
   }
}

Yukarıdaki programın çıktısı 15 olacaktır. Yukarıdaki örnekte, 5, 10 ve 0 değerleri ilk olarak tamsayı değişkenleri x, y ve z'ye uygun şekilde kutu içine alınmıştır. Ve sonra, x ve y'nin eklenmesi gerçekleştirildiğinde, değerler Tamsayı türlerinden çıkarılır.

Sayı Yöntemleri

Groovy'deki Numbers sınıflar olarak temsil edildiğinden, kullanılabilecek yöntemlerin listesi aşağıdadır.

S.No. Yöntemler ve Açıklama
1 xxxValue ()

Bu yöntem, parametre olarak Sayı'yı alır ve çağrılan yönteme göre ilkel bir tür döndürür.

2 karşılaştırmak()

CompareTo yöntemi, bir sayıyı diğeriyle karşılaştırmaktır. Sayıların değerini karşılaştırmak istiyorsanız bu yararlıdır.

3 eşittir ()

Yöntem, yöntemi çağıran Number nesnesinin bağımsız değişken olarak iletilen nesneye eşit olup olmadığını belirler.

4 değeri()

ValueOf yöntemi, geçirilen bağımsız değişkenin değerini tutan ilgili Sayı Nesnesini döndürür.

5 toString ()

Yöntem, Number Object'in değerini temsil eden bir String nesnesi almak için kullanılır.

6 parseInt ()

Bu yöntem, belirli bir String'in ilkel veri türünü elde etmek için kullanılır. parseXxx () statik bir yöntemdir ve bir veya iki bağımsız değişkene sahip olabilir.

7 abs ()

Yöntem, argümanın mutlak değerini verir. Argüman int, float, long, double, short, byte olabilir.

8 ceil ()

Yöntem ceil, bağımsız değişkenden büyük veya ona eşit olan en küçük tamsayıyı verir.

9 kat ()

Floor yöntemi, bağımsız değişkenden küçük veya ona eşit olan en büyük tamsayıyı verir.

10 rint ()

Rint yöntemi, değere en yakın tamsayıyı argümana döndürür.

11 yuvarlak ()

Yöntem turu, yöntem dönüş türü tarafından verildiği gibi en yakın long veya int değerini döndürür.

12 dk ()

Yöntem, iki bağımsız değişkenden daha küçük olanı verir. Argüman int, float, long, double olabilir.

13 max ()

Yöntem, iki bağımsız değişkenin maksimumunu verir. Argüman int, float, long, double olabilir.

14 tecrübe()

Yöntem, doğal logaritmaların temelini (e) argümanın gücüne döndürür.

15 günlük ()

Yöntem, argümanın doğal logaritmasını döndürür.

16 pow ()

Yöntem, ikinci argümanın gücüne yükseltilen ilk argümanın değerini döndürür.

17 sqrt ()

Yöntem, argümanın karekökünü döndürür.

18 günah()

Yöntem, belirtilen çift değerin sinüsünü döndürür.

19 çünkü ()

Yöntem, belirtilen çift değerin kosinüsünü döndürür.

20 tan ()

Yöntem, belirtilen çift değerin tanjantını döndürür.

21 de olduğu gibi()

Yöntem, belirtilen çift değerin arkini döndürür.

22 acos ()

Yöntem, belirtilen çift değerin arkkosinüsünü döndürür.

23 atan ()

Yöntem, belirtilen çift değerin arktanjantını döndürür.

24 atan2 ()

Yöntem Dikdörtgen koordinatları (x, y) kutupsal koordinata (r, teta) dönüştürür ve teta'yı döndürür.

25 toDegrees ()

Yöntem, bağımsız değişken değerini derecelere dönüştürür.

26 radyan ()

Yöntem, bağımsız değişken değerini radyanlara dönüştürür.

27 rastgele ()

Yöntem, 0.0 ile 1.0 arasında rastgele bir sayı oluşturmak için kullanılır. Aralık: 0.0 = <Math.random <1.0. Aritmetik kullanılarak farklı aralıklar elde edilebilir.

Groovy'de dize metnini tırnak içine alarak bir String değişmezi oluşturulur.

Groovy, bir String değişmezini belirtmek için çeşitli yollar sunar. Groovy'deki dizeler tek tırnak ('), çift tırnak (") veya üçlü tırnak (" "") içine alınabilir. Ayrıca, üçlü tırnak içine alınmış bir Groovy String birden çok satıra yayılabilir.

Aşağıda Groovy'de dizelerin kullanımına bir örnek verilmiştir -

class Example { 
   static void main(String[] args) { 
      String a = 'Hello Single'; 
      String b = "Hello Double"; 
      String c = "'Hello Triple" + "Multiple lines'";
		
      println(a); 
      println(b); 
      println(c); 
   } 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

Hello Single 
Hello Double 
'Hello TripleMultiple lines'

Dize Dizini Oluşturma

Groovy'deki dizeler sıralı bir karakter dizisidir. Bir dizedeki münferit karaktere konumu ile erişilebilir. Bu, bir dizin konumu ile verilir.

Dize endeksleri, sıfırdan başlar ve dizenin uzunluğundan bir daha az biter. Groovy, negatif indislerin dizenin sonundan itibaren geriye doğru saymasına da izin verir.

Aşağıda Groovy'de dize indekslemesinin kullanımına bir örnek verilmiştir -

class Example { 
   static void main(String[] args) { 
      String sample = "Hello world"; 
      println(sample[4]); // Print the 5 character in the string
		
      //Print the 1st character in the string starting from the back 
      println(sample[-1]); 
      println(sample[1..2]);//Prints a string starting from Index 1 to 2 
      println(sample[4..2]);//Prints a string starting from Index 4 back to 2 
      
   } 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

o 
d 
el 
oll

Temel Dizi İşlemleri

Öncelikle groovy'de temel string işlemlerini öğrenelim. Aşağıda verilmiştir.

S.No. Dize İşlemi ve Açıklama
1 İki dizenin birleştirilmesi

Dizelerin birleştirilmesi basit '+' operatörü ile yapılabilir.

2 Dize Tekrarı

Dizelerin tekrarı basit '*' operatörü ile yapılabilir.

3 IP uzunluğu

Dizenin length () yöntemiyle belirlenen dizenin uzunluğu.

Dize Yöntemleri

String sınıfı tarafından desteklenen yöntemlerin listesi aşağıdadır.

S.No. Yöntemler ve Açıklama
1 merkez ()

Solda ve sağda boşluk karakterleriyle doldurulmuş alıcıdan oluşan numberOfChars uzunluğundaki yeni bir String döndürür.

2 CompareToIgnoreCase ()

Büyük / küçük harf farklılıklarını göz ardı ederek iki dizgeyi sözlüksel olarak karşılaştırır.

3 concat ()

Belirtilen String'i bu String'in sonuna birleştirir.

4 eachMatch ()

Verilen Dizenin her bir normal ifade grubuyla eşleşen alt dizesini işler (sonraki bölüme bakın).

5 uçlarıWith ()

Bu dizenin belirtilen sonekle bitip bitmediğini test eder.

6 equalsIgnoreCase ()

Bu Dizeyi başka bir Dize ile karşılaştırır, büyük / küçük harf hususlarını dikkate almaz.

7 ulaşmak()

Dizin konumunda dize değerini döndürür

8 indeksi()

Belirtilen alt dizenin ilk oluşumunun bu Dize içindeki dizini döndürür.

9 maçlar()

Bir String'in verilen normal ifadeyle eşleşip eşleşmediğini bildirir.

10 eksi()

String'in değer kısmını kaldırır.

11 Sonraki()

Bu yöntem, String sınıfı için ++ operatörü tarafından çağrılır. Verilen Dizedeki son karakteri artırır.

12 padLeft ()

Dize'yi sola eklenen boşluklarla doldurun.

13 padRight ()

Dize'yi sağa eklenen boşluklarla doldurun.

14 artı()

Bir Dize ekler

15 önceki()

Bu yöntem CharSequence için - operatörü tarafından çağrılır.

16 hepsini değiştir()

Yakalanan bir grubun tüm oluşumlarını, o metindeki kapanmanın sonucuyla değiştirir.

17 tersine çevirmek()

Bu String'in tersi olan yeni bir String oluşturur.

18 Bölünmüş()

Bu Dizeyi verilen normal ifadenin eşleşmelerinin etrafına böler.

19 subString ()

Bu String'in bir alt dizesi olan yeni bir String döndürür.

20 toUpperCase ()

Bu Dize'deki tüm karakterleri büyük harfe dönüştürür.

21 toLowerCase ()

Bu Dize'deki tüm karakterleri küçük harfe dönüştürür.

Aralık, bir dizi değer belirtmek için kullanılan kısaltmadır. Bir Aralık, dizideki ilk ve son değerlerle gösterilir ve Aralık kapsayıcı veya dışlayıcı olabilir. Kapsayıcı Aralık, birinciden sonuncuya kadar tüm değerleri içerirken, özel bir Aralık, sonuncusu dışındaki tüm değerleri içerir. İşte Range değişmez değerlerine bazı örnekler -

  • 1..10 - Kapsayıcı Aralık örneği
  • 1 .. <10 - Özel Aralık örneği
  • 'a' .. 'x' - Aralıklar ayrıca karakterlerden oluşabilir
  • 10..1 - Aralıklar azalan sırada da olabilir
  • 'x' .. 'a' - Aralıklar ayrıca karakterlerden oluşabilir ve azalan sırada olabilir.

Aşağıda, aralıklar için kullanılabilen çeşitli yöntemler bulunmaktadır.

Sr.No. Yöntemler ve Açıklama
1 içerir ()

Bir aralığın belirli bir değer içerip içermediğini kontrol eder

2 almak()

Bu Aralıkta belirtilen konumdaki öğeyi döndürür.

3 dan almak()

Bu Aralığın düşük değerini alın.

4 getTo ()

Bu Aralığın üst değerini alın.

5 isReverse ()

Bu, geriye doğru yinelenen ters bir Aralık mı

6 boyut()

Bu Aralıktaki öğelerin sayısını döndürür.

7 subList ()

Bu Aralığın belirtilen fromIndex, inclusive ve toIndex arasındaki kısmının bir görünümünü verir.

Liste, bir veri öğeleri koleksiyonunu depolamak için kullanılan bir yapıdır. Groovy'de Liste, bir dizi nesne referansını tutar. Bir Listedeki nesne referansları, dizide bir pozisyon kaplar ve bir tamsayı indeksi ile ayırt edilir. Bir Liste değişmezi, virgülle ayrılmış ve köşeli parantez içine alınmış bir dizi nesne olarak sunulur.

Bir listedeki verileri işlemek için tek tek öğelere erişebilmeliyiz. Groovy Listeler, indeksleme operatörü [] kullanılarak indekslenir. Liste endeksleri, ilk öğeyi ifade eden sıfırdan başlar.

Aşağıda bazı liste örnekleri verilmiştir -

  • [11, 12, 13, 14] - Tam sayı değerlerinin listesi
  • ['Angular', 'Groovy', 'Java'] - Dizelerin listesi
  • [1, 2, [3, 4], 5] - İç içe geçmiş bir liste
  • ['Groovy', 21, 2.11] - Nesne referanslarının heterojen bir listesi
  • [] - Boş bir liste

Bu bölümde, Groovy'de bulunan liste yöntemlerini tartışacağız.

Sr.No. Yöntemler ve Açıklama
1 Ekle()

Yeni değeri bu Listenin sonuna ekleyin.

2 içerir ()

Bu Liste belirtilen değeri içeriyorsa doğru döndürür.

3 almak()

Bu Listede belirtilen konumdaki öğeyi döndürür.

4 boş()

Bu Liste hiçbir öğe içermiyorsa doğru döndürür

5 eksi()

Koleksiyonda belirtilenler olmadan orijinalin öğelerinden oluşan yeni bir Liste oluşturur.

6 artı()

Koleksiyonda belirtilenlerle birlikte orijinalin öğelerinden oluşan yeni bir Liste oluşturur.

7 pop()

Bu listeden son öğeyi kaldırır

8 Kaldırmak()

Bu Listede belirtilen konumdaki elemanı kaldırır.

9 tersine çevirmek()

Orijinal Listenin unsurlarının tersi olan yeni bir Liste oluşturun

10 boyut()

Bu Listedeki elemanların sayısını elde eder.

11 çeşit()

Orijinal Listenin sıralı bir kopyasını döndürür.

Bir Harita (ilişkilendirilebilir dizi, sözlük, tablo ve karma olarak da bilinir), nesne referanslarının sırasız bir koleksiyonudur. Bir Harita koleksiyonundaki öğelere bir anahtar değerle erişilir. Bir Haritada kullanılan anahtarlar herhangi bir sınıftan olabilir. Bir Map koleksiyonuna eklediğimizde, iki değer gereklidir: anahtar ve değer.

Aşağıda bazı harita örnekleri verilmiştir -

  • ['TopicName': 'Listeler', 'TopicName': 'Haritalar'] - Anahtar olarak TopicName ve ilgili değerlerine sahip anahtar değer çiftleri koleksiyonları.

  • [:] - Boş bir harita.

Bu bölümde, Groovy'de bulunan harita yöntemlerini tartışacağız.

Sr.No. Yöntemler ve Açıklama
1 içerirKey ()

Bu Harita bu anahtarı içeriyor mu?

2 almak()

Bu Haritadaki anahtarı arayın ve karşılık gelen değeri döndürün. Bu haritada anahtar için bir giriş yoksa, null değerini döndürün.

3 anahtar seti()

Bu Haritadan bir Anahtar Seti edinin.

4 koymak()

Belirtilen değeri bu Haritadaki belirtilen anahtarla ilişkilendirir. Bu Harita daha önce bu anahtar için bir eşleme içeriyorsa, eski değer belirtilen değerle değiştirilir.

5 boyut()

Bu Haritadaki anahtar / değer eşlemelerinin sayısını döndürür.

6 değerler ()

Bu Haritadaki değerlerin bir koleksiyon görünümünü döndürür.

Tarih sınıfı, milisaniye hassasiyetiyle belirli bir anı temsil eder. Date sınıfının aşağıda gösterildiği gibi iki kurucusu vardır.

Tarih ()

Sözdizimi

public Date()

Parameters - Yok.

Return Value

Bir Date nesnesini ayırır ve onu en yakın milisaniyeye göre ölçülen, tahsis edildiği zamanı temsil edecek şekilde başlatır.

Misal

Aşağıda bu yöntemin kullanımına bir örnek verilmiştir -

class Example { 
   static void main(String[] args) { 
      Date date = new Date(); 
      
      // display time and date using toString() 
      System.out.println(date.toString()); 
   } 
}

Yukarıdaki programı çalıştırdığımızda aşağıdaki sonucu alacağız. Aşağıdaki çıktı size geçerli tarih ve saati verecektir -

Thu Dec 10 21:31:15 GST 2015

Tarih (uzun milisaniye)

Sözdizimi

public Date(long millisec)

Parameters

Milisaniye - Standart temel süreden beri belirtilecek milisaniye sayısı.

Return Value - bir Date nesnesini oluşturur ve 1 Ocak 1970 00:00:00 GMT olarak bilinen "epoch" olarak bilinen standart temel zamandan beri belirtilen milisaniye sayısını temsil edecek şekilde başlatır.

Misal

Aşağıda bu yöntemin kullanımına bir örnek verilmiştir -

class Example {
   static void main(String[] args) {
      Date date = new Date(100);
      
      // display time and date using toString()
      System.out.println(date.toString());
   } 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

Thu Jan 01 04:00:00 GST 1970

Aşağıda Date sınıfının verilen yöntemleri verilmiştir. Yıl, ay, tarih, saat, dakika ve saniye değerlerini kabul eden veya döndüren tüm Date sınıf yöntemlerinde aşağıdaki temsiller kullanılır -

  • Bir y yılı, y - 1900 tamsayısı ile temsil edilir.

  • Bir ay, 0 ile 11 arasında bir tamsayı ile temsil edilir; 0 Ocak, 1 Şubat ve diğerleri; dolayısıyla 11 Aralık.

  • Bir tarih (ayın günü), olağan şekilde 1'den 31'e kadar bir tamsayı ile temsil edilir.

  • Bir saat, 0'dan 23'e bir tamsayı ile temsil edilir. Dolayısıyla, gece yarısından 1'e kadar olan saat 0. saattir ve öğleden 13.00'e kadar olan saat 12'dir.

  • Bir dakika, olağan şekilde 0'dan 59'a bir tamsayı ile temsil edilir.

  • Bir saniye, 0 ile 61 arasında bir tamsayı ile temsil edilir.

Sr.No. Yöntemler ve Açıklama
1 sonra()

Bu tarihin belirtilen tarihten sonra olup olmadığını test eder.

2 eşittir ()

Eşitlik için iki tarihi karşılaştırır. Sonuç, ancak ve ancak bağımsız değişken boş değilse ve bu nesneyle aynı noktayı milisaniyeye kadar temsil eden bir Date nesnesiyse doğrudur.

3 karşılaştırmak()

Sipariş için iki Tarihi karşılaştırır.

4 toString ()

Bu Date nesnesini bir String nesnesine dönüştürür

5 önce()

Bu tarihin belirtilen tarihten önce olup olmadığını test eder.

6 getTime ()

Bu Date nesnesi tarafından temsil edilen 1 Ocak 1970 00:00:00 GMT'den bu yana geçen milisaniye sayısını döndürür.

7 ayarlanan zaman()

Bu Date nesnesini, 1 Ocak 1970 00:00:00 GMT'den sonraki milisaniyeler olan bir zaman noktasını temsil edecek şekilde ayarlar.

Normal ifade, metindeki alt dizeleri bulmak için kullanılan bir kalıptır. Groovy, ~ ”regex” ifadesini kullanarak yerel olarak normal ifadeleri destekler. Alıntılar içinde yer alan metin, karşılaştırma için ifadeyi temsil eder.

Örneğin, aşağıda gösterildiği gibi bir normal ifade nesnesi oluşturabiliriz -

def regex = ~'Groovy'

Groovy operatörü = ~, bir yüklem (Boolean döndüren ifade) olarak göründüğünde if ve whiledeyimler (bkz. Bölüm 8), soldaki String işleneni, sağdaki normal ifade işleneniyle eşleştirilir. Bu nedenle, aşağıdakilerin her biri doğru değeri verir.

Normal ifadeyi tanımlarken aşağıdaki özel karakterler kullanılabilir -

  • Bir satırın başlangıcını ve sonunu belirtmek için kullanılan iki özel konumsal karakter vardır: düzeltme işareti (∧) ve dolar işareti ($).

  • Normal ifadeler ayrıca nicelik belirteçleri içerebilir. Artı işareti (+), ifadenin önceki öğesine uygulanan bir veya daha fazla zamanı temsil eder. Yıldız işareti (*), sıfır veya daha fazla oluşumu temsil etmek için kullanılır. Soru işareti (?) Sıfırı veya bir defa gösterir.

  • Meta karakter {ve}, önceki karakterin belirli sayıda örneğini eşleştirmek için kullanılır.

  • Normal ifadede nokta sembolü (.) Herhangi bir karakteri temsil edebilir. Bu, joker karakter olarak tanımlanır.

  • Normal bir ifade, karakter sınıflarını içerebilir. Bir dizi karakter, [aeiou] 'da olduğu gibi meta karakterler [ve] içine alınmış basit bir karakter dizisi olarak verilebilir. Harf veya sayı aralıkları için, [a – z] veya [a – mA – M] 'de olduğu gibi bir tire ayırıcısı kullanabilirsiniz. Bir karakter sınıfının tamamlayıcısı, kare raketler içinde [∧a – z] 'de olduğu gibi baştaki bir düzeltme işareti ile gösterilir ve belirtilenler dışındaki tüm karakterleri temsil eder. Normal ifadelerin bazı örnekleri aşağıda verilmiştir.

'Groovy' =~ 'Groovy' 
'Groovy' =~ 'oo' 
'Groovy' ==~ 'Groovy' 
'Groovy' ==~ 'oo' 
'Groovy' =~ '∧G' 
‘Groovy' =~ 'G$' 
‘Groovy' =~ 'Gro*vy' 'Groovy' =~ 'Gro{2}vy'

Çalışma zamanı hatalarını işlemek için herhangi bir programlama dilinde istisna işleme gerekir, böylece uygulamanın normal akışı korunabilir.

İstisna, normalde uygulamanın normal akışını bozar, bu nedenle uygulamamızda İstisna işlemeyi kullanmamız gerekir.

İstisnalar genel olarak aşağıdaki kategorilere ayrılır -

  • Checked Exception - RuntimeException ve Error dışında Throwable sınıfını genişleten sınıflar, denetlenen istisnalar olarak bilinir, örn .IOException, SQLException vb. Kontrol edilen istisnalar derleme zamanında kontrol edilir.

Klasik bir durum FileNotFoundException'dır. Uygulamanızda E sürücüsündeki bir dosyadan okuyan aşağıdaki koda sahip olduğunuzu varsayalım.

class Example {
   static void main(String[] args) {
      File file = new File("E://file.txt");
      FileReader fr = new FileReader(file);
   } 
}

Dosya (file.txt) E sürücüsünde yoksa, aşağıdaki istisna ortaya çıkar.

Yakalandı: java.io.FileNotFoundException: E: \ file.txt (Sistem belirtilen dosyayı bulamıyor).

java.io.FileNotFoundException: E: \ file.txt (Sistem belirtilen dosyayı bulamıyor).

  • Unchecked Exception - RuntimeException'ı genişleten sınıflar denetlenmemiş istisnalar olarak bilinir, örn. ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException vb. Denetlenmeyen istisnalar, çalışma zamanında denetlenmek yerine derleme zamanında denetlenmez.

Klasik bir durum, dizinin uzunluğundan daha büyük olan bir dizinin dizinine erişmeye çalıştığınızda gerçekleşen ArrayIndexOutOfBoundsException durumudur. Aşağıda, bu tür bir hatanın tipik bir örneği verilmiştir.

class Example {
   static void main(String[] args) {
      def arr = new int[3];
      arr[5] = 5;
   } 
}

Yukarıdaki kod çalıştırıldığında aşağıdaki istisna ortaya çıkacaktır.

Yakalandı: java.lang.ArrayIndexOutOfBoundsException: 5

java.lang.ArrayIndexOutOfBoundsException: 5

  • Error - Hata düzeltilemez, örneğin OutOfMemoryError, VirtualMachineError, AssertionError vb.

Bunlar, programın asla düzeltemeyeceği ve programın çökmesine neden olacak hatalardır.

Aşağıdaki diyagram, Groovy'deki istisnalar hiyerarşisinin nasıl düzenlendiğini gösterir. Hepsi Java'da tanımlanan hiyerarşiye dayanmaktadır.

İstisnaları Yakalama

Bir yöntem, bir try ve catchanahtar kelimeler. Bir istisna oluşturabilecek kodun etrafına bir dene / yakala bloğu yerleştirilir.

try { 
   //Protected code 
} catch(ExceptionName e1) {
   //Catch block 
}

Bir istisna oluşturabilecek tüm kodunuz Korumalı kod bloğuna yerleştirilir.

Yakalama bloğunda, uygulamanın istisnadan kurtarabilmesi için istisnanızı işlemek için özel kod yazabilirsiniz.

Dizinin boyutundan daha büyük bir dizin değerine sahip bir diziye erişmek için yukarıda gördüğümüz benzer kodun bir örneğine bakalım. Ama bu sefer kodumuzu bir dene / yakala bloğuna saralım.

class Example {
   static void main(String[] args) {
      try {
         def arr = new int[3];
         arr[5] = 5;
      } catch(Exception ex) {
         println("Catching the exception");
      }
		
      println("Let's move on after the exception");
   }
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

Catching the exception 
Let's move on after the exception

Yukarıdaki koddan, hatalı kodu try bloğunda sardık. Catch bloğunda sadece bizim istisnamızı yakalıyoruz ve bir istisnanın meydana geldiğine dair bir mesaj çıkarıyoruz.

Çoklu Yakalama Blokları

Birden çok istisna türünü işlemek için birden fazla yakalama bloğu olabilir. Her catch bloğu için, ortaya çıkan istisna türüne bağlı olarak, onu uygun şekilde işlemek için kod yazarsınız.

ArrayIndexOutOfBoundsException'ı özellikle yakalamak için yukarıdaki kodumuzu değiştirelim. Kod parçacığı aşağıdadır.

class Example {
   static void main(String[] args) {
      try {
         def arr = new int[3];
         arr[5] = 5;
      }catch(ArrayIndexOutOfBoundsException ex) {
         println("Catching the Array out of Bounds exception");
      }catch(Exception ex) {
         println("Catching the exception");
      }
		
      println("Let's move on after the exception");
   } 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

Catching the Aray out of Bounds exception 
Let's move on after the exception

Yukarıdaki koddan ArrayIndexOutOfBoundsException yakalama bloğunun ilk olarak yakalandığını görebilirsiniz çünkü istisnanın ölçütü anlamına gelir.

Sonunda Engelle

finallyblok bir try bloğunu veya bir catch bloğunu takip eder. Nihayetinde bir kod bloğu, bir İstisnanın ortaya çıkmasına bakılmaksızın her zaman yürütülür.

Nihayet bloğunun kullanılması, korumalı kodda ne olursa olsun, yürütmek istediğiniz herhangi bir temizleme türü ifadesini çalıştırmanıza olanak tanır. Bu bloğun sözdizimi aşağıda verilmiştir.

try { 
   //Protected code 
} catch(ExceptionType1 e1) { 
   //Catch block 
} catch(ExceptionType2 e2) { 
   //Catch block 
} catch(ExceptionType3 e3) { 
   //Catch block 
} finally {
   //The finally block always executes. 
}

Yukarıdaki kodumuzu değiştirelim ve son kod bloğunu ekleyelim. Kod parçacığı aşağıdadır.

class Example {
   static void main(String[] args) {
      try {
         def arr = new int[3];
         arr[5] = 5;
      } catch(ArrayIndexOutOfBoundsException ex) {
         println("Catching the Array out of Bounds exception");
      }catch(Exception ex) {
         println("Catching the exception");
      } finally {
         println("The final block");
      }
		
      println("Let's move on after the exception");
   } 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

Catching the Array out of Bounds exception 
The final block 
Let's move on after the exception

Groovy'de bulunan İstisna yöntemleri aşağıdadır -

public String getMessage ()

Oluşan istisna hakkında ayrıntılı bir mesaj verir. Bu mesaj Throwable yapıcısında başlatılır.

public Throwable getCause ()

Throwable nesne tarafından temsil edildiği şekliyle istisnanın nedenini döndürür.

public String toString ()

GetMessage () sonucuyla birleştirilen sınıfın adını verir

public void printStackTrace ()

ToString () sonucunu yığın izlemeyle birlikte System.err, hata çıktı akışı olarak yazdırır.

genel StackTraceElement [] getStackTrace ()

Yığın izlemesindeki her bir öğeyi içeren bir dizi döndürür. 0 dizinindeki öğe, çağrı yığınının üstünü temsil eder ve dizideki son öğe, çağrı yığınının altındaki yöntemi temsil eder.

public Throwable fillInStackTrace ()

Bu Throwable nesnesinin yığın izlemesini, yığın izlemedeki önceki bilgilere ekleyerek geçerli yığın izlemesiyle doldurur.

Misal

Aşağıda, yukarıda verilen yöntemlerden bazılarını kullanan kod örneği verilmiştir -

class Example {
   static void main(String[] args) {
      try {
         def arr = new int[3];
         arr[5] = 5;
      }catch(ArrayIndexOutOfBoundsException ex) {
         println(ex.toString());
         println(ex.getMessage());
         println(ex.getStackTrace());  
      } catch(Exception ex) {
         println("Catching the exception");
      }finally {
         println("The final block");
      }
		
      println("Let's move on after the exception");
   } 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

java.lang.ArrayIndexOutOfBoundsException: 5 
5 
[org.codehaus.groovy.runtime.dgmimpl.arrays.IntegerArrayPutAtMetaMethod$MyPojoMetaMet 
hodSite.call(IntegerArrayPutAtMetaMethod.java:75), 
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) ,
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) ,
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133) ,
Example.main(Sample:8), sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57),
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ,
java.lang.reflect.Method.invoke(Method.java:606),
org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93),
groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325),
groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1443),
org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:893),
groovy.lang.GroovyShell.runScriptOrMainOrTestOrRunnable(GroovyShell.java:287),
groovy.lang.GroovyShell.run(GroovyShell.java:524),
groovy.lang.GroovyShell.run(GroovyShell.java:513),
groovy.ui.GroovyMain.processOnce(GroovyMain.java:652),
groovy.ui.GroovyMain.run(GroovyMain.java:384),
groovy.ui.GroovyMain.process(GroovyMain.java:370),
groovy.ui.GroovyMain.processArgs(GroovyMain.java:129),
groovy.ui.GroovyMain.main(GroovyMain.java:109),
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57),
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ,
java.lang.reflect.Method.invoke(Method.java:606),
org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:109),
org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:131),
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57),
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ,
java.lang.reflect.Method.invoke(Method.java:606),
com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)]
 
The final block 
Let's move on after the exception

Groovy'de, diğer herhangi bir Nesne Yönelimli dilde olduğu gibi, programlama dilinin nesnel yönelimli doğasını temsil eden sınıflar ve nesneler kavramı vardır. Groovy sınıfı, bir veri koleksiyonudur ve bu veriler üzerinde çalışan yöntemlerdir. Birlikte, bir sınıfın verileri ve yöntemleri, problem etki alanından bazı gerçek dünya nesnelerini temsil etmek için kullanılır.

Groovy'deki bir sınıf, bu sınıf tarafından tanımlanan nesnelerin durumunu (verileri) ve davranışını bildirir. Dolayısıyla, bir Groovy sınıfı, bu sınıf için hem örnek alanlarını hem de yöntemleri açıklar.

Aşağıda Groovy'deki bir sınıf örneği verilmiştir. Sınıfın adı Öğrenci'dir ve iki alanı vardır -StudentID ve StudentName. Ana işlevde, bu sınıfın bir nesnesini oluşturuyoruz veStudentID ve StudentName nesnenin.

class Student {
   int StudentID;
   String StudentName;
	
   static void main(String[] args) {
      Student st = new Student();
      st.StudentID = 1;
      st.StudentName = "Joe"     
   } 
}

alıcı ve ayarlayıcı Yöntemleri

Herhangi bir programlama dilinde, örnek üyelerini private anahtar sözcüğüyle gizlemek ve bunun yerine örnek değişkenlerinin değerlerini buna göre ayarlamak ve almak için alıcı ve ayarlayıcı yöntemler sağlamak her zaman bir uygulamadır. Aşağıdaki örnek bunun nasıl yapılabileceğini göstermektedir.

class Student {
   private int StudentID;
   private String StudentName;
	
   void setStudentID(int pID) {
      StudentID = pID;
   }
	
   void setStudentName(String pName) {
      StudentName = pName;
   }
	
   int getStudentID() {
      return this.StudentID;
   }
	
   String getStudentName() {
      return this.StudentName;
   }
	
   static void main(String[] args) {
      Student st = new Student();
      st.setStudentID(1);
      st.setStudentName("Joe");
		
      println(st.getStudentID());
      println(st.getStudentName());
   } 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

1 
Joe

Yukarıdaki programla ilgili aşağıdaki temel noktalara dikkat edin -

  • Sınıfta hem studentID hem de studentName özel olarak işaretlenir, bu da sınıf dışından erişilemeyeceği anlamına gelir.

  • Her örnek üyenin kendi alıcı ve ayarlayıcı yöntemi vardır. Getter yöntemi, örnek değişkeninin değerini döndürür, örneğin yöntem int getStudentID () ve ayarlayıcı yöntemi, örnek kimliğinin değerini ayarlar, örneğin yöntem - void setStudentName (String pName)

Örnek Yöntemleri

Normalde sınıfın içine, sınıf için bir çeşit işlevsellik sağlayan daha fazla yöntem eklemek doğaldır. Öğrenci örneğimizde, öğrencinin 3 konudaki notlarını belirtmek için Marks1, Marks2 ve Marks3 örnek üyelerini ekleyelim. Daha sonra öğrencinin toplam puanını hesaplayacak yeni bir örnek yöntemi ekleyeceğiz. Kodun nasıl görüneceği aşağıdadır.

Aşağıdaki örnekte, Toplam yöntemi, içinde yerleşik bir mantık bulunan ek bir Örnek yöntemidir.

class Student {
   int StudentID;
   String StudentName;
	
   int Marks1;
   int Marks2;
   int Marks3;
	
   int Total() {
      return Marks1+Marks2+Marks3;
   }
	
   static void main(String[] args) {
      Student st = new Student();
      st.StudentID = 1;
      st.StudentName="Joe";
		
      st.Marks1 = 10;
      st.Marks2 = 20;
      st.Marks3 = 30;
		
      println(st.Total());
   }
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

60

Birden Çok Nesne Oluşturma

Ayrıca bir sınıfın birden çok nesnesini de oluşturabilirsiniz. Aşağıda bunun nasıl başarılabileceğinin bir örneği var. Burada 3 nesne oluşturuyoruz (st, st1 ve st2) ve buna göre örnek üyelerini ve örnek yöntemlerini çağırıyoruz.

class Student {
   int StudentID;
   String StudentName;
	
   int Marks1;
   int Marks2;
   int Marks3;
	
   int Total() { 
      return Marks1+Marks2+Marks3;
   } 
	
   static void main(String[] args) {
      Student st = new Student();
      st.StudentID = 1;
      st.StudentName = "Joe";
		
      st.Marks1 = 10;
      st.Marks2 = 20;
      st.Marks3 = 30;
		
      println(st.Total()); 
   
      Student st1 = new Student();
      st.StudentID = 1;
      st.StudentName = "Joe";
		
      st.Marks1 = 10;
      st.Marks2 = 20;
      st.Marks3 = 40;
		
      println(st.Total());  
        
      Student st3 = new Student();
      st.StudentID = 1;
      st.StudentName = "Joe";
		
      st.Marks1 = 10; 
      st.Marks2 = 20;
      st.Marks3 = 50;
		
      println(st.Total());
   } 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

60 
70 
80

Miras

Kalıtım, bir sınıfın diğerinin özelliklerini (yöntemleri ve alanları) elde ettiği süreç olarak tanımlanabilir. Kalıtımın kullanılmasıyla, bilgiler hiyerarşik bir sırayla yönetilebilir hale getirilir.

Diğerinin özelliklerini miras alan sınıf, alt sınıf (türetilmiş sınıf, alt sınıf) olarak bilinir ve özellikleri miras alınan sınıf, üst sınıf (temel sınıf, ana sınıf) olarak bilinir.

Uzatmalar

extendsbir sınıfın özelliklerini devralmak için kullanılan anahtar kelimedir. Aşağıda, extends anahtar kelimesinin sözdizimi verilmiştir. Aşağıdaki örnekte aşağıdaki şeyleri yapıyoruz -

  • Kişi adında bir sınıf oluşturmak. Bu sınıfın ad adında bir örnek üyesi vardır.

  • Person sınıfından uzanan Öğrenci adlı bir sınıf oluşturmak. Person sınıfında tanımlanan ad örneği üyesinin Student sınıfında miras alındığına dikkat edin.

  • Student sınıfı yapıcısında, temel sınıf yapıcısını çağırıyoruz.

  • Öğrenci sınıfımıza, StudentID ve Marks1'in 2 ek örnek üyesini ekliyoruz.

class Example {
   static void main(String[] args) {
      Student st = new Student();
      st.StudentID = 1;
		
      st.Marks1 = 10;
      st.name = "Joe";
		
      println(st.name);
   }
} 

class Person {
   public String name;
   public Person() {}  
} 

class Student extends Person {
   int StudentID
   int Marks1;
	
   public Student() {
      super();
   } 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

Joe

İç Sınıflar

İç sınıflar başka bir sınıf içinde tanımlanır. Çevreleyen sınıf, her zamanki gibi iç sınıfı kullanabilir. Öte yandan, bir iç sınıf, özel olsalar bile, kendi çevreleyen sınıfının üyelerine erişebilir. Çevreleyen sınıf dışındaki sınıfların iç sınıflara erişmesine izin verilmez.

Aşağıda bir Outer ve Inner sınıfına bir örnek verilmiştir. Aşağıdaki örnekte aşağıdaki şeyleri yapıyoruz -

  • Dış sınıfımız olacak Outer adında bir sınıf oluşturmak.
  • Outer sınıfımızda isim denen bir dizge tanımlama.
  • Outer sınıfımızın içinde bir Inner veya yuvalanmış sınıf oluşturmak.
  • İç sınıfta Outer sınıfta tanımlanan örnek üye adına erişebildiğimizi unutmayın.
class Example { 
   static void main(String[] args) { 
      Outer outobj = new Outer(); 
      outobj.name = "Joe"; 
      outobj.callInnerMethod() 
   } 
} 

class Outer { 
   String name;
	
   def callInnerMethod() { 
      new Inner().methodA() 
   } 
	
   class Inner {
      def methodA() { 
         println(name); 
      } 
   } 
	
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

Joe

Soyut Sınıflar

Soyut sınıflar, genel kavramları temsil eder, bu nedenle alt sınıflara ayrılmak üzere yaratılmaları nedeniyle somutlaştırılamazlar. Üyeleri, alanları / özellikleri ve soyut veya somut yöntemleri içerir. Soyut yöntemlerin uygulaması yoktur ve somut alt sınıflar tarafından uygulanmalıdır. Abstract sınıfları abstract anahtar sözcüğü ile bildirilmelidir. Soyut yöntemler ayrıca abstract anahtar sözcüğü ile bildirilmelidir.

Aşağıdaki örnekte, Person sınıfının artık soyut bir sınıf haline getirildiğini ve somutlaştırılamayacağını unutmayın. Ayrıca, soyut sınıfta, uygulama ayrıntısı içermeyen DisplayMarks adlı soyut bir yöntem olduğunu unutmayın. Öğrenci sınıfında uygulama detaylarının eklenmesi zorunludur.

class Example { 
   static void main(String[] args) { 
      Student st = new Student(); 
      st.StudentID = 1;
		
      st.Marks1 = 10; 
      st.name="Joe"; 
		
      println(st.name); 
      println(st.DisplayMarks()); 
   } 
} 

abstract class Person { 
   public String name; 
   public Person() { } 
   abstract void DisplayMarks();
}
 
class Student extends Person { 
   int StudentID 
   int Marks1; 
	
   public Student() { 
      super(); 
   } 
	
   void DisplayMarks() { 
      println(Marks1); 
   }  
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

Joe 
10 
null

Arayüzler

Bir arayüz, bir sınıfın uyması gereken bir sözleşmeyi tanımlar. Bir arabirim yalnızca uygulanması gereken yöntemlerin bir listesini tanımlar, ancak yöntemlerin uygulanmasını tanımlamaz. Bir arabirim, arabirim anahtar sözcüğü kullanılarak bildirilmelidir. Bir arabirim yalnızca yöntem imzalarını tanımlar. Bir arayüzün yöntemleri her zamanpublic. Arabirimlerde korumalı veya özel yöntemlerin kullanılması bir hatadır.

Aşağıda, harika bir arayüzün bir örneğidir. Aşağıdaki örnekte aşağıdaki şeyleri yapıyoruz -

  • Marks adlı bir arabirim oluşturmak ve DisplayMarks adlı bir arabirim yöntemi oluşturmak.

  • Sınıf tanımında, arayüzü uygulamak için implements anahtar sözcüğünü kullanıyoruz.

  • Arayüzü uyguladığımız için, DisplayMarks yöntemi için uygulama sağlamamız gerekiyor.

class Example {
   static void main(String[] args) {
      Student st = new Student();
      st.StudentID = 1;
      st.Marks1 = 10;
      println(st.DisplayMarks());
   } 
} 

interface Marks { 
   void DisplayMarks(); 
} 

class Student implements Marks {
   int StudentID
   int Marks1;
	
   void DisplayMarks() {
      println(Marks1);
   }
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

10
null

Generics, sınıfları, arabirimleri ve yöntemleri tanımlarken türlerin (sınıflar ve arabirimler) parametre olmasını sağlar. Yöntem bildirimlerinde kullanılan daha tanıdık biçimsel parametreler gibi, tür parametreleri, aynı kodu farklı girdilerle yeniden kullanmanız için bir yol sağlar. Aradaki fark, biçimsel parametrelere yönelik girdilerin değer olması, parametre türü girdilerinin ise tür olmasıdır.

Koleksiyonlar için Genel

List sınıfı gibi koleksiyon sınıfları, uygulamada yalnızca bu türdeki koleksiyonların kabul edilmesi için genelleştirilebilir. Genelleştirilmiş ArrayList'in bir örneği aşağıda gösterilmiştir. Aşağıdaki ifadenin yaptığı şey, yalnızca string türünde olan liste öğelerini kabul etmesidir -

List<String> list = new ArrayList<String>();

Aşağıdaki kod örneğinde, aşağıdakileri yapıyoruz -

  • Yalnızca Dizeleri tutacak bir Genelleştirilmiş ArrayList koleksiyonu oluşturma.
  • Listeye 3 dize ekleyin.
  • Listedeki her öğe için dizelerin değeri yazdırılır.
class Example {
   static void main(String[] args) {
      // Creating a generic List collection
      List<String> list = new ArrayList<String>();
      list.add("First String");
      list.add("Second String");
      list.add("Third String");
		
      for(String str : list) {
         println(str);
      }
   } 
}

Yukarıdaki programın çıktısı şu olacaktır:

First String 
Second String 
Third String

Genelleştirilmiş Sınıflar

Tüm sınıf da genelleştirilebilir. Bu, sınıfı herhangi bir türü kabul etme ve bu türlere göre çalışma konusunda daha esnek hale getirir. Bunu nasıl başarabileceğimize dair bir örneğe bakalım.

Aşağıdaki programda aşağıdaki adımları gerçekleştiriyoruz -

  • ListType adında bir sınıf oluşturuyoruz. Sınıf tanımının önüne yerleştirilen <T> anahtar kelimelerine dikkat edin. Bu, derleyiciye bu sınıfın herhangi bir türü kabul edebileceğini söyler. Bu nedenle, bu sınıfın bir nesnesini bildirdiğimizde, bildirim sırasında bir tür belirtebiliriz ve bu tür <T> yer tutucusunda değiştirilir.

  • Genel sınıf, sınıfta tanımlanan üye değişkeni ile çalışmak için basit alıcı ve ayarlayıcı yöntemlere sahiptir.

  • Ana programda, ListType sınıfının, ancak farklı türlerdeki nesneleri bildirebildiğimize dikkat edin. Birincisi Tamsayı tipindedir ve ikincisi String tipindedir.

class Example {
   static void main(String[] args) {
      // Creating a generic List collection 
      ListType<String> lststr = new ListType<>();
      lststr.set("First String");
      println(lststr.get()); 
		
      ListType<Integer> lstint = new ListType<>();
      lstint.set(1);
      println(lstint.get());
   }
} 

public class ListType<T> {
   private T localt;
	
   public T get() {
      return this.localt;
   }
	
   public void set(T plocal) {
      this.localt = plocal;
   } 
}

Yukarıdaki programın çıktısı şu olacaktır:

First String 
1

Özellikler, dilin yapısal bir yapısıdır;

  • Davranışların bileşimi.
  • Arayüzlerin çalışma zamanı uygulaması.
  • Statik tip kontrol / derleme ile uyumluluk

Hem varsayılan uygulamaları hem de durumu taşıyan arayüzler olarak görülebilirler. Bir özellik, trait anahtar sözcüğü kullanılarak tanımlanır.

Aşağıda bir özellik örneği verilmiştir -

trait Marks {
   void DisplayMarks() {
      println("Display Marks");
   } 
}

Daha sonra, özelliği arabirimlerle benzer şekilde uygulamak için uygulama anahtar sözcüğü kullanılabilir.

class Example {
   static void main(String[] args) {
      Student st = new Student();
      st.StudentID = 1;
      st.Marks1 = 10; 
      println(st.DisplayMarks());
   } 
} 

trait Marks { 
   void DisplayMarks() {
      println("Display Marks");
   } 
} 

class Student implements Marks { 
   int StudentID
   int Marks1;
}

Arayüzlerin Uygulanması

Özellikler arayüzler uygulayabilir, bu durumda arayüzler implements anahtar sözcüğü kullanılarak bildirilir.

Bir arayüz uygulayan bir özellik örneği aşağıda verilmiştir. Aşağıdaki örnekte aşağıdaki kilit noktalar not edilebilir.

  • Toplam arabirim, DisplayTotal yöntemiyle tanımlanır.

  • Özellik İşaretleri, Toplam arayüzünü uygular ve bu nedenle DisplayTotal yöntemi için bir uygulama sağlamalıdır.

class Example {
   static void main(String[] args) {
      Student st = new Student();
      st.StudentID = 1;
      st.Marks1 = 10;
		
      println(st.DisplayMarks());
      println(st.DisplayTotal());
   } 
} 

interface Total {
   void DisplayTotal() 
} 

trait Marks implements Total {
   void DisplayMarks() {
      println("Display Marks");
   }
	
   void DisplayTotal() {
      println("Display Total"); 
   } 
} 

class Student implements Marks { 
   int StudentID
   int Marks1;  
}

Yukarıdaki programın çıktısı şu olacaktır:

Display Marks 
Display Total

Özellikleri

Bir özellik, özellikleri tanımlayabilir. Bir özelliğe sahip bir özellik örneği aşağıda verilmiştir.

Aşağıdaki örnekte, tamsayı türündeki Marks1 bir özelliktir.

class Example {
   static void main(String[] args) {
      Student st = new Student();
      st.StudentID = 1;
		
      println(st.DisplayMarks());
      println(st.DisplayTotal());
   } 
	
   interface Total {
      void DisplayTotal() 
   } 
	
   trait Marks implements Total {
      int Marks1;
		
      void DisplayMarks() {
         this.Marks1 = 10;
         println(this.Marks1);
      }
		
      void DisplayTotal() {
         println("Display Total");
      } 
   } 
	
   class Student implements Marks {
      int StudentID 
   }
}

Yukarıdaki programın çıktısı şu olacaktır:

10 
Display Total

Davranışların Bileşimi

Özellikler, çoklu kalıtımı kontrollü bir şekilde uygulamak için elmas sorunundan kaçınmak için kullanılabilir. Aşağıdaki kod örneğinde, iki özellik tanımladık -Marks ve Total. Öğrenci sınıfımız her iki özelliği de uygular. Öğrenci sınıfı her iki özelliği de genişlettiğinden, her iki yönteme de erişebilir -DisplayMarks ve DisplayTotal.

class Example {
   static void main(String[] args) {
      Student st = new Student();
      st.StudentID = 1;
		
      println(st.DisplayMarks());
      println(st.DisplayTotal()); 
   } 
} 

trait Marks {
   void DisplayMarks() {
      println("Marks1");
   } 
} 

trait Total {
   void DisplayTotal() { 
      println("Total");
   } 
}  

class Student implements Marks,Total {
   int StudentID 
}

Yukarıdaki programın çıktısı şu olacaktır:

Total 
Marks1

Özellikleri Genişletmek

Özellikler başka bir özelliği genişletebilir, bu durumda extendsanahtar kelime. Aşağıdaki kod örneğinde, Total özelliğini Marks özelliği ile genişletiyoruz.

class Example {
   static void main(String[] args) {
      Student st = new Student();
      st.StudentID = 1;
      println(st.DisplayMarks());
   } 
} 

trait Marks {
   void DisplayMarks() {
      println("Marks1");
   } 
} 

trait Total extends Marks {
   void DisplayMarks() {
      println("Total");
   } 
}  

class Student implements Total {
   int StudentID 
}

Yukarıdaki programın çıktısı şu olacaktır:

Total

Kapatma, kısa ve anonim bir kod bloğudur. Normalde birkaç satırlık bir kodu kapsar. Bir yöntem, kod bloğunu bir parametre olarak bile alabilir. Doğası gereği anonimdirler.

Aşağıda basit bir kapatma örneği ve neye benzediğini görebilirsiniz.

class Example {
   static void main(String[] args) {
      def clos = {println "Hello World"};
      clos.call();
   } 
}

Yukarıdaki örnekte, kod satırı - {println "Merhaba Dünya"} kapanış olarak bilinir. Bu tanımlayıcı tarafından referans verilen kod bloğu, call deyimi ile yürütülebilir.

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

Hello World

Kapanışlarda biçimsel parametreler

Kapanışlar ayrıca onları Groovy'deki yöntemler gibi daha kullanışlı hale getirmek için biçimsel parametreler içerebilir.

class Example {
   static void main(String[] args) {
      def clos = {param->println "Hello ${param}"};
      clos.call("World");
   } 
}

Yukarıdaki kod örneğinde, kapatmanın bir parametre almasına neden olan $ {param} kullanımına dikkat edin. Clos.call deyimi aracılığıyla closure çağrısı yaparken, artık closure'a bir parametre geçirme seçeneğimiz var.

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

Hello World

Sonraki resim, önceki örneği tekrarlar ve aynı sonucu üretir, ancak kullanılabileceği gibi atıfta bulunulan örtük tek bir parametrenin olduğunu gösterir. Burada 'it' Groovy'de bir anahtar kelimedir.

class Example {
   static void main(String[] args) {
      def clos = {println "Hello ${it}"};
      clos.call("World");
   } 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

Hello World

Kapanışlar ve Değişkenler

Daha resmi olarak, kapanışlar, kapanış tanımlandığı anda değişkenlere atıfta bulunabilir. Aşağıda bunun nasıl başarılabileceğine dair bir örnek verilmiştir.

class Example {     
   static void main(String[] args) {
      def str1 = "Hello";
      def clos = {param -> println "${str1} ${param}"}
      clos.call("World");
		
      // We are now changing the value of the String str1 which is referenced in the closure
      str1 = "Welcome";
      clos.call("World");
   } 
}

Yukarıdaki örnekte, kapanışa bir parametre aktarmanın yanı sıra, str1 adlı bir değişken de tanımlıyoruz. Kapanış ayrıca değişkeni parametre ile birlikte alır.

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

Hello World 
Welcome World

Yöntemlerde Kapatmaları Kullanma

Kapanışlar, yöntemlere parametre olarak da kullanılabilir. Groovy'de, Listeler ve koleksiyonlar gibi veri türleri için yerleşik yöntemlerin çoğu, parametre türü olarak kapanışlara sahiptir.

Aşağıdaki örnek, bir kapatmanın bir yönteme parametre olarak nasıl gönderilebileceğini gösterir.

class Example { 
   def static Display(clo) {
      // This time the $param parameter gets replaced by the string "Inner"         
      clo.call("Inner");
   } 
	
   static void main(String[] args) {
      def str1 = "Hello";
      def clos = { param -> println "${str1} ${param}" }
      clos.call("World");
		
      // We are now changing the value of the String str1 which is referenced in the closure
      str1 = "Welcome";
      clos.call("World");
		
      // Passing our closure to a method
      Example.Display(clos);
   } 
}

Yukarıdaki örnekte,

  • Bir kapanışı argüman olarak alan Display adında statik bir yöntem tanımlıyoruz.

  • Daha sonra ana yöntemimizde bir kapanış tanımlıyor ve bunu parametre olarak Display yöntemimize geçiriyoruz.

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

Hello World 
Welcome World 
Welcome Inner

Koleksiyonlarda ve Dizede Kapanışlar

Birkaç List, Map ve String yöntemi, bir kapanışı bağımsız değişken olarak kabul eder. Bu veri türlerinde kapanışların nasıl kullanılabileceğine dair bir örneğe bakalım.

Kapanışları Listelerle Kullanma

Aşağıdaki örnek, Closure'ların Listelerle nasıl kullanılabileceğini gösterir. Aşağıdaki örnekte önce basit bir değerler listesi tanımlıyoruz. Liste toplama türü daha sonra adı verilen bir işlevi tanımlar.each. Bu işlev, bir parametre olarak bir kapanışı alır ve kapanışı listenin her bir öğesine uygular.

class Example {
   static void main(String[] args) {
      def lst = [11, 12, 13, 14];
      lst.each {println it}
   } 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

11 
12 
13 
14

Kapatmaları Haritalar ile Kullanma

Aşağıdaki örnek, kapanışların Haritalar ile nasıl kullanılabileceğini gösterir. Aşağıdaki örnekte ilk önce basit bir anahtar değer öğeleri Haritası tanımlıyoruz. Harita koleksiyonu türü daha sonra .each adlı bir işlevi tanımlar. Bu işlev, bir parametre olarak bir kapanışı alır ve kapanışı haritanın her bir anahtar / değer çiftine uygular.

class Example {
   static void main(String[] args) {
      def mp = ["TopicName" : "Maps", "TopicDescription" : "Methods in Maps"]             
      mp.each {println it}
      mp.each {println "${it.key} maps to: ${it.value}"}
   } 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

TopicName = Maps 
TopicDescription = Methods in Maps 
TopicName maps to: Maps 
TopicDescription maps to: Methods in Maps

Çoğu zaman, bir koleksiyonun üyeleri arasında yineleme yapmak ve yalnızca öğe bazı kriterleri karşıladığında bazı mantıkları uygulamak isteyebiliriz. Bu, kapanışta bir koşullu ifade ile kolayca ele alınır.

class Example {
   static void main(String[] args) {
      def lst = [1,2,3,4];
      lst.each {println it}
      println("The list will only display those numbers which are divisible by 2")
      lst.each{num -> if(num % 2 == 0) println num}
   } 
}

Yukarıdaki örnek, listedeki her bir öğenin 2'ye bölünebilir olup olmadığını kontrol etmek için kullanılan kapanışta kullanılan koşullu if (num% 2 == 0) ifadesini gösterir.

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

1 
2 
3 
4 
The list will only display those numbers which are divisible by 2.
2 
4

Closures ile kullanılan yöntemler

Kapakların kendileri bazı yöntemler sağlar.

Sr.No. Yöntemler ve Açıklama
1 bul ()

Find yöntemi, bir koleksiyondaki bazı ölçütlerle eşleşen ilk değeri bulur.

2 hepsini bul()

Kapanma koşuluyla eşleşen alıcı nesnedeki tüm değerleri bulur.

3 herhangi () ve her ()

Yöntem, bir Boolean yükleminin en az bir öğe için geçerli olup olmadığını kontrol ederek bir koleksiyonun her öğesini yineler.

4 toplamak()

Toplama yöntemi, bir koleksiyon aracılığıyla yinelenir, her öğeyi transformatör olarak kapatmayı kullanarak yeni bir değere dönüştürür.

Ek açıklamalar , programın bir parçası olmayan bir program hakkında veri sağladıkları bir meta veri biçimidir. Açıklamaların, ekledikleri kodun işleyişi üzerinde doğrudan bir etkisi yoktur.

Ek açıklamalar esas olarak aşağıdaki nedenlerle kullanılır -

  • Information for the compiler - Ek açıklamalar, derleyici tarafından hataları tespit etmek veya uyarıları bastırmak için kullanılabilir.

  • Compile-time and deployment-time processing - Yazılım araçları kod, XML dosyaları vb. Oluşturmak için açıklama bilgilerini işleyebilir.

  • Runtime processing - Çalışma zamanında incelenmek üzere bazı ek açıklamalar mevcuttur.

Groovy'de temel bir açıklama aşağıdaki gibi görünür -

@interface - at işareti karakteri (@) derleyiciye, onu izleyen şeyin bir açıklama olduğunu gösterir.

Ek açıklama, içindeki üyeleri tanımlayabilir the form gövdesi olmayan yöntemler ve isteğe bağlı bir varsayılan değer.

Ek açıklamalar aşağıdaki türlere uygulanabilir -

Dize Türü

Bir dize için bir Ek Açıklama örneği aşağıda verilmiştir -

@interface Simple { 
   String str1() default "HelloWorld"; 
}

Enum türü

enum DayOfWeek { mon, tue, wed, thu, fri, sat, sun } 
@interface Scheduled {
   DayOfWeek dayOfWeek() 
}

Sınıf türü

@interface Simple {} 
@Simple 
class User {
   String username
   int age
}
 
def user = new User(username: "Joe",age:1); 
println(user.age); 
println(user.username);

Ek Açıklama Üye Değerleri

Bir açıklama kullanıldığında, en azından varsayılan bir değeri olmayan tüm üyelerin ayarlanması gerekir. Aşağıda bir örnek verilmiştir. Ek açıklama Örneği tanımlandıktan sonra kullanıldığında, kendisine atanmış bir değere sahip olması gerekir.

@interface Example {
   int status() 
}

@Example(status = 1)

Kapanış Açıklama Parametreleri

Groovy'deki ek açıklamaların iyi bir özelliği, bir kapanışı da açıklama değeri olarak kullanabilmenizdir. Bu nedenle ek açıklamalar çok çeşitli ifadelerle kullanılabilir.

Aşağıda bununla ilgili bir örnek verilmiştir. Onlyif ek açıklaması, bir sınıf değerine göre oluşturulur. Daha sonra açıklama, sayı değişkeninin değerine bağlı olarak sonuç değişkenine farklı mesajlar gönderen iki yönteme uygulanır.

@interface OnlyIf {
   Class value() 
}  

@OnlyIf({ number<=6 }) 
void Version6() {
   result << 'Number greater than 6' 
} 

@OnlyIf({ number>=6 }) 
void Version7() {
   result << 'Number greater than 6' 
}

Meta Açıklamaları

Bu, groovy'deki ek açıklamaların oldukça kullanışlı bir özelliğidir. Aşağıda gösterildiği gibi bir yöntem için birden fazla ek açıklamaya sahip olabileceğiniz zamanlar olabilir. Bazen bu, birden fazla ek açıklamaya sahip olmak için karmaşık hale gelebilir.

@Procedure 
@Master class 
MyMasterProcedure {}

Böyle bir durumda, birden çok ek açıklamayı birlikte kulüpleyen ve meta ek açıklamayı yönteme uygulayan bir meta açıklama tanımlayabilirsiniz. Dolayısıyla, yukarıdaki örnek için AnnotationCollector'ı kullanarak annotation koleksiyonunu ilk olarak tanımlayabilirsiniz.

import groovy.transform.AnnotationCollector
  
@Procedure 
@Master 
@AnnotationCollector

Bu yapıldıktan sonra, aşağıdaki meta açıklayıcıyı yönteme uygulayabilirsiniz -

import groovy.transform.AnnotationCollector
  
@Procedure 
@Master 
@AnnotationCollector
  
@MasterProcedure 
class MyMasterProcedure {}

XML, programcıların işletim sistemi ve / veya geliştirme dilinden bağımsız olarak diğer uygulamalar tarafından okunabilen uygulamalar geliştirmesine olanak tanıyan taşınabilir, açık kaynaklı bir dildir. Bu, uygulamalar arasında veri alışverişi için kullanılan en yaygın dillerden biridir.

XML nedir?

Genişletilebilir Biçimlendirme Dili XML, HTML veya SGML'ye çok benzer bir biçimlendirme dilidir. Bu, World Wide Web Konsorsiyumu tarafından önerilir ve açık bir standart olarak mevcuttur. XML, SQL tabanlı bir omurga gerektirmeden küçük ila orta büyüklükteki verileri izlemek için son derece kullanışlıdır.

Groovy'de XML Desteği

Groovy dili ayrıca XML dili için zengin bir destek sağlar. Kullanılan en temel iki XML sınıfı şunlardır:

  • XML Markup BuilderGroovy, çeşitli ağaç yapılı nesne temsilleri yapmak için alt sınıflara ayrılabilen ağaç tabanlı BuilderSupport'u destekler. Genellikle, bu oluşturucular XML biçimlendirmesini, HTML biçimlendirmesini temsil etmek için kullanılır. Groovy'nin işaretleme üreteci, sözde yöntemlere yapılan çağrıları yakalar ve bunları bir ağaç yapısının öğelerine veya düğümlerine dönüştürür. Bu sözde yöntemlerin parametreleri, düğümlerin nitelikleri olarak kabul edilir. Yöntem çağrısının bir parçası olarak kapanışlar, ortaya çıkan ağaç düğümü için iç içe geçmiş alt içerik olarak kabul edilir.

  • XML Parser- Groovy XmlParser sınıfı, bir XML belgesini bir Node örnekleri ağacına ayrıştırmak için basit bir model kullanır. Her Düğüm, XML öğesinin adına, öğenin niteliklerine ve tüm alt Düğümlere referanslara sahiptir. Bu model, çoğu basit XML işleme için yeterlidir.

Tüm XML kodu örneklerimiz için, XML dosyasının oluşturulması ve ardından dosyayı okumak için aşağıdaki basit XML dosyası movies.xml'yi kullanalım.

<collection shelf = "New Arrivals"> 

   <movie title = "Enemy Behind"> 
      <type>War, Thriller</type> 
      <format>DVD</format> 
      <year>2003</year> 
      <rating>PG</rating> 
      <stars>10</stars> 
      <description>Talk about a US-Japan war</description> 
   </movie> 
	
   <movie title = "Transformers"> 
      <type>Anime, Science Fiction</type>
      <format>DVD</format> 
      <year>1989</year> 
      <rating>R</rating> 
      <stars>8</stars> 
      <description>A schientific fiction</description> 
   </movie> 
	
   <movie title = "Trigun"> 
      <type>Anime, Action</type> 
      <format>DVD</format> 
      <year>1986</year> 
      <rating>PG</rating> 
      <stars>10</stars> 
      <description>Vash the Stam pede!</description> 
   </movie> 
	
   <movie title = "Ishtar"> 
      <type>Comedy</type> 
      <format>VHS</format> 
      <year>1987</year> 
      <rating>PG</rating> 
      <stars>2</stars> 
      <description>Viewable boredom </description> 
   </movie> 
	
</collection>

XML İşaretleme Oluşturucu

Sözdizimi

public MarkupBuilder()

MarkupBuilder, XML belgesinin tamamını oluşturmak için kullanılır. XML belgesi, önce XML belge sınıfının bir nesnesi oluşturularak oluşturulur. Nesne oluşturulduktan sonra, XML belgesinin çeşitli öğelerini oluşturmak için bir sözde yöntem çağrılabilir.

Yukarıdaki XML belgesinden bir bloğun, yani bir film öğesinin nasıl oluşturulacağına dair bir örneğe bakalım -

import groovy.xml.MarkupBuilder 

class Example {
   static void main(String[] args) {
      def mB = new MarkupBuilder()
		
      // Compose the builder
      mB.collection(shelf : 'New Arrivals') {
         movie(title : 'Enemy Behind')
         type('War, Thriller')
         format('DVD')
         year('2003')
         rating('PG')
         stars(10)
         description('Talk about a US-Japan war') 
      }
   } 
}

Yukarıdaki örnekte, aşağıdaki noktalara dikkat edilmelidir -

  • mB.collection() - Bu, <collection> </collection> baş XML etiketini oluşturan bir biçimlendirme oluşturucudur.

  • movie(title : 'Enemy Behind')- Bu sözde yöntemler, bu yöntemle alt etiket oluşturarak değeri olan etiketi oluşturur. Title adında bir değer belirterek, bu aslında öğe için bir özniteliğin oluşturulması gerektiğini gösterir.

  • XML belgesinin kalan öğelerini oluşturmak için sözde yönteme bir kapatma sağlanır.

  • MarkupBuilder sınıfı için varsayılan yapıcı, üretilen XML'in standart çıkış akışına verilmesi için başlatılır.

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

<collection shelf = 'New Arrivals'> 
   <movie title = 'Enemy Behind' /> 
      <type>War, Thriller</type> 
      <format>DVD</format> 
      <year>2003</year> 
      <rating>PG</rating> 
      <stars>10</stars> 
      <description>Talk about a US-Japan war</description> 
   </movie> 
</collection>

XML belgesinin tamamını oluşturmak için aşağıdaki şeylerin yapılması gerekir.

  • Elemanların farklı değerlerini saklamak için bir harita girişinin oluşturulması gerekir.
  • Haritanın her bir öğesi için, her bir öğeye değer atıyoruz.
import groovy.xml.MarkupBuilder 

class Example {
   static void main(String[] args) {
      def mp = [1 : ['Enemy Behind', 'War, Thriller','DVD','2003', 
         'PG', '10','Talk about a US-Japan war'],
         2 : ['Transformers','Anime, Science Fiction','DVD','1989', 
         'R', '8','A scientific fiction'],
         3 : ['Trigun','Anime, Action','DVD','1986', 
         'PG', '10','Vash the Stam pede'],
         4 : ['Ishtar','Comedy','VHS','1987', 'PG', 
         '2','Viewable boredom ']] 
			
      def mB = new MarkupBuilder()  
		
      // Compose the builder
      def MOVIEDB = mB.collection('shelf': 'New Arrivals') {
         mp.each {
            sd -> 
            mB.movie('title': sd.value[0]) {  
               type(sd.value[1])
               format(sd.value[2])
               year(sd.value[3]) 
               rating(sd.value[4])
               stars(sd.value[4]) 
               description(sd.value[5]) 
            }
         }
      }
   } 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

<collection shelf = 'New Arrivals'> 
   <movie title = 'Enemy Behind'> 
      <type>War, Thriller</type> 
      <format>DVD</format> 
      <year>2003</year> 
      <rating>PG</rating> 
      <stars>PG</stars> 
      <description>10</description> 
   </movie> 
   <movie title = 'Transformers'> 
      <type>Anime, Science Fiction</type> 
      <format>DVD</format> 
      <year>1989</year>
	  <rating>R</rating> 
      <stars>R</stars> 
      <description>8</description> 
   </movie> 
   <movie title = 'Trigun'> 
      <type>Anime, Action</type> 
      <format>DVD</format> 
      <year>1986</year> 
      <rating>PG</rating> 
      <stars>PG</stars> 
      <description>10</description> 
   </movie> 
   <movie title = 'Ishtar'> 
      <type>Comedy</type> 
      <format>VHS</format> 
      <year>1987</year> 
      <rating>PG</rating> 
      <stars>PG</stars> 
      <description>2</description> 
   </movie> 
</collection>

XML Ayrıştırma

Groovy XmlParser sınıfı, bir XML belgesini bir Node örnekleri ağacına ayrıştırmak için basit bir model kullanır. Her Düğüm, XML öğesinin adına, öğenin niteliklerine ve tüm alt Düğümlere referanslara sahiptir. Bu model, çoğu basit XML işleme için yeterlidir.

Sözdizimi

public XmlParser() 
   throws ParserConfigurationException, 
      SAXException

Aşağıdaki kodlar, XML ayrıştırıcısının bir XML belgesini okumak için nasıl kullanılabileceğinin bir örneğini gösterir.

Farz edelim ki Movies.xml adında aynı belgeye sahibiz ve XML belgesini ayrıştırıp kullanıcıya uygun bir çıktı görüntülemek istedik. Aşağıdaki kod, XML belgesinin tüm içeriğinde nasıl gezinebileceğimizi ve kullanıcıya nasıl uygun bir yanıt gösterebileceğimizi gösteren bir parçadır.

import groovy.xml.MarkupBuilder 
import groovy.util.*

class Example {

   static void main(String[] args) { 
	
      def parser = new XmlParser()
      def doc = parser.parse("D:\\Movies.xml");
		
      doc.movie.each{
         bk->
         print("Movie Name:")
         println "${bk['@title']}" print("Movie Type:") println "${bk.type[0].text()}"
			
         print("Movie Format:")
         println "${bk.format[0].text()}" print("Movie year:") println "${bk.year[0].text()}"
			
         print("Movie rating:")
         println "${bk.rating[0].text()}" print("Movie stars:") println "${bk.stars[0].text()}"
			
         print("Movie description:")
         println "${bk.description[0].text()}"
         println("*******************************")
      }
   }
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

Movie Name:Enemy Behind 
Movie Type:War, Thriller 
Movie Format:DVD 
Movie year:2003 
Movie rating:PG 
Movie stars:10 
Movie description:Talk about a US-Japan war 
******************************* 
Movie Name:Transformers 
Movie Type:Anime, Science Fiction 
Movie Format:DVD 
Movie year:1989 
Movie rating:R 
Movie stars:8 
Movie description:A schientific fiction 
******************************* 
Movie Name:Trigun 
Movie Type:Anime, Action
Movie Format:DVD 
Movie year:1986 
Movie rating:PG 
Movie stars:10 
Movie description:Vash the Stam pede! 
******************************* 
Movie Name:Ishtar 
Movie Type:Comedy 
Movie Format:VHS 
Movie year:1987 
Movie rating:PG 
Movie stars:2 
Movie description:Viewable boredom

Yukarıdaki kodla ilgili dikkat edilmesi gereken önemli noktalar.

  • XmlParser sınıfının bir nesnesi, XML belgesini ayrıştırmak için kullanılabilmesi için oluşturuluyor.

  • Ayrıştırıcıya XML dosyasının konumu verilir.

  • Her film öğesi için, her bir alt düğümde gezinmek ve ilgili bilgileri görüntülemek için bir kapanış kullanıyoruz.

Movie öğesinin kendisi için, movie öğesine eklenen title niteliğini görüntülemek için @ sembolünü kullanıyoruz.

JMX, Java sanal ortamı ile herhangi bir ilgisi olan tüm uygulamaları izlemek için kullanılan fiili standarttır. Groovy'nin doğrudan Java'nın üzerinde olduğu göz önüne alındığında, Groovy, Java ile JMX için halihazırda yapılmış olan muazzam miktardaki işten yararlanabilir.

JVM'yi izleme

JVM'nin izlenmesini gerçekleştirmek için java.lang.management içinde bulunan standart sınıflar kullanılabilir. Aşağıdaki kod örneği, bunun nasıl yapılabileceğini gösterir.

import java.lang.management.*

def os = ManagementFactory.operatingSystemMXBean 
println """OPERATING SYSTEM: 
\tOS architecture = $os.arch 
\tOS name = $os.name \tOS version = $os.version 
\tOS processors = $os.availableProcessors """ def rt = ManagementFactory.runtimeMXBean println """RUNTIME: \tRuntime name = $rt.name 
   \tRuntime spec name = $rt.specName \tRuntime vendor = $rt.specVendor 
   \tRuntime spec version = $rt.specVersion \tRuntime management spec version = $rt.managementSpecVersion 
   """ 

def mem = ManagementFactory.memoryMXBean 
def heapUsage = mem.heapMemoryUsage 
def nonHeapUsage = mem.nonHeapMemoryUsage 

println """MEMORY: 
   HEAP STORAGE: 
      \tMemory committed = $heapUsage.committed \tMemory init = $heapUsage.init 
      \tMemory max = $heapUsage.max \tMemory used = $heapUsage.used NON-HEAP STORAGE: 
      \tNon-heap memory committed = $nonHeapUsage.committed \tNon-heap memory init = $nonHeapUsage.init 
      \tNon-heap memory max = $nonHeapUsage.max \tNon-heap memory used = $nonHeapUsage.used 
   """
  
println "GARBAGE COLLECTION:" 
ManagementFactory.garbageCollectorMXBeans.each { gc ->
   println "\tname = $gc.name" println "\t\tcollection count = $gc.collectionCount"
   println "\t\tcollection time = $gc.collectionTime" String[] mpoolNames = gc.memoryPoolNames mpoolNames.each { mpoolName -> println "\t\tmpool name = $mpoolName"
   } 
}

Kod yürütüldüğünde, çıktı, kodun çalıştırıldığı sisteme bağlı olarak değişecektir. Çıktının bir örneği aşağıda verilmiştir.

OPERATING SYSTEM: 
   OS architecture = x86 
   OS name = Windows 7 
   OS version = 6.1 
   OS processors = 4
   
RUNTIME: 
   Runtime name = 5144@Babuli-PC 
   Runtime spec name = Java Virtual Machine Specification 
   Runtime vendor = Oracle Corporation 
   Runtime spec version = 1.7 
   Runtime management spec version = 1.2
   
MEMORY: 
   HEAP STORAGE: 
      Memory committed = 16252928 
      Memory init = 16777216 
      Memory max = 259522560 
      Memory used = 7355840
   
NON-HEAP STORAGE: 
   Non-heap memory committed = 37715968 
   Non-heap memory init = 35815424 
   Non-heap memory max = 123731968 
   Non-heap memory used = 18532232 
   
GARBAGE COLLECTION: 
   name = Copy 
   collection count = 15 
   collection time = 47 
   mpool name = Eden Space 
   mpool name = Survivor Space
		
   name = MarkSweepCompact 
      collection count = 0 
      collection time = 0 
		
      mpool name = Eden Space 
      mpool name = Survivor Space 
      mpool name = Tenured Gen 
      mpool name = Perm Gen 
      mpool name = Perm Gen [shared-ro] 
      mpool name = Perm Gen [shared-rw]

Tomcat'i izleme

Tomcat'i izlemek için tomcat başlatıldığında aşağıdaki parametre ayarlanmalıdır -

set JAVA_OPTS = -Dcom.sun.management.jmxremote 
Dcom.sun.management.jmxremote.port = 9004\
 
-Dcom.sun.management.jmxremote.authenticate=false 
Dcom.sun.management.jmxremote.ssl = false

Aşağıdaki kod, çalışan Tomcat'teki kullanılabilir MBean'leri keşfetmek, hangilerinin web modüllerini belirlemek ve her web modülü için işlem süresini çıkarmak için JMX'i kullanır.

import groovy.swing.SwingBuilder
  
import javax.management.ObjectName 
import javax.management.remote.JMXConnectorFactory as JmxFactory 
import javax.management.remote.JMXServiceURL as JmxUrl 
import javax.swing.WindowConstants as WC 
 
import org.jfree.chart.ChartFactory 
import org.jfree.data.category.DefaultCategoryDataset as Dataset 
import org.jfree.chart.plot.PlotOrientation as Orientation 
 
def serverUrl = 'service:jmx:rmi:///jndi/rmi://localhost:9004/jmxrmi' 
def server = JmxFactory.connect(new JmxUrl(serverUrl)).MBeanServerConnection 
def serverInfo = new GroovyMBean(server, 'Catalina:type = Server').serverInfo 
println "Connected to: $serverInfo" def query = new ObjectName('Catalina:*') String[] allNames = server.queryNames(query, null) def modules = allNames.findAll { name -> name.contains('j2eeType=WebModule') }.collect{ new GroovyMBean(server, it) } println "Found ${modules.size()} web modules. Processing ..." 
def dataset = new Dataset() 
 
modules.each { m ->
   println m.name()
   dataset.addValue m.processingTime, 0, m.path 
}

Bu bölüm, JSON nesnelerini ayrıştırmak ve üretmek için Groovy dilini nasıl kullanabileceğimizi kapsar.

JSON İşlevleri

Sr.No İşlev ve Kitaplıklar
1

JsonSlurper

JsonSlurper, JSON metnini veya okuyucu içeriğini Groovy verilerine ayrıştıran bir sınıftır

Haritalar, listeler ve Tamsayı, Double, Boolean ve String gibi ilkel türler gibi yapılar.

2

JsonOutput

Bu yöntem, Groovy nesnelerini JSON dizelerine serileştirmekten sorumludur.

JsonSlurper kullanarak Verileri Ayrıştırma

JsonSlurper, JSON metnini veya okuyucu içeriğini haritalar, listeler ve Integer, Double, Boolean ve String gibi ilkel türler gibi Groovy veri Yapılarına ayrıştıran bir sınıftır.

Sözdizimi

def slurper = new JsonSlurper()

JSON bulamaç, metni veya okuyucu içeriğini listeler ve haritaların veri yapısına ayrıştırır.

JsonSlurper sınıfı, ayrıştırıcı uygulamaları için birkaç değişkenle birlikte gelir. Bazen belirli dizeleri ayrıştırmaya gelince farklı gereksinimleriniz olabilir. Bir web sunucusundan gelen yanıttan dönen JSON'un okunması gereken bir örneği ele alalım. Böyle bir durumda ayrıştırıcı JsonParserLax varyantını kullanmak faydalıdır. Bu parsee, JSON metninde yorumlara izin verir ve alıntı dizeleri vb. İçermez. Bu tür ayrıştırıcıyı belirtmek için, JsonSlurper nesnesini tanımlarken JsonParserType.LAX ayrıştırıcı türünü kullanmanız gerekir.

Aşağıda verilen bunun bir örneğini görelim. Örnek, http modülünü kullanarak bir web sunucusundan JSON verilerini almak içindir. Bu tür çapraz geçiş için en iyi seçenek ayrıştırıcı türünün JsonParserLax değişkenine ayarlanmasıdır.

http.request( GET, TEXT ) {
   headers.Accept = 'application/json'
   headers.'User-Agent' = USER_AGENT
	
   response.success = { 
      res, rd ->  
      def jsonText = rd.text 
		
      //Setting the parser type to JsonParserLax
      def parser = new JsonSlurper().setType(JsonParserType.LAX)
      def jsonResp = parser.parseText(jsonText)
   }
}

Benzer şekilde, aşağıdaki ek ayrıştırıcı türleri Groovy'de mevcuttur -

  • JsonParserCharArray ayrıştırıcısı temelde bir JSON dizesi alır ve temel alınan karakter dizisi üzerinde çalışır. Değer dönüştürme sırasında, karakter alt dizilerini ("doğrama" olarak bilinen bir mekanizma) kopyalar ve bunlar üzerinde ayrı ayrı çalışır.

  • JsonFastParser, JsonParserCharArray'in özel bir çeşididir ve en hızlı ayrıştırıcıdır. JsonFastParser, aynı zamanda dizin-yer paylaşımı ayrıştırıcısı olarak da bilinir. Verilen JSON String'in ayrıştırılması sırasında, yeni char dizileri veya String örnekleri oluşturmaktan kaçınmak için mümkün olduğunca çok çalışır. Yalnızca temeldeki orijinal karakter dizisine işaretçileri tutar. Ek olarak, nesne oluşturmayı mümkün olduğu kadar geciktirir.

  • JsonParserUsingCharacterSource, çok büyük dosyalar için özel bir ayrıştırıcıdır. Sabit performans özelliklerine sahip büyük JSON dosyalarını (bu durumda büyük, 2MB boyutunun üzerindeki dosyalar anlamına gelir) ayrıştırmak için "karakter pencereleme" adı verilen bir teknik kullanır.

Metni Ayrıştırma

JsonSlurper sınıfını nasıl kullanabileceğimize dair bazı örneklere bir göz atalım.

import groovy.json.JsonSlurper 

class Example {
   static void main(String[] args) {
      def jsonSlurper = new JsonSlurper()
      def object = jsonSlurper.parseText('{ "name": "John", "ID" : "1"}') 
		
      println(object.name);
      println(object.ID);
   } 
}

Yukarıdaki örnekte biz -

  • Önce JsonSlurper sınıfının bir örneğini oluşturma

  • Daha sonra bazı JSON metnini ayrıştırmak için JsonSlurper sınıfının parseText işlevini kullanıyoruz.

  • Nesneyi aldığımızda, JSON dizesindeki değerlere aslında anahtar aracılığıyla erişebildiğimizi görebilirsiniz.

Yukarıdaki programın çıktısı aşağıda verilmiştir -

John 
1

Tamsayıların Ayrıştırma Listesi

JsonSlurper ayrıştırma yönteminin başka bir örneğine bakalım. Aşağıdaki örnekte, tamsayıların bir listesini alıyoruz. Aşağıdaki koddan, her birinin List yöntemini kullanabildiğimizi ve ona bir kapatma geçirebileceğimizi fark edeceksiniz.

import groovy.json.JsonSlurper 
class Example {
   static void main(String[] args) {
      def jsonSlurper = new JsonSlurper()
      Object lst = jsonSlurper.parseText('{ "List": [2, 3, 4, 5] }')
      lst.each { println it }
   } 
}

Yukarıdaki programın çıktısı aşağıda verilmiştir -

List=[2, 3, 4, 5]

İlkel Veri türlerinin Listesini Ayrıştırma

JSON ayrıştırıcısı aynı zamanda string, number, object, true, false ve null gibi ilkel veri türlerini de destekler. JsonSlurper sınıfı, bu JSON türlerini karşılık gelen Groovy türlerine dönüştürür.

Aşağıdaki örnek, bir JSON dizesini ayrıştırmak için JsonSlurper öğesinin nasıl kullanılacağını gösterir. Ve burada JsonSlurper'ın tek tek öğeleri kendi ilkel türlerine ayrıştırabildiğini görebilirsiniz.

import groovy.json.JsonSlurper 
class Example {

   static void main(String[] args) {
      def jsonSlurper = new JsonSlurper()
      def obj = jsonSlurper.parseText ''' {"Integer": 12, "fraction": 12.55, "double": 12e13}'''
		
      println(obj.Integer);
      println(obj.fraction);
      println(obj.double); 
   } 
}

Yukarıdaki programın çıktısı aşağıda verilmiştir -

12 
12.55 
1.2E+14

JsonOutput

Şimdi Json'da çıktıların nasıl yazdırılacağından bahsedelim. Bu, JsonOutput yöntemi ile yapılabilir. Bu yöntem, Groovy nesnelerini JSON dizelerine serileştirmekten sorumludur.

Sözdizimi

Static string JsonOutput.toJson(datatype obj)

Parameters - Parametreler bir veri türünün nesnesi olabilir - Sayı, Boole, karakter, Dize, Tarih, Harita, kapanış vb.

Return type - Dönüş türü bir json dizesidir.

Misal

Aşağıda bunun nasıl başarılabileceğine dair basit bir örnek verilmiştir.

import groovy.json.JsonOutput 
class Example {
   static void main(String[] args) {
      def output = JsonOutput.toJson([name: 'John', ID: 1])
      println(output);  
   }
}

Yukarıdaki programın çıktısı aşağıda verilmiştir -

{"name":"John","ID":1}

JsonOutput, düz eski, harika nesneler için de kullanılabilir. Aşağıdaki örnekte, aslında Student türündeki nesneleri JsonOutput yöntemine geçirdiğimizi görebilirsiniz.

import groovy.json.JsonOutput  
class Example {
   static void main(String[] args) {
      def output = JsonOutput.toJson([ new Student(name: 'John',ID:1),
         new Student(name: 'Mark',ID:2)])
      println(output);  
   } 
}
 
class Student {
   String name
   int ID; 
}

Yukarıdaki programın çıktısı aşağıda verilmiştir -

[{"name":"John","ID":1},{"name":"Mark","ID":2}]

Groovy, üst düzey ifadeler için bir yöntem çağrısının argümanlarının etrafındaki parantezlerin çıkarılmasına izin verir. Bu, "komut zinciri" özelliği olarak bilinir. Bu uzantı, birinin bu tür parantez içermeyen yöntem çağrılarını zincirlemesine izin vererek çalışır, argümanlar etrafında parantezler veya zincirleme çağrılar arasında noktalar gerektirmez.

Bir çağrı olarak yürütülürse a b c d, bu aslında eşdeğer olacaktır a(b).c(d).

DSL veya Etki Alanına özgü dil, Groovy'de yazılan kodu, ortak kullanıcı tarafından kolayca anlaşılır hale getirecek şekilde basitleştirmeyi amaçlamaktadır. Aşağıdaki örnek, alana özel bir dile sahip olmanın tam olarak ne anlama geldiğini gösterir.

def lst = [1,2,3,4] 
print lst

Yukarıdaki kod, println ifadesi kullanılarak konsola yazdırılan numaraların bir listesini gösterir. Etki alanına özel bir dilde komutlar şu şekilde olacaktır:

Given the numbers 1,2,3,4
 
Display all the numbers

Dolayısıyla yukarıdaki örnek, programlama dilinin bir alana özgü dilin ihtiyaçlarını karşılayacak şekilde dönüşümünü göstermektedir.

Groovy'de DSL'leri nasıl uygulayabileceğimize dair basit bir örneğe bakalım -

class EmailDsl {  
   String toText 
   String fromText 
   String body 
	
   /** 
   * This method accepts a closure which is essentially the DSL. Delegate the 
   * closure methods to 
   * the DSL class so the calls can be processed 
   */ 
   
   def static make(closure) { 
      EmailDsl emailDsl = new EmailDsl() 
      // any method called in closure will be delegated to the EmailDsl class 
      closure.delegate = emailDsl
      closure() 
   }
   
   /** 
   * Store the parameter as a variable and use it later to output a memo 
   */ 
	
   def to(String toText) { 
      this.toText = toText 
   }
   
   def from(String fromText) { 
      this.fromText = fromText 
   }
   
   def body(String bodyText) { 
      this.body = bodyText 
   } 
}

EmailDsl.make { 
   to "Nirav Assar" 
   from "Barack Obama" 
   body "How are things? We are doing well. Take care" 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

How are things? We are doing well. Take care

Yukarıdaki kod uygulaması hakkında aşağıdakilere dikkat edilmelidir -

  • Bir kapanışı kabul eden statik bir yöntem kullanılır. Bu, çoğunlukla bir DSL uygulamasının sorunsuz bir yoludur.

  • E-posta örneğinde, EmailDsl sınıfının bir make yöntemi vardır. Bir örnek oluşturur ve kapanıştaki tüm çağrıları örneğe delege eder. Bu, "to" ve "from" bölümlerinin, EmailDsl sınıfı içindeki yöntemleri yürüttüğü mekanizmadır.

  • To () yöntemi çağrıldığında, metni daha sonra biçimlendirme için örnekte saklarız.

  • Artık EmailDSL yöntemini son kullanıcılar için anlaşılması kolay olan kolay bir dille arayabiliriz.

Groovy'nin groovy-sql modülü, mevcut Java'nın JDBC teknolojisi üzerinde daha yüksek düzeyde bir soyutlama sağlar. Groovy sql API, bazıları aşağıda gösterilen çok çeşitli veritabanlarını destekler.

  • HSQLDB
  • Oracle
  • SQL Server
  • MySQL
  • MongoDB

Örneğimizde, örnek olarak MySQL DB kullanacağız. MySQL'i Groovy ile kullanmak için yapılacak ilk şey MySQL jdbc jar dosyasını mysql sitesinden indirmektir.The forMySQL'in matı aşağıda gösterilecektir.

mysql-connector-java-5.1.38-bin

Ardından, yukarıdaki jar dosyasını iş istasyonunuzdaki sınıf yoluna eklediğinizden emin olun.

Veritabanı Bağlantısı

Bir MySQL veritabanına bağlanmadan önce aşağıdakilerden emin olun -

  • Bir TESTDB veritabanı oluşturdunuz.
  • TESTDB'de EMPLOYEE tablosu oluşturdunuz.
  • Bu tabloda FIRST_NAME, LAST_NAME, AGE, SEX ve INCOME alanları var.
  • "Testuser" kullanıcı kimliği ve "test123" şifresi TESTDB'ye erişmek için ayarlanmıştır.
  • Mysql jar dosyasını indirdiğinizden ve dosyayı sınıf yolunuza eklediğinizden emin olun.
  • MySQL Temellerini anlamak için MySQL eğitiminden geçtiniz

Aşağıdaki örnek, MySQL veritabanı "TESTDB" ile nasıl bağlanılacağını gösterir.

import java.sql.*; 
import groovy.sql.Sql 

class Example {
   static void main(String[] args) {
      // Creating a connection to the database
      def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 
         'testuser', 'test123', 'com.mysql.jdbc.Driver')
			
      // Executing the query SELECT VERSION which gets the version of the database
      // Also using the eachROW method to fetch the result from the database
   
      sql.eachRow('SELECT VERSION()'){ row ->
         println row[0]
      }
		
      sql.close()  
   } 
}

Bu komut dosyasını çalıştırırken aşağıdaki sonucu üretiyor -

5.7.10-log 
The Sql.newInstance method is used to establish a connection to the database.

Veritabanı Tablosu Oluşturma

Veritabanına bağlandıktan sonraki adım, veritabanımızda tabloları oluşturmaktır. Aşağıdaki örnek, Groovy kullanılarak veritabanında nasıl tablo oluşturulacağını gösterir. Sql sınıfının execute yöntemi, veritabanına karşı ifadeleri yürütmek için kullanılır.

import java.sql.*; 
import groovy.sql.Sql 

class Example { 
   static void main(String[] args) {
      // Creating a connection to the database
      def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser',  
         'test123', 'com.mysql.jdbc.Driver')
			
      def sqlstr = """CREATE TABLE EMPLOYEE ( 
         FIRST_NAME CHAR(20) NOT NULL,
         LAST_NAME CHAR(20),
         AGE INT,
         SEX CHAR(1),
         INCOME FLOAT )""" 
							
      sql.execute(sqlstr);
      sql.close() 
   } 
}

İşlem Ekle

Kayıtlarınızı bir veritabanı tablosunda oluşturmak istediğinizde gereklidir.

Misal

Aşağıdaki örnek, çalışan tablosuna bir kayıt ekleyecektir. Kod, bir try catch bloğuna yerleştirilir, böylece kayıt başarılı bir şekilde yürütülürse, işlem veritabanına kaydedilir. İşlem başarısız olursa, geri alma yapılır.

import java.sql.*; 
import groovy.sql.Sql 

class Example {
   static void main(String[] args) { 
      // Creating a connection to the database
      def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser', 
         'test123', 'com.mysql.jdbc.Driver')
			
      sql.connection.autoCommit = false
		
      def sqlstr = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME) VALUES ('Mac', 'Mohan', 20, 'M', 2000)""" 
      try {
         sql.execute(sqlstr);
         sql.commit()
         println("Successfully committed") 
      }catch(Exception ex) {
         sql.rollback()
         println("Transaction rollback") 
      }
		
      sql.close()
   } 
}

Bir kritere göre yalnızca belirli satırları seçmek isteyip istemediğinizi varsayalım. Aşağıdaki kodlar, değerleri aramak için bir parametre yer tutucusunu nasıl ekleyebileceğinizi gösterir. Yukarıdaki örnek, aşağıdaki kodda gösterildiği gibi parametreleri almak için de yazılabilir. $ Sembolü, daha sonra sql ifadesi yürütüldüğünde değerlerle değiştirilebilecek bir parametre tanımlamak için kullanılır.

import java.sql.*; 
import groovy.sql.Sql
 
class Example {
   static void main(String[] args) {
      // Creating a connection to the database
      def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser', 
         'test123', 'com.mysql.jdbc.Driver')
			
      sql.connection.autoCommit = false  
      
      def firstname = "Mac"
      def lastname ="Mohan"
      def age = 20
      def sex = "M"
      def income = 2000  
		
      def sqlstr = "INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME, AGE, SEX, 
         INCOME) VALUES " + "(${firstname}, ${lastname}, ${age}, ${sex}, ${income} )"
			
      try {
         sql.execute(sqlstr);
         sql.commit()
         println("Successfully committed") 
      } catch(Exception ex) {
         sql.rollback()
         println("Transaction rollback")
      }
		
      sql.close()
   }
}

OKUMA İşlemi

Herhangi bir veritabanı üzerinde OKUMA İşlemi, veritabanından bazı yararlı bilgileri almak anlamına gelir. Veritabanı bağlantımız kurulduktan sonra, bu veritabanına bir sorgulama yapmaya hazırsınız.

Okuma işlemi sql sınıfının eachRow yöntemi kullanılarak gerçekleştirilir.

Sözdizimi

eachRow(GString gstring, Closure closure)

Sonuç kümesinin her satırıyla verilen Kapanışı çağırarak verilen SQL sorgusunu gerçekleştirir.

Parameters

  • Gstring - Yürütülmesi gereken sql ifadesi.

  • Closure- Okuma işleminden alınan satırları işlemek için kapanış ifadesi. Sonuç kümesinin her satırıyla verilen Kapanışı çağırarak verilen SQL sorgusunu gerçekleştirir.

Aşağıdaki kod örneği, tüm kayıtların çalışan tablosundan nasıl getirileceğini gösterir.

import java.sql.*; 
import groovy.sql.Sql
 
class Example {
   static void main(String[] args) {
      // Creating a connection to the database
      def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser', 
         'test123', 'com.mysql.jdbc.Driver')  
			
      sql.eachRow('select * from employee') {
         tp -> 
         println([tp.FIRST_NAME,tp.LAST_NAME,tp.age,tp.sex,tp.INCOME])
      }  
		
      sql.close()
   } 
}

Yukarıdaki programdan elde edilen çıktı -

[Mac, Mohan, 20, M, 2000.0]

Güncelleme İşlemi

GÜNCELLEME Herhangi bir veritabanı üzerinde işlem, veritabanında zaten mevcut olan bir veya daha fazla kaydı güncellemek anlamına gelir. Aşağıdaki prosedür, SEX olan tüm kayıtları 'M' olarak günceller. Burada tüm erkeklerin YAŞ'ını bir yıl artırıyoruz.

import java.sql.*; 
import groovy.sql.Sql 

class Example {
   static void main(String[] args){
      // Creating a connection to the database
      def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser', 
         'test@123', 'com.mysql.jdbc.Driver')
			
      sql.connection.autoCommit = false
      def sqlstr = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = 'M'" 
	  
      try {
         sql.execute(sqlstr);
         sql.commit()
         println("Successfully committed")
      }catch(Exception ex) {
         sql.rollback() 
         println("Transaction rollback")
      }
		
      sql.close()
   } 
}

DELETE İşlemi

Veritabanınızdan bazı kayıtları silmek istediğinizde DELETE işlemi gereklidir. Aşağıda, AGE'nin 20'den fazla olduğu ÇALIŞAN'dan tüm kayıtları silme prosedürü verilmiştir.

import java.sql.*; 
import groovy.sql.Sql 

class Example {
   static void main(String[] args) {
      // Creating a connection to the database
      def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser', 
         'test@123', 'com.mysql.jdbc.Driver')
			
      sql.connection.autoCommit = false
      def sqlstr = "DELETE FROM EMPLOYEE WHERE AGE > 20"
   
      try {
         sql.execute(sqlstr);
         sql.commit()
         println("Successfully committed")
      }catch(Exception ex) {
         sql.rollback()
         println("Transaction rollback")
      }
   
      sql.close()
   } 
}

İşlemlerin Gerçekleştirilmesi

İşlemler, veri tutarlılığını sağlayan bir mekanizmadır. İşlemler aşağıdaki dört özelliğe sahiptir -

  • Atomicity - Ya bir işlem tamamlanır ya da hiçbir şey olmaz.

  • Consistency - Bir işlem tutarlı bir durumda başlamalı ve sistemi tutarlı bir durumda bırakmalıdır.

  • Isolation - Bir işlemin ara sonuçları cari işlemin dışında görünmez.

  • Durability - Bir işlem yapıldığında, sistem hatasından sonra bile etkiler kalıcıdır.

İşte işlemlerin nasıl uygulanacağına dair basit bir örnek. Bu örneği daha önce SİLME işleminin önceki konumuzdan görmüştük.

def sqlstr = "DELETE FROM EMPLOYEE WHERE AGE > 20" 
 
try {
   sql.execute(sqlstr); 
   sql.commit()
   println("Successfully committed") 
}catch(Exception ex) {
   sql.rollback()
   println("Transaction rollback") 
} 
sql.close()

İşlemi Tamamla

Kaydetme işlemi, veritabanına işleme devam etmesini ve veritabanındaki tüm değişiklikleri sonuçlandırmasını söyleyen şeydir.

Yukarıdaki örneğimizde, bu aşağıdaki ifadeyle elde edilir -

sql.commit()

Geri Alma İşlemi

Bir veya daha fazla değişiklikten memnun değilseniz ve bu değişiklikleri tamamen geri almak istiyorsanız, geri alma yöntemini kullanın. Yukarıdaki örneğimizde, bu aşağıdaki ifadeyle elde edilir -

sql.rollback()

Veritabanlarının Bağlantısını Kesme

Veritabanı bağlantısını kesmek için, kapatma yöntemini kullanın.

sql.close()

Yazılım geliştirme sürecinde, bazen geliştiriciler Veri yapıları, etki alanı sınıfları, XML, GUI Düzenleri, Çıktı akışları vb. Oluşturmak için çok zaman harcarlar ve bazen bu belirli gereksinimleri oluşturmak için kullanılan kod, aynı parçacığın tekrarlanmasına neden olur. birçok yerde kod. Groovy inşaatçılarının devreye girdiği yer burasıdır. Groovy, standart nesneler ve yapılar oluşturmak için kullanılabilecek inşaatçılara sahiptir. Bu oluşturucular, geliştiricilerin bu oluşturucuları oluşturmak için kendi kodlarını yazmaları gerekmediğinden zamandan tasarruf sağlar. Bu bölümün yanında, groovy'de bulunan farklı inşaatçılara bakacağız.

Salıncak Oluşturucu

Groovy'de, groovy'de bulunan swing yapıcıları kullanarak grafiksel kullanıcı arayüzleri de oluşturulabilir. Salıncak bileşenlerini geliştirmek için ana sınıf, SwingBuilder sınıfıdır. Bu sınıf, aşağıdakiler gibi grafik bileşenleri oluşturmak için birçok yönteme sahiptir:

  • JFrame - Bu çerçeve elemanını oluşturmak içindir.

  • JTextField - Bu, metin alanı bileşenini oluşturmak için kullanılır.

SwingBuilder sınıfını kullanarak bir Swing uygulamasının nasıl oluşturulacağına dair basit bir örneğe bakalım. Aşağıdaki örnekte, aşağıdaki noktaları görebilirsiniz -

  • Groovy.swing.SwingBuilder ve javax.swing. * Sınıflarını içe aktarmanız gerekir.

  • Swing uygulamasında görüntülenen bileşenlerin tümü SwingBuilder sınıfının parçasıdır.

  • Çerçevenin kendisi için, çerçevenin başlangıç ​​konumunu ve boyutunu belirleyebilirsiniz. Ayrıca çerçevenin başlığını da belirtebilirsiniz.

  • Çerçevenin gösterilmesi için Visibility özelliğini true olarak ayarlamanız gerekir.

import groovy.swing.SwingBuilder 
import javax.swing.* 

// Create a builder 
def myapp = new SwingBuilder()

// Compose the builder 
def myframe = myapp.frame(title : 'Tutorials Point', location : [200, 200], 
   size : [400, 300], defaultCloseOperation : WindowConstants.EXIT_ON_CLOSE {         
      label(text : 'Hello world')
   } 
	
// The following  statement is used for displaying the form 
frame.setVisible(true)

Yukarıdaki programın çıktısı aşağıda verilmiştir. Aşağıdaki çıktı, Hello World metniyle birlikte bir JLabel ile birlikte bir JFrame gösterir.

Metin kutuları ile bir giriş ekranı oluşturmak için bir sonraki örneğimize bakalım. Aşağıdaki örnekte, Öğrenci adı, konu ve Okul Adı için metin kutuları olan bir form oluşturmak istiyoruz. Aşağıdaki örnekte, aşağıdaki temel noktaları görebilirsiniz -

  • Ekrandaki kontrollerimiz için bir düzen tanımlıyoruz. Bu durumda Grid Layout kullanıyoruz.
  • Etiketlerimiz için bir hizalama özelliği kullanıyoruz.
  • Metin kutularını ekranda görüntülemek için textField yöntemini kullanıyoruz.
import groovy.swing.SwingBuilder 
import javax.swing.* 
import java.awt.*
 
// Create a builder 
def myapp = new SwingBuilder() 

// Compose the builder 
def myframe = myapp.frame(title : 'Tutorials Point', location : [200, 200], 
   size : [400, 300], defaultCloseOperation : WindowConstants.EXIT_ON_CLOSE) { 
      panel(layout: new GridLayout(3, 2, 5, 5)) { 
         label(text : 'Student Name:', horizontalAlignment : JLabel.RIGHT) 
         textField(text : '', columns : 10) 
			
         label(text : 'Subject Name:', horizontalAlignment : JLabel.RIGHT) 
         textField(text : '', columns : 10)
			
         label(text : 'School Name:', horizontalAlignment : JLabel.RIGHT) 
         textField(text : '', columns : 10) 
      } 
   } 
	
// The following  statement is used for displaying the form 
myframe.setVisible(true)

Yukarıdaki programın çıktısı aşağıda verilmiştir -

Etkinlik sahipleri

Şimdi olay işleyicilere bakalım. Olay işleyicileri, bir düğmeye basıldığında bir tür işlem gerçekleştirmek için düğme için kullanılır. Her düğme sözde yöntem çağrısı, actionPerformed parametresini içerir. Bu, kapanış olarak sunulan bir kod bloğunu temsil eder.

2 düğmeli bir ekran oluşturmak için bir sonraki örneğimize bakalım. Herhangi bir düğmeye basıldığında, konsol ekranına ilgili bir mesaj gönderilir. Aşağıdaki örnekte, aşağıdaki temel noktaları görebilirsiniz -

  • Tanımlanan her düğme için actionPerformed yöntemini kullanıyoruz ve düğmeye tıklandığında konsola bazı çıktılar göndermek için bir kapanış tanımlıyoruz.

import groovy.swing.SwingBuilder 
import javax.swing.* 
import java.awt.* 

def myapp = new SwingBuilder()
  
def buttonPanel = {
   myapp.panel(constraints : BorderLayout.SOUTH) {
	
      button(text : 'Option A', actionPerformed : {
         println 'Option A chosen'
      })
		
      button(text : 'Option B', actionPerformed : {
         println 'Option B chosen'
      })
   }
}
  
def mainPanel = {
   myapp.panel(layout : new BorderLayout()) {
      label(text : 'Which Option do you want', horizontalAlignment : 
      JLabel.CENTER,
      constraints : BorderLayout.CENTER)
      buttonPanel()
   }
}
  
def myframe = myapp.frame(title : 'Tutorials Point', location : [100, 100],
   size : [400, 300], defaultCloseOperation : WindowConstants.EXIT_ON_CLOSE){
      mainPanel()
   }
	
myframe.setVisible(true)

Yukarıdaki programın çıktısı aşağıda verilmiştir. Herhangi bir düğmeyi tıkladığınızda, gerekli mesaj konsol günlük ekranına gönderilir.

Yukarıdaki örneğin başka bir varyasyonu, işleyici olarak hareket edebilen yöntemleri tanımlamaktır. Aşağıdaki örnekte, DisplayA ve DisplayB için 2 işleyici tanımlıyoruz.

import groovy.swing.SwingBuilder 
import javax.swing.* 
import java.awt.* 

def myapp = new SwingBuilder()
  
def DisplayA = {
   println("Option A") 
} 

def DisplayB = {
   println("Option B")
}

def buttonPanel = {
   myapp.panel(constraints : BorderLayout.SOUTH) {
      button(text : 'Option A', actionPerformed : DisplayA) 
      button(text : 'Option B', actionPerformed : DisplayB)
   }
}  

def mainPanel = {
   myapp.panel(layout : new BorderLayout()) {
      label(text : 'Which Option do you want', horizontalAlignment : JLabel.CENTER,
      constraints : BorderLayout.CENTER)
      buttonPanel()
   }
}  

def myframe = myapp.frame(title : 'Tutorials Point', location : [100, 100],
   size : [400, 300], defaultCloseOperation : WindowConstants.EXIT_ON_CLOSE) {
      mainPanel()
   } 
	
myframe.setVisible(true)

Yukarıdaki programın çıktısı önceki örnekle aynı kalacaktır.

DOM Oluşturucu

DOM oluşturucu, HTML, XHTML ve XML ayrıştırmak ve bunu bir W3C DOM ağacına dönüştürmek için kullanılabilir.

Aşağıdaki örnek, DOM oluşturucunun nasıl kullanılabileceğini gösterir.

String records = '''
   <library>
	
      <Student>
         <StudentName division = 'A'>Joe</StudentName>
         <StudentID>1</StudentID>
      </Student>
	  
      <Student>
         <StudentName division = 'B'>John</StudentName>
         <StudentID>2</StudentID>
      </Student>
	  
      <Student>
         <StudentName division = 'C'>Mark</StudentName>
         <StudentID>3</StudentID>
      </Student>
		
   </library>'''
   
def rd = new StringReader(records) 
def doc = groovy.xml.DOMBuilder.parse(rd)

JsonBuilder

JsonBuilder, json türü nesneler oluşturmak için kullanılır.

Aşağıdaki örnek, Json oluşturucunun nasıl kullanılabileceğini gösterir.

def builder = new groovy.json.JsonBuilder() 

def root = builder.students {
   student {
      studentname 'Joe'
      studentid '1'
		
      Marks(
         Subject1: 10,
         Subject2: 20,
         Subject3:30,
      )
   } 
} 
println(builder.toString());

Yukarıdaki programın çıktısı aşağıda verilmiştir. Çıktı clearlt, Jsonbuilder'ın json nesnesini yapılandırılmış bir düğüm kümesinden oluşturabildiğini gösterir.

{"students":{"student":{"studentname":"Joe","studentid":"1","Marks":{"Subject1":10,
"S ubject2":20,"Subject3":30}}}}

Jsonbuilder ayrıca bir listeyi alıp bir json nesnesine dönüştürebilir. Aşağıdaki örnek bunun nasıl gerçekleştirilebileceğini göstermektedir.

def builder = new groovy.json.JsonBuilder() 
def lst = builder([1, 2, 3]) 
println(builder.toString());

Yukarıdaki programın çıktısı aşağıda verilmiştir.

[1,2,3]

JsonBuilder, sınıflar için de kullanılabilir. Aşağıdaki örnek, bir sınıfın nesnelerinin nasıl json oluşturucunun girdileri haline gelebileceğini gösterir.

def builder = new groovy.json.JsonBuilder() 

class Student {
   String name  
} 

def studentlist = [new Student (name: "Joe"), new Student (name: "Mark"), 
   new Student (name: "John")] 
	
builder studentlist, { Student student ->name student.name} 
println(builder)

Yukarıdaki programın çıktısı aşağıda verilmiştir.

[{"name":"Joe"},{"name":"Mark"},{"name":"John"}]

NodeBuilder

NodeBuilder, rastgele verileri işlemek için Node nesnelerinin iç içe geçmiş ağaçlarını oluşturmak için kullanılır. Bir Nodebuilder kullanımının bir örneği aşağıda gösterilmiştir.

def nodeBuilder = new NodeBuilder() 

def studentlist = nodeBuilder.userlist {
   user(id: '1', studentname: 'John', Subject: 'Chemistry')
   user(id: '2', studentname: 'Joe', Subject: 'Maths')
   user(id: '3', studentname: 'Mark', Subject: 'Physics') 
} 

println(studentlist)

FileTreeBuilder

FileTreeBuilder, bir belirtimden bir dosya dizin yapısı oluşturmak için bir oluşturucudur. Aşağıda FileTreeBuilder'ın nasıl kullanılabileceğine dair bir örnek verilmiştir.

tmpDir = File.createTempDir() 
def fileTreeBuilder = new FileTreeBuilder(tmpDir) 

fileTreeBuilder.dir('main') {
   dir('submain') {
      dir('Tutorial') {
        file('Sample.txt', 'println "Hello World"')
      }
   } 
}

Yukarıdaki kodun çalıştırılmasıyla main / submain / Tutorial klasöründe sample.txt adlı bir dosya oluşturulacaktır. Ve sample.txt dosyası "Merhaba Dünya" metnine sahip olacaktır.

Groovysh olarak bilinen Groovy kabuğu, harika ifadeleri değerlendirmek, sınıfları tanımlamak ve basit programları çalıştırmak için kolayca kullanılabilir. Groovy kurulduğunda komut satırı kabuğu yüklenir.

Groovy'de bulunan komut satırı seçenekleri şunlardır -

Komut satırı parametresi Ad Soyad Detaylar
-C --renk [= BAYRAĞ] ANSI renklerinin kullanımını etkinleştirin veya devre dışı bırakın
-D --define = AD = DEĞER Bir sistem özelliği tanımlayın
-T --terminal = TÜR Kullanılacak terminal tipini belirtin
-V --version Sürümü göster
-sınıf yolu Sınıf dosyalarının nerede bulunacağını belirtin - ilk bağımsız değişken olmalıdır
-cp --classpath '-Sınıf yolu' takma adları
-d - hata ayıklama --debug Hata ayıklama çıktısını etkinleştir
-e --evaluate = arg Etkileşimli oturumu başlatırken seçenek yumruğunu değerlendirin
-h --Yardım Bu yardım mesajını göster
-q --sessiz Gereksiz çıktıyı bastırın
-v --verbose Ayrıntılı çıktıyı etkinleştir

Aşağıdaki anlık görüntü, Groovy kabuğunda yürütülen bir ifadenin basit bir örneğini gösterir. Aşağıdaki örnekte, sadece harika kabukta "Merhaba Dünya" yazıyoruz.

Sınıflar ve Fonksiyonlar

Komut isteminde bir sınıf tanımlamak, yeni bir nesne oluşturmak ve sınıfta bir yöntemi çağırmak çok kolaydır. Aşağıdaki örnek, bunun nasıl uygulanabileceğini göstermektedir. Aşağıdaki örnekte, basit bir yöntemle basit bir Öğrenci sınıfı oluşturuyoruz. Komut isteminin kendisinde, sınıfın bir nesnesini oluşturuyoruz ve Display yöntemini çağırıyoruz.

Komut isteminde bir yöntem tanımlamak ve yöntemi çağırmak çok kolaydır. Yöntemin def türü kullanılarak tanımlandığını unutmayın. Ayrıca, Display yöntemi çağrıldığında gerçek değerle değiştirilen ad adında bir parametre eklediğimizi unutmayın. Aşağıdaki örnek, bunun nasıl uygulanabileceğini göstermektedir.

Komutlar

Kabuğun, kabuğun ortamına zengin erişim sağlayan bir dizi farklı komutu vardır. Aşağıda bunların listesi ve yaptıkları yer almaktadır.

Sr.No Command & smp; Komut Açıklama
1

:help

(: h) Bu yardım mesajını göster

2

?

(:?) Takma ad:: yardım

3

:exit

(: x) Kabuktan çık

4

:quit

(: q) Takma ad:: çıkış

5

import

(: i) Bir sınıfı ad alanına aktarın

6

:display

(: d) Geçerli arabelleği görüntüle

7

:clear

(: c) Arabelleği temizleyin ve istem sayacını sıfırlayın

8

:show

(: S) Değişkenleri, sınıfları veya içe aktarmaları göster

9

:inspect

(: n) GUI nesne tarayıcısıyla bir değişkeni veya son sonucu inceleyin

10

:purge

(: p) Değişkenleri, sınıfları, içe aktarmaları veya tercihleri ​​temizle

11

:edit

(: e) Geçerli arabelleği düzenle

12

:load

(: l) Arabelleğe bir dosya veya URL yükle

13

.

(:.) Takma ad:: yükleme

14

.save

(: s) Geçerli arabelleği bir dosyaya kaydet

15

.record

(: r) Geçerli oturumu bir dosyaya kaydedin

16

:alias

(: a) Bir takma ad oluşturun

17

:set

(: =) Tercihleri ​​ayarlayın (veya listeleyin)

18

:register

(: rc) Kabuk ile yeni bir komut kaydeder

19

:doc

(: D) Bağımsız değişken için dokümanı görüntüleyen bir tarayıcı penceresi açar

20

:history

(: H) Düzenleme satırı geçmişini görüntüleyin, yönetin ve geri çağırın

Nesne yönelimli bir sistemin temel birimi sınıftır. Bu nedenle birim testi, bir sınıf içindeki testlerden oluşur. Uygulanan yaklaşım, test edilen sınıfın bir nesnesini oluşturmak ve seçilen yöntemlerin beklendiği gibi çalışıp çalışmadığını kontrol etmek için kullanmaktır. Her şeyi tek tek test etmek her zaman pratik olmadığı için her yöntem test edilemez. Ancak, kilit ve kritik yöntemler için birim testi yapılmalıdır.

JUnit, Java kodunun otomatik birim testi için kabul edilen endüstri standardı olan açık kaynaklı bir test çerçevesidir. Neyse ki, JUnit çerçevesi, Groovy sınıflarını test etmek için kolayca kullanılabilir. Gereken tek şey, standart Groovy ortamının parçası olan GroovyTestCase sınıfını genişletmektir. Groovy test senaryosu sınıfı Junit test senaryosuna dayanmaktadır.

Basit Bir Junit Test Vakası Yazma

Bir uygulama sınıfı dosyasında aşağıdaki sınıfın tanımlandığını varsayalım -

class Example {
   static void main(String[] args) {
      Student mst = new Student();
      mst.name = "Joe";
      mst.ID = 1;
      println(mst.Display())
   } 
} 
 
public class Student {
   String name;
   int ID;
	
   String Display() {
      return name +ID;
   }  
}

Yukarıdaki programın çıktısı aşağıda verilmiştir.

Joe1

Şimdi de Öğrenci sınıfı için bir test senaryosu yazmak istediğimizi varsayalım. Tipik bir test durumu aşağıdaki gibi görünür. Aşağıdaki kodla ilgili olarak aşağıdaki noktalara dikkat edilmesi gerekir -

  • Test durumu sınıfı GroovyTestCase sınıfını genişletir
  • Display yönteminin doğru dizeyi döndürdüğünden emin olmak için assert ifadesini kullanıyoruz.
class StudentTest extends GroovyTestCase {
   void testDisplay() {
      def stud = new Student(name : 'Joe', ID : '1')
      def expected = 'Joe1'
      assertToString(stud.Display(), expected)
   }
}

Harika Test Paketi

Normalde birim testlerin sayısı arttıkça, tüm test durumlarını tek tek yürütmeye devam etmek zorlaşır. Bu nedenle Groovy, tüm test olaylarını tek bir mantıksal birimde toplayabilen bir test paketi oluşturmak için bir tesis sağlar. Aşağıdaki kodlayıcı, bunun nasıl başarılabileceğini göstermektedir. Kod hakkında aşağıdaki hususlara dikkat edilmelidir -

  • GroovyTestSuite, tüm test senaryolarını tek bir teste almak için kullanılır.

  • Aşağıdaki örnekte, biri adında iki test vaka dosyamız olduğunu varsayıyoruz. StudentTest ve diğeri EmployeeTest gerekli tüm testleri içeren.

import groovy.util.GroovyTestSuite 
import junit.framework.Test 
import junit.textui.TestRunner 

class AllTests { 
   static Test suite() { 
      def allTests = new GroovyTestSuite() 
      allTests.addTestSuite(StudentTest.class) 
      allTests.addTestSuite(EmployeeTest.class) 
      return allTests 
   } 
} 

TestRunner.run(AllTests.suite())

Groovy'nin şablon motoru, bir adres mektup birleştirme gibi çalışır (özellikle reklam olmak üzere birçok adrese posta göndermeyi kolaylaştırmak için bir veritabanından harflere ve zarflara adların ve adreslerin otomatik olarak eklenmesi), ancak çok daha geneldir.

Dizelerde Basit Şablon Oluşturma

Aşağıdaki basit örneği alırsanız, önce "Groovy" dizesini tutmak için bir isim değişkeni tanımlıyoruz. Println deyiminde, bir değerin eklenebileceği bir parametre veya şablon tanımlamak için $ sembolünü kullanıyoruz.

def name = "Groovy" 
println "This Tutorial is about ${name}"

Yukarıdaki kod harika bir şekilde çalıştırılırsa, aşağıdaki çıktı gösterilecektir. Çıktı, $ adının def ifadesiyle atanan değerle değiştirildiğini açıkça gösterir.

Basit Şablon Motoru

Aşağıda, parametrize metin oluşturmak için şablonunuzda JSP benzeri komut dosyaları ve EL ifadeleri kullanmanıza olanak tanıyan bir SimpleTemplateEngine örneği verilmiştir. Şablon oluşturma motoru, tanımlı yer tutuculara sahip dizede değiştirilebilmeleri için bir parametre listesi ve değerleri bağlamanıza olanak tanır.

def text ='This Tutorial focuses on $TutorialName. In this tutorial you will learn 

about $Topic'  

def binding = ["TutorialName":"Groovy", "Topic":"Templates"]  
def engine = new groovy.text.SimpleTemplateEngine() 
def template = engine.createTemplate(text).make(binding) 

println template

Yukarıdaki kod harika bir şekilde çalıştırılırsa, aşağıdaki çıktı gösterilecektir.

Şimdi bir XML dosyası için şablon oluşturma özelliğini kullanalım. İlk adım olarak aşağıdaki kodu Student.template adlı bir dosyaya ekleyelim. Aşağıdaki dosyada öğeler için gerçek değerleri değil, yer tutucuları eklediğimizi fark edeceksiniz. Yani $ isim,$is and $konu, çalışma zamanında değiştirilmesi gerekecek yer tutucular olarak yerleştirilir.

<Student> 
   <name>${name}</name> <ID>${id}</ID> 
   <subject>${subject}</subject> 
</Student>

Şimdi yukarıdaki şablonu gerçek değerlerle değiştirmek için kullanılabilecek işlevselliği eklemek için Groovy betik kodumuzu ekleyelim. Aşağıdaki kodla ilgili olarak aşağıdaki hususlara dikkat edilmelidir.

  • Yer tutucuların gerçek değerlerle eşlenmesi, bir bağlama ve bir SimpleTemplateEngine aracılığıyla yapılır. Bağlama, yer tutucuların anahtar olarak ve değiştirmelerin değerler olduğu bir Haritadır.

import groovy.text.* 
import java.io.* 

def file = new File("D:/Student.template") 
def binding = ['name' : 'Joe', 'id' : 1, 'subject' : 'Physics']
				  
def engine = new SimpleTemplateEngine() 
def template = engine.createTemplate(file) 
def writable = template.make(binding) 

println writable

Yukarıdaki kod harika bir şekilde çalıştırılırsa, aşağıdaki çıktı gösterilecektir. Çıktıdan, değerlerin ilgili yer tutucularda başarıyla değiştirildiği görülebilir.

<Student> 
   <name>Joe</name> 
   <ID>1</ID> 
   <subject>Physics</subject> 
</Student>

StreamingTemplateEngine

StreamingTemplateEngine motoru, Groovy'de bulunan başka bir şablon oluşturma motorudur. Bu, SimpleTemplateEngine ile eşdeğerdir, ancak şablonu büyük şablonlar için daha ölçeklenebilir hale getiren yazılabilir kapaklar kullanarak oluşturur. Özellikle bu şablon motoru 64k'den büyük dizeleri işleyebilir.

Aşağıda, StreamingTemplateEngine'in nasıl kullanıldığına dair bir örnek verilmiştir -

def text = '''This Tutorial is <% out.print TutorialName %> The Topic name 

is ${TopicName}''' 
def template = new groovy.text.StreamingTemplateEngine().createTemplate(text)
  
def binding = [TutorialName : "Groovy", TopicName  : "Templates",]
String response = template.make(binding) 
println(response)

Yukarıdaki kod harika bir şekilde çalıştırılırsa, aşağıdaki çıktı gösterilecektir.

This Tutorial is Groovy The Topic name is Templates

XMLTemplateEngine

XmlTemplateEngine, hem şablon kaynağının hem de beklenen çıktının XML olması amaçlanan şablon oluşturma senaryolarında kullanılır. Şablonlar normal kullanır${expression} and $şablona rastgele bir ifade eklemek için değişken gösterimler.

Aşağıda, XMLTemplateEngine'in nasıl kullanıldığına dair bir örnek verilmiştir.

def binding = [StudentName: 'Joe', id: 1, subject: 'Physics'] 
def engine = new groovy.text.XmlTemplateEngine() 

def text = '''\
   <document xmlns:gsp='http://groovy.codehaus.org/2005/gsp'>
      <Student>
         <name>${StudentName}</name> <ID>${id}</ID>
         <subject>${subject}</subject>
      </Student>
   </document> 
''' 

def template = engine.createTemplate(text).make(binding) 
println template.toString()

Yukarıdaki kod harika bir şekilde yürütülürse, aşağıdaki çıktı gösterilecektir

Joe
    
    
   1
    
    
   Physics

Meta nesne programlama veya MOP, yöntemleri dinamik olarak çağırmak ve ayrıca anında sınıflar ve yöntemler oluşturmak için kullanılabilir.

Peki bu ne anlama geliyor? Üye değişkenleri veya yöntemleri olmayan bir tür boş sınıf olan Öğrenci adlı bir sınıfı düşünelim. Bu sınıfta aşağıdaki ifadeleri çağırmanız gerekip gerekmediğini varsayalım.

Def myStudent = new Student() 
myStudent.Name = ”Joe”; 
myStudent.Display()

Artık meta nesne programlamasında, sınıfın üye değişkeni Adına veya Display () yöntemine sahip olmasa bile, yukarıdaki kod yine de çalışacaktır.

Bu nasıl işleyebilir? Bunun işe yaraması için GroovyInterceptable arayüzünün Groovy'nin yürütme sürecine bağlanması için uygulanması gerekir. Bu arayüz için mevcut yöntemler aşağıdadır.

Public interface GroovyInterceptable { 
   Public object invokeMethod(String methodName, Object args) 
   Public object getproperty(String propertyName) 
   Public object setProperty(String propertyName, Object newValue) 
   Public MetaClass getMetaClass() 
   Public void setMetaClass(MetaClass metaClass) 
}

Dolayısıyla, yukarıdaki arayüz açıklamasında, invokeMethod () 'u uygulamak zorunda kalırsanız, var olan veya olmayan her yöntem için çağrılacağını varsayalım.

Eksik Özellikler

Öyleyse, eksik Özellikler için Meta Nesne Programlamayı nasıl uygulayabileceğimizin bir örneğine bakalım. Aşağıdaki kod hakkında aşağıdaki önemli hususlara dikkat edilmelidir.

  • Öğrenci sınıfının Adı veya kimliği tanımlı üye değişkeni yoktur.

  • Öğrenci sınıfı GroovyInterceptable arayüzünü uygular.

  • Anında yaratılan üye değişkenlerin değerini tutmak için kullanılacak olan dynamicProps adlı bir parametre vardır.

  • Getproperty ve setproperty yöntemleri, çalışma zamanında sınıfın özelliklerinin değerlerini almak ve ayarlamak için uygulanmıştır.

class Example {
   static void main(String[] args) {
      Student mst = new Student();
      mst.Name = "Joe";
      mst.ID = 1;
		
      println(mst.Name);
      println(mst.ID);
   }
}

class Student implements GroovyInterceptable { 
   protected dynamicProps=[:]
	
   void setProperty(String pName,val) {
      dynamicProps[pName] = val
   }
   
   def getProperty(String pName) {
      dynamicProps[pName]
   } 
}

Aşağıdaki kodun çıktısı şu olacaktır:

Joe 
1

Eksik yöntemler

Öyleyse, eksik Özellikler için Meta Nesne Programlamayı nasıl uygulayabileceğimizin bir örneğine bakalım. Aşağıdaki kod hakkında aşağıdaki önemli hususlara dikkat edilmelidir -

  • Öğrenci sınıfı artık yöntemin var olup olmadığına bakılmaksızın çağrılan invokeMethod yöntemini uygular.

class Example {
   static void main(String[] args) {
      Student mst = new Student();
      mst.Name = "Joe";
      mst.ID = 1;
		
      println(mst.Name);
      println(mst.ID);
      mst.AddMarks();
   } 
}
 
class Student implements GroovyInterceptable {
   protected dynamicProps = [:]  
    
   void setProperty(String pName, val) {
      dynamicProps[pName] = val
   } 
   
   def getProperty(String pName) {
      dynamicProps[pName]
   }
   
   def invokeMethod(String name, Object args) {
      return "called invokeMethod $name $args"
   }
}

Aşağıdaki kodun çıktısı aşağıda gösterilecektir. Görüntüleme yöntemi mevcut olmasa bile, Yöntem İstisnası'nı kaçırma hatası olmadığını unutmayın.

Joe 
1

Metasınıf

Bu işlevsellik, MetaClass uygulamasıyla ilgilidir. Varsayılan uygulamada alanlara alıcılarını ve ayarlayıcılarını çağırmadan erişebilirsiniz. Aşağıdaki örnek, metaClass işlevini kullanarak sınıftaki özel değişkenlerin değerini nasıl değiştirebileceğimizi gösterir.

class Example {
   static void main(String[] args) {
      Student mst = new Student();
      println mst.getName()
      mst.metaClass.setAttribute(mst, 'name', 'Mark')
      println mst.getName()
   } 
} 

class Student {
   private String name = "Joe";
	
   public String getName() {
      return this.name;
   } 
}

Aşağıdaki kodun çıktısı şu olacaktır:

Joe 
Mark

Yöntem Eksik

Groovy, methodMissing kavramını destekler. Bu yöntem, verilen ad ve / veya verilen argümanlar için hiçbir yöntem bulunamadığında, yalnızca başarısız bir yöntem gönderimi durumunda çağrılması açısından invokeMethod'dan farklıdır. Aşağıdaki örnek, methodMissing'in nasıl kullanılabileceğini gösterir.

class Example {
   static void main(String[] args) {
      Student mst = new Student();
      mst.Name = "Joe";
      mst.ID = 1;
		
      println(mst.Name);
      println(mst.ID);
      mst.AddMarks();
   } 
} 

class Student implements GroovyInterceptable {
   protected dynamicProps = [:]  
    
   void setProperty(String pName, val) {
      dynamicProps[pName] = val
   }
   
   def getProperty(String pName) {
      dynamicProps[pName]
   }
   
   def methodMissing(String name, def args) {         
      println "Missing method"
   }  
}

Aşağıdaki kodun çıktısı şu olacaktır:

Joe 
1 
Missing method