もやもやエンジニア

IT系のネタで思ったことや技術系のネタを備忘録的に綴っていきます。フロント率高め。

Elixir 入門 その5 - Binaries, strings and char lists

UTF-8 and Unicode

iex> string = "hełło"
"hełło"

# byte sizeは7。ł以外のコードポイントは0 ~ 255以内 = 1byteだけど ł は322で表現するためには2byte分必要だから
iex> byte_size string
7

# Stringの長さとしては5文字
iex> String.length string
5

# ? でcharのコードポイントを確認できる
iex> ?h
104

iex> ?ł
322

Binaries (and bitstrings)

  • <<>> を使うとbinaryを定義することができる
iex> bnry = <<1,2,3,4>>
  • Stringを <> でconcatすることは実はbinaryを <> としているのと同意
iex> <<0, 1>> <> <<2, 3>>
<<0, 1, 2, 3>>

# なのでstringともconcatできちゃう
iex> "hełło" <> <<0>>
<<104, 101, 197, 130, 197, 130, 111, 0>>
  • パターンマッチ
iex> <<0, 1, x>> = <<0, 1, 2>>
<<0, 1, 2>>

iex> x
2

Char lists

  • シングルクォートで囲むとstringではなく、char listとなる
iex> 'hełło'
[104, 101, 322, 322, 111]

iex> is_list 'hełło'
true

# iex上ではList内の文字がAsciiコード内であればstringのように表示される。
iex> 'hello'
'hello'
  • to_string/1 と to_char_list/1 を使うと char list と string 間のコンバートができる
iex> to_char_list "hełło"
[104, 101, 322, 322, 111]

iex> to_string 'hełło'
"hełło"

# atom も文字列に変換できる
iex> to_string :hello
"hello"

# integerも同じく
iex> to_string 1
"1"