Groovy একটি ডাইনামিক এবং অত্যন্ত নমনীয় প্রোগ্রামিং ভাষা যা Java এর সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ। Groovy তে Advanced Language Features ব্যবহার করে আপনি আরও কার্যকরী এবং কমপ্যাক্ট কোড লিখতে পারবেন। Groovy এর কিছু উন্নত বৈশিষ্ট্য যেমন Closures, Metaprogramming, Category Classes, Builder Patterns, এবং AST Transformations আপনার কোডকে আরও সহজ, শক্তিশালী এবং নমনীয় করে তোলে। নিচে Groovy এর কিছু Advanced Language Features এর ব্যাখ্যা দেওয়া হলো।
Closures Groovy তে একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে একে অপরের মধ্যে ফাংশনালিটি ভাগ করতে এবং কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি করতে সহায়তা করে। এটি Java এর ল্যাম্বডা এক্সপ্রেশনগুলির মতো কাজ করে তবে Groovy তে এটি আরও শক্তিশালী এবং নমনীয়।
// Closure Definition
def greet = { name -> "Hello, $name!" }
println greet("John") // Output: Hello, John!
এখানে:
greet
একটি closure যা name
প্যারামিটার নিয়ে একটি স্ট্রিং রিটার্ন করে।def numbers = [1, 2, 3, 4, 5]
def doubledNumbers = numbers.collect { it * 2 }
println doubledNumbers // Output: [2, 4, 6, 8, 10]
এখানে:
collect
মেথড ব্যবহার করে numbers
লিস্টের প্রতিটি উপাদান দ্বিগুণ করা হয়েছে।Metaprogramming Groovy তে কোডের আচরণ পরিবর্তন করার একটি শক্তিশালী কৌশল, যা রানটাইমে কোডের কার্যকারিতা পরিবর্তন করতে সহায়তা করে। Groovy তে MetaClass এবং ExpandoMetaClass ব্যবহার করে আপনি রানটাইমে অবজেক্টের মেথড, প্রপার্টি এবং ক্লাসের আচরণ পরিবর্তন করতে পারেন।
class Person {
String name
}
def person = new Person(name: "John")
// Metaprogramming to add a method dynamically
person.metaClass.sayHello = { "Hello, ${delegate.name}!" }
println person.sayHello() // Output: Hello, John!
এখানে:
metaClass
ব্যবহার করে Groovy তে রানটাইমে sayHello
মেথড যোগ করা হয়েছে।class Person {
String name
}
def person = new Person(name: "Alice")
// Adding a method dynamically using ExpandoMetaClass
Person.metaClass.sayGoodbye = { "Goodbye, ${delegate.name}!" }
println person.sayGoodbye() // Output: Goodbye, Alice!
এখানে:
ExpandoMetaClass
ব্যবহার করে ক্লাসে নতুন মেথড যোগ করা হয়েছে।Category Classes Groovy তে একটি শক্তিশালী ফিচার যা আপনাকে ক্লাসের আচরণ পরিবর্তন করতে বা নতুন মেথড যুক্ত করতে সাহায্য করে, তবে তা শুধু নির্দিষ্ট এক্সটেনশনে বা সিস্টেমে প্রযোজ্য হবে।
// Defining a Category Class
class StringCategory {
static String reverseAndUpper(String str) {
return str.reverse().toUpperCase()
}
}
// Using Category Classes
use(StringCategory) {
println "groovy".reverseAndUpper() // Output: YVOORG
}
এখানে:
StringCategory
নামে একটি category class তৈরি করা হয়েছে যা String
ক্লাসে নতুন একটি মেথড reverseAndUpper
যোগ করেছে।Builder Patterns Groovy তে খুবই জনপ্রিয়। এটি একটি ক্রিয়েটিভ প্যাটার্ন যা আপনি বিভিন্ন উপাদানের সাহায্যে একটি জটিল অবজেক্ট তৈরি করতে ব্যবহৃত হয়। Groovy এর MarkupBuilder এবং StreamingMarkupBuilder এর মাধ্যমে আপনি সহজেই HTML, XML এবং অন্যান্য ডেটা স্ট্রাকচার তৈরি করতে পারেন।
import groovy.xml.MarkupBuilder
def writer = new StringWriter()
def builder = new MarkupBuilder(writer)
builder.person {
name 'John'
age 30
city 'New York'
}
println writer.toString()
আউটপুট:
<person>
<name>John</name>
<age>30</age>
<city>New York</city>
</person>
এখানে:
AST (Abstract Syntax Tree) Transformations Groovy তে একটি উন্নত ফিচার যা কোডের নির্মাণ এবং রূপান্তর প্রক্রিয়ায় সাহায্য করে। Groovy তে কিছু Built-in AST Transformations রয়েছে, যেমন @ToString
, @EqualsAndHashCode
, এবং @Delegate
যা কোডের স্বয়ংক্রিয়ভাবে কিছু কাজ করে দেয়।
import groovy.transform.ToString
@ToString
class Person {
String name
int age
}
def person = new Person(name: 'John', age: 30)
println person.toString() // Output: Person(John, 30)
এখানে:
toString()
মেথড স্বয়ংক্রিয়ভাবে জেনারেট করা হয়েছে।import groovy.transform.Delegate
class Engine {
def start() {
println 'Engine started'
}
}
class Car {
@Delegate Engine engine = new Engine()
}
def car = new Car()
car.start() // Output: Engine started
এখানে:
Car
ক্লাসে Engine
এর মেথড start()
ডেলিগেট করা হয়েছে, ফলে Car
ক্লাস Engine
এর ফাংশনালিটি পেয়েছে।GContracts Groovy তে একটি লাইব্রেরি যা Design By Contract প্রোগ্রামিং প্যাটার্ন অনুসরণ করে। এটি একটি শক্তিশালী ফিচার যা ক্লাস, মেথড এবং ফাংশনে পূর্বশর্ত, পরশর্ত এবং অবস্থা চুক্তি করতে সাহায্য করে।
@Contract
class Person {
String name
int age
@Requires({ age > 0 })
def setAge(int age) {
this.age = age
}
@Ensures({ age > 0 })
def getAge() {
return age
}
}
এখানে:
Groovy এর এই Advanced Language Features আপনাকে আরও নমনীয়, দ্রুত এবং কার্যকর কোড লিখতে সাহায্য করে। Groovy এর ডাইনামিক এবং ফ্লেক্সিবল প্রকৃতি আপনাকে সহজেই জটিল সমস্যা সমাধান করতে সহায়তা করে।
common.read_more