devlog of ShinJe Kim

[TIL] 2019-11-28

|

Today I Learned

조건이 여러개일 때 조건문을 깔끔하게 작성하기가 어렵다. 두 가지 조건이 있다.

  1. item의 상태가 selected일 때(isSelected = true) textView의 색상은 파란색, 반대의 경우에는 빨간색.
  2. 빌드 버전에 따라 사용할 수 있는 getColor api가 다르다. 23레벨 이상의 getColor에는 color값과 더불어 theme값을 넣어주어야 한다.

내가 작성한 코드. 구구절절 조건을 나열했고 필요없는 반복이 많다.(구질구질..) 어떻게든 수정해보려고 했는데 잘 안되었다.

if(isSelected) {
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        textView.setTextColor(resources.getColor(R.color.blue, null))
    } else {
        textView.setTextColor(resources.getColor(R.color.blue))
    }
} else {
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        textView.setTextColor(resources.getColor(R.color.red, null))
    } else {
        textView.setTextColor(resources.getColor(R.color.red))
    }
}

CTO님의 손길을 통해 개선된 코드

val getColor = { resourceId: Int ->
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES>M) {
        resources.getColor(resourceId, null)
    } else {
        resources.getColor(resourceId)
    }
}

tagTextView.setTextColor(getColor(if (isSelected)
    R.color.fixed_text_title
else
    R.color.text_title
))

최대한 중복되는 부분을 줄이고 바뀌는 부분만 변화하는 형태로 코드를 짜도록 하자.

Comments