Slide 1

Slide 1 text

関数型まつり2025 発表資料 2025.06.14 成立するElixirの 再束縛可という選択 erin

Slide 2

Slide 2 text

2025.06.14 成立するElixirの 再束縛可という選択 関数型まつり2025 発表資料 erin

Slide 3

Slide 3 text

2025.06.14 成立するElixirの 再束縛可という選択 関数型まつり2025 発表資料 erin

Slide 4

Slide 4 text

自己紹介 よろしくお願いいたします! 名前 erin 所属 株式会社kubell(ブース出しているので覗いていただけると) 趣味 ルービックキューブ(目標:30秒切り) アイコン 以前飼っていたスタッフィー(スタッフォードシャーブルテリア)

Slide 5

Slide 5 text

目次 02 Elixirとは? 01 はじめに 03 用語の整理 05 再束縛のデメリット 04 再束縛のメリット 06 まとめ

Slide 6

Slide 6 text

目次 02 Elixirとは? 01 はじめに 03 用語の整理 05 再束縛のデメリット 04 再束縛のメリット 06 まとめ

Slide 7

Slide 7 text

目次 02 Elixirとは? 01 はじめに 03 用語の整理 05 再束縛のデメリット 04 再束縛のメリット 06 まとめ

Slide 8

Slide 8 text

はじめに   ● 関数型言語を学ぶと気になる「再代入」 ● Elixirの「再束縛」は本当に悪手?

Slide 9

Slide 9 text

はじめに   ● 関数型言語を学ぶと気になる「再代入」 ● Elixirの「再束縛」は本当に悪手?

Slide 10

Slide 10 text

はじめに   ● 関数型言語を学ぶと気になる「再代入」 ● Elixirの「再束縛」は本当に悪手?

Slide 11

Slide 11 text

はじめに   ● 関数型言語を学ぶと気になる「再代入」 ● Elixirの「再束縛」は本当に悪手?

Slide 12

Slide 12 text

Elixirとは?   ● Elixir = Erlangベースの関数型言語 ● 不変性・軽量プロセス・並行性に強い! ● オブジェクト指向言語のRubyライクな文法

Slide 13

Slide 13 text

Elixirとは?   ● Elixir = Erlangベースの関数型言語 ● 不変性・軽量プロセス・並行性に強い! ● オブジェクト指向言語のRubyライクな文法

Slide 14

Slide 14 text

Elixirとは?   ● Elixir = Erlangベースの関数型言語 ● 不変性・軽量プロセス・並行性に強い! ● オブジェクト指向言語のRubyライクな文法

Slide 15

Slide 15 text

Elixirとは?   ● Elixir = Erlangベースの関数型言語 ● 不変性・軽量プロセス・並行性に強い! ● オブジェクト指向言語のRubyライクな文法

Slide 16

Slide 16 text

用語の整理(可変と不変)   ● 可変 = 代入以外でも値が変わる ● Elixir = すべての値が不変

Slide 17

Slide 17 text

用語の整理(可変と不変)   ● 可変 = 代入以外でも値が変わる ● Elixir = すべての値が不変

Slide 18

Slide 18 text

用語の整理(可変と不変)   ● 可変 = 代入以外でも値が変わる ● Elixir = すべての値が不変

Slide 19

Slide 19 text

用語の整理(可変と不変)   ● 可変 = 代入以外でも値が変わる ● Elixir = すべての値が不変

Slide 20

Slide 20 text

用語の整理(可変と不変)

Slide 21

Slide 21 text

用語の整理(可変と不変)

Slide 22

Slide 22 text

用語の整理(可変と不変)

Slide 23

Slide 23 text

用語の整理(可変と不変)

Slide 24

Slide 24 text

用語の整理(可変と不変)

Slide 25

Slide 25 text

用語の整理(可変と不変)

Slide 26

Slide 26 text

用語の整理(可変と不変)

Slide 27

Slide 27 text

用語の整理(可変と不変)

Slide 28

Slide 28 text

用語の整理(可変と不変)

Slide 29

Slide 29 text

用語の整理(文と式)   ● 式 = 必ず値を返す ● ifもcaseも値を返す! ● Elixir = 全て式で構成されている

Slide 30

Slide 30 text

用語の整理(文と式)   ● 式 = 必ず値を返す ● ifもcaseも値を返す! ● Elixir = 全て式で構成されている

Slide 31

Slide 31 text

用語の整理(文と式)   ● 式 = 必ず値を返す ● ifもcaseも値を返す! ● Elixir = 全て式で構成されている

Slide 32

Slide 32 text

用語の整理(文と式)   ● 式 = 必ず値を返す ● ifもcaseも値を返す! ● Elixir = 全て式で構成されている

Slide 33

Slide 33 text

用語の整理(文と式)   ● 式 = 必ず値を返す ● ifもcaseも値を返す! ● Elixir = 全て式で構成されている

Slide 34

Slide 34 text

用語の整理(文と式)

Slide 35

Slide 35 text

用語の整理(文と式)

Slide 36

Slide 36 text

用語の整理(文と式)

Slide 37

Slide 37 text

用語の整理(代入と束縛)   ● 代入 = アドレスに値を格納 ● 束縛 = 値に名前を関連付ける

Slide 38

Slide 38 text

用語の整理(代入と束縛)   ● 代入 = アドレスに値を格納 ● 束縛 = 値に名前を関連付ける

Slide 39

Slide 39 text

用語の整理(代入と束縛)   ● 代入 = アドレスに値を格納 ● 束縛 = 値に名前を関連付ける

Slide 40

Slide 40 text

