Uczymy się obsługi funkcji ze zmienną ilością parametrów. Będzie to nam potrzebne do naszej biblioteczki React. Do dzieła.
Na pierwszy przykład, czyli dekompozycję obiektów, już się natknęliśmy:
function createElement_v1({type, content, ...attributes}){
console.log("Type: ", type);
console.log("Content: ", content);
for(const [key, value] of Object.entries(attributes)){
console.log(key, " : ", value);
}
}
createElement_v1({type: "h2", content: "HelloWorld", id: "myID", class: "text-secondary"});
// Type: h2
// Content: HelloWorld
// id : myID
// class : text-secondary
Ok, ale to dekompozycja obiektów. Napiszmy pierwszą funkcję variadic:
function variadic_v1(...nums){
return {
nums: Array.from(nums)
}
}
console.log(variadic_v1(1,2,3));
// Object {
// nums: Array(3) [ 1, 2, 3 ]
// }
Teraz druga, najpierw jeden argument, potem zmienna ilość argumentów:
function variadic_v2(mulby, ...nums){
return {
multiplier: mulby,
nums: Array.from(nums)
}
}
console.log(variadic_v2(10, 1,2,3));
// Object {
// multiplier: 10,
// nums: Array(3) [ 1, 2, 3 ]
// }
Teraz potraktujmy zmienne argumenty jako tablicę, na której chcemy wykonać jakąś operację, zwracając inną tablicę:
function variadic_v3(mulby, ...nums){
let mulipliedArr = [].concat(...nums)
.map((el) => el * mulby);
return {
multiplier: mulby,
nums: Array.from(nums),
mulipliedNums: mulipliedArr
}
}
console.log(variadic_v3(10,1,2,3));
// Object {
// multiplier: 10,
// nums: Array(3) [ 1, 2, 3 ],
// mulipliedNums: Array(3) [ 10, 20, 30 ]
// }
To wszystko wydaje się albo dziwne, albo banalne, ale bez opracowania dobrych wzorców pracy z funkcjami variadic daleko nie zajedziemy w naszym projekcie.