본문 바로가기
Kotlin/Release Notes

[Kotlin Release Notes] M6.1 Released

by 노력남자 2023. 8. 28.
반응형

2013년 10월 12일

 

두 달 전에 M6을 출시하고 이제 여러 가지 흥미로운 업데이트로 다시 준비되었습니다.

 

언어 개선


여러 새로운 언어 기능과 개선 사항이 있습니다.

 

개선된 추론


타입 추론이 이제 스마트 캐스팅을 고려합니다. 따라서 다음과 같은 코드가 올바르게 작동합니다:

 

val map: Map<String, String> = ...

if (str != null) {
   map[str] = "Something"
}

 

더 나은 캐스팅 진단


컴파일러가 더 똑똑해져서 불가능한 캐스팅을 잡아냅니다.

 

val name: String = "Joe"
if (name is Iterable<*>) {
   ...
}

 

이 경우 컴파일러 오류가 발생합니다.

마찬가지로 베어 타입의 캐스팅도 이제 유추할 수 있습니다.

 

val values: Collection<String> = ...
if (values is List) {
   val name: String = values[0]
}

 

또한, when 절의 반환 값이 중요하지 않을 때(즉, 문장으로 사용될 때) else는 더 이상 필요하지 않습니다.

 

fun foo(x: Int) {
  when (x) {
     0 -> println("Zero")
     1 -> println("One")
  }
}

 

경고 억제


어떤 선언이나 표현식에 suppress 어노테이션을 붙여 컴파일러가 그 안에서 경고를 발생시키지 않게 할 수 있습니다. 이는 체크되지 않은 캐스팅, 이름이 바뀐 매개변수, 그리고 다른 경고에 사용될 수 있습니다.

 

[suppress("UNCHECKED_CAST")]
fun  foo(x: Any): T {
    return x as T
}

 

람다에서의 로컬 반환


혼동을 피하기 위해, 베어 리턴은 항상 "명명된 함수에서 반환"을 의미합니다. 이는 람다 표현식에서 "return x"라고 말하여 람다가 x를 반환한다는 것은 허용되지 않습니다. 이를 완화하기 위해 이제 람다에서 레이블이 붙은 반환을 할 수 있습니다. 더 높은 차수의 함수인 foo가 있다고 가정해 봅시다.

 

fun foo(func: () -> Int) { ... }

 

이를 호출하여 조건을 확인하고 일찍 반환할 수 있는 람다를 전달할 수 있습니다.

 

foo @myLambda { (): Int ->
   if (...)
       return@myLambda 10
   ...
}

 

람다는 자동으로 그것들이 전달되는 함수 후에 레이블이 붙습니다.

참고: 람다 정의에서의 명시적인 반환 타입은 일시적인 요구사항이며 미래에는 필요하지 않을 것입니다.

 

경고: 메타데이터 형식 변경


JVM에서의 이진 형식에 주요한 변경을 했습니다. 이에는 크기 발자국을 줄이고 속도를 높이는 것, 그리고 Reflection을 위한 준비가 포함됩니다. 이전 Kotlin 버전으로 컴파일된 바이너리는 호환되지 않을 것입니다.


자바스크립트 지원


Kotlin을 사용하여 상업적으로 성공한 제품을 가지고 있고, 자바스크립트로 컴파일되지만, 우리는 대부분 JVM에 중점을 두고 있었습니다. 그러나 최근에는 자바스크립트 지원에 전력을 다하고 있습니다. 이 릴리스에서는 제공되는 기능 목록에 추가했습니다.

 

  • 열거형 지원
  • 클래스 객체
  • 위임된 프로퍼티
  • 멀티-선언
  • SourceMaps

 

또한 이번 릴리즈에서는 ECMAScript 3에 대한 지원을 중단했습니다.

자바스크립트 애플리케이션을 대상으로 하는 것은 더 자세한 내용이 필요하며, 곧 다룰 예정입니다.


IDE 개선


IntelliJ IDEA 지원에 있어 이 릴리즈에서는 다양한 기능을 추가했습니다.

 

  • 멤버 함수를 확장 함수로 변환
  • 위임된 프로퍼티의 getter와 setter로 이동 (Ctlr+click on by)
  • for 루프에서의 iterator/next/hasNext로 이동 (Ctlr+click on in)
  • 호출 사이트에서의 invoke()로 이동 (Ctlr+click on parentheses)
  • Find Usages에 대한 개선, 생성자 및 오버라이딩을 포함

Maven과 Gradle 기반 프로젝트를 포함하여 프로젝트 설정 개선, UI 개선, 그리고 몇 가지 Completion 조정

 

마지막으로, 이 릴리즈는 IntelliJ IDEA 13의 최신 EAP뿐만 아니라 최신 Android Studio에도 지원을 제공합니다.

컴파일러와 플러그인은 GitHub의 릴리즈 페이지에서 찾을 수 있습니다. IntelliJ IDEA를 사용하고 있다면, 우리의 저장소에서 최신 플러그인을 다운로드하거나 IntelliJ IDEA의 플러그인을 통해 직접 업데이트할 수 있습니다.

 

원문

 

https://blog.jetbrains.com/kotlin/2013/10/m6-1-released/

반응형

댓글