用語の整理(代入と束縛)   ● 代入 = アドレスに値を格納 ● 束縛 = 値に名前を関連付ける

Slide 41

Slide 41 text

用語の整理(再代入と再束縛)   ● 再代入 = 同じアドレスの値を変更 ● 再束縛 = 新しい束縛が作られる

Slide 42

Slide 42 text

用語の整理(再代入と再束縛)   ● 再代入 = 同じアドレスの値を変更 ● 再束縛 = 新しい束縛が作られる

Slide 43

Slide 43 text

用語の整理(再代入と再束縛)   ● 再代入 = 同じアドレスの値を変更 ● 再束縛 = 新しい束縛が作られる

Slide 44

Slide 44 text

用語の整理(再代入と再束縛)   ● 再代入 = 同じアドレスの値を変更 ● 再束縛 = 新しい束縛が作られる

Slide 45

Slide 45 text

用語の整理(スコープ)   ● 代入や束縛の影響範囲

Slide 46

Slide 46 text

用語の整理(スコープ)   ● 代入や束縛の影響範囲

Slide 47

Slide 47 text

用語の整理(スコープ)   ● 代入や束縛の影響範囲

Slide 48

Slide 48 text

用語の整理(スコープ)   ● 代入や束縛の影響範囲

Slide 49

Slide 49 text

用語の整理(スコープ)

Slide 50

Slide 50 text

用語の整理(スコープ)

Slide 51

Slide 51 text

用語の整理(スコープ)

Slide 52

Slide 52 text

用語の整理(スコープ)

Slide 53

Slide 53 text

用語の整理(スコープ)

Slide 54

Slide 54 text

用語の整理(スコープ)

Slide 55

Slide 55 text

用語の整理(スコープ)

Slide 56

Slide 56 text

用語の整理(スコープ)

Slide 57

Slide 57 text

Rubyとの差異

Slide 58

Slide 58 text

Rubyとの差異

Slide 59

Slide 59 text

Rubyとの差異

Slide 60

Slide 60 text

Rubyとの差異

Slide 61

Slide 61 text

再掲   ● Elixirの「再束縛」は本当に悪手?

Slide 62

Slide 62 text

再掲   ● Elixirの「再束縛」は本当に悪手?

Slide 63

Slide 63 text

再掲   ● Elixirの「再束縛」は本当に悪手?

Slide 64

Slide 64 text

再掲   ● Elixirの「再束縛」は本当に悪手?

Slide 65

Slide 65 text

再束縛のメリット   ● 計算途中の状態の名前付けに頭を悩ます必要なし ● 処理の順番を変更する際の修正量が少なく済む

Slide 66

Slide 66 text

再束縛のメリット   ● 計算途中の状態の名前付けに頭を悩ます必要なし ● 処理の順番を変更する際の修正量が少なく済む

Slide 67

Slide 67 text

再束縛のメリット   ● 計算途中の状態の名前付けに頭を悩ます必要なし ● 処理の順番を変更する際の修正量が少なく済む

Slide 68

Slide 68 text

再束縛のメリット   ● 計算途中の状態の名前付けに頭を悩ます必要なし ● 処理の順番を変更する際の修正量が少なく済む

Slide 69

Slide 69 text

再束縛のメリット

Slide 70

Slide 70 text

再束縛のメリット

Slide 71

Slide 71 text

再束縛のメリット

Slide 72

Slide 72 text

再束縛のメリット

Slide 73

Slide 73 text

再束縛のメリット

Slide 74

Slide 74 text

再束縛のメリット

Slide 75

Slide 75 text

再束縛のメリット

Slide 76

Slide 76 text

再束縛のデメリット   ● 再代入 = バグの温床 ● すべての変化に注目が必要に ● Elixirではどうなのか?

Slide 77

Slide 77 text

再束縛のデメリット   ● 再代入 = バグの温床 ● すべての変化に注目が必要に ● Elixirではどうなのか?

Slide 78

Slide 78 text

再束縛のデメリット   ● 再代入 = バグの温床 ● すべての変化に注目が必要に ● Elixirではどうなのか?

Slide 79

Slide 79 text

再束縛のデメリット   ● 再代入 = バグの温床 ● すべての変化に注目が必要に ● Elixirではどうなのか?

Slide 80

Slide 80 text

再束縛のデメリット

Slide 81

Slide 81 text

再束縛のデメリット

Slide 82

Slide 82 text

再束縛のデメリット

Slide 83

Slide 83 text

再束縛のデメリット

Slide 84

Slide 84 text

再束縛のデメリット

Slide 85

Slide 85 text

まとめ   ● Elixirの再束縛は合理的 ● 不変・式・スコープの合わせ技で成立

Slide 86

Slide 86 text

まとめ   ● Elixirの再束縛は合理的 ● 不変・式・スコープの合わせ技で成立

Slide 87

Slide 87 text

まとめ   ● Elixirの再束縛は合理的 ● 不変・式・スコープの合わせ技で成立

Slide 88

Slide 88 text

まとめ   ● Elixirの再束縛は合理的 ● 不変・式・スコープの合わせ技で成立

Slide 89

Slide 89 text

まとめ   ● Elixirの再束縛は合理的 ● 不変・式・スコープの合わせ技で成立

Slide 90

Slide 90 text

まとめ   ● Elixirの再束縛は合理的 ● 不変・式・スコープの合わせ技で成立

Slide 91

Slide 91 text

まとめ   ● Elixirの再束縛は合理的 ● 不変・式・スコープの合わせ技で成立

Slide 92

Slide 92 text

Thank you ご清聴ありがとうございました 関数型まつり2025 発表資料