Last active
November 23, 2016 12:30
-
-
Save halan/906d788b5f02650adf670fdebdef9fcb to your computer and use it in GitHub Desktop.
Técnicas com curry e composição
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const map = transform => arr => { | |
| let transformed = [] | |
| for(let i=0; i<=arr.length; i++) { | |
| transformed = [...transformed, transform(arr[i], i)] | |
| } | |
| return transformed | |
| } | |
| //------------------------ | |
| const double = map(n => n * 2) | |
| const triple = map(n => n * 3) | |
| double([1 2, 3, 4]) | |
| triple([1, 2, 3, 4]) | |
| //------------------------ | |
| const filter = predicate => arr => { | |
| let filtered = [] | |
| for(let i=0; i<=arr.length; i++) { | |
| if(predicate(arr[i], i)) | |
| filtered = [...filtered, arr[i]] | |
| } | |
| return filtered | |
| } | |
| //------------------------ | |
| let servers = [ | |
| { name: 'server1', status: 'online' }, | |
| { name: 'server2', status: 'offline' }, | |
| { name: 'server3', status: 'online' }, | |
| { name: 'server4', status: 'online' } | |
| ] | |
| const getName = server => server.name | |
| const getStatus = server => server.status | |
| const isOnline = server => getStatus(server) === 'online' | |
| const allOnline = filter(isOnline) | |
| const pluckNames = map(getName) | |
| const namesOfAllOnline = pluckNames(allOnline(servers)) | |
| // without curry using common map/filter | |
| const allOnline2 = arr => | |
| arr.filter(isOnline) | |
| const pluckNames2 = arr => | |
| arr.map(getName) | |
| // extract common map/filter to curried versions | |
| const map2 = transform => arr => | |
| arr.map(transform) | |
| const filter2 = predicate => arr => | |
| arr.filter(predicate) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment