-
-
Notifications
You must be signed in to change notification settings - Fork 225
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(string): 文字列の分解と結合 #187
Conversation
source/basic/string/README.md
Outdated
この2つを合わせれば、区切り文字を`、`から`,`へ変換する処理を次のように書くことができます。 | ||
|
||
```js | ||
var string = "赤、青、緑".split("、").join(","); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
split joinは典型的な使い方だと思うのでセットにした。
もう少し見た目的に分かりやすい例があると良さそう?
、
と,
似てて分かりにくいかも
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
var string = "赤・青・緑".split("・").join(",");
ではどうだろうか
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
・
たしかに良さそうですね。
ありがとうございます
source/basic/string/README.md
Outdated
JavaScriptにおいて、メソッド名に`CodePoint`が含まれているものやIteratorを扱うもの**以外**は、すべてCode Unit単位で扱われます。 | ||
つまり、`split`メソッドもCode Unit単位で文字列を分解しています。 | ||
|
||
次のコードを見ると、`split("")`は**文字**単位で分解するのではなく、**Code Unit**単位で分解していることが分かります。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
単位ってことばUnitと被るのでよくなさそう。
Code Unitごとに?かな
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
C++11: Syntax and Feature#basic.fundamental
だと
wchar_t型のひとつのオブジェクトは、実装がサポートするロケールの文字セットの任意の一文字を表現できる。
wchar_tは、少なくとも、規格上はそうなっている。しかし、現実的には、そのような固定長の文字コードは、サポートするロケールと文字セットを大幅に限定しなければ、存在しない。たとえば、ある実装では、wchar_tは16bitのUTF-16の1単位を表現するようになっている。しかし、UTF-16の1単位は、Unicodeの文字セットの任意の一文字を表現できない。ある実装では32bitのUTF-32の1単位を表現するようになっているが、UTF-32も、1単位で任意の1文字を表せる文字のエンコード方式ではない。
ともうすこしあっさりした表現を使っていますね。
console.log(strings); // => ["a", "b", "c", "d"] | ||
``` | ||
|
||
### `String#split`と空文字 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ここは、この章の最初に 文字列、文字、Code Unit、Code Pointの説明を簡単にいれるので、それ前提となってる。
以下はまだちゃんと書いてない。(おおまかな概念分けはこのぐらいでやりたい感じ。あとは参考文献を調査して言葉を揃える)
文字列
"文字"からなる順序を持った集合。
JavaScriptでは文字列リテラルで表現できる。
"文字列"
文字
- 文字列を構成する要素
- 視覚的に認識している"文字"
- (UnicodeにおいてはAbstract characterだけど、概念が難しいので言葉は出さない)
["文", "字", "列"]
Unicode
ECMAScriptでは文字の表現にUnicodeを採用し、
文字のエンコーディングにUTF-16を採用している。
Code Point
それぞれの文字に対して割り当てられた数値のこと
(この数値を決めているのがUnicode)
ES2015からは \u{12345}
でCode Pointを文字列リテラルに書くことができる。
[ 25991, 23383, 21015 ]
Code Unit
UTF-16でエンコードされたbitのシーケンス。
JavaScriptでは、文字列を内部的にCode Unitで扱う。
Code Unitは16bitの範囲しか表現できないため、
1つのCode Pointを1つのCode Unitで表現できない場合がある。
これはサロゲートペアと呼ばれ、high-suroogate code unitとlow-surrogate code unitの2つのcode unitで、1つのCode Pointを表現する。
Code Pointも文字列リテラルに "\u1234"
のようにしてかくことができる。
JavaScriptでは基本的に文字列はCode Unitごとに扱う。
次の2つは例外として、Code Pointごとに扱う。
- Iterator
- メソッドに
CodePoint
という名前を含むもの
Combining character
省く
文字数
JavaScriptにおいてString#lengthはその文字列を構成するCode Unitの個数を返す。
そのため、3文字に見えていても、lengthは3以上(Code Unitが3つ以上)の場合があります。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Combining character
省く
あっ・・・。
まあ書き出せば長くなりそうだしやむを得ないかな・・・?
#121
String#split
Array#join