수색…


비고

그루비

  • 자바 가상 머신을위한 선택적으로 유형화 된 동적 언어입니다.

  • Java의 강점을 기반으로하지만 Python, Ruby 및 Smalltalk와 같은 언어에서 영감을 얻은 추가 기능을 제공합니다.

  • 자바 개발자들이 거의 익숙하지 않은 학습 곡선으로 최신 프로그래밍 기능을 사용할 수있게합니다.

  • 정적으로 검사를 입력하고 견고성과 성능을 위해 코드를 정적으로 컴파일하는 기능을 제공합니다.

  • 도메인 특정 언어 및 기타 압축 구문을 지원하므로 코드를 읽고 유지하기 쉽습니다.

  • 강력한 처리 프리미티브, OO 기능 및 Ant DSL을 사용하여 쉘 작성 및 스크립트 작성을 쉽게 만듭니다.

  • 웹, GUI, 데이터베이스 또는 콘솔 어플리케이션 개발시 스캐 폴딩 코드를 줄임으로써 개발자 생산성 향상

  • 단위 테스트를 지원하고 즉시 사용 가능한 제품을 조롱하여 테스트를 간소화합니다.

  • 기존의 모든 Java 클래스 및 라이브러리와 완벽하게 통합됩니다.

  • Java 바이트 코드로 바로 컴파일되므로 어디서나 Java를 사용할 수 있습니다.

버전

번역 릴리즈 노트 출시일
2.4 http://groovy-lang.org/releasenotes/groovy-2.4.html 2015-01-21
2.3 http://groovy-lang.org/releasenotes/groovy-2.3.html 2014-05-05
2.2 http://groovy-lang.org/releasenotes/groovy-2.2.html 2013-11-18
2.1 http://groovy-lang.org/releasenotes/groovy-2.1.html 2013-01-24
2.0 http://groovy-lang.org/releasenotes/groovy-2.0.html 2012-06-28
1.8 http://groovy-lang.org/releasenotes/groovy-1.8.html 2011-04-27
1.7 http://groovy-lang.org/releasenotes/groovy-1.7.html 2009-12-22
1.6 http://groovy-lang.org/releasenotes/groovy-1.6.html 2009-02-18
1.5 http://groovy-lang.org/releasenotes/groovy-1.5.html 2007-12-07
1.0 2007-01-02

설치 또는 설정

Groovy를 설치하는 일반적인 두 가지 방법이 있습니다.

다운로드

Groovy 바이너리는 Groovy 웹 사이트의 다운로드 페이지에서 다운로드 할 수 있습니다. 아카이브 압축을 풀고 %GROOVY_HOME%/bin/groovy.bat 에 대한 경로를 PATH 시스템 환경 변수에 추가 할 수 있습니다. 여기서 % GROOVY_HOME %는 Groovy의 압축을 푼 디렉토리입니다.

SDKMAN

다른 옵션은 SDKMAN 을 사용하는 입니다. 이 옵션은 빠르게 인기를 얻었으며 Groovy의 여러 버전을 매우 간단하게 관리 할 수 ​​있습니다. 또한 "GR8"에코 스피어의 다른 응용 프로그램도 지원합니다. 이 옵션은 Linux와 Mac에서는 기본적으로 잘 작동하지만 Windows에서는 Cygwin이 필요합니다.

Groovy 다운로드 페이지 의 지침에 따라 SDKMAN을 설치하려면 다음 단계를 수행하십시오.

$ curl -s get.sdkman.io | bash

SDKMAN이 설치되면 이제 sdk 명령에 액세스 할 수 있습니다. 이 명령으로 많은 유용한 일을 할 수 있습니다.

Groovy 설치

$ sdk install groovy

Groovy의 최신 버전이 설치됩니다.

Groovy의 버전 목록

$ sdk ls groovy

이렇게하면 Groovy 소프트웨어에서 Linux 스타일 ls 명령을 실행하여 사용 가능한 모든 옵션을 나열 할 수 있습니다. 설치된 각 버전 옆에 * 가 있으며 현재 버전을 나타내는 > 가 있습니다.

Groovy의 버전 전환

$ sdk use groovy 2.4.7

