컴파일러가 모호한 경우에만 세미콜론을 지정하면되고 세미콜론이 없으면 명백한 컴파일러 오류가 발생합니다.
규칙은 다음과 같습니다. 걱정하지 마십시오. 세미콜론을 사용하지 마십시오 (아래의 두 경우 제외). 컴파일러는 오류가 발생할 때 알려줍니다. 실수로 추가 세미콜론을 추가하더라도 구문 강조 표시는 "중복 된 세미콜론"이라는 경고와 함께 불필요하다는 것을 보여줍니다.
세미콜론의 일반적인 두 가지 경우 : 예가
열거에 열거하며 성질 또는 기능의 목록이 열거 클래스 ENUM리스트 후 ;
필요 :
enum class Things {
ONE, TWO;
fun isOne(): Boolean = this == ONE
}
그리고 당신은 제대로 수행하지 않을 경우이 경우 컴파일러는 바로 당신을 말할 것이다 :
Error:(y, x) Kotlin: Expecting ';' after the last enum entry or '}' to close enum class body
세미콜론의
myThingMap.forEach { val (key, value) = it; println("mapped $key to $value") }
부재를 마지막 예제에서 당신에게에서 더 신비 오류를 줄 것이다 : 당신은 어쩌면 간결을 위해, 같은 줄에 두 문장을 수행 할 때
그렇지 않으면 유일한 다른 일반적인 경우입니다 당신이하고있는 일이 혼란 스러울 때 가리 킵니다. 세 미 콜론이 제거되고 하나가 될 때 유효한 세미콜론으로 분리 된 두 개의 명령문으로 유효한 두 가지 코드를 작성하는 것은 정말로 어렵습니다.
이전에는 Kotlin 1.0 이상이 더 명확 해지기 때문에 더 이상 세미콜론이 필요하지 않게 된 후에 "익명"인 { ... }
의 초기화 블록과 같은 다른 경우가있었습니다. 이러한 사례는 더 이상 언어에 남아 있지 않습니다. 이 기능의
신뢰 :
Also I have suspicions that there are some cases where this feature may not work correctly and cause problems.
이 기능은 증거가 어디 알려진 경우를 설정하지 않은이 기능 문제 및 코 틀린의 다년간의 경험이 있다는 것을이 없습니다, 잘 작동이 기능 역화. 누락 된 ;
에 문제가 있으면 컴파일러에서 오류를보고합니다.
내 모든 오픈 소스 Kotlin과 내부적으로 큰 Kotlin 프로젝트를 검색 할 때, 위의 경우 이외에는 세미콜론이없는 것으로 나타났습니다. 원칙적으로 "Kotlin에서 세미콜론을 사용하지 마십시오"라는 개념을지지합니다.
그러나 유효하고 다른 의미를 가진 세미콜론을 사용하여 코드를 작성 했으므로 컴파일러에서 오류를보고하지 않는 경우를 의도적으로 고안했을 수 있습니다. 이는 다음 (@Ruckus 의한 응답의 수정 된 버전)과 같을 것이다 :
fun whatever(msg: String, optionalFun:()->Unit = {}):() -> Unit = ...
val doStuff:() -> Unit = when(x) {
is String -> {
{ doStuff(x) }
}
else -> {
whatever("message") // absence or presence of semicolon changes behavior
{ doNothing() }
}
}
doStuff ()->Unit
유형의 함수 whatever("message") { doNothing() }
호출의 결과에 할당되고,이 경우; 세미콜론을 추가하면 함수 { doNothing() }
이 지정되며 이는 ()->Unit
입니다. 그래서 코드는 두 가지 모두 유효합니다. 그러나 모든 것이 완벽하게 일렬로 배열되어 있기 때문에 자연스럽게 이런 일이 발생하지는 않습니다.. feature suggested emit
keyword or ^
hat operator은이 사건을 불가능하게 만들었을 것이며, 강력하게 제기 된 의견과 시간 제약으로 인해 1.0보다 먼저 고려되었습니다.
@JaysonMinard 저는 JavaScript의 전문가는 아니지만, 괜찮은 것처럼 보이지만 실제로 올바르게 작동하지 않는 언어 구조가 있다는 것을 알고 있습니다. 그리고 그 문제는 프로그램에서 버그를 발견 할 때까지는 문제가 있다는 것을 알지 못한다는 것입니다. 실수로 실수를 한 후에 곧 발생할 수도 있고 그렇지 않을 수도 있습니다. 나는 JavaScript의 문제있는 표현이 거의 없거나 거의 없다는 것을 확신하지만, 그렇다고해서 Kotlin이 그와 같은 까다로운 사례를 가지고 있지 않다는 것을 의미하지는 않습니다. 그리고 내가 무엇인지 알고 있다면 나는 물어볼 필요가 없다. 그것이 문제 다. – Malcolm