const square = (x) => {
return x * x;
};class Counter {
constructor() {
this.count = 0;
}
increment() {
this.count += 1;
return this.count;
}
}const randPlusOne = () => {
return Math.random() + 1;
};const age = (birthday) => {
return new Date() - birthday;
};const setText = (newText) => {
$('#thing').text(newText);
};const addLengths = (str1, str2) => {
return str1.length + str2.length;
};const addNameLengths = (person1, person2) => {
return person1.name.length +
person2.name.length;
};const w = { name: 'Will' };
const g = { name: 'Grace' };
addNameLengths(w, g); // 9
w.name = 'William';
addNameLengths(w, g); // 12const range = (n) => {
const result = [];
for (let i = 0; i < n; i++) {
result.push(i);
}
return result;
};const x = impureThing(a, b);
const x = pureThing(a, b);const makeTiramisu = (
eggs, sugar1, wine, cheese, cream,
fingers, espresso, sugar2, cocoa
) => {
dissolve(sugar2, espresso);
const mixture = whisk(eggs);
beat(mixture, sugar1, wine);
whisk(mixture);
whip(cream);
beat(cheese);
beat(mixture, cheese);
fold(mixture, cream);
assemble(mixture, fingers);
sift(mixture, cocoa);
refrigerate(mixture);
return mixture;
};const makeTiramisu = (
eggs, sugar1, wine, cheese, cream,
fingers, espresso, sugar2, cocoa
) => {
const beatEggs = beat(eggs);
const mixture = beat(beatEggs, sugar1, wine);
const whisked = whisk(mixture);
const beatCheese = beat(cheese);
const cheeseMixture = beat(whisked, beatCheese);
const whippedCream = whip(cream);
const foldedMixture = fold(cheeseMixture, whippedCream);
const sweetEspresso = dissolve(sugar2, espresso);
const wetFingers = soak2seconds(fingers, sweetEspresso);
const assembled = assemble(foldedMixture, wetFingers);
const complete = sift(assembled, cocoa);
const readyTiramisu = refrigerate(complete);
return readyTiramisu;
};let count = 5;
const increment = () => {
count = count + 1;
};const doubles = (arr) => {
const result = [];
for (let i = 0; i < arr.length; i++) {
result.push(arr[i] * 2);
}
return result;
};const doubles = (arr) => {
return arr.map(x => x * 2);
};// (Event, Rule) => Array[Entry]
const execute = (event, rule) => { ... };
// (Event, Rule) => Boolean
const applies = (event, rule) => { ... };
// (SparkContext) => RDD[Event]
const loadEvents = (sc) => { ... };
// (SparkContext) => RDD[Rule]
const loadRules = (sc) => { ... };
// (SparkContext, RDD[Entry]) => undefined
const saveEntries = (sc, entries) => { ... };class Event { ... }
class Rule { ... }
class Entry { ... }const sc = new SparkContext();
const events = loadEvents(sc);
const rules = loadRules(sc);
const entries = run(events, rules);
saveEntries(sc, entries);// (RDD[Event], RDD[Rule]) => RDD[Entry]
const run = (events, rules) => {
let result = [];
events.forEach(event => {
rules.forEach(rule => {
if (applies(event, rule) {
const entries = execute(event, rule);
result = result.concat(entries);
}
});
});
return result;
};const makePair = (n) => [n, n];
[1, 2].map(makePair); // [[1, 1], [2, 2]]
[1, 2].flatMap(makePair); // [1, 1, 2, 2]// (RDD[Event], RDD[Rule]) => RDD[Entry]
const run = (events, rules) => (
rules.flatMap(rule => (
events
.filter(event => applies(event, rule))
.flatMap(event => execute(event, rule));
));
);
"If you want fast, start with comprehensible"
- Paul Phillips
[1, 2, 3, 4, 5]
.filter(x => x % 2 !== 0)
.map(x => x * x)
[1];
import { Seq } from 'immutable';
Seq([ 1, 2, 3, 4, 5 ])
.filter(x => x % 2 !== 0)
.map(x => x * x)
.get(1);import { Range } from 'immutable';
Range(1, Infinity)
.filter(x => x % 2 !== 0)
.map(x => x * x)
.get(1);import { memoize } from 'lodash';
const memMakePair = memoize(makePair);
memMakePair(1); // [1, 1]
memMakePair(1); // use cached valueconst onePair = memMakePair(1);
onePair.push(2);
memMakePair(1); // [1, 1, 2]