ランプ関数とは
ランプ関数(Ramp function)とは、正(非負)の数を入力したときはそのままの数、
負の数が入力されたときはは0を返す関数です。
似たような関数でクランプ(clamp)関数というのがありますが、
こちらの方が実用的だからか、あるいはランプ関数の方が吟味するほど味のある関数ではないからか、クランプ関数の方がよく目にする気がします。
Clamping (graphics) - Wikipedia, the free encyclopedia
実装例
条件分岐による方法
function ramp(x) {
return (x < 0) ? 0 : x;
}
負の数だったら0、そうじゃなかったら入力値を返すという、定義に忠実な実装です。
max関数を使う方法
function ramp(x) {
return Math.max(x, 0);
}
ちょっと数学的なやり方です(これも定義通り)。
引数を参照する部分が1つだけというのも良い点です。
符号関数を使う方法
function ramp(x) {
return ((Math.sign(x) + 1) / 2) * x;
}
(Math.sign(x) + 1) / 2
はステップ関数を表します。
ステップ関数がJavaScriptに組み込まれてないので、若干回りくどいです。
あと、もうちょっと工夫しないと、負の数でマイナスゼロが返ってきてしまいます。
文字列処理による方法
function ramp(x) {
return Number(x.toString().replace(/^-.+/, 0));
}
正規表現でマイナスが付いているときだけ0に置換します。
入出力が両方文字列だった場合、x.replace(/^-.+/, '0')
だけで済むので、その場合一番パフォーマンスがいいと思われます。
結論
直感ではありますが、一般用途ではmax関数を使う方法が一番素直でよいのではないでしょうか。
function ramp(x) {
return Math.max(x, 0);
}