[[📚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)|ワイルドカード]]