LoginSignup
2
0

Elixirのモジュールについて①

Last updated at Posted at 2024-04-02

Elixir勉強中の新高専生、Nyayutaです。
今回は、技術評論社より出版されている「Elixir実践入門」の4章、モジュールについて自分なりに嚙み砕いたものを書いてみました。
間違えているところがあればご指摘くださると幸いです。

モジュールとは

モジュールは、いくつかのプログラムをまとめて、それに名前を付けたもののようです。
自分はMinecraftを触っていて、データパックのfunctionみたいだな、と思うと、かなり直感的に飲み込むことができました。
p64のモジュール例を用いて書きます。

defmodule AwesomeModule do
    def greet(name) do
      "#{hello()} #{name}"
    end

    def msg(name \\ "Elixir") do
      "#{name} is beautiul."
    end

    defp hello do
      "Hello!"
    end
end

実行するときは
AwesomeModule.greet()
AwesomeModule.msg()
の形で実行。
これを日本語に書き換えると

このモジュールを「AwesomeModule」って名前にするよ!AwesomeModuleが実行されたとき

greet(なんとか)って形なら実行するよ!
"hello"を実行 ー連結ー (なんとか) と出力する
おわり

msg(なんとか)って形なら実行するよ!
(なんとか) ー連結ー is beautiful と出力する
おわり

helloの中身だよ!
"Hello!"と出力する
おわり

モジュールはこれで全部だよ!

のような感じです。ちょっと阿保らしく見えるかもしれませんが、わかりやすくなりました。
つまり、greet(なんとか)が実行されると、
Hello! なんとか
msg(なんとか)が実行されると、
(なんとか) is beautiful.
と出力されるモジュールのようです。

()の中身は自由ですが、初期設定ではElixirとなっているみたいです。
モジュール名は単語の頭文字を大文字にする"キャメルケーズ"で定義するようです。

無名関数

先ほどのdefやdefpで定義する関数を名前付き関数と呼ぶのに対して、fnを使って定義する関数を無名関数と呼ぶそうです。
これも本書の例を用いてみます。

f = fn x -> x * 2 end

これを実行するときは
f.()の形で実行。
日本語に直します。

fっていう関数だよ!
()の中身をχとする
χ×2して出力する
モジュールはこれで全部だよ!

つまり、()の中身を二倍して出力するモジュールみたいですね。
このように、日本語にすると直感的に理解することができるようになりました。

標準モジュール

先ほどは自作のモジュールでしたが、Elixirにはよく使うモジュールは最初から入ってるようです。
挙げられている例は
・String
・File
・IO
・Enum
・Map
・Stream
の六種類。一つずつ簡潔に書くと

String

Stringは文字列に対して干渉するモジュール。
関数の例は

length:長さを取得

String.length()

という感じで使い、()の中の文字数を教えてくれます。

contains?:指定された文字を含んでいるか調べる

String.contains?("なんとか","かんとか")

という感じで使い、なんとかの中にかんとかが含まれているか調べてくれます。
かんとかは複数指定でき、そのうちの一つでもあればtrueを、一切なければfalseを返してくれます。

upcase:文字を大文字にする

String.upcase()

という感じで使い、()の中をすべて大文字にして出力します。

downcase:文字を小文字にする

String.downcase()

という感じで使い、()の中をすべて小文字にして出力します。

capitalize:最初の文字だけ大文字にする

String.capitalize()

という感じで使い、()の中の文字列の最初の文字だけ大文字にして出力します。

replace:文字を置き換える

String.replace("なんとか" "かんとか" "うんたら" "その他設定")

「なんとか」に含まれる「かんとか」というものを「うんたら」に変えて出力します。
その他設定にはglobalがあり、trueならすべて、falseなら最初に出てきたものだけ置換します。省略可能。

reserve:文字列を反転する

String.reserve()

という感じで使い、文字列を逆順にして出力します。

split:文字列を分割する

split/1

半角スペースや改行などで分割します。

String.split("なんとか かんとか")

だと、"なんとか","かんとか"と出力されます

split/3

より細かい設定ができます。

String.split("なんとか","かんとか","その他設定")

その他設定には
・parts:何個に分けるか
・trim:結果から空の文字列を消す
などが入る。

File

Fileはその名の通りファイルに対して干渉するモジュール。
関数の例は

read:ファイルを読み込む

ファイルからバイナリデータを読み込むコマンド。
コマンドプロンプトのcatコマンドみたいなイメージ

File.read(なんとか)

"なんとか"というファイルが読み込まれます。
失敗するとerrorとその理由が出ます。

write:ファイルに書き込む

ファイルにバイナリデータを書き込むコマンド。

File.write("ファイル名","なんとか")

という感じで使う。

最後に

かなり中途半端ですが、これ以上書くと量が多くなってしまうので、一回切ります。
もし、時間があれば、今度投稿されるであろう②も読んでくださると幸いです。
改めて、拙い文章ですが、読んでくださりありがとうございました!

2
0
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
2
0