LoginSignup
3
1

こんにちは!
プログラミング未経験文系出身、Elixirの国に迷い込んだ?!見習いアルケミストのaliceと申します。
今回はString.codepoints/1 と String.graphemes/1 の比較を比較して学んだことをまとめます。2024/6/16に開催したイベントpiyopiyo.ex #35:もくもく作業タイムの成果です。

目的

String.codepoints/1String.graphemes/1 の違いを理解する

前提

String.codepoints/1 と String.graphemes/1それぞれに対して下記の変数を使用します。

greeting = "Hello World!"
string = "é"

"é"はU+0065 と U+0301 の結合文字列です。1

実行環境

Windows 11 + WSL2 + Ubuntu 22.04
Elixir v1.16.2-otp-26
Erlang v26.0.2

結果

String.codepoints/1はUTF-8のコードポイントごとに分割

結合文字列なし

String.graphemes/1と結果は同じです。

String.codepoints(greeting)
["H", "e", "l", "l", "o", " ", "W", "o", "r", "l", "d", "!"]

結合文字列あり

結合文字列はコードポイントが2つなので、リストの要素数は2になります。

String.codepoints(string)
["e", "́"]

String.graphemes/1はユーザーが文字として認識する単位ごとに分割

ユーザーが文字として認識する単位のことを書記素(grapheme)と呼びます。2

結合文字列なし

String.codepoints/1と結果は同じです。

String.graphemes(greeting)
["H", "e", "l", "l", "o", " ", "W", "o", "r", "l", "d", "!"]

結合文字列あり

結合文字列は書記素が1つなので、リストの要素数が1になります。

String.graphemes(string)
["é"]

~Elixirの国のご案内~

↓Elixirって何ぞや?と思ったらこちらもどぞ。Elixirは先端のアレコレをだいたい全部できちゃいます:laughing::sparkles::sparkles:

↓ゼロからElixirを始めるなら「エリクサーチ」がおすすめ!私もエンジニア未経験から学習中です。

We Are The Alchemists, my friends!:bouquet:3
Elixirコミュニティは本当に優しくて温かい人たちばかり!
私が挫折せずにいられるのもこの恵まれた環境のおかげです。
まずは気軽にコミュニティを訪れてみてください。4

  1. Elixirは文字列をエンコードするためにUTF-8を使用している https://hexdocs.pm/elixir/1.16.2/String.html#module-utf-8-encoded-and-encodings

  2. Elixirにおける書記素とは https://hexdocs.pm/elixir/1.16.2/String.html#module-grapheme-clusters

  3. @torifukukaiouさんのAwesomeな名言をお借りしました。Elixirコミュニティを一言で表すと、これに尽きます。

  4. @kn339264さんの素敵なスライドをお借りしました。Elixirコミュニティはいろんな形で活動中!

3
1
0

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
1