Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Introduction to functional programming
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Shigeki Shoji
September 14, 2022
Technology
290
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Introduction to functional programming
Shigeki Shoji
September 14, 2022
More Decks by Shigeki Shoji
See All by Shigeki Shoji
OpenID Connectによるサービス間連携
takesection
1
140
OpenID Connectによるサービス間連携
takesection
0
320
アーティファクト管理でサプライチェーン攻撃を回避!!
takesection
0
170
2025-12-19-LT
takesection
0
180
2025-12-11 nakanoshima.dev LT
takesection
0
200
アジャイルテストで高品質のスプリントレビューを
takesection
0
270
Introduction to kanjava
takesection
0
170
LT Slide 2025-04-22
takesection
0
270
Instructional Designer
takesection
0
240
Other Decks in Technology
See All in Technology
[dbts2026]数十PBの超巨大データ×AI活用を支えるSnowflakeの実力〜大規模環境におけるアーキテクチャと運用のリアル〜
y_matsubara
0
130
AWSを利用する上で知っておきたい名前解決の話 2026
nagisa53
5
3.3k
新卒エンジニア、 介護士になる
ryu1013
1
700
新米を「売り越さない」、Aurora DSQLで作る在庫ゼロ死守の限定ドロップEC
yama3133
0
200
Context Ontology Accelerator 入門 (業務データの意味を、AI エージェントに渡す)
inariku
PRO
3
620
HQ駆動開発で最高のAI-Contextを作ろう
sansantech
PRO
1
120
分析作業をどこまで任せるか自分で決められる AIネイティブBI『Golden Analytics』が 良さげな話 /golden-analytics-is-ai-native-bi
shinyaa31
0
140
AI時代の組織作り:チーム開発から「個人×AI」への移行と、持続可能な「開発資本」の築き方
ham0215
2
800
Kiro Crew の Bot (続く役目を任せる窓口) | 目指せ Kiro マスター 12
inariku
PRO
2
350
SREのためのFinOps入門
muziyoshiz
2
1.1k
AIエージェントの監視、思考を見るか行動を見るか / Monitoring AI Agents: Thoughts or Actions
yusukeshimizu
2
180
Reticulum, le réseau cypherpunk dont vous avez besoin !
rlifchitz
0
120
Featured
See All Featured
Code Review Best Practice
trishagee
74
20k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
23k
Navigating Team Friction
lara
192
16k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
530
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.9k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.7k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
350
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
240
ラッコキーワード サービス紹介資料
rakko
5
5.8M
Music & Morning Musume
bryan
48
7.5k
Transcript
関数型プログラミング超入門 Shigeki Shoji @takesection 2022-09-14
ゴール Functional Programming (関数型プログラミング) の土台となるコンセプトを理解する 2
目次 Referential Transparency (参照透過性) Immutable (不変性) Side Effect (副作用) Higher-order
Function (高階関数) Map、Filter、Reduce 3
Referential Transparency (参照透過性) 参照透過性とは、「プログラムの構成要素が同じもの同士は等しい」ということです。 例えば: 1 と 1 は等しい 文字列
abc と文字列 abc は等しい 関数 f(1) と 関数 f(1) は等しい つまり、変数 a と b に同じ値 (1 や abc や f(1)) を代入しているなら、a と b は等しいという ことになります。 4
参照透過性の利点 (An advantage of referential transparency) 参照透過性の利点は、数学的推論が利用できることです。f(1) の計算結果は常に f(1) の計算結
果と等しいため、その時の状況によって結果が変わらないため、テストが容易になります。 5
Immutable (不変性) 構造化/手続き型/ 命令型プログラミングでは、次の例のように、変数をミュータブルに使用す るのが一般的です。 int sum = 0; for
(int x: list) sum = sum + x; 変数 sum、x の値はプログラムの実行中に値を変化させます。これは、参照透過性の破壊を 意味します。 関数型プログラミングでは、イミュータブルな変数を利用することが一般的です。 6
Side Effect (副作用) 関数がファイルやデータベース、ネットワーク等外部との入出力に依存している場合、外部 環境の変化により関数の結果が変化することがあります。このような作用を「副作用」と呼 びます。副作用もまた参照透過性の破壊に繋がります。 この副作用を伴わずに参照透過性を持つ関数を「純粋な関数」と呼びます。 関数型プログラミングで、副作用を伴う関数を定義する場合、副作用を特定の関数内に隔離 することがベストプラクティスになります。 7
Higher-order Function (高階関数) 高階関数とは、簡単にいうと引数に関数を、あるいは関数を返す関数です。 次の例は、Javaによる高階関数を定義する例です。Optional.map() は引数が関数 (Function) です。関数には、次のようにラムダ関数も使用できます: Optional<Integer> maybeId
= Optional.ofNullable(1); maybeId.map(id -> { System.out.println(id); return id; }); 8
Map、Filter、Reduce ここで説明する Map、Filter、Reduce はコレクションやストリームを扱う高階関数を使うパ ターンです。 map(f) は、要素の型を変換する関数が引数になります。元の型 E を変換後の型 F
にしま す。 filter(f) は、要素の値を評価して通過させる場合は true、破棄する場合は false を返す関 数が引数になります。 reduce(f) は、コレクションやストリームの要素の合計値を求めるというような計算に使 用します。引数は要素の値を使って集計する関数になります。 val seq = Seq("1", "2", "3", "2", "2", "4") seq.map(_.toInt).filter(_ == 2).reduce((x, y) => x + y) 9
method と function の違い C++ や Java ではオブジェクトにフィールド (field) やメソッド
(method) を定義します。 method はオブジェクトの field を使用するロジックを記述します。 ロジックは、基本的には上のステートメントから下のステートメントに順番に実行され、ル ープによって上のステートメントに戻ったり、条件文によって、特定のコードブロックが実 行される、手法 (method) を記述します。 対して、関数 (function) は式 (formula) を定義します。 10
Scala の Option の使い方 Option[T] は None か Some(T) のいずれかになります。
val maybeId: Option[Integer] = Option(1) // or Some(1) maybeId.map { id => System.out.println(id); id; } 11
Scala の Either の使い方 Either[L, R] は Left(L) か Right(R)
のいずれかになります。 import java.io._ val line: Either[IOException, String] = Right("abc") line.map { l => System.out.println(l); l; } 12
Scala の Try の使い方 Try[+T] は Success(T) か Failure(E) のいずれかになります。
import scala.util.Try Try("123").map(_.toInt) 13