제가 Kotlin을 한 달 동안 썼어요.

12730 단어 KotlinJavaAndroid

Kotlin



iOS를 제일 좋아하는 사람이 한 달 동안 Kotlin을 만져본 결과.
↑ iOS 앱 개발 경력 5년 정도, 자바는 별로 건드리지 않았다.오직 1년의 시간은 안드로이드(Xperia)다.

Kotlin이란 무엇입니까?


JetBrains(IntelliJ의 개발 소스)가 개발한 언어 S6
Java → 컴파일 → Java 바이트 → Android
Kotlin → 컴파일 → Java 바이트 → Android
이렇게 서 있기 때문에 Java와 거의 호환됩니다.
(참고로 JavaScript로 컴파일할 수도 있음)

강력한 IDE


Swift와 Xcode가 강력하듯이 Kotlin도 Android Studio와 함께 매우 강력합니다.
Java와 마찬가지로 import 보조를 할 수 있는 다른 인터페이스의 대량 설정, Kotlin 바람 함수 호출 보조,
Java 파일을 Kotlin으로 변환할 수도 있습니다.

언어 규범


Java에 비해 Swift와 비슷하기 때문에 iOS 엔지니어가 쉽게 착수할 수 있습니다.
그럼에도 불구하고 사실 Kotlin이 먼저 발표했다.
간단한 곳에서 몇 가지를 소개하다

변수 선언


java
JavaObject javaObject = new JavaObject("android");
kotlin
val kotlinObject = KotlinObject("android")
유형 추리와 상수 성명, 선택 가능한 정의도 명확하다

상수/변수

var fuga = "neko"
fuga = "inu" //再代入可

val hoge = "neko"
hoge = "inu" //できない
final 을 넣지 않아도 재대입 을 방지할 수 있다

옵션 1

var fuga: String? = "neko"
fuga = null //再代入

var hoge: String = ""
hoge = null //できない
빈 것을 허락하든지 엄격하게 쓰든지

옵션 2

hoge?.anything()
만약 hoge가 비어 있다면 아무 일도 일어나지 않을 것이다

구조 함수 1

constructor() {
 //初期化処理
}
초기화할 때 특별히 유명을 쓰지 않아도 된다.
변수 선언과 함께 아주 좋은...

구조 함수 2

class AudioFormat(val type: String) {
}
주구조 함수는 클래스의 성명에 쓸 수도 있고 변수로 설명할 수도 있다.
...이렇게

Try


Kotlin은 어쨌든 분명하게 쓸 수 있다.
간단하게 시도할 수 있다.Java의 자동 변환도 있습니다.
코드를 바꾸고 싶거나 해보고 싶을 때 편해요.

실제 사용이 편리한 녀석


Java 함수 속성 바람 호출

class JavaObject {
  String getMessage() {
    return "message";
  }
  void setMessage(String message) {
    this.message = message
  }
}
이런 방법.
javaObject.message //get
javaObject.message = "hello" //set
호출
라이브러리에 Java를 섞어도 Kotlin의 유파를 관철할 수 있습니다.

extension

fun Message.say() {
  playVoice()
}
기존 클래스 생성 방법
val PreviewActivity.voiceId: Int
  get() = 0
속성을 생성할 수도 있습니다 (Swift라면 할 수 없습니다).

언어급 단일 지원

object SingletonClass {
  var isFirstLaunch = false
}
class를object로 쓰면 단일화SingletonClass.isFirstLaunch유명속성

작은 인터페이스 생략

button.setOnClickListener(object :View.OnClickListener {
    override fun onClick(v: View?) { 

    }
})
이렇게 덮어쓰는 인터페이스만 있으면 돼요.
button.setOnClickListener { 
}
이렇게 생략해도 돼요.
it에서 매개 변수 검색 가능

getter/setter

var messsage: String = ""
    set (value) {}
    get {}
getter/setter를 명확하게 추가할 수도 있습니다.
setter는 순환하지 않고 field = value로 설정할 수도 있고 간단한 KVO로 처리할 수도 있습니다.

레이아웃 xml과 협업

<Button android:id = "+@id/button" ~ />
적어 놓으면
button.text = ""
이렇게 하면 id 이름의 실례를 정의하지 않고 사용할 수 있다

this@,return@

class A {
    val message = "hello"
    class B {
        val message = "world"
        fun action() {
            this@A.message      
            this@B.message
        }
    }
}
this@ 에서 this의 뜻을 명확하게 표시할 수 있다
button.setOnClickListener {
  ary.map {
    //一気にreturnすることも出来る
    return@setOnClickListener
    //もちろん普通にreturnも出来る
    return@map false
  }
}
값을 되돌려야 하는 함수 안에서 어디서든 단숨에 되돌릴 수 있다.

when

val word = when (value) {
  0 -> "zero"
  1 -> "one"
}
되돌아오는 값을 가진 스위치 같은 녀석
return과closure 모두 사용할 수 있어 사용하기 쉽다
EventBus 등에서 State 관리 시 뷰 모양새 등에 사용
when (value) {
  o -> "zero"
  1,2 -> "one or two"
  else -> {
   throw new Exception()
  }
}
조건 차이도 좋아요.

이거 어떻게 써요?


null의 무보존막 (iflet 맛)

hoge?.let {
  it.action()
}
hoge?.let {
    it.action()
} ?: run {
    //nullの場合
}
이렇게 써도 돼요.

null의 랩(guard 맛)

var hoge = hoge ?: return

리셋 매개변수

fun action(completion: (() -> Unit)? = null)
() -> Unit) 유형으로 선언됩니다.
예를 들어(Int->String) Int를 수신하고 String 콜백으로 돌아갑니다.
completion?.invoke()
에 설명된 해당 매개변수의 값입니다.

초기화 규약

private lateinit var message:String

onCreate() {
  message = "hello"
}
lateinit를 사용하면 notnull의 전역 변수를 초기화하지 않고 설명할 수 있습니다.
onCreate나 구조 함수를 사용하여 초기화할 수 있다면,null-wrap의 횟수를 줄일 수 있습니다

신경 쓰이는 거.


runtime 크기



이점

컴파일 시간


별로 신경 쓰지 않는 것 같아.이르지도 늦지도 않다

총결산


이점


아무튼 잘 썼어요.
IDE 때문에 실제 학습 비용은 매우 낮음
Java와의 호환성이 높아 프로젝트의 작은 부분에서 쉽게 넣을 수 있음

결점


null를 잘 처리하지 않으면null이 판별하는if문장으로 가득 차 있다
실제로 쓰면 Android Studio가 고정되어 있어요.
비트 연산 등 연산자를 사용할 때 자바가 좋다(toByteArray 또는 모두 접미사)
while 판별식으로 대입할 수 없습니다.
while(val hoge = 0) {
   //↑できない   
}

Slack

좋은 웹페이지 즐겨찾기