部分文字列を取得する関数で悩みたくない!

部分文字列を取得する関数で悩みたくない!

文字列から部分文字列を抜き出す組み込み関数がよくうろ覚えになっていたのですが,うろ覚えにならずに済む考え方に至ったのでそのメモです.

部分文字列

与えられた 0 文字以上の文字列から,一部または全部を抜き出して得られる文字列を部分文字列といいます.
例えば,文字列「2023年」から,始めの 4 文字を抜き出して得られる文字列「2023」は「2023年」の部分文字列です.

JavaScript での部分文字列取得

方法はいくつかありますが,例として以下のコードを挙げてみます:

const year = "西暦2023年";
const yearNumericStr = year.slice(2, 6);
console.log(yearNumericStr);    // "2023" と表示される

私がよく曖昧になっていたのが,第二引数番目の文字が取得対象かどうかでした.

他にも,Java や Go 言語も同様に,開始位置と終了位置を指定して部分文字列を取得する関数を提供しており,同様の不安を感じていました.

どう考えればよかったか

捉え方を変えるべきだったのは「◯番目の文字」という部分です.

何番目の文字かは,左から順に 0 番目,1 番目, ... という具合に位置をカウントしていきますが,これが曖昧な理解の原因でした.

上記のように「何番目の文字から何番目の文字を抜き出すか」と捉えるのではなく,カーソルの何番目から何番目までの間を抜き出すか と捉えれば非常に自然な関数だと思えます.
以下の例を見てみます.

const year = "西暦2023年";
const yearNumericStr = year.slice(2);
console.log(yearNumericStr);    // "2023年" と表示される

上記の例は,slice 関数に引数が一つだけ指定されています.これを,2 番目のカーソル以降の文字列を抜き出す という指示だと思えば,この関数は自然です.

続いて,引数が二つの場合を見てみます.

const year = "西暦2023年";
const yearNumericStr = year.slice(2, 6);
console.log(yearNumericStr);    // "2023" と表示される

この場合,カーソルが 2 番目の位置から 6 番目の位置まで抜き出すと捉えれば,当然 6 番目の文字は抜き出されません.

捉え方をちょっと変えるだけでストレスなく関数を利用できるようになりました.

コメント