12
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ElixirAdvent Calendar 2023

Day 18

Elixir IEx.Helpersの知ってると便利かもしれない機能

Posted at

はじめに

iexって何気なくつかってるんですが、Elixirの関数を試しに実行してみるとかくらいしか使ってませんでした。
マニュアルみてみたら、知らない機能もあったので、探索してみました。

i/1

引数に渡した値の情報を表示。protocolsが出るのはいいかも。

iex(10)> i([1,2,3])
Term
  [1, 2, 3]
Data type
  List
Reference modules
  List
Implemented protocols
  Collectable, Enumerable, IEx.Info, Inspect, List.Chars, String.Chars

i/0

タプルって、Enumerableじゃないんですよね。

iex(12)> {1,2,3}
{1, 2, 3}
iex(13)> i
Term
  {1, 2, 3}
Data type
  Tuple
Reference modules
  Tuple
Implemented protocols
  IEx.Info, Inspect
iex(14)>

open

openコマンドで、エディターを開けるらしいのでやってみます。
まず環境変数で開くエディターをセットする(VSCodeを開く場合の例)

ELIXIR_EDITOR="code --goto"

open(開きたいモジュール名)を実行

iex(2)> ls
elixir101.ex     user.ex
iex(3)> open(User)
iex(4)>

VSCodeが開きました。
.exのファイル名を指定するのではなく、モジュールで開けるところが面白いです。

image.png

recompile

これは、たまに使います。
ソースを変更した時に、recompileを実行した時に実行中のiexに反映するときに使います。

iex(4)> recompile
Generated elixir101 app
:ok
iex(5)>

runtime_info

あまり使う事ないかもしれないけど、試してみました。
いろいろな情報が表示されます。

iex(5)> runtime_info

## System and architecture

Elixir version:     1.14.4
Erlang/OTP version: 25
ERTS version:       13.2.2
Compiled for:       x86_64-pc-linux-gnu
Schedulers:         8
Schedulers online:  8

## Memory

Total:              28 MB
Atoms:              576 KB
Binaries:           43 KB
Code:               13 MB
ETS:                904 KB
Processes:          5 MB

## Statistics / limits

Uptime:             7 minutes and 23 seconds
Run queue:          1
Atoms:              19921 / 1048576 (1% used)
ETS:                28 / 8192 (0% used)
Ports:              3 / 65536 (0% used)
Processes:          66 / 262144 (0% used)

Showing topics:     [:system, :memory, :limits]
Additional topics:  [:applications]

To view a specific topic call runtime_info(topic)

iex(6)>

v/0 v/1

引数の値のヒストリーの値を返します。値を再利用するとき便利です。
v()だと直前の値になります。
知ってると何か使えそう。

iex(6)> [1,2,3]
[1, 2, 3]
iex(7)> {10,20,30}
{10, 20, 30}
iex(8)> v(6)|> IO.inspect()
[1, 2, 3]
[1, 2, 3]
iex(9)> v(7)|> IO.inspect()
{10, 20, 30}
{10, 20, 30}

break!

ブレークポイントを設定して実行して、実行中の状態を確認する事ができます。
Userモジュールのprint関数で止めてみて、userの値を表示してみました。

image.png

いろいろあるので皆さんもみてみてください。

12
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
12
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?