2.5.2 기본값(Default values)
2.5.2 기본값(Default values)
Haxe는 인자에 **상수 값(constant value)**을 할당해 기본값을 제공할 수 있어요:
class Main {
static public function main() {
// (?i : Int, ?s : String) -> String
$type(test);
trace(test()); // i: 12, s: bar
trace(test(1)); // i: 1, s: bar
trace(test(1, "foo")); // i: 1, s: foo
trace(test("foo")); // i: 12, s: foo
}
static function test(?i = 12, s = "bar") {
return "i: " + i + ", s: " + s;
}
}
이 예제는 선택적 인자(Optional Arguments)의 예제와 매우 비슷한데, 유일한 차이는 12와 "bar"라는 값이 각각 함수 인자 i와 s에 할당된다는 점이에요. 그 효과는, 호출에서 인자가 생략되면 null 대신 기본값이 사용된다는 것입니다.
Haxe의 기본값은 타입의 일부가 아니며, 함수가 인라인(inlined)되지 않는 한 호출 지점에서 대체되지 않아요. 어떤 대상에서는 컴파일러가 여전히 생략된 인자 값에 null을 전달하고 함수 내부에서 다음과 유사한 코드를 생성할 수 있습니다:
static function test(i = 12, s = "bar") {
if (i == null) i = 12;
if (s == null) s = "bar";
return "i: " +i + ", s: " +s;
}
이것은 성능이 중요한 코드에서 고려해야 할 사항이에요. 기본값 없는 해법이 더 나을 때도 있습니다.
출처: Default values
본문
기본값의 선언
함수 인자에 상수 값을 할당하면 기본값이 됩니다. 호출에서 그 인자를 생략하면 기본값이 사용됩니다. ?i = 12처럼 선택적 표기와 함께 쓸 수도 있어요.
기본값은 타입의 일부가 아님
Haxe의 기본값은 함수 타입에 포함되지 않아요. 그리고 함수가 인라인되지 않는 한, 기본값은 호출 지점에서 대체되지 않습니다. 그 대신 대상 코드에서 생략된 인자가 null인지 확인하고 기본값을 적용하는 방식으로 동작할 수 있어요.
성능 고려
인라인되지 않은 경우, 생략된 인자를 위해 null 체크와 기본값 대입이 생성될 수 있어요. 성능이 민감한 코드에서는 이 overhead를 피하기 위해 기본값 대신 명시적인 처리를 고려할 수 있습니다.