rss
email
twitter
facebook

Wednesday, December 22, 2010

Groovy&Grails step by step 2 String definition , Methods&Closures , Collections


Грүүви хэлний хичээлийг үргэлжлүүлж байгаадаа баяртай байна. Учир нь 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