scala를 쓰면서 가장 불편했던 것은 삼항 연산자가 없다는것이다.
그래서 이를 좀 편하게 하기 위한 고민을한 결과 implicit method를 활용하면 좀 간편히 작성이 가능할 것 같았다.
val age = 5
val amIYoung = if( age < 10) "yes" else "no"
위와 같은 코드를 좀 더 줄이고 싶었다.
package utils
object ExtraOperator {
class TernaryOperator[T](val trueVal: T, val falseVal: T) {
def ?:(condition: => Boolean): T = if (condition) trueVal else falseVal
}
implicit def tupleToTernaryOperator[T](t: (T, T)) = new TernaryOperator(t._1, t._2)
}
코드를 설명해보자.
implicit def tupleToTernaryOperator[T](t: (T, T)) = new TernaryOperator(t._1, t._2)
Tuple2를 TernaryOperator로 암묵변환해주는 메소드이다.def ?:(condition: => Boolean): T = if (condition) trueVal else falseVal
이렇게 준비했으면 이제 사용해보자.
import ExtraOperator._
val age = 5
val amIYoung = ("yes","no").?:(age < 10)
비록 import를 해야지만 사용가능하지만 Tuple2를 이용하여 조금은 더 간단히 구현해 보았다.