Boolean의 경우 if (a?.b?.isTraded ?: false)
보다는 if (a?.b?.isTraded == true)
와 같은 방식으로 구현한다.
Custom accessor VS Function
행동을 나타내는 개념이면 function
상태나 값등 정보를 가져오는 개념이면 custom accessor
Kotlin: should I define Function or Property?
invoke() 함수는 nullable이 아닐 때에는 생략해서 사용한다.
val foo: () -> Unit
val bar: (() -> Unit)?
foo.invoke() // X
foo() // O
bar?.invoke() // O
package kr.co.prnd.domain
// WRONG!
package kr.co.prnd.domain_module
예외적으로 불가피하게 연결된 단어를 붙여서 사용해야 하는 경우에는 camelCase로 처리한다.
package com.example.myProject
ViewModel을 observe()할때 모아놓는 함수 이름
Return이 있는 데이터를 불러올때 함수 이름
getBrands() // O
getBrandList() // X
Raw 값으로부터 enum을 찾을 때 함수 이름은 find()
로 한다.
enum class Color {
RED , BLUE , GREEN ;
fun find (rawColor : String ): Color = when (rawColor) {
" red" -> RED
" blue" -> BLUE
" green" -> GREEN
else -> throw IllegalArgumentException (" invalid color: $rawColor " )
}
}
function을 1개만 가진 경우, fun interface OnXXXXListener
function을 2개 이상 가진 경우, interface XXXListener
publisher가 이벤트만 전달하고 listener가 전적인 책임을 처리할 때
이벤트를 handle하는 주체가 listen하고 있는 곳일때
fun onClick ()
fun onFocusChange ()
fun onScrollChange ()
fun onAnimationStart ()
fun onTextChange ()
publisher가 무언가를 처리하고 listener에게 알려줄 때
어떤 동작을 하고나서 이 동작이 일어났음을 listener에게 알려줄때
onEach(), doOnXXX() 개념처럼 특정 이벤트를 intercept해서 쓸때
동작을 한뒤에 listener를 호출해야 과거형의 이름과 걸맞음
fun onScrollStateChanged ()
fun onTextChanged ()
Listener하는 곳에서 과거형 여부에 따라서, 그 이벤트에 대한 처리를 해야 하는지 말아야 하는지를 판단가능
생성자, 함수에서 Parameter를 정의할때 한줄로 정의 가능하면 한줄, 그렇지 않으면 각 parameter별로 개행한다.
한 줄에 들어가는 when 분기는 중괄호를 사용하지 않는다.
when (value) {
0 -> return
// ...
}
여러개의 조건을 동시에 사용하는 경우 ->
를 포함한 블록은 내려서 작성한다.
when (value) {
foo -> // ...
bar,
baz
-> return
}