Groovy - İnşaatçılar

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 salıncak oluşturucuları 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.

Şimdi 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ılacağına 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.