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
Mobile First: as difficult as doing things right
swwweet
225
10k
Designing Experiences People Love
moore
143
24k
How to Ace a Technical Interview
jacobian
281
24k
So, you think you're a good person
axbom
PRO
2
2.1k
Prompt Engineering for Job Search
mfonobong
0
340
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.4k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
440
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
940
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Speed Design
sergeychernyshev
33
1.8k
RailsConf 2023
tenderlove
30
1.5k
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を学び始め、関 数型プログラミングの良さを知り、 それがオブジェクト指向型言語にも有用であることを理 解した
ここから少しだけ話が飛躍します
プロダクトはなんらかの価値を生み出すことが目的
アプリケーションはそのための手段
つまり、目的を達成するために より良い手段を使っていけば良い
より良い手段の引き出しを増やすためには、 目の前の技術だけでなく、 幅広く学んでいくのが良いんだろうなぁ
実務で使うか否かだけではなく、 幅広く色んな知識を学んでいきたい それらの知識が繋がる時を信じて... (最後にやっとタイトル回収)
ご静聴ありがとうございました