LoginSignup
12
10

More than 5 years have passed since last update.

JavaScriptのランプ関数いろいろ

Last updated at Posted at 2015-10-27

ランプ関数とは

ランプ関数(Ramp function)とは、正(非負)の数を入力したときはそのままの数、
負の数が入力されたときはは0を返す関数です。

ランプ関数 - Wikipedia

似たような関数でクランプ(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);
}
12
10
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
10