Submit Search
Elixirだ 第1回強化版 前半
7 likes
3,616 views
Joe_noh
福岡支社内Elixir勉強会前半の資料
Technology
Read more
1 of 60
Download now
Downloaded 12 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
More Related Content
PDF
Elixirだ 第1回強化版 後半
Joe_noh
PDF
Elixirだ 第2回
Joe_noh
PDF
Elixirだ 第1回 - 基礎だ -
Joe_noh
PDF
すごいHaskell読書会#1 in 大阪
yashigani
PDF
PCさえあればいい。
bleis tift
PDF
Boost Tour 1.50.0
Akira Takahashi
KEY
とびだせHaskellの森1
Shoko Sasaki
PPTX
詳説ぺちぺち
do_aki
Elixirだ 第1回強化版 後半
Joe_noh
Elixirだ 第2回
Joe_noh
Elixirだ 第1回 - 基礎だ -
Joe_noh
すごいHaskell読書会#1 in 大阪
yashigani
PCさえあればいい。
bleis tift
Boost Tour 1.50.0
Akira Takahashi
とびだせHaskellの森1
Shoko Sasaki
詳説ぺちぺち
do_aki
What's hot
(19)
PDF
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
Jun Nogata
PDF
Mac_Terminal_ver1.0
Satoshi Kume
PPTX
F#のすすめ
Hiromu Sasaki
KEY
Perlで伝統芸能
hitode909
PDF
Goの文法の実例と解説
Ryuji Iwata
PDF
知って得する標準関数の使い方
Soudai Sone
PDF
PHP5.5新機能「ジェネレータ」初心者入門
kwatch
PDF
Pythonで始めるDropboxAPI
Daisuke Igarashi
PDF
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Kenta USAMI
PDF
WebAPIではじめるphp入門
Hiroaki Murayama
PDF
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
PDF
Perl勉強会#2資料
Kiyo Tsunezumi
PDF
Erlangやってみた
ina job
ODP
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
勝成 鈴江
KEY
Stroustrup11章雑感
31 00
KEY
01 php7
Satoshi Yoshimura
PDF
traitを使って楽したい話
infinite_loop
PDF
お前は PHP の歴史的な理由の数を覚えているのか
Kousuke Ebihara
PDF
zsh とわたし
Toshihiko Shimokawa
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
Jun Nogata
Mac_Terminal_ver1.0
Satoshi Kume
F#のすすめ
Hiromu Sasaki
Perlで伝統芸能
hitode909
Goの文法の実例と解説
Ryuji Iwata
知って得する標準関数の使い方
Soudai Sone
PHP5.5新機能「ジェネレータ」初心者入門
kwatch
Pythonで始めるDropboxAPI
Daisuke Igarashi
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Kenta USAMI
WebAPIではじめるphp入門
Hiroaki Murayama
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
Perl勉強会#2資料
Kiyo Tsunezumi
Erlangやってみた
ina job
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
勝成 鈴江
Stroustrup11章雑感
31 00
01 php7
Satoshi Yoshimura
traitを使って楽したい話
infinite_loop
お前は PHP の歴史的な理由の数を覚えているのか
Kousuke Ebihara
zsh とわたし
Toshihiko Shimokawa
Ad
Viewers also liked
(18)
PDF
Elixirだ 第5回
Joe_noh
PDF
Elixirだ 第4回
Joe_noh
PDF
Elixirだ 第3回
Joe_noh
PDF
Elixirだ 第6回
Joe_noh
PDF
Portadas nacionales 8 marzo-17
Portadas Nacionales Think Mercadotecnia
PDF
MY JOB WENT TO VIETNAM?
Ryo Amano
PDF
Loyalty Presentation - CM Forum April 15
Ronan Gilhawley
PDF
Frontera de Posibilidades de Producción
Efren Alejandr Guzman Galindo
PDF
Cuadro comparativo Corrientes Económicas
Efren Alejandr Guzman Galindo
PDF
Iba bangalore 2017 prospectus
ibabschool
PPTX
Internet of Things
Mphasis
PPTX
巨乳Vs貧乳 トレンドはどちらか実際に調べてみた
sutefa
PDF
HOST | SPEAKER | Leonardo (Leo) Meyer @leomeyer
Leonardo Meyer Z.
PPTX
VoIP-Qualität im Netzwerk
UCExpertTalk
PPTX
Peter Opsvik's Philosophy of Sitting
Ergomonkey
PPTX
Jak poprawić scoring BIK, zadbać o wiarygodność i zaoszczędzić na kredycie
Michał Szafrański
PDF
Material didactico(1)
Sumara molina
PDF
March 2017 Calendar of Events
Weichert, Realtors
Elixirだ 第5回
Joe_noh
Elixirだ 第4回
Joe_noh
Elixirだ 第3回
Joe_noh
Elixirだ 第6回
Joe_noh
Portadas nacionales 8 marzo-17
Portadas Nacionales Think Mercadotecnia
MY JOB WENT TO VIETNAM?
Ryo Amano
Loyalty Presentation - CM Forum April 15
Ronan Gilhawley
Frontera de Posibilidades de Producción
Efren Alejandr Guzman Galindo
Cuadro comparativo Corrientes Económicas
Efren Alejandr Guzman Galindo
Iba bangalore 2017 prospectus
ibabschool
Internet of Things
Mphasis
巨乳Vs貧乳 トレンドはどちらか実際に調べてみた
sutefa
HOST | SPEAKER | Leonardo (Leo) Meyer @leomeyer
Leonardo Meyer Z.
VoIP-Qualität im Netzwerk
UCExpertTalk
Peter Opsvik's Philosophy of Sitting
Ergomonkey
Jak poprawić scoring BIK, zadbać o wiarygodność i zaoszczędzić na kredycie
Michał Szafrański
Material didactico(1)
Sumara molina
March 2017 Calendar of Events
Weichert, Realtors
Ad
Similar to Elixirだ 第1回強化版 前半
(20)
PDF
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
Ouka Yuka
PDF
BOF1-Scala02.pdf
Hiroshi Ono
PDF
BOF1-Scala02.pdf
Hiroshi Ono
PDF
BOF1-Scala02.pdf
Hiroshi Ono
PDF
たのしい関数型
Shinichi Kozake
PDF
プログラミング言語Scala
TanUkkii
PDF
Haskell超入門 Part.1
Yuichi Watanabe
KEY
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Hiromi Ishii
PDF
すごいHaskell楽しく学ぼう 第6章
aomori ringo
PPTX
Ruby講座一回目
Masayuki Matsumoto
PDF
スタートHaskell2 型を信じろ
Satoshi KOJIMA
PPTX
Ruby講座一回目
Masayuki Matsumoto
ODP
Lt会01_uetch
Tomoaki Ueda
PDF
Lisp tutorial for Pythonista : Day 2
Ransui Iso
PDF
ラボユース 最終成果報告会
shiftky
KEY
サイボウズ・ラボユース 最終成果報告会プレゼンテーション
sn_monochr
PDF
Haskell勉強会 in ie
maeken2010
PDF
Haskell Lecture 1
Yusuke Matsushita
PPTX
第3回輪講
mh_amako
PDF
初めてのHaskell (表)
karky7
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
Ouka Yuka
BOF1-Scala02.pdf
Hiroshi Ono
BOF1-Scala02.pdf
Hiroshi Ono
BOF1-Scala02.pdf
Hiroshi Ono
たのしい関数型
Shinichi Kozake
プログラミング言語Scala
TanUkkii
Haskell超入門 Part.1
Yuichi Watanabe
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Hiromi Ishii
すごいHaskell楽しく学ぼう 第6章
aomori ringo
Ruby講座一回目
Masayuki Matsumoto
スタートHaskell2 型を信じろ
Satoshi KOJIMA
Ruby講座一回目
Masayuki Matsumoto
Lt会01_uetch
Tomoaki Ueda
Lisp tutorial for Pythonista : Day 2
Ransui Iso
ラボユース 最終成果報告会
shiftky
サイボウズ・ラボユース 最終成果報告会プレゼンテーション
sn_monochr
Haskell勉強会 in ie
maeken2010
Haskell Lecture 1
Yusuke Matsushita
第3回輪講
mh_amako
初めてのHaskell (表)
karky7
More from Joe_noh
(20)
PDF
パフォーマンス改善のためにやったこと・やらなかったこと
Joe_noh
PDF
Vue.jsのユニットテスト
Joe_noh
PDF
Vuexと入力フォーム
Joe_noh
PDF
カラーミーAPIドキュメントの今後
Joe_noh
PDF
サイクルOJTイントロダクション
Joe_noh
PDF
お産ウィークイントロダクション
Joe_noh
PDF
モバイルアプリ研修イントロダクション
Joe_noh
PDF
Webオペレーション研修イントロダクション
Joe_noh
PDF
Web開発研修イントロダクション
Joe_noh
PDF
リーンキャンバス
Joe_noh
PDF
もっとgit
Joe_noh
PPTX
できないことはPortで外注
Joe_noh
PDF
DBにseedするライブラリつくった
Joe_noh
PDF
やってみた -URL外形監視-
Joe_noh
PDF
Declaimerっていうやつつくった(つくってる)
Joe_noh
ODP
いつかどこかで使えそうな英語
Joe_noh
PDF
NUTハッカソン2014成果報告
Joe_noh
ODP
@nukokusa_botを支える技術
Joe_noh
PDF
孤独のgem開発
Joe_noh
PDF
DNSキャッシュポイゾニングについての話
Joe_noh
パフォーマンス改善のためにやったこと・やらなかったこと
Joe_noh
Vue.jsのユニットテスト
Joe_noh
Vuexと入力フォーム
Joe_noh
カラーミーAPIドキュメントの今後
Joe_noh
サイクルOJTイントロダクション
Joe_noh
お産ウィークイントロダクション
Joe_noh
モバイルアプリ研修イントロダクション
Joe_noh
Webオペレーション研修イントロダクション
Joe_noh
Web開発研修イントロダクション
Joe_noh
リーンキャンバス
Joe_noh
もっとgit
Joe_noh
できないことはPortで外注
Joe_noh
DBにseedするライブラリつくった
Joe_noh
やってみた -URL外形監視-
Joe_noh
Declaimerっていうやつつくった(つくってる)
Joe_noh
いつかどこかで使えそうな英語
Joe_noh
NUTハッカソン2014成果報告
Joe_noh
@nukokusa_botを支える技術
Joe_noh
孤独のgem開発
Joe_noh
DNSキャッシュポイゾニングについての話
Joe_noh
Elixirだ 第1回強化版 前半
1.
第1回 - 基礎だ
1 - GMO Pepabo, Inc. Joe Honzawa 2015/5/13 Elixir勉強会 Elixirだ
2.
今回の内容 > 概要 > 型と制御構文 >
モジュールと関数 > パターンマッチとガード式
3.
概要
4.
Elixirとは > Erlang VM上で動く関数型言語 >
並列分散 > 高可用性 > 動的型付け > モダンな文法 > マクロによるメタプログラミング > プロトコルによる多態性
5.
Elixirをつくった人 > José Valim >
歩く生産性 > rackやrailsにもコミット
6.
Install > $ brew
install elixir
7.
型と制御構文
8.
型など
9.
型など > integer > float >
atom > boolean > binary > string > list > tuple > map > range > function > keyword list など
10.
IEx > ポチポチしながら聞いてね > $
iex
11.
Integer > 10 > 0b101 >
0o12 > 0x0a
12.
Float > 1.0 > 3.14 >
6.02e23 > 1.602e-19 > 1e3 ← これダメ
13.
Atom > Rubyで言うSymbol > :atom >
:hello > :’white spaces !?’ > nil == :nil
14.
Boolean > true > false >
実はatom > :true == true > :false == false
15.
Binary > <<1>> > <<256>>
== <<0>> > <<1>> == <<1::size(8)>> > <<1, 0>> == <<256::size(16)>> > <<1::float>> == <<63,240,0,0,0,0,0,0>>
16.
String > “hello world” >
“世界を征服だ” > 必ずダブルクォートしてー > “hey” == <<104,101,121>> > ‘hey’ == [104,101,121]
17.
List > 単方向リスト > [1,
2, 3] > [true, [1, 2, 3], “hey”] > [1 | [2, 3]] == [1, 2, 3] > [1, 2 | []] == [1, 2] > 先頭への要素追加は高速
18.
Tuple > 値の組 > {:ok,
30} > {1, 2, 3, 4, 5} > ランダムアクセスはO(1) > 更新や追加はコスト高
19.
Map > %{} > %{“price”=>
3980} > map = %{price: 100, amount: 2} > map.price > Map.get(map, :price) > map = Map.put(map, :amount, 1)
20.
Range > 範囲 > 1..3 >
4..-5 > 1.2 .. 3.8 > (1.5 in 1.2 .. 3.8) == true
21.
Function > 無名関数 > fn
(x, y) -> x * y end > fun = &(&1 * &2) # キャプチャ記法 > fun.(3, 4) == 12 # call > 定義済み関数のキャプチャ > IOモジュールのputs関数(arity: 1) > Enum.each([1, 2], &IO.puts/1)
22.
Keyword List > {key,
val}なタプルのリスト > kw = [{:age, 3}, … ] > mapっぽく書いてよい > kw == [age: 3, … ] > Keyword.get(kw, :age) == 3
23.
Keyword List > リストなので >
順序が保存される > ランダムアクセスは遅め > キーが同じなら先頭側が優先される Keyword.get([a: 1, a: 2], :a) == 1
24.
Keyword List > configとして使われることが多い >
引数として渡すとき > 最後の引数ならば [] 省略可 Keyword.keys([a: 1, b: 2]) Keyword.keys(a: 1, b: 2)
25.
紹介した型など > integer > float >
atom > boolean > binary > string > list > tuple > map > range > function > keyword list
26.
制御構文
27.
case case the_number do 1
-> “one” 2 -> “two” 3 -> “three” end
28.
if if now ==
:morning do “good morning” else “hi” end
29.
cond cond do rem(y, 400)
== 0 -> “Yes” rem(y, 100) == 0 -> “No” rem(y, 4) == 0 -> “Yes” true -> “No” end
30.
無いもの > return > 最後の評価値が返る >
loop, while > 再帰で
31.
モジュールと関数
32.
関数
33.
def defmodule MyModule do def
print(arg) do iikanjini_hyoji(arg) end defp iikanjini_hyoji(arg) do IO.inspect arg end end MyModule.print %{price: 298}
34.
原則 > 全ての関数はモジュールに属する > 名前か引数の数が違うなら別の関数 >
add/2とsub/2は区別される > sum/1とsum/2は区別される
35.
慣習 > ワーカ関数の名前はdo_xxx > モジュール名とファイル構造は対応させる >
lib/my_module/math.ex > MyModule.Math > 最も関心のあるものを第一引数に > 例外を投げる関数の名前はxxx! > 真偽値を返す関数の名前はxxx?
36.
デフォルト引数 defmodule MyModule do def
say(word “hi”) do IO.puts word end end MyModule.say(“hello”) MyModule.say
37.
ディレクティブ
38.
directives defmodule MyModule do import
Enum alias Enum, as: E require Integer use ExUnit end
39.
import defmodule MyModule do import
Enum, only: [count: 1] def kazoeru(list) do count(list) # Enum.count/1 end end MyModule.kazoeru [1, 2, 3] MyModule.count [1, 2] → ❌
40.
alias defmodule MyModule do alias
Enum, as: E def kazoeru(list) do E.count(list) # Enum.count/1 end end MyModule.kazoeru [1, 2, 3]
41.
as無しalias defmodule MyModule do alias
Phoenix.HTML.Form alias Phoenix.HTML.Form, as: Form # 等価 end
42.
requireとuse マクロが関係するのでまた後で…
43.
構造体
44.
定義 defmodule User do defstruct
name: “”, age: 0 end > 初期値が全てnilなら defmodule User do defstruct [:name, :age] end > 1モジュール1構造体
45.
使用 user = %User{} user
= %User{name: "jack"} # 作成 user.name Map.get(user, :name) # 値の取得 # パターンマッチと更新 def hbd(user = %User{age: age}) do %User{user | age: age+1} end
46.
ここまでのまとめ > defで関数を定義 > defmoduleでモジュールを定義 >
関数はモジュールの中で定義 > importで関数を取り込む > aliasで別名をつける > defstructで構造体を定義
47.
パターンマッチと ガード式
48.
パターンマッチ
49.
賢く束縛 > [x, y]
= [1, 2] > x == 1 > y == 2 > {1, x, 3} = {1, 2, 3} > x == 2
50.
アンスコ > 使わない変数の頭につける > 何にでもマッチ >
値は要らないとき > [head | _] = [1, 2, 3] > {y, _m, _d} = {2015, 4, 30}
51.
代表的な > {:ok, res}
= File.read “a.txt” > [head | tail] = [1, 2, 3, 4] > head == 1 > tail == [2, 3, 4]
52.
スマートな defmodule MyModule do def
same?(x, x), do: true def same?(_x, _y), do: false end
53.
実際的な case File.read(“a.txt”) do {:ok,
res} -> res {:error, :enoent} -> “oh it isn’t here” {:error, :eacces} -> “you can’t read it” _ -> “?” end
54.
ピン止め > x =
1 > [x, y, 3] = [2, 2, 3] > x == 2, y == 2 > [^x, y, 3] = [2, 2, 3] > MatchError ↑ 再束縛されちゃってる
55.
ガード式
56.
defで defmodule MyModule do def
sum(list) when is_list(list) do # 略 end def sum(_arg) do IO.puts "the arg must be a list" end end
57.
caseで case the_number do x
when x in [1, 2, 3] -> IO.puts "small" _ -> IO.puts "big or negative" end
58.
ガードで使える奴ら > == > != >
=== > !== > > > < > <= > >= > and > or > not > ! > + > - > * > / > <> (左辺がリテラル) > ++ (左辺がリテラル) > in > is_atom/1 > is_binary/1 > is_bitstring/1 > is_boolean/1 > is_float/1 > is_function/1 > is_function/2 > is_integer/1 > is_list/1 > is_map/1 > is_nil/1 > is_number/1 > is_pid/1 > is_port/1 > is_reference/1 > is_tuple/1 > abs/1 > bit_size/1 > byte_size/1 > div/2 > elem2 > hd/1 > length/1 > map_size/1 > node/0 > node/1 > rem/2 > round/1 > self/0 > tl/1 > trunc/1 > tuple_size/1
59.
ここまでのまとめ > パターンマッチで賢く束縛 > 要らない変数はアンスコで始める >
ピンで再束縛を防ぐ > パターンマッチとガードを合わせて 柔軟なマッチを > ガードで使える関数は限られている
60.
今回の内容 > Elixirとは > 型と制御構文 >
モジュールと関数 > パターンマッチとガード式
Download