Грүүви хэлний хичээлийг үргэлжлүүлж байгаадаа баяртай байна. Учир нь groovy нь товч бичиглэл, бичиглэлийн олон сонголт , гайхамшигтай чадварлаг операторууд , бүх төрөлд ашиглагдах боломж гээд л маш олон давуу талтай. Энэ нь python хэлнээс ч давуу гэж хэлж болохоор юм.
String төрлийг тодорхойлх , хэрхэн ашиглах
Энгийн стринг: Грүүви хэлэнд стринг (String) ыг тодорхойлох 3 төрөл байдаг.
// 1. Quote def helloChris = "Hello, Chris"Грүүвий нь мөн GString гэж нэрлэгдэх стрингийг ашигладаг. Энэ нь яг л жирийн стринг мэт гэхдээ стринг дунд эмбэддэд байдлаар ${...} тэмдэгтээр шинэ стрингийг үүсгэж болдог давуу талтай.
//2. Single quote
def helloJoseph = 'Hello, Joseph ${helloChris}'
//3. Slashy string
def helloWinPath = /C:\windows\system32/
Олон мөрт стринг нь 3 single quote ( ‘’’ ) болон 3 double quote (“””) г ашигладаг. Энгэснээр электрон шуудангийн загвар болон маш олон төрлийн эмбэддэд document (Жишээ нь: xml , html гэх мэт) ыг String төрөлд ашиглах явдал юм.def multiLineQuote = """
Hello, ${name}
This is a multiline string with double quotes
"""
Methods and Closures: Грүүви хэлэнд дахин ашиглагдах кодын блокийг 2 аргаар тодорхойлно. Үүнд: Method , Closure.Жавагийн уламжлалт функц тодорхойлох
public String hello(String name) {
return "Hello, " + name;
}
Грүүви функц тодорхойлохdef hello(name) {
"Hello, ${name}"
}
Санамж: - Грүүви нь return statement ыг агуулаагүй байсан ч байнга өгөгдөл буцааж байдаг нь сүүлчийн мөр юм . Энэ нөхцөлд буцаах утга нь GString төрлийн “Hello ${name}”
- Хандалтыг заах public ыг энд тодорхойлдоггүй. Учир нь грүүви хэлний бүх класс properties public хандалттай байдаг
Closure нь {} угалзан хаалтанд байрлах дахин ашиглагдах обект төрлийн код юм.
//1
def name = "Gundsambuu"
def printClosure = { println "Hello, ${name}" }
printClosure()
name = "World"
printClosure()
Санамж : Клосюр нь обект харин функц бол тийм биш
Hello, Gundsmbuu
Hello, World
//2
def printClosure = {name , age -> println " ${name} : ${age}" }
printClosure("Gundsambuu", 20)
printClosure "World" , “i don’t know”
Hello, Gundsmbuu : 20
Hello, World : “i don’t know”
клосюрыг property болгон дамжуулах def list = ["earth", “moon", "sun"]
def sayHello = { println it }
list.each(sayHello)
Энэ тохиолдолд sayHello нь property харин түүний утгууд нь клосюр болж байна.Collections: Грүүви хэл нь lists, ranges, sets, arrays, maps гэх төрлийн collection уудыг дэмждэг. Эдгээрийг хэрхэн тодорхойлох ашиглахыг харцгаая.
def emptyList = []arrayList ыг тодорхойлохдоо [] хаалт байхад л хангалттай мөн жавагын java.util.List ийг ашиглан new ArrayList() гэж тодорхойлж ч болно.
println emptyList.class.name // java.util.ArrayList
println emptyList.size // 0
def list = ["Chris"] // List нь 1 элемэнттэй тодорхойлогдож байна
// Элемэнт нэмэх
list.add "Joseph" // жавагийн үндсэн add функц нь хаалт байхгүй ч байж болно.
list << "Jim" // << нь left-shift operator юм.
println list.size // 3
// Iterate ыг List д ашиглах
ist.each { println it } // Chris Joseph Jim
/ Access items in the list
println list[1] // Joseph // Index ээр нь хандах
list[0] = "Christopher"
println list.get(0) // Christopher
list.set(0, "Chris") // Set the 0 item to Chris
println list.get(0) // Chris
list.remove 2 list-= "Joseph" // Overloaded - operator
list.each { println it } // Chris
list.add "Joseph" list+="Jim" // Overloaded + operator
list.each { println it } // Chris Joseph Jim
println list[-1] // Jim Ranges нь эхлэл төгсгөлөөр нь тодорхойлох Comparable төрлийн массив юм
def numRange = 0..9 // range ыг тодорхойлохдоо \эхлэл 2 цэг төгсгөл\
println numRange.size() // 10
numRange.each {print it} // 0123456789
println numRange.contains(5) // true
def alphaRange = 'a'..'z' // тэмдэгтээр range тодорхойлох
println alphaRange.size() // 26
println alphaRange[1] // b
def exclusiveRange = 1..<10
println exclusiveRange.size() // 9
exclusiveRange.each {print it} // 123456789
println exclusiveRange.contains(10) // false
def reverseRange = 9..0
reverseRange.each {print it} // 9876543210
Range ын ашиглалт
//Java хэлбэрийн давталт давталт
for(int i=0;i<=9;i++) { println i }
Грүүвигийн range ашиглах давталт
for (i in 0..9) { println i }
Мөн тэмдэгтээр давтах(‘a’..’z’).each { c->
println c
}
Sets нь давхараагүй, эрэмбэлэгдээгүй обектын цуглуулга юмdef emptySet = [] as Set
println emptySet.class.name // java.util.HashSet
println emptySet.size() // 0
def list = ["Chris", "Chris" ]
def set = ["Chris", "Chris" ] as Set
println "List Size: ${list.size()} Set Size: ${set.size()}" // List Size: 2 Set Size: 1
set.add "Joseph"
set << "Jim"
println set.size() // 3
println set // ["Chris", "Jim", "Joseph"]
// Iterate over the set
set.each { println it }
set.remove 2
set-= "Joseph" // Overloaded - operator
set.each { println it } // Chris
set+= "Joseph"
set+= "Jim"
set.each { println it } // Chris Joseph Jim
// Convert a set to a list
List = set as List
println list.class.name // java.util.ArrayList
println set.asList().class.name // java.util.ArrayList
println set.toList().class.name // java.util.ArrayList
Maps нь давтагдашгүй түлхүүр болон утгын хослол бүхий эрэмблэгдээгүй цуглуулга юм. def emptyMap = [:] // java.util.LinkedHashMap map тодорхойлохдтоо [:] ыг ашиглана
println emptyMap.getClass().name //java.util.LinkedHashMap
println emptyMap.size() // 0
def todos = ['a':'Write the map section', 'b':'Write the set section']
println todos.size() // 2
println todos["a"] // Write the map section
println todos."a" // Write the map section
println todos.a // Write the map section
println todos.getAt("b") // Write the set section
println todos.get("b") // Write the set section
println todos.get("c", "unknown") // unknown, Энэ тохиолдолд c тодорхойлогдоогүй
// харин одоо хэвлэж үзэхэд c түлхүүр нэмэгдсэн байна
println todos // ["a":"Write the map section", "b":"Write the set section", "c":"unknown"]
todos.d = "Write the ranges section"
println todos.d // Write the ranges section
todos.put('e', 'Write the strings section')
println todos.e // Write the strings section
todos.putAt 'f', 'Write the closure section' // Notice () are optional
println todos.f // Write the closure section
todos[null] = 'Nothing Set' // Using null as a key
println todos[null] // Nothing set
// Print each key/value pair on a separate line
// Note: it is an implicit iterator
todos.each { println "Key: ${it.key}, Value: ${it.value}" }
// Print each key/value pair on a separate line with index
todos.eachWithIndex { it, i -> println "${i} Key: ${it.key},
Value: ${it.value}" }
// Print the value set
todos.values().each { println it }
Дараагийн нийтлэлдээ groovy regex буюу groovy regular expression ыг оруулна





0 comments:
Post a Comment