概要
せっかくJavaScriptがマルチパラダイムな言語なので書き比べてみます。
ずっと命令型なスタイルで開発していたので、宣言型なスタイルは慣れないんですよね。
実行するべき関数を組み立ててくみたいな考え方の切り替えに苦戦しています。
命令型
class Person
{
private name: string;
private age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
public sameAgePersons(persons: Person[]): Person[] {
return persons.filter((person: Person) => this.age === person.age);
}
}
const p1 = new Person('一郎', 20);
const p2 = new Person('二郎', 19);
const p3 = new Person('三郎', 20);
console.log(p1.sameAgePersons([p2, p3]));
宣言型
type Person = { name: string, age: number };
const p1: Person = {name: '一郎', age: 20};
const p2: Person = {name: '二郎', age: 19};
const p3: Person = {name: '三郎', age: 20};
const selectorSameAge = (age: number) => (person: Person) => age === person.age;
const findPersonsBySelector = (persons: Person[], selector: (person: Person) => boolean) => persons.filter(selector);
console.log(findPersonsBySelector([p2, p3], selectorSameAge(p1.age)));