3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

昔どこかで見たJavaScriptでゼロパディングするカッコよさげな関数

3
Last updated at Posted at 2019-02-01

自己紹介

ファットなトントンです。よろしくおねがいします。
技術系の話題を真面目に書くのは初めてなので、体裁とか内容の必要十分性とかそういうのは大目に見てください。

ゼロパディングいろいろ

考え方はいろいろあると思いますが、大方この二つの考え方かと思います。

a. 「とにかくたくさんくっつけて、ひつようなとこだけちょんぎっちゃえ」方式
書いたとおりですが
「'0000000000000000'とかくっつけた上で、slice()とかsubstr()とかで必要な桁数切っちゃえばいいじゃん」
という考え方。

b. 「いっこずつくっつけてけば、そのうちほしいものになるよ」方式
ループですね。繰り返しと判定処理だったらなんでもいいです。

var a = '123' //文字列型の数字
var c = 10    //桁数
while(true){
  if(a.length===c){
    // 無限ループからぬけるよ!
    break;
  }
  a = '0'+a // 桁を1つくっつけるよ!
}

みたいなことをやるわけです。

じゃあどんな書き方が良いの?

評価基準によるわけですが、大まかに考えるならばQCD(Quality, Cost, Delivery)のいずれに優れているかで判断すると思います。
例えば
1. 長くても良いよ。誰でもぱっと見で理解できるのが一番
2. 短いコードは良いコードだ。バグも少なくわかりやすい
3. 速さとフットプリントが一番。可読性?そんなものは捨てた
みたいな感じでしょうか。
1.の評価基準だと、a. b.のやり方どちらでもよいでしょうが、2.の評価基準でb.みたいなコードを提出するとぶっ飛ばされます。
3.の評価基準でa.のコードを提出しても「このメモリー富豪がっ!」みたいな感じでいい顔はされないでしょう。

そんな中で昔見つけたやり方

/**
 * @function
 * @name ゼロパディング関数.
 * @summary 入力された値に'0'を追加して、指定された桁数の値を返します.
 * @param {int} 桁数.
 * @param {string} 基となる値の文字列.
 * @returns {string} ゼロパディングされた値の文字列.
 */
function paddingZero(digit, value) {
  return value.length === digit -0 ? value : paddingZero(digit, '0'+value);
}

結論から言うならば再帰処理です。JavaScriptの再帰処理性能とかは真面目に調べたことないので分からないですが、基本的には繰り返し処理と同じくらいの計算量だと思えば良いのではないでしょうか。

結論

いろいろあるけど評価基準の中でしっくりくるコードを書けば良いのではと思います。
あとカッコイイとかの感覚は大事だと思う。

3
0
5

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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?