Submit Search
Upload
Elixirだ 第1回強化版 前半
•
7 likes
•
3,609 views
Joe_noh
Follow
福岡支社内Elixir勉強会前半の資料
Read less
Read more
Technology
Report
Share
Report
Share
1 of 60
Download now
Download to read offline
Recommended
Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半
Joe_noh
Elixirだ 第2回
Elixirだ 第2回
Joe_noh
Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -
Joe_noh
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪
yashigani
PCさえあればいい。
PCさえあればいい。
bleis tift
Boost Tour 1.50.0
Boost Tour 1.50.0
Akira Takahashi
とびだせHaskellの森1
とびだせHaskellの森1
Shoko Sasaki
詳説ぺちぺち
詳説ぺちぺち
do_aki
Recommended
Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半
Joe_noh
Elixirだ 第2回
Elixirだ 第2回
Joe_noh
Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -
Joe_noh
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪
yashigani
PCさえあればいい。
PCさえあればいい。
bleis tift
Boost Tour 1.50.0
Boost Tour 1.50.0
Akira Takahashi
とびだせHaskellの森1
とびだせHaskellの森1
Shoko Sasaki
詳説ぺちぺち
詳説ぺちぺち
do_aki
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
Jun Nogata
Mac_Terminal_ver1.0
Mac_Terminal_ver1.0
Satoshi Kume
F#のすすめ
F#のすすめ
Hiromu Sasaki
Perlで伝統芸能
Perlで伝統芸能
hitode909
Goの文法の実例と解説
Goの文法の実例と解説
Ryuji Iwata
知って得する標準関数の使い方
知って得する標準関数の使い方
Soudai Sone
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
kwatch
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
Daisuke Igarashi
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Kenta USAMI
WebAPIではじめるphp入門
WebAPIではじめるphp入門
Hiroaki Murayama
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
Perl勉強会#2資料
Perl勉強会#2資料
Kiyo Tsunezumi
Erlangやってみた
Erlangやってみた
ina job
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
勝成 鈴江
Stroustrup11章雑感
Stroustrup11章雑感
31 00
01 php7
01 php7
Satoshi Yoshimura
traitを使って楽したい話
traitを使って楽したい話
infinite_loop
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのか
Kousuke Ebihara
zsh とわたし
zsh とわたし
Toshihiko Shimokawa
Elixirだ 第5回
Elixirだ 第5回
Joe_noh
Elixirだ 第4回
Elixirだ 第4回
Joe_noh
Elixirだ 第3回
Elixirだ 第3回
Joe_noh
More Related Content
What's hot
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
Jun Nogata
Mac_Terminal_ver1.0
Mac_Terminal_ver1.0
Satoshi Kume
F#のすすめ
F#のすすめ
Hiromu Sasaki
Perlで伝統芸能
Perlで伝統芸能
hitode909
Goの文法の実例と解説
Goの文法の実例と解説
Ryuji Iwata
知って得する標準関数の使い方
知って得する標準関数の使い方
Soudai Sone
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
kwatch
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
Daisuke Igarashi
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Kenta USAMI
WebAPIではじめるphp入門
WebAPIではじめるphp入門
Hiroaki Murayama
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
Perl勉強会#2資料
Perl勉強会#2資料
Kiyo Tsunezumi
Erlangやってみた
Erlangやってみた
ina job
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
勝成 鈴江
Stroustrup11章雑感
Stroustrup11章雑感
31 00
01 php7
01 php7
Satoshi Yoshimura
traitを使って楽したい話
traitを使って楽したい話
infinite_loop
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのか
Kousuke Ebihara
zsh とわたし
zsh とわたし
Toshihiko Shimokawa
What's hot
(19)
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
Mac_Terminal_ver1.0
Mac_Terminal_ver1.0
F#のすすめ
F#のすすめ
Perlで伝統芸能
Perlで伝統芸能
Goの文法の実例と解説
Goの文法の実例と解説
知って得する標準関数の使い方
知って得する標準関数の使い方
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
WebAPIではじめるphp入門
WebAPIではじめるphp入門
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Perl勉強会#2資料
Perl勉強会#2資料
Erlangやってみた
Erlangやってみた
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
Stroustrup11章雑感
Stroustrup11章雑感
01 php7
01 php7
traitを使って楽したい話
traitを使って楽したい話
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのか
zsh とわたし
zsh とわたし
Viewers also liked
Elixirだ 第5回
Elixirだ 第5回
Joe_noh
Elixirだ 第4回
Elixirだ 第4回
Joe_noh
Elixirだ 第3回
Elixirだ 第3回
Joe_noh
Elixirだ 第6回
Elixirだ 第6回
Joe_noh
Portadas nacionales 8 marzo-17
Portadas nacionales 8 marzo-17
Portadas Nacionales Think Mercadotecnia
MY JOB WENT TO VIETNAM?
MY JOB WENT TO VIETNAM?
Ryo Amano
Loyalty Presentation - CM Forum April 15
Loyalty Presentation - CM Forum April 15
Ronan Gilhawley
Frontera de Posibilidades de Producción
Frontera de Posibilidades de Producción
Efren Alejandr Guzman Galindo
Cuadro comparativo Corrientes Económicas
Cuadro comparativo Corrientes Económicas
Efren Alejandr Guzman Galindo
Iba bangalore 2017 prospectus
Iba bangalore 2017 prospectus
ibabschool
Internet of Things
Internet of Things
Mphasis
巨乳Vs貧乳 トレンドはどちらか実際に調べてみた
巨乳Vs貧乳 トレンドはどちらか実際に調べてみた
sutefa
HOST | SPEAKER | Leonardo (Leo) Meyer @leomeyer
HOST | SPEAKER | Leonardo (Leo) Meyer @leomeyer
Leonardo Meyer Z.
VoIP-Qualität im Netzwerk
VoIP-Qualität im Netzwerk
UCExpertTalk
Peter Opsvik's Philosophy of Sitting
Peter Opsvik's Philosophy of Sitting
Ergomonkey
Jak poprawić scoring BIK, zadbać o wiarygodność i zaoszczędzić na kredycie
Jak poprawić scoring BIK, zadbać o wiarygodność i zaoszczędzić na kredycie
Michał Szafrański
Material didactico(1)
Material didactico(1)
Sumara molina
March 2017 Calendar of Events
March 2017 Calendar of Events
Weichert, Realtors
Viewers also liked
(18)
Elixirだ 第5回
Elixirだ 第5回
Elixirだ 第4回
Elixirだ 第4回
Elixirだ 第3回
Elixirだ 第3回
Elixirだ 第6回
Elixirだ 第6回
Portadas nacionales 8 marzo-17
Portadas nacionales 8 marzo-17
MY JOB WENT TO VIETNAM?
MY JOB WENT TO VIETNAM?
Loyalty Presentation - CM Forum April 15
Loyalty Presentation - CM Forum April 15
Frontera de Posibilidades de Producción
Frontera de Posibilidades de Producción
Cuadro comparativo Corrientes Económicas
Cuadro comparativo Corrientes Económicas
Iba bangalore 2017 prospectus
Iba bangalore 2017 prospectus
Internet of Things
Internet of Things
巨乳Vs貧乳 トレンドはどちらか実際に調べてみた
巨乳Vs貧乳 トレンドはどちらか実際に調べてみた
HOST | SPEAKER | Leonardo (Leo) Meyer @leomeyer
HOST | SPEAKER | Leonardo (Leo) Meyer @leomeyer
VoIP-Qualität im Netzwerk
VoIP-Qualität im Netzwerk
Peter Opsvik's Philosophy of Sitting
Peter Opsvik's Philosophy of Sitting
Jak poprawić scoring BIK, zadbać o wiarygodność i zaoszczędzić na kredycie
Jak poprawić scoring BIK, zadbać o wiarygodność i zaoszczędzić na kredycie
Material didactico(1)
Material didactico(1)
March 2017 Calendar of Events
March 2017 Calendar of Events
Similar to Elixirだ 第1回強化版 前半
R language definition3.1_3.2
R language definition3.1_3.2
Yoshiteru Kamiyama
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
Everyday Life with clojure.spec
Everyday Life with clojure.spec
Kent Ohashi
リストモナドを作ってみた
リストモナドを作ってみた
Atsushi Kanehara
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
Ouka Yuka
JavaScript 講習会 #1
JavaScript 講習会 #1
Susisu
ECMAScript 6 Features(PDF 版)
ECMAScript 6 Features(PDF 版)
taskie
20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門
Takashi Kitano
初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)
Masahiro Hayashi
Chapter 6: Computing on the language (R Language Definition)
Chapter 6: Computing on the language (R Language Definition)
Nagi Teramo
Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
ALPSチュートリアル(4) Python入門
ALPSチュートリアル(4) Python入門
Computational Materials Science Initiative
Python02
Python02
XMLProJ2014
J qmobiはjqueryから軽量化しているか
J qmobiはjqueryから軽量化しているか
Hisashi Aruji
Metaprogramming in JuliaLang
Metaprogramming in JuliaLang
Yuichi Motoyama
第2回R勉強会1
第2回R勉強会1
Paweł Rusin
Introduction Xtend
Introduction Xtend
Hideki Kishida
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
Nagi Teramo
Haskell超入門 Part.1
Haskell超入門 Part.1
Yuichi Watanabe
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
Similar to Elixirだ 第1回強化版 前半
(20)
R language definition3.1_3.2
R language definition3.1_3.2
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Everyday Life with clojure.spec
Everyday Life with clojure.spec
リストモナドを作ってみた
リストモナドを作ってみた
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
JavaScript 講習会 #1
JavaScript 講習会 #1
ECMAScript 6 Features(PDF 版)
ECMAScript 6 Features(PDF 版)
20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門
初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)
Chapter 6: Computing on the language (R Language Definition)
Chapter 6: Computing on the language (R Language Definition)
Clojure programming-chapter-2
Clojure programming-chapter-2
ALPSチュートリアル(4) Python入門
ALPSチュートリアル(4) Python入門
Python02
Python02
J qmobiはjqueryから軽量化しているか
J qmobiはjqueryから軽量化しているか
Metaprogramming in JuliaLang
Metaprogramming in JuliaLang
第2回R勉強会1
第2回R勉強会1
Introduction Xtend
Introduction Xtend
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
Haskell超入門 Part.1
Haskell超入門 Part.1
関数プログラミング入門
関数プログラミング入門
More from Joe_noh
パフォーマンス改善のためにやったこと・やらなかったこと
パフォーマンス改善のためにやったこと・やらなかったこと
Joe_noh
Vue.jsのユニットテスト
Vue.jsのユニットテスト
Joe_noh
Vuexと入力フォーム
Vuexと入力フォーム
Joe_noh
カラーミーAPIドキュメントの今後
カラーミーAPIドキュメントの今後
Joe_noh
サイクルOJTイントロダクション
サイクルOJTイントロダクション
Joe_noh
お産ウィークイントロダクション
お産ウィークイントロダクション
Joe_noh
モバイルアプリ研修イントロダクション
モバイルアプリ研修イントロダクション
Joe_noh
Webオペレーション研修イントロダクション
Webオペレーション研修イントロダクション
Joe_noh
Web開発研修イントロダクション
Web開発研修イントロダクション
Joe_noh
リーンキャンバス
リーンキャンバス
Joe_noh
もっとgit
もっとgit
Joe_noh
できないことはPortで外注
できないことはPortで外注
Joe_noh
DBにseedするライブラリつくった
DBにseedするライブラリつくった
Joe_noh
やってみた -URL外形監視-
やってみた -URL外形監視-
Joe_noh
Declaimerっていうやつつくった(つくってる)
Declaimerっていうやつつくった(つくってる)
Joe_noh
いつかどこかで使えそうな英語
いつかどこかで使えそうな英語
Joe_noh
NUTハッカソン2014成果報告
NUTハッカソン2014成果報告
Joe_noh
@nukokusa_botを支える技術
@nukokusa_botを支える技術
Joe_noh
孤独のgem開発
孤独のgem開発
Joe_noh
DNSキャッシュポイゾニングについての話
DNSキャッシュポイゾニングについての話
Joe_noh
More from Joe_noh
(20)
パフォーマンス改善のためにやったこと・やらなかったこと
パフォーマンス改善のためにやったこと・やらなかったこと
Vue.jsのユニットテスト
Vue.jsのユニットテスト
Vuexと入力フォーム
Vuexと入力フォーム
カラーミーAPIドキュメントの今後
カラーミーAPIドキュメントの今後
サイクルOJTイントロダクション
サイクルOJTイントロダクション
お産ウィークイントロダクション
お産ウィークイントロダクション
モバイルアプリ研修イントロダクション
モバイルアプリ研修イントロダクション
Webオペレーション研修イントロダクション
Webオペレーション研修イントロダクション
Web開発研修イントロダクション
Web開発研修イントロダクション
リーンキャンバス
リーンキャンバス
もっとgit
もっとgit
できないことはPortで外注
できないことはPortで外注
DBにseedするライブラリつくった
DBにseedするライブラリつくった
やってみた -URL外形監視-
やってみた -URL外形監視-
Declaimerっていうやつつくった(つくってる)
Declaimerっていうやつつくった(つくってる)
いつかどこかで使えそうな英語
いつかどこかで使えそうな英語
NUTハッカソン2014成果報告
NUTハッカソン2014成果報告
@nukokusa_botを支える技術
@nukokusa_botを支える技術
孤独のgem開発
孤独のgem開発
DNSキャッシュポイゾニングについての話
DNSキャッシュポイゾニングについての話
Recently uploaded
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
Recently uploaded
(8)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
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 now