文字列、、、
あまりにも基本で、何を書いていいのやら、という感じもします。
Webページもプログラムも、全て文字列でできているといえますので、様々な場面での基本中の基本となるものです。
文字列とは、文字を連ねてプログラム上で管理する仕組み、といえるでしょう。
1 2 |
let a = '12345'; let b = 12345; |
変数a に入る値は、プログラムの上では、1万2千3百4十5 ではなく、いちにさんよんご、という文字列になります。
変数b に入る値は、数値の 1万2千3百4十5 を表します。
もちろん、数値を文字として扱うだけではなく「ABCDE」とか「あいうえお」とか扱うことができます。
1 2 |
let c = 'ABCDE'; let d = "あいうえお"; |
シングルクウォート/ダブルクウォート
let c の例のように、文字列は、シングルクウォートで囲って定義することもできますし、let d の例のように、ダブルクウォートで囲って宣言することもできます。
この2つの差は、内部で、クウォートを扱いやすいからです。
1 2 |
let e = 'ダブルクウォート["]はダブルクォーテーションとも呼びます。'; let f = "シングルクウォート[']はシングルクォーテーションとも呼びます。"; |
文字列としてダブルクウォートを使いたい場合は、シングルクウォートで囲み、逆なら逆を使うということです。どちらも使わないのなら、どちらを使ってもよいです。
HTML では、文字として ダブルクォートを使うことが多いので、JavaScriptでは、事実上の標準としてシングルクウォートが文字列を定義する記号(リテラル)として使われます。
このあたりは、以前も「リテラル」のところで紹介しましたね。
改行コードや、タブコードなど
次のように特殊な文字を扱うことができます。
1 2 |
let g = 'ABC\n123\t456'; console.log(g); |
出力結果は次の通り
1 2 |
ABC 123 456 |
\nで、改行コード(改行文字)、\t でタブコード(タブ文字)を、表します。他にも制御文字というものをいろいろ扱えると思いますが、実際には、改行コード、タブコード程度がわかれば問題ないです。
空文字
少しむずかしい表現ですが、文字列が入っていないことを示すデータがあり、これを空文字といいます。
空文字は、文字列は入っていないのですが、文字列データの入れ物は存在するという状態です。
1 |
let h = ''; |
こんな風に表現されます。console.log で出力しても何も表示されませんが、データはあるという状態になります。
切り取ったりして加工する
さて、文字を切り取ってみましょう。
1 2 3 |
let value1 = 'ABCDEF'; console.log(value1.slice(1,3)); // BC と出力される console.log(value1.slice(3,5)); // DE と出力される |
slice は指定の位置の値を切り取ってくれる機能です。こういう機能をメソッドと呼ぶので これは、sliceメソッドの機能を使っているということになります。
文字列は、先頭から番号をもっていて、それは、ゼロが開始です。
A|B|C|D|E|F
0 1 2 3 4 5
sliceの機能で2つの数値を指定することができ(引数といいます)、BCが出力されているところでは、開始位置 1 から、終了位置 3 の一つ前 の2 までの値を切り取って出力しています。
...なんで、終了位置の1つ前の値を指定するのかは、さっぱりわかりませんが、もともとのJavaScriptの作りがそうなっているようです。
sliceは負の値も指定することができる
1 |
console.log(value1.slice(-3)); // DEF と出力される |
このようにして後ろから切り取ることができます。
slice みたいなものがいろいろある。
sliceとそっくりな機能としてsubstringというものがあります。これは負の値を受け付けないようです。また、substr という、文字の位置ではなく、文字の長さで指定するようなものがあります。
何を使えばいいのか、ややこしいところですし、名前もなんだか直感的ではない感じがして、わけわかりません。
sliceとsubstringとsubstrが、何がどう違うのか、という細かい違いなどは次のページなどが参考になるでしょう。(検索してみつけました)
結局文字列を先頭から、後ろから、あるいは、途中の指定位置から切り取ったりするためには、何をつかえばいいかという迷いはあるわけです。
標準機能が使いにくければ、自作して使いやすいものにすることもできる
標準機能だとどうしても使い勝手が悪いものがありますので、後々、関数という機能を紹介していったあとに、自作関数を作って使い勝手をよくしていく、ということが根本的な解決策になっていくでしょう。
作り方はともかくとして、私が作っている関数の部品(ライブラリ)を紹介しておきます。
このライブラリでは、多くの部品を用意しているのですが、今回のものに関係するのは次のようなものになります。
4088行目のsubstrIndex関数
4146行目のsubstrLength関数
4202行目のstart関数
4362行目のend関数
こんなふうなものを自作することによって、標準的な命令よりも、より使いやすい命令を作り上げて行くことが可能です。自分で作れるようになると、いろいろな機能を作り出せて、プログラミングを自在に操っている感じになりますよ。
プログラミングが現代の魔法のようなものだとしたら、すでに存在する魔法をとなえるだけではなく、自分で魔法を作り上げてそれを使いこなすということもできるようになっていきます。
プログラミングの腕をあげると、どんどん、行えることが広がって楽しいですよ。
さらに文字列についてできることを調べるには
文字列を紹介し、slice の機能について紹介してみました。
slice以外にも文字列に関しては非常にたくさんあります。
やりたいことを手軽に実現するためには、いろいろな機能をつかいこなすために、どんどん調べていかなければいけません。
JavaScript の教科書的な役割を果たしてくれている、MDN にString に関する様々な機能の一覧がありますので、必要ならここをどんどん調べて、自分の技術を磨いておいてください。
ということで、文字列については、こんなところです。