Groovy 는 자바 에 비해 새로운 것 입 니 다.

5998 단어
Groovy 는 경량급 자바 입 니 다.
  • 방법, 패키지 에서 return 문 구 를 선택 할 수 있 습 니 다. return 이 없 으 면 기본 반환 방법, 패키지 의 마지막 문장의 값
  • 방법 과 기본 적 인 수식 자 는 모두 Public
  • 입 니 다.
  • Groovy 는 우리 에 게 자신 과 무관 한 이상 을 강요 하지 않 습 니 다. 이런 이상 은 방법의 호출 자 에 게 전 달 됩 니 다
  • 정적 방법 에서 도 this 를 사용 하여 현재 정적 클래스 클 라 스 대상 을 참조 할 수 있 습 니 다.
  • 대상 의 비 어 있 는 판단 을 피하 기 위해 안전 내 비게 이 션 조작 부호 .? 를 제공한다
  • GDK 일별
    자바 플랫폼 의 핵심 장점 은 자바 개발 패키지 (JDK) 다.Groovy 는 자바 를 떠 나 새로운 클래스 와 라 이브 러 리 를 만 들 지 않 고 앞으로 JDK 의 다양한 클래스 에 편리 한 방법 을 추가 하여 GDK 로 확대 했다.그 중 일부 상용 류 는 모두 괜 찮 은 확장 이 있다.
  • String
  • Integer
  • File
  • List
  • Map
  • ......

  • 순환 을 실현 하 는 집중 방식
    다음은 인쇄 0 ~ 9 의 순환 을 실현 하 는 것 을 예 로 들 자.
  • for(i in 0..9) { println i }
  • 0.upto(9) { println "$it" }
  • 10.times { println "$it" }

  • 좀 더 깔끔 한 자바 빈.
    groovy 의 bean 대상 에서 정 의 된 속성 은 당연히 foo.bar 방식 으로 접근 할 수 있 지만 이러한 접근 방식 은 직접 방문 하 는 bar 라 는 변수 가 아니 라 방문 하 는 getBar / setBar 방법 입 니 다.클래스 에서 하나의 속성 을 설명 하면 groovy 는 묵묵히 우리 에 게 대응 하 는 get 과 set 방법 을 생 성 합 니 다. 이 속성 이 final 형식 이 라면 get 방법 만 있 습 니 다.우 리 는 당연히 스스로 수 동 으로 대응 하 는 get / set 방법 을 실현 하여 더욱 풍부 한 내용 을 실현 할 수 있다.foo.bar 속성 에 접근 한 상황 에서 bar 의 수식 자 를 private 로 바 꾸 는 것 은 의미 가 없습니다. 이 변 수 를 직접 방문 하지 않 기 때문에 bar 변 수 를 일정한 보호 하고 getBar / setBar 방법 에 대응 하 는 수 동 으로 덮어 쓰 며 이 방법의 권한 을 수정 하여 속성 을 보호 하 는 목적 을 달성 하 였 습 니 다.
    우 리 는 심지어 속성 을 정의 하지 않 을 수도 있다.클래스 에 getBar () 방법 이 포함 되 어 있다 면 이 방법 을 호출 할 때 사용 할 수 있 습 니 다 foo.bar. 그러나 get 방법 만 실현 되 었 을 뿐 읽 을 수 있 고 이 방식 으로 값 을 부여 할 수 없습니다. 예 를 들 어 foo.bar = xxx 형식의 할당 을 하려 면 클래스 에 setBar () 방법 이 대응 해 야 합 니 다.
    자바 빈 초기 화
    만약 에 한 Bean 대상 에 여러 개의 속성 이 포함 되 어 있다 면 그 속성 이 다른 할당 값 에 대해 다양한 매개 변수 조합의 구조 방법 을 제공 해 야 할 수도 있 고 groovy 에서 편리 하 게 실현 할 수 있 습 니 다.전제: 이 종 류 는 반드시 무 참 구조 기 가 있어 야 한다 (정의 구조 기 가 없 으 면 당연히 무 참 구조 기 를 자동 으로 생 성 할 것 이다).만약 에 파 라 메 트릭 구조 기 를 정의 하면 컴 파일 러 는 파 라 메 트릭 구조 기 를 제공 하지 않 을 것 이 고 우리 가 수 동 으로 파 라 메 트릭 구조 기 를 제공 해 야 한다.사용: new Foo (property 1: value 1, property 2: value 2, property 3: value 3);값 이 맞 는 방식 으로 값 을 부여 하고 싶 은 속성의 이름과 값 을 입력 하면 됩 니 다.이 문 구 는 무 참 구조 기 를 실행 한 후 들 어 오 는 속성 에 대해 set 작업 을 순서대로 수행 합 니 다.
    유연 한 방법 매개 변수 규칙
    규칙 1: 방법의 첫 번 째 형 삼 은 기본적으로 맵 일 수 있 습 니 다
    다음 방법 에 대한 정의:
    def bar(a,b,c){
        println "received $a $b $c"
    }
    

    groovy 의 동적 유형의 언어 는 방법 을 정의 할 때 형 삼 유형 을 지정 하지 않 고 사용 할 때 동적 으로 추정 할 수 있 기 때문이다.이 방법 은 대상 의 toString 방법 을 호출 합 니 다.그러면 이 방법 을 사용 할 때 들 어 오 는 매개 변수 개수 가 3 보다 많 고 더 많은 실현 이 키 쌍 이 라면 Groovy 는 이 방법의 첫 번 째 형 삼 이 map 형식 이 라 고 가정 한 다음 에 실제 인삼 목록 의 모든 키 쌍 을 하나의 map 에 넣 고 첫 번 째 매개 변수 로 전송 한 다음 에 나머지 매개 변 수 를 형 삼 에 따라 일일이 대응 하여 전 삼 합 니 다.
    여기 서 주의해 야 할 문 제 는 두 가지 가 있다.
  • 이 규칙 은 모든 키 쌍 을 수집 합 니 다. 키 쌍 이 실제 인삼 으로 들 어 올 수 있 을 때 연속 적 이지 않 아 도 괜 찮 습 니 다. groovy 는 여전히 식별 할 수 있 습 니 다.그리고 나머지 실 삼 을 두 번 째, 세 번 째... 형 삼
  • 에 순서대로 대응한다.
  • 이 규칙 에 따라 키 값 을 모두 수집 한 후에 남 은 매개 변 수 는 방법 이 정의 하 는 매개 변수 개수 와 일치 하지 않 을 수 있 습 니 다. 왜냐하면 우리 가 전 참 할 때 두 번 째 매개 변 수 를 키 값 이 맞 는 맵 에 전송 하려 고 했 지만 안 됩 니 다.따라서 방법 을 정의 하고 사용 할 때 주의해 야 한다.

  • 규칙 2: 선택 가능 한 인삼
    간단 한 예:
    def bar(a,b=10){
        println a + b
    }
    
    assert bar(1,1) == 2
    assert bar(1) == 11
    

    규칙 3: 길 어 지 는 매개 변수
    groovy 에는 두 가지 형식 으로 지원 하 는 방법 이 있 습 니 다.
    //    ...     Java          
    def bar(int a,int ... b){
        println "$a and $b"
    }
    
    //               ,              a   ,                    b    
    def bar(int a,int b[]){
        println "$a and $b"
    }
    

    여기 서 주의해 야 할 것 은 이 방법 을 호출 할 때 이산 값 이 아 닌 배열 을 보 내 려 면 groovy 는 [1, 2, 3] 와 같은 형식의 배열 을 배열 이 아 닌 List 로 생각 하기 때문에 들 어 올 때 명시 적 으로 들 어 와 야 한 다 는 것 이다 [1,2,3] as int[].
    방법 은 여러 값 을 되 돌 릴 수 있다.
    자바 에 서 는 방법 이 많 으 면 한 값 을 되 돌려 줄 수 있 지만 groovy 에 서 는 여러 값 을 되 돌려 줄 수 있 습 니 다.groovy 의 동태 성 때문에 여러 개의 반환 값 을 배열 에 넣 을 수 있 습 니 다. 구체 적 인 유형 은 상관 하지 않 아 도 됩 니 다 (자바 의 배열 의 값 유형 은 일치 해 야 합 니 다).
    그럼 다음은 방법의 반환 값 수신 문 제 를 해결 해 야 합 니 다.groovy 는 이렇게 처리 합 니 다. 여러 변 수 를 쉼표 로 구분 하여 괄호 에 넣 고 방법 이 돌아 오 는 왼쪽 에 두 면 됩 니 다.
    def f2(){
        ['abc',1]
    }
    (name,age) = f2()
    

    () 에서 변수 와 반환 값 의 수량 이 일치 하지 않 을 때: 불필요 한 변수 가 있 으 면 null 로 설정 합 니 다.만약 여분의 값 이 있다 면, 여분의 값 은 버 려 진다.
    조작 부호 과부하
    groovy 의 조작 부 호 는 다시 불 러 올 수 있 습 니 다. groovy 는 이미 조작 부호 와 미리 설 정 된 방법 을 연결 하 였 습 니 다. 우리 클래스 에서 대응 하 는 방법 (어떠한 구실 도 실현 하지 않 아 도) 을 실현 하면 해당 대상 은 해당 하 는 조작 부 호 를 호출 할 수 있 습 니 다.
    따라서 클래스 의 방법 에 이름 을 지 을 때 는 조작 자 맵 의 방법 명 에 맞 게 불필요 한 번 거 로 움 이 생기 지 않도록 조심 하 는 것 이 좋다.
    gradle 에서 자주 사용 되 는 조작 부 호 는 << 이 고 이에 대응 하 는 방법 은 left Shift 이 며 그 의 미 는 append 와 유사 하 며 대상 에 멤버 를 추가 하 는 것 이다.
    자동 포장
    groovy 2.0 이전에 기본 유형 은 모두 대상 으로 처리 되 었 다.groovy 2.0 이후 기본 유형 은 필요 할 때 만 대상 으로 간 주 됩 니 다. eg: Integer 를 호출 하 는 방법 으로 기본 유형 을 대상 에 게 전달 합 니 다.그 밖 에 Groovy 는 바이트 코드 단계 에서 이 를 기본 유형 으로 유지 하여 성능 을 향상 시 키 는 목적 을 달성 할 것 이다.
    groovy 코드 로 변환 생 성
    groovy 에 서 는 대응 코드 를 만 들 고 개발 절 차 를 간소화 하 는 데 많은 주 해 를 제공 합 니 다.여기 서 가장 자주 사용 하 는 @Immutable 주 해 를 간단하게 말씀 드 리 겠 습 니 다. 이 주 해 는 수식 류 에 사 용 됩 니 다. 이 주해 로 클래스 를 표시 하면 이 클래스 의 모든 필드 는 자동 으로 final 로 표시 되 고 유일한 구조 기 를 추가 로 만 듭 니 다. 그 매개 변 수 는 클래스 에서 필드 를 설명 하 는 순서 입 니 다.
    그루 브 이의 결함
  • groovy 의 == 등가 자바 의 equals 방법 을 비교 하려 면 두 인용 이 같 는 지 비교 하려 면 groovy 에서 제공 하 는 방법 은 is()
  • 이다.
  • 자바 에 서 는 방법 내부 에서 {} 로 코드 를 패키지 하여 새로운 역할 영역 을 정의 할 수 있 습 니 다. 이러한 문법 은 groovy 에서 패 킷 을 정의 하 는 것 으로 여 겨 져 컴 파일 이 통과 되 지 못 합 니 다
  • 점 수 는 항상 선택 할 수 있 는 것 이 아니다!다음 과 같은 예 를 들 어
    class Foo{
        def bar = 1
    
        {
            println "I'am instance initializer"
        }
    }
    
    Foo 류 에서 대상 의 초기 코드 블록 을 정의 하려 고 했 으 나 이러한 구 조 는 속성 에 의존 하 는 일부분 으로 여 겨 졌 다. 앞의 bar 는 정의 가 끝 난 후에 가산 점 번호 가 없 기 때문에 이런 상황 이 발생 하면 bar 정의 가 끝 난 후에 분점 으로 끝내 야 한다.물론 정적 코드 블록 이 었 다 면 이 문 제 는 없 었 을 것 이다.

  • more
    더 많은 내용 은 공식 문 서 를 참고 하 시기 바 랍 니 다.

    좋은 웹페이지 즐겨찾기