Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
実務で使わないであろうHaskellを敢えて学んでみた
Search
Taketeru
April 21, 2024
0
16
実務で使わないであろうHaskellを敢えて学んでみた
Taketeru
April 21, 2024
Tweet
Share
Featured
See All Featured
Done Done
chrislema
181
16k
Bash Introduction
62gerente
608
210k
Raft: Consensus for Rubyists
vanstee
136
6.6k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
Why Our Code Smells
bkeepers
PRO
334
57k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
17k
Designing on Purpose - Digital PM Summit 2013
jponch
115
7k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
140
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Transcript
実務で使わないであろう Haskellを敢えて学んでみた Taketeru
自己紹介 名前:Taketeru 職業:ソフトウェアエンジニア(2年目) 趣味:ゴルフ、飲酒、ミニマリズム 気になっていること:自作OS 悩み:引っ越し先を探すのが面倒くさい 外部のLT登壇は本日が2回目!
Haskellって何?
Haskellとは純粋関数型プログラミング言語
一旦、Haskellは置いといて...
なぜHaskellを学ぼうと思ったのか?
これまで培ってきたプログミングの メンタルモデルを壊して思考を整理したかった
(きっと)良くあるプログラミングの メンタルモデルの構築パターン
JavaやRubyなどのオブジェクト指向言語を使って、手続 き型プログラミングで簡単な実装をする
少しずつ実装するプログラムが大きくなっていき、クラス が肥大化する
どうやらオブジェクト指向プログラミングを すると良いらしい
なんとなくオブジェクトを設計し、 モノの抽象化をして、継承なんかを使ってみる ポリモーフィズムを実現したつもりになっている
なんかバグは多いし、 実装は分かりづらいし、 具象クラスに空っぽのメソッドが出現し始める
なんか違う、いや絶対違うと思い、 コード設計について勉強し始める
コード設計の勉強をしていくと... ➢ 継承は使わずに、委譲を使う ➢ オブジェクトはイミュータブルに設計する ➢ interfaceで振る舞いを抽象化する など...
え?オブジェクト指向プログラミングとは??
某kさんの話を聞く
「業務アプリケーションに、オブジェクト指向プログラミン グは必要ない」 (※若干の誇張あり)
え???
ナニモワカラナクナッタ
そうだ、 全然違うプログラミング言語を勉強してみよう
やっと本題 ここからHaskellを学び始めた話
Haskellとは純粋関数型プログラミング言語
純粋関数とは?
純粋関数は以下のような特徴をもつ関数 ➢ 同じ式を引数に与えた時に、常に同じ結果を返 す(参照透過性) ➢ 副作用(入出力、状態の変更、再代入など)を 持たない
具体的には?
純粋関数の例(Haskell)
ここからコード例はJavaで話を進めます
純粋関数の例(Java)
参照透過性を満たさない関数とは?
参照透過性を満たさない関数の例(Java)
副作用がある関数とは?
副作用がある関数の例(Java)
純粋関数の何が良いのか? ➢ テストがしやすい ➢ バグが起きにくい ➢ 実行順序に依存せず、並列処理もしやすい
Haskellでは、参照透過性を満たし、 副作用のない純粋関数が強制される
そんなHaskellを学んで、 実務にどんな良いフィードバックがあったか?
➢ 業務ロジック部分は純粋関数を意識して実装する ようになった → テスト容易性が上がり、バグも工数も減った ➢ モノ(オブジェクト)ではなく、コト(関数、メソッド)の 抽象化を考えるようになった
Haskellの純粋関数の考え方は他の言語でも有用
で、Haskellを学び始めて思考は整理されたか?
Haskellを学び始めて思考が整理された ➢ 特定のプログラミング手法に囚われる必要はな い ➢ ソフトウェアは保守性、拡張性、品質の高さが大 切であり、様々なプログラミング手法で培われて きたノウハウを組み合わせれば良い
実際、オブジェクト指向言語であるJavaにも、 関数型プログラミングの要素が入ってきている
そろそろまとめ
オブジェクト指向プログラミングを あまり理解せずに、コード設計を勉強したことで、意識せ ずに関数型プログラミングの考え方に触れ、Taketeru少 年は混乱した
そこで、純粋関数型言語であるHaskellを学び始め、関 数型プログラミングの良さを知り、 それがオブジェクト指向型言語にも有用であることを理 解した
ここから少しだけ話が飛躍します
プロダクトはなんらかの価値を生み出すことが目的
アプリケーションはそのための手段
つまり、目的を達成するために より良い手段を使っていけば良い
より良い手段の引き出しを増やすためには、 目の前の技術だけでなく、 幅広く学んでいくのが良いんだろうなぁ
実務で使うか否かだけではなく、 幅広く色んな知識を学んでいきたい それらの知識が繋がる時を信じて... (最後にやっとタイトル回収)
ご静聴ありがとうございました