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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Taketeru
April 21, 2024
51
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
実務で使わないであろうHaskellを敢えて学んでみた
Taketeru
April 21, 2024
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
432
67k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.1k
The Cult of Friendly URLs
andyhume
79
6.9k
Utilizing Notion as your number one productivity tool
mfonobong
4
320
ラッコキーワード サービス紹介資料
rakko
1
3.6M
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
1.7k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
30 Presentation Tips
portentint
PRO
1
320
Into the Great Unknown - MozCon
thekraken
41
2.6k
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を学び始め、関 数型プログラミングの良さを知り、 それがオブジェクト指向型言語にも有用であることを理 解した
ここから少しだけ話が飛躍します
プロダクトはなんらかの価値を生み出すことが目的
アプリケーションはそのための手段
つまり、目的を達成するために より良い手段を使っていけば良い
より良い手段の引き出しを増やすためには、 目の前の技術だけでなく、 幅広く学んでいくのが良いんだろうなぁ
実務で使うか否かだけではなく、 幅広く色んな知識を学んでいきたい それらの知識が繋がる時を信じて... (最後にやっとタイトル回収)
ご静聴ありがとうございました