그러면 Groovy의 현재 버전이 2.4.7로 변경됩니다. 다른 버전이 설치되어있는 경우 해당 버전으로 전환 할 수 있습니다.

groovy -version 명령을 사용하여 groovy -version 의 현재 버전을 나열 할 수 있습니다.

포쉬 -gvm

SDKMAN의 초기 이름은 GVM이고 posh-gvm 은 Windows Powershell 용 GVM 포트입니다. 따라서 Windows 컴퓨터에서 개발하고 Cygwin에서 SDKMAN을 사용하지 않으려한다면 posh-gvm이 좋습니다. SDKMAN과 동일하게 작동하지만 sdk 대신 gmv 명령이 사용 gmv . 그래서

PS C:\Users\You> gmv install groovy

Windows 컴퓨터에서 posh-gvm을 통해 groovy를 설치합니다.

안녕하세요 세계

Groovy 버전의 Hello World.

println 'Hello World!'

Hello World in 그루비

다음 예제는 스크립트를 사용하여 Groovy에서 가장 단순한 Hello World 를 보여주고 파일에 다음 코드 스 니펫을 배치합니다. helloWorld.groovy

println 'Hello World!'

실행 방법 : 명령 행에서 groovy helloWorld.groovy

출력 : Hello World!

Java 프로젝트에서 Groovy 사용하기

Groovy는 모든 Java 클래스에 액세스 할 수 있습니다. 실제로 Groovy 클래스는 Java 클래스이며 JVM에서 직접 실행할 수 있습니다. Java 프로젝트에서 작업하는 경우 Groovy를 간단한 스크립트 언어로 사용하여 Java 코드와 상호 작용할 수 있습니다.

더 나은 결과를 내기 위해 거의 모든 Java 클래스를 .groovy로 이름을 바꾸고 컴파일하여 실행하고 정확하게 작동합니다. groovy는 Java의 수퍼에 가깝습니다. 이것은 그루비의 목표입니다.

Groovy에는 REPL이 있습니다. groovysh 는 Groovy와 함께 제공되며 클래스 경로가 올바르게 설정된 경우 Java 클래스를 신속하게 인스턴스화하고 테스트하는 데 사용할 수 있습니다. 예를 들어 classpath 가 일식 "classes / bin"디렉토리를 groovysh eclipse로 파일을 저장하고 groovyshgroovysh 뛰고 클래스를 인스턴스화하여 테스트 할 수 있습니다.

Groovy를 Java 대신에 사용하는 이유는 다음과 같습니다. 클래스 로더는 컴파일 될 때 새로운 클래스를 선택하는 것이 좋습니다. 일반적으로 groovysh 를 종료하거나 다시 시작할 필요는 없습니다.

구문은 TERSE입니다. 유지 보수가 가능한 코드에는 좋지 않지만 스크립트와 테스트에서는 코드를 크게 줄일 수 있습니다. 큰 일 중 하나는 체크 된 예외를 제거하는 것입니다 (또는 더 정확하게는 체크 된 모든 예외를 체크되지 않은 예외로 바꾸는 것입니다). 이 코드는 다음과 같이 바뀝니다 (1 초 후에 hello를 인쇄하십시오) :

class JavaClass {
    public static void main(String[] args) {
        try {
            Thread.sleep(1000);
        } catch(InterruptedException e) {
            // You shouldn't leave an empty catch block, but who cares if this was interrupted???
        }
        System.out.println("Hello!");
    }
}

그루비 (Groovy)

Thread.sleep(1000)
print "Hello!"

Groovy는 또한 매우 타이트한 초기화 문법을 가지고있다. 이렇게하면 생각하지 않고 원하는대로 데이터를 지정할 수 있습니다.

자바에서지도를 초기화하려면 다음과 같이해야합니다.

String[] init = { "1:Bill", "2:Doug", "3:Bev" };
// Note the rest of this can be put in a function and reused or maybe found in a library, but I always seem to have to write this function!
Map m = new HashMap<Integer, String>();
for(String pair : int) {
    String[] split = pair.split(":");
    m.put(new Integer(split[0]), split[1])
}

