본문 바로가기
공부/이펙티브코틀린

아이템 17 - 이름 있는 아규먼트를 사용하라

by 띵커베르 2024. 4. 10.
728x90
  • 코드에서 아규먼트의 의미가 명확하지 않는 경우가 있다. 예를들어 다음과 같은 코드이다.
val text = (1..10).joinToString { "|" }
  • "|" 가 무엇을 의미하는지는 joinToString 대해서 이미 알고 있다면 이것이 구분자(separator) 를 의미한다는 것을 알 것이다.
  • 하지만 모른다면 접두사로 생각할 수도있을것이다. 명확하지 않는 경우 이를 직접 지정해서 명확하게 만들어 줄 수 있다
val text2 = (1..10).joinToString(separator = "|")

또는
val seperator = "|"
val text3 = (1..10).joinToString(seperator)

또는 
val test4 = (1..10).joinToString(separator = seperator)
  • 다음과 같은 경우에는 더 추천한다
    • 디폴트 아규먼트의 경우
    • 같은 타입의 파라미터가 많은 경우
    • 함수 타입의 파라미터가 있는 경우(마지막 경우 제외)
// 디폴트 아규먼트의 경우
fun greet(message: String, isLoud: Boolean = false) {
    if (isLoud) {
        println(message.uppercase(Locale.getDefault()))
    } else {
        println(message)
    }
}
greet(message = "Hello", isLoud = true)

// 같은 타입의 파라미터가 많은경우
fun setUpWindow(title: String, width: Int, height: Int) {
    println("Setting up window: $title, Width: $width, Height: $height")
}

setUpWindow(title = "Main Window", width = 800, height = 600)

// 함수 타입의 파라미터
fun performOperation(startMessage: String, operation: () -> Unit) {
    println(startMessage)
    operation()
}

@Test
fun `함수 타입의 파라미터`() {
    performOperation(startMessage = "Starting operation...") {
        greet(message = "Hello, World!", isLoud = true)
    }
}
// Starting operation...
// HELLO, WORLD!

 

 


생각:

  • 확실히 아규먼트가 많을때는 명확하게 붙여주는게 더 좋은거 같고, 위에 나와있듯이
    • 디폴트 아규먼트의 경우
    • 같은 타입의 파라미터가 많은 경우
    • 함수 타입의 파라미터가 있는 경우(마지막 경우 제외)
  • 위의 경우일경우에는 붙여주는게 좋은거 같다.
728x90

댓글