Kotlin1.0Beta4의 변경 사항

8168 단어 Kotlin
Kotlin Advent Calendar 2015의 23일째 보도.
22일째는 @rabitarochan 선생의 유형 보안에서 Kotlin 속성 가져오기이다.
오늘의 내용입니다. 마침 어제 Kotlin 1.0Beta4가 나왔기 때문에 변경점을 번역해 보았습니다.
  • 원문은 여기에 있다
  • 증분 컴파일 개선


    Kotlin 증량 컴파일을 더 빨리 실행하기 위해 정확한 의존 검출 알고리즘을 새로 만들었습니다.
    아직 experimental이지만 우리가 이미 사용한 청년 상황이라면 잘 움직일 수 있을 거예요.
    사용하기 위해 아래의 설정을 해 보세요.
    Settings |
    Build, Execution, Deployment |
    Compiler |
    Kotlin Compiler |
    Enable precise incremental compilation (experimental)
    
    같은 증분 컴파일 지원도 Gradle에 옵니다.기대해주세요.

    언어


    모든 변경 사항부터 몇 개의 고광선을 설명한다.

    과부하 솔루션 변경


    과부하 솔루션을 수정하여 이제 Kotlin은 SAM-converted Java 함수를 더 많은 구성원으로 지정합니다(함수?)그대로 처리하다.(이전에는 extensions처럼 행동하기 위해 사용되었다.)
    이 수정은 매우 중요하다.그렇지 않으면 컴파일러를 통해 번거로운 방법(과부하)으로 설명해야 하는 경우가 많기 때문이다.
    안타깝게도 결과가 비교적 평범하게 망가진 경우는 적어도 한 가지가 있다.
    하지만 이 수정 자체는 매우 간단하다.
    현재 컴파일러는 file.listFiles { it.name == "..." }에 대해 지적했다.
    이 이유는 좀 복잡해요.
  • java.io.파일의 listFiles 과부하 3개
  • 이 중 2개는 SAM-interface가 있습니다.람다를 유지할 수 있기 때문에 전환
  • 따라서 파라미터가 없는lambda가 통과할 때 어느 것을 선택해야 할지 판단할 수 없습니다.
  • 이전에는 이동했습니다. 왜냐하면 오래된 라이브러리의 확장 함수(SAM 이전 시대로 돌아갈 때)가 SAM-converted 구성원을 대체하여 선택되었기 때문입니다.
  • 해결 방법은 매우 간단하다.그냥 파라미터를 정하라고 하면 돼요.예를 들면 아래의 느낌.
    file.listFiles { it -> ... }
    

    속성은 매개 변수가 없는 함수 대상으로 사용할 수 있습니다


    예: Kotlin에서 String::length 은 속성이지 함수가 아닙니다.
    하지만 함수가 기대되는 곳에서 사용할 수 있다면 편리하다.예를 들어 다음과 같은 느낌.
    val lengths = strs.map(String::length)
    
    그래서 나는 이 작법을 인정하기로 결정했다.다시 말하면 (R) -> T 함수로 기대되는 API가 있으면 반환값의 유형을 T로 하는 R의 속성을 참조할 수 있다.

    앞으로 사용할 키워드 예약


    우리는 Kotlin의 향후 발매를 위해 몇 가지 새로운 기능을 추가할 계획이다.그래서 필요한 키워드를 미리 예약하기로 했다.
    미래의 모든 것을 예측할 수 없다는 것을 이해하다.그러나 여기에 열거한 것은 열심히 예상한 것이다(미래의 기능은 아직 상세하게 설계할 수 없지만 이런 것들로 최대한 편리하게 하려고 한다)
  • yield 키워드로 예약
  • sealedwhen의 사전단어 예약
  • typeof 키워드로 예약.JS에서 사용jsTypeOf()
  • async{fun의 사전단어로 예약합니다.
  • 따라서 이제는 async {...} 대신 async () {...} 선언을 해야 한다.
    이게 안 예쁜 건 알지만 좋은 옵션을 못 찾았어요.코드 보충 중 () 이 자동으로 삽입됩니다.Code Cleanup는 우리가 기존의 코드에서 이동하는 것을 도울 수 있다.

    Java Wildcards


    Kotlin이 변수형을 어떻게 바꾸는지에 몇 가지 문제가 있다.예를 들어 List<Foo> 자바의 List<? extends Foo> 아니면 단순한 List<Foo> 등의 문제다.
    상세한 상황은 잠시 말하지 않고 다음 단계를 결정했다.
  • 기본적으로 반환값이나 무의미한 곳에는 와일드카드가 생성되지 않습니다
  • 와일드카드가 필요한 경우 유형 주석을 사용하여 강제할 수 있습니다.List<@JvmWildcard String> 항상 Java의 List<? extends String>
  • 와일드카드를 제거해야 할 경우 사용@JvmSuppressWildcards(유형 또는 와일드카드를 포함하는 선언에서 사용)
  • 예:
    fun foo(l: List<String>) // in Java: List<String> (String is final)
    fun foo(l: List<@JvmWildcard String>) // in Java: List<? extends String>
    
    interface Open
    fun bar(p: List<Open>) // in Java: List<? extends Open> (Open is not final)
    @JvmSuppressWildcards
    fun bar(p: List<Open>) // in Java: List<Open>
    
    주의: 이것은 집합뿐만 아니라declaration-sitevariance를 포함한 모든 유형을 고려합니다

    라이브러리 변경


    표준 라이브러리를 정리하고 있습니다.이것도 약간의 재포장을 포함한다.
  • kotlin.test 포장은 단독jar-filekotlin-test.jar로 이동합니다.Quick fix는 IDE에서 사용할 수 있으며 자동으로 종속을 추가합니다.
  • 표준 라이브러리에서 포장의 정렬을 준비한다.새로운 포장을 만들어서 모든 함수를 그것들에 복사했다.구 함수는 2진 교환을 위해 보존된 것이다.Kotlin 코드에서 마이그레이션할 필요 없이 Java 코드를 사용할 수 있음Code Cleanup
  • 그런 다음 라이브러리에서 JAR을 1개 이상 추출할 예정입니다.이것은 자주 사용하지 않는arrayutilities를 포함한다.그래서 주요 JAR 밖으로 나와서 사이즈를 줄이고 싶어요.

    강조표시


    Kotlin의 Int::class 은 서로 다른 컨텍스트에서 Java의 int.class 또는 Integer.class 에 해당할 수 있습니다.두 개 중 특정한 것을 쉽게 사용할 수 있도록 두 개의 속성을 가져왔습니다.
  • Int::class.javaPrimitiveType 반환Int.class
  • Int::class.javaObjectType 반환Integer.class
  • 또 선언IntArray(5) { it * 3 }과 같은 내용도 가능하다.즉, 초기화 후 기본체의 배열을 만들 수 있다

    장래 변경:collection에서null의 의미


    이후 버전의 JDK는 더 이상 null을 허용할 수 없는 컬렉션을 만들었다.예를 들어, JavaDoc 의 설명 java.util.Map.computeIfAbsent
    もし特定のkeyがまだvalueと紐付いていない (もしくはnullにマッピングされている)ならば、
    その値を与えられたmapping関数を利用して計算しようと試み、nullでないようにこのマップに入力しようとする  
    
    이런 규칙들은 이런 조작을 하는 원자 속성에 대해 본질적이기 때문에 우리도 이에 상응하기로 결정했다.
    그러나null-free의concurrentcollection을 조작하려고 할 때, Kotlin의 extension 함수는 적당한 동작을 보장할 수 없습니다.
    따라서 getOrPut 등 똑같이 null값이 나타나지 않도록 처리된 함수의 동작도 바뀌어야 한다.
    코드 업데이트를 위해deprecationwarnings의 추천을 따르십시오.

    IDE의 새로운 기능

  • 해결되지 않은 참조에 대한 Quick-fix 추가코드를 서로 다른 상하문에 붙일 때 등 기호의 이름을 조정하는 것이 편리하다.
  • 현재 IDE에서 해결할 수 없는 호출 가능한 참조에 따라 함수를 만들 수 있습니다.
  • Go to TestCreate Test동작을 최고급 함수동작으로 한다
  • 무명 함수에서 lambda로 변경된 intention
  • 추가
  • Go to classSearch everywhere Kotlin의 내장식
  • 표시
  • 디버거: Skip simple getter 옵션을 지원합니다.이것은 디버거가 구조 함수에서 속성, getter가 없는 속성, 필드 값을 되돌려주는 getter에서 멈추지 않는다는 것을 의미한다.
  • 앞으로


    베타 기간이 끝나면 RC와 1.0을 기다립니다.
    1.0 이후에 pre-release 버전의 Kotlin으로 컴파일된 코드가 있는지 확인하고 싶습니다.그러니까 RC 컴파일러로 모든 오래된 코드를 강제로 다시 컴파일하세요.JetBrains 이외의 라이브러리 관리자와 함께 당시 광범위하게 이용되었던 모든 라이브러리가 다시 컴파일되었는지 확인하고 싶습니다.
    그리고 우리는 이곳에서 전통을 없앨 기회를 얻을 계획이다.
  • 라이브러리가 진화 과정에서 쌓인 모든 의존을 없애다
  • 자동으로 생성된 코드의 모든 의존을 제거합니다 (들어보지 못했을 수도 있지만 존재합니다!)
  • 베타 기간에 발견된 전통 바이트 코드의 특성 제거
  • 구조적인 포장이 있기 때문에 stdlib 주변 코드 이동
  • 이 점에 대해 표준 라이브러리는 호환성 변경, deprecation,addtion만 있는 것이 아니다.중요한 부분을 무시했는지 확인하기 위해서, 우리는 현재 open review 라이브러리 API를 실행하고 있습니다.
    마리야, Kotlin!
    여기서 마치겠습니다.RC 기대된다.
    나는 번역에 잘못된 점이 많다고 생각한다. 만약 편집의 요구를 받을 수 있다면 큰 도움이 될 것이다.
    내일은 yy_저는 Yank입니다!

    좋은 웹페이지 즐겨찾기