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
Functional Swift
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Ulrik Flænø Damm
July 23, 2014
Programming
0
97
Functional Swift
Presented at NSCoder Night Copenhagen
Ulrik Flænø Damm
July 23, 2014
Tweet
Share
Other Decks in Programming
See All in Programming
CSC307 Lecture 09
javiergs
PRO
1
830
CSC307 Lecture 03
javiergs
PRO
1
490
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.1k
ThorVG Viewer In VS Code
nors
0
770
OCaml 5でモダンな並列プログラミングを Enjoyしよう!
haochenx
0
140
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
370
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.5k
登壇資料を作る時に意識していること #登壇資料_findy
konifar
4
1k
AI巻き込み型コードレビューのススメ
nealle
1
150
CSC307 Lecture 02
javiergs
PRO
1
770
Patterns of Patterns
denyspoltorak
0
1.4k
AgentCoreとHuman in the Loop
har1101
5
230
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.7k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.1k
Writing Fast Ruby
sferik
630
62k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
72
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
180
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Designing for Timeless Needs
cassininazir
0
130
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
410
How to build a perfect <img>
jonoalderson
1
4.9k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
200
We Are The Robots
honzajavorek
0
160
Transcript
Hi! I’m ULRIK @ULRIKDAMM
FUNCTIONAL Swift
FUNCTIONS AS FIRST Class citizens
Int -> Int func sqr(i : Int) -> Int {
return i * i } { i in i * i } ~
None
None
PROCEDURAL
1 2 ff 2e ad load value to a load
value to b > add a and b and store in c print value c
FUNCTIONAL
None
MAP & REDUCE
MAP
REDUCE
MAP & REDUCE 1 2 3 1 4 9 0
14 (((0 + 1) + 4) + 9) = 14 sqr sqr sqr + + + =
IN SWIFT
IN SWIFT func map<U>(transform: (T) -> U) -> [U] func
reduce<U>(initial: U, combine: (U, T) -> U) -> U
IN SWIFT values.map(transform) values.reduce(initial, transform)
IN SWIFT [1, 2, 3].map { value in value +
1 } [1, 2, 3].reduce(0) { result, value in result + value }
CLOSURE SYNTAX
CLOSURE SYNTAX let closure : (Int, Int) -> Int =
{ value1, value2 -> Int in return value1 + value2 } [1, 2, 3].reduce(0, closure)
CLOSURE SYNTAX [1, 2, 3].reduce(0, { value1, value2 -> Int
in return value1 + value2 })
CLOSURE SYNTAX [1, 2, 3].reduce(0, { value1, value2 -> Int
in return value1 + value2 })
CLOSURE SYNTAX [1, 2, 3].reduce(0) { value1, value2 -> Int
in return value1 + value2 }
CLOSURE SYNTAX [1, 2, 3].reduce(0) { value1, value2 -> Int
in return value1 + value2 }
CLOSURE SYNTAX [1, 2, 3].reduce(0) { value1, value2 in return
value1 + value2 }
CLOSURE SYNTAX [1, 2, 3].reduce(0) { value1, value2 in return
value1 + value2 }
CLOSURE SYNTAX [1, 2, 3].reduce(0) { value1, value2 in value1
+ value2 }
CLOSURE SYNTAX [1, 2, 3].reduce(0) { value1, value2 in value1
+ value2 } // most common
CLOSURE SYNTAX [1, 2, 3].reduce(0) { value1, value2 in value1
+ value2 }
CLOSURE SYNTAX [1, 2, 3].reduce(0) { $0 + $1 }
CLOSURE SYNTAX [1, 2, 3].reduce(0) { $0 + $1 }
// short form
CLOSURE SYNTAX [1, 2, 3].reduce(0, +)
EXAMPLES
AVERAGE let values = [5, 8, 17] // procedural var
sum = 0 for value in values { sum += value } let average = sum / values.count // functional values.reduce(0, +) / values.count
COUNT OCCURENCES func count_occurences(vals : [Int], of val : Int)
-> Int { return vals.reduce(0) { count, this in return count + (val == this ? 1 : 0) } }
CONTAINS func contains(vals : [Int], find val : Int) ->
Bool { return vals.reduce(false) { found, this in if found { return true } else { return val == this } } }
WORDBASE func createPositions(positions : (Int, Int)...) -> [Position] { return
positions.map { position in return Position(x: position.0, y: position.1) } } func wordFromTiles(tiles : [Position]) -> String { return tiles.reduce("") { string, position in return string + self.characterAtPosition(position) } }
TYPE INFERENCE let ns = [1, 2, 3] ns.reduce(0, +)
// 6 let ss = ["1", "2", "3"] ss.reduce("", +) // “123" let moves = [(0,1) => (0,2), (5, 7) => (7, 7)] moves.reduce(ChessBoard(), +)
FIN