2015년 2월 12일 목요일

groovy 연습 2



    
square = { it * it }

// 괄호 안에있는 식을 클로져(closure) 라고 부른다.
// 클로져는 함수다.
// it 은 함수로 넘어온 인자다.
// 왼쪽에 있는 변수 square 는 사실상 함수이름으로 취급된다.
// 오른쪽에있는 식은 사실상 함수내용으로 취급된다.
// 이렇게 정의된 함수를 다음과 같이 사용한다.

square(9)

println square(9)


// 그렇다.
// 이건 그냥 함수다.
// 그래서. 어쩌라고?


[1, 2, 3, 4].collect(square)

x = [1, 2, 3, 4]
println (x.collect(square))
println (x)

//
// 그루비는, 자랑하고싶은것이다.
// 함수를 인자로 넘겨줄수있다는 사실을. 
// 이것은 마치 데이터를 인자로 넘겨주는것과 같은 모양이다.
// 이기능은 함수형언어에서만 가능한 기능이다.
// 이런 막강한 기능이 그루비에 있다는 사실을, 
// 그루비는 자랑하고 싶은것이다.
//

// 클로져는 딱 하나의 인자를 받는데, 그것을 "it" 으로 호칭한다.
// 클로져에서 인자를 2개 받을때는 다음과 같이 코딩한다.

printMapClosure = { key, value -> println key + "=" + value }
["Yue" : "Wu", "Mark" : "Williams", "sudha" : "Kumari"].each(printMapClosure)

// 화살표 ( -> ) 를 쓴다.


fullString = ""
orderParts = ["BUY", 200, "Hot Dogs", "1"]
orderParts.each { fullString += it + " " }
println fullString

// 위 코드는 클로져의 모습을 다시 보여주는 코드이다.
// 이 클로져에는 이름이 없다.
// 무명의 함수.
// 이름없는 함수가, 외부변수(fullString) 를 사용하고있다.

// 클로져 샘플 하나더.
myMap = ["China": 1, "India":2, "USA": 3]
result = 0
myMap.keySet().each ( { result += myMap[it] } )
println result


// 파일다루기 샘플
myFileDirectory = "/home/dev/ex/Groovy/"
myFileName = "myfile.txt"
myFile = new File(myFileDirectory + myFileName)
printFileLine = { println "File line: " + it }
myFile.eachLine( printFileLine )

디렉토리 = "/home/dev/ex/Groovy/"
파일명 = "myfile.txt"
내파일 = new File(디렉토리 + 파일명)
출력 = { println "파일한줄 : " + it }
내파일.eachLine( 출력 )

// 문자열 다루기 샘플.
stringDate = "2005-07-04"
dateArray = stringDate.split("-")
year = dateArray[0].toInteger()
year = year + 1
newDate = year + "-" + dateArray[1] + "-" + dateArray[2]
println newDate


Firefly Algorithms

firefly algorithm 001 Firefly Algorithms ¶ 반딧불 알고리즘 번역 요약 ¶ References [1] X. S. Y...