이것은 나쁘지 않지만 유지해야 할 다른 것입니다. Groovy에서는 다음을 사용합니다.

Map map = { 1 : "Bill", 2 : "Doug", 3 : "Bev" }

그리고 너 끝났어. 리스트 구문은 아주 쉽습니다.

다른 큰 이점은 groovy의 closure 구문입니다. 놀랍도록 간결하고 재미있게 유지 관리하기가 다소 어렵지만 우선 순위가 아닌 스크립트의 경우. 예를 들어, 현재 디렉토리에 Hello 라는 단어가 들어있는 .txt 파일을 모두 찾는 코드입니다.

println new File('.').files.findAll{ it.name.endsWith('.txt') && it.text.contains('Hello') }.collect{ it.name }

이 예제는 몇 가지 "멋져요"트릭을 사용합니다.

  • .files.files getFiles() 메소드를 참조합니다. groovy는 getter / setter와 속성 구문을 .files 전환 할 수 있습니다.

  • it. 반복의 현재 요소를 나타냅니다. { it }{ it -> it } 의 바로 가기입니다. 예 :

    [1, 2, 3]. 콜렉트 {it ^ 2} == [1,4,9]

  • it.text (여기서 it 파일입니다) 메서드 그루비가 추가 사용하는 File 파일의 전체 텍스트를 검색 할 수 있습니다. 이것은 스크립트에서 놀랍도록 도움이됩니다.

Hello world Shebang (리눅스)

내용이 담긴 hello.groovy 파일을 제공합니다 :

#!/usr/bin/env groovy
println "Hello world"

지정된 실행 권한이있는 경우 명령 줄에서 실행할 수 있습니다.

$ ./hello.groovy

목록에서 inject ()를 사용하여 CSV 문자열 만들기

Groovy에서 inject () 메소드는 inject () 메소드를 구현하는 모든 객체에 새로운 기능을 추가하거나 주입 할 수있는 누적 메소드 중 하나입니다. Collection의 경우 객체 컬렉션에 균일하게 클로저를 적용한 다음 결과를 단일 값으로 조합 할 수 있습니다. inject () 메서드의 첫 번째 매개 변수는 누적의 초기 값이고 두 번째 매개 변수는 종료 값입니다.

이 예에서는 문자열 목록을 매개 변수로 사용하고 쉼표로 구분 된 문자열의 값을 출력합니다. 이 기능을 사용하여 REST 쿼리 문자열에 값 목록을 추가했으며 약간 수정하면 IN 절의 일부로 값을 SQL 문에 포함시키는 데 사용했습니다. 다음은이를 수행하는 코드입니다.

public String convertToCSV( List<String> list ) {
    if (list == null) {
        return ""
    }
    return list.inject( '' ) { result, item ->
        result + ( result && item ? ',' : '' ) + ( item ? "${item.trim()}" : '' )
    }
}

assert convertToCSV( null ) == ""
assert convertToCSV( ["aaa", "bbb  ", null, "  ccc  "] ) == "aaa,bbb,ccc" 

이 예제에서 inject () 메서드의 첫 번째 매개 변수는 길이가 0 인 문자열이며, 이는 목록의 첫 번째 요소를 처리 할 때 결과도 길이가 0 인 문자열임을 의미합니다. 첫 번째 삼중 평가에서는 false로 처리되므로 문자열 시작 부분에 쉼표가 표시되지 않습니다. 목록의 요소를 통해 반복 될 때마다 결과는 목록의 마지막 항목에 도달 할 때까지 자체, 쉼표 및 다음 항목의 연결이됩니다.

이 접근법의 장점은 연결 문자열 결과를 보유하기 위해 반복 구문 외부에 변수가 필요 없다는 것입니다. 이것은 코드에서 부작용을 초래할 수 있다는 것을 의미합니다. inject () 접근 방식을 사용하면이 동작을 삽입하고 콜렉션 결과를 호출하여 클로저에 연결합니다. 이 접근법의 단점은 가독성이 될 수 있습니다. 그러나 약간의 경험을 통해 읽고 이해하기가 더 쉬워지고,이 예가 그 목표를 달성하는 데 도움이되기를 바랍니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow