[[📚Elixir Getting Started]]を読んでの学習メモ。
> [!attention]
> 日本語版のサイトも存在するが、情報がかなり古そうなので英語版を参考にする。
## Introduction
https://elixir-lang.org/getting-started/introduction.html
### [[📜ElixirをWindowsにインストール]]
```console
$ scoop install erlang
Installing 'erlang' (25.3.2.4) [64bit] from main bucket
otp_win64_25.3.2.4.exe (123.5 MB) [===============================================================================================================================================] 100%
Checking hash of otp_win64_25.3.2.4.exe ... ok.
Extracting dl.7z ... done.
Running installer... done.
Linking ~\scoop\apps\erlang\current => ~\scoop\apps\erlang\25.3.2.4
Creating shim for 'erl'.
Creating shim for 'erlc'.
Creating shim for 'escript'.
Creating shim for 'werl'.
Creating shortcut for Erlang (werl.exe)
Running post_install script...
'erlang' (25.3.2.4) was installed successfully!
'erlang' suggests installing 'extras/vcredist2013'.
$ scoop install elixir
Installing 'elixir' (1.15.4) [64bit] from main bucket
v1.15.4.zip (6.5 MB) [========================================================================================] 100%
Checking hash of v1.15.4.zip ... ok.
Extracting v1.15.4.zip ... done.
Linking ~\scoop\apps\elixir\current => ~\scoop\apps\elixir\1.15.4
'elixir' (1.15.4) was installed successfully!
'elixir' suggests installing 'erlang'.
```
`iex`コマンドで対話型。
### Hello World
`simple.exs`
```elixir
IO.puts("Hello world from Elixir")
```
> [!info]
> [[Elixirのexファイルとexsファイル]]は用途が異なる。
```console
$ elixir simple.exs
Hello world from Elixir
```
### 開発環境構築
[[Neovim]]と[[VSCode]]で環境構築した。
- [[NeovimでElixirの開発環境構築]]
- [[VSCodeでElixirの開発環境構築]]
> [!note]
> [[IntelliJ IDEA]]は #2023/07/29 時点で2023.2に対応されてなさそうだったのでスキップ
## Typespecs and behaviours
https://elixir-lang.org/getting-started/typespecs-and-behaviours.html
まずは、[[📜ElixirにDialyxirを導入して静的型解析してみた]]。
それ以外は一旦保留
## Basic types
https://elixir-lang.org/getting-started/basic-types.html
- [[アリティ]]
- [[アトム]]
- stringはダブルクォーテーションで囲み、[[UTF-8]]
- [[Elixirでテンプレートリテラルのように変数を含んだ文字列を作成]]
- [[IO.puts]]
- `String.length/1`で長さ
- [[匿名関数 (Elixir)|匿名関数]]
- [[名前付き関数 (Elixir)|名前付き関数]]との違いを意識する
- [[アリティ]]で区別はされる
- [[リスト (Elixir)|リスト]]
- 型は自由
- [[連結リスト]]なので注意
- 型が自由だから[[連結リスト]]にせざるえない感... 型が1種類のものが欲しいような...
- `++`や`--`で追加や削除
- [[Elixir]]は[[イミュータブル]]
- [[Elixirのリストから要素を取得]]
- シングルクオーテーションとダブルクォーテーションは別物
- [[タプル (Elixir)]]
- [[Elixirでリストとタプルはどちらを使うべきか]]
- [[Elixirにおけるsizeとlengthの違い]]
## Basic operators
- [[Elixirで文字列の結合]]
- [[Elixirで2種類あるboolean operatorの違い]]
- [[Python]]みたい
- `raise()`でRuntimeErrorによる例外?
> We say these operators perform structural comparison. For more information, you can read our documentation on Structural vs Semantic comparisons.
## Pattern matching
- [[パターンマッチ (Elixir)]]
```elixir
> [head | tail] = 1..10 |> Enum.to_list
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
> head
1
> tail
[2, 3, 4, 5, 6, 7, 8, 9, 10]
```
- [[ピン演算子]]
- [[ワイルドカード (Elixir)|ワイルドカード]]