6
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 3 years have passed since last update.

Enjoy Elixir #004 Modules and functions

Last updated at Posted at 2020-06-23
1 / 10

はじめに

  • KFIEという近畿大学産業理工学部の情報系コミュニティがあります
  • 最近は、毎週火曜日にLT会をやっているそうです
  • 私が学生だったのはもうずいぶん昔のことなのですが、参加させてもらっています
  • 毎週、5分間時間をもらって、Elixirいいよ! を伝えていきたいとおもいます
  • 今日は以下を学びます
    • Modules and functions
  • A journey of a thousand miles begins with a single step.
  • この記事はElixirを触るのがはじめてという方に向けて書いています

もくじ

001 mix new, iex -S mix, mix format
|> 002 型
|> 003 Pattern matching
|> 004 Modules and functions
|> 005 Pipe operator and Enum module
|> 006 HTTP GET!
|> 007 Flow
|> 008 AtCoderを解いてみる
|> 999 Where to go next


準備

$ mix new hello
$ cd hello

はじめてのモジュール

  • ここまでにすでにいくつかの最初から用意されているモジュールをさわっています
  • 今回は自作のモジュールを作ってみましょう
lib/math.ex
defmodule Math do
  def sum(a, b) do
    a + b
  end
end
  • Math.sum/2という関数を定義しています
    • 関数のあとの(/数字)は引数の数です
$ iex -S mix

iex> Math.sum(1, 2)
3

Private functions

lib/math.ex
defmodule Math do
  def sum(a, b) do
    do_sum(a, b)
  end

  defp do_sum(a, b) do
    a + b
  end
end
iex> recompile

iex> Math.sum(1, 2)
3

iex> Math.do_sum(1, 2)
** (UndefinedFunctionError) function Math.do_sum/2 is undefined or private
    (hello 0.1.0) Math.do_sum(1, 2)

ガード

lib/fizz_buzz.ex
defmodule FizzBuzz do
  def number(n) when rem(n, 3) == 0 and rem(n, 5) == 0 do
    "Fizz Buzz"
  end

  def number(n) when rem(n, 3) == 0 do
    "Fizz"
  end

  def number(n) when rem(n, 5) == 0 do
    "Buzz"
  end

  def number(n), do: n
end
  • 上から最初にマッチする関数が実行されます
iex> recompile

iex> 1..15 |> Enum.map(&FizzBuzz.number/1)
[1, 2, "Fizz", 4, "Buzz", "Fizz", 7, 8, "Fizz", "Buzz", 11, "Fizz", 13, 14,
 "Fizz Buzz"]

デフォルト引数

lib/concat.ex
defmodule Concat do
  def join(a, b, sep \\ " ") do
    a <> sep <> b
  end
end
  • \\の後ろにデフォルト引数を指定できます
iex> recompile

iex> Concat.join("Hello", "World")
"Hello World"

iex> Concat.join("Hello", "World", "_")
"Hello_World"

参考


Wrapping Up

  • 今日のポイントは、defmoduledefです
  • 次回は、すでにちょいちょいでてきていますが、Pipe operator and Enum moduleを詳しくみていきたいとおもいます
    • 来週を待ちきれない方は、リソースやコミュニティの情報を Where to go next にまとめていますのでダイブしてください!
  • Enjoy!!!
6
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
6
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?