Stringモジュールで遊んでみたシリーズ⑨ -String.to_existing_atom ~ String.trim の紹介

こんにちは！
プログラミング未経験文系出身、Elixirの国に迷い込んだ？！見習いアルケミストのaliceと申します。
今回はStringモジュールについて学んだことをまとめます。

# 目次
1.[Stringモジュールで遊んでみたシリーズ① -String.at ~ String.chunk の紹介](https://qiita.com/Alicesky2127/items/47fffc38711d7369beee)
2.[Stringモジュールで遊んでみたシリーズ② -String.codepoints ~ String.ends_with? の紹介](https://qiita.com/Alicesky2127/items/5db34c69993d35b8f3a7)
3.[Stringモジュールで遊んでみたシリーズ③ -String.equivalent? ~ String.last の紹介](https://qiita.com/Alicesky2127/items/37aa8e62e8e1d5fef3b6)
4.[Stringモジュールで遊んでみたシリーズ④ -String.length ~ String.next_grapheme の紹介](https://qiita.com/Alicesky2127/items/e3fa2092a67cb9f6ec9c)
5.[Stringモジュールで遊んでみたシリーズ⑤ -String.next_grapheme_size ~ String.printable? の紹介](https://qiita.com/Alicesky2127/items/a315148e966c9f103a7c)
6.[Stringモジュールで遊んでみたシリーズ⑥ -String.replace ~ String.replace_suffix の紹介](https://qiita.com/Alicesky2127/items/94a77afe270587ed21a9)
7.[Stringモジュールで遊んでみたシリーズ⑦ -String.replace_trailing ~ String.split の紹介](https://qiita.com/Alicesky2127/items/1a8e9c92fa758d0b1337)
8.[Stringモジュールで遊んでみたシリーズ⑧ -String.split_at ~ String.to_charlist の紹介](https://qiita.com/Alicesky2127/items/40e74cd622653796df5c)
9.Stringモジュールで遊んでみたシリーズ⑨ -String.to_existing_atom ~ String.trim の紹介(本記事)
10.[Stringモジュールで遊んでみたシリーズ10 -String.trim_leading ~ String.valid? の紹介](https://qiita.com/Alicesky2127/items/b8310a3f5fc5b040ca78)



# 目的 
Stringモジュールに含まれる関数を触って機能を理解したい

https://hexdocs.pm/elixir/String.html

## 実行環境
Windows 11 ＋ WSL2 ＋ Ubuntu 22.04
Elixir v1.17.3
Erlang v27.0

# String.to_existing_atomとは
`String.to_atom(string)`は`string`を既存のアトムに変換するか、既存のアトムが存在しない場合は例外を返します。

## 例
```diff_elixir:iex
:my_atom #アトムの作成
String.to_existing_atom("my_atom")
```
```
:my_atom
```

既存のアトムが存在しない場合
```diff_elixir:iex
String.to_existing_atom("not_exist")
```
```
** (ArgumentError) errors were found at the given arguments:

  * 1st argument: not an already existing atom

    :erlang.binary_to_existing_atom("not_exist", :utf8)
    #cell:xpo7pr43vdebz6nd:1: (file)
```


# String.to_floatとは
`String.to_float(string)`は浮動小数点の文字列`string`をfloat型に変換します。

## 例
```diff_elixir:iex
String.to_float("1.0")
```
```
1.0
```

下記の例の末尾の`e+2`は指数表現、すなわちこの場合は10の2乗。
```diff_elixir:iex
String.to_float("2.2017764e+2")
```
```
220.17764
```

`string`が浮動小数点の文字列以外の場合は例外を返す。
```diff_elixir:iex
String.to_float("1")
```
```
** (ArgumentError) errors were found at the given arguments:

  * 1st argument: not a textual representation of a float

    :erlang.binary_to_float("1")
    #cell:wgroqup7i7jxae2p:1: (file)
```
### 余談
`string`が浮動小数点の文字列以外の場合は、`Float.parse`を使用+タプルのパターンマッチを使用のこと。
```diff_elixir:iex
{x, y} = Float.parse("1")
x
```
```
1.0
```

# String.to_integerとは(to_integer/1)
`String._integer(string)`は整数の文字列`string`をInteger型に変換します。

## 例
```diff_elixir:iex
String.to_integer("2")
```
```
2
```

`string`が整数の文字列以外の場合は例外を返す。
```diff_elixir:iex
String.to_integer("2.0")
```
```
** (ArgumentError) errors were found at the given arguments:

  * 1st argument: not a textual representation of an integer

    :erlang.binary_to_integer("2.0")
    #cell:vvvgtwob2xv4qmuc:1: (file)
```
### 余談
`string`が整数の文字列以外の場合は、`Integer.parse`を使用+タプルのパターンマッチを使用のこと。
```diff_elixir:iex
{a, b} = Integer.parse("2.0")
a
```
```
2
```


# String.to_integerとは(to_integer/2)
`String._integer(string, base)`は整数の文字列`string`について、`base`を基数とみなしたうえで変換します。
この関数の目的は10進数以外で表現された整数の文字列を、10進数に変換することです。

## 例
```diff_elixir:iex
String.to_integer("3FF", 16) # 16進数の3FF(=10進数の1023)とみなす
```
```
1023
```


# String.trimとは(trim/1)
`String.trim(string)`は`string`の先頭と末尾にあるUnicode空白にあたる文字を全て削除した文字列を返します。

## 例
下記は以下の空白文字を含んでいる
- `\n` LF(Line Feed)のエスケープシーケンス
- `\r` CR(Carriage return)エスケープシーケンス
- ` ` 半角スペース

```diff_elixir:iex
String.trim("\n abc\r  ")
```
```
"abc"
```

# String.trimとは(trim/2)
`String.trim(string, to_trim)`は`string`の先頭と末尾にある`to_trim`を全て削除した文字列を返します。
## 例
先頭と末尾の`"a"`が削除されるため`"  abc  "`だけが残る
```diff_elixir:iex
String.trim("a  abc  a", "a")
```
```
"  abc  "
```




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

https://qiita.com/piacerex/items/09876caa1e17169ec5e1

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

https://elixir-lang.info/topics/entry_column


↓[We Are The Alchemists, my friends!:bouquet:](https://qiita.com/torifukukaiou/items/6bcd5bbb80df9e594e9e "Awesome-san's Awesome article")[^10]
Elixirコミュニティは本当に優しくて温かい人たちばかり！
私が挫折せずにいられるのもこの恵まれた環境のおかげです。
まずは気軽にコミュニティを訪れてみてください。[^11]


https://speakerdeck.com/elijo/elixirkomiyunitei-falsebu-kifang-guo-nei-onrainbian




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


[^11]: @kn339264さんの素敵なスライドをお借りしました。Elixirコミュニティはいろんな形で活動中！