К тому же, у Rust очень высокий порог входа. Вот прям оченьНу не знаю... 2 недели у меня ушло на вдумчивое прочтение The book of Rust с опробованием примеров. После этого где-то 1й месяц я изредка натыкался на ситуации, когда не сходились лайфтаймы. Но и это быстро прошло. Компилятор реально помогает тебе, подсказывает как можно разрешить ситуацию, надо всего лишь читать, что он пишет. При этом это не надо гуглить, оно все человекопонятно. Rust конечно далеко не первый мой ЯП, но путь от "не знаю язык совсем" до "решаю на языке конкретные проблемы" с Rust у меня занял гораздо меньше времени, чем с любым другим ЯП, которые я знаю.
Прочел learn javacsript ruвсе сразу встало на свои места)) Проблема Кантора, что он теоретик, он никогда ничего кроме примеров своего учебника не разрабатывал.
В чем жесть ?
// потеряли имя функций, хорошего дебага
const vehicleFactory = function (config) {
// создаем 2 (3, 5, 10?) объекта в памяти, и пофик, что по факту нам нужен будет только 1
const MoveBehaivor = {
move(){
console.log('move')
}
}
const TankMoveBehaivor = {
move(){
// я так понимаю тут подразумевается дублирование кода из MoveBehaivor?
console.log('move')
console.log('as tank') // отличие от метода для автомобилей
}
}
switch (config.type) {
case 'car' :
// зачем то копируем объект, хотя создали мы его в этой же функции
const car = Object.assign({},MoveBehaivor)
return car
case 'tank' :
const vehicle = Object.assign({},TankMoveBehaivor)
return vehicle
}
}
ну и еще в догонку, а вот эти функции move в наших конструируемых объектах, они как то зависят от замыкания внутри нашей фабрики? Ну например от config? Если нет, как в примере, то категорично нужно выносить за пределы фабрики, дабы не плодить лишних функций в памяти.Как бы вы подошли к решению ?
// функции вынесли из фабрики
// фабрика скорее всего будет экспортирована из модуля
// а эти функции нет, так что это нормально
function move() {
console.log('move');
}
function moveTank() {
// вместо дублирования кода передаем управление другой функции
move();
console.log('as tank');
}
// даем функции имя, дабы видеть его в дебаге, а не (anonymous function)
export function vehicleFactory(config) {
switch(config.type) {
case 'car':
// создаем объекты там где они нужны
const car = {move};
return car;
case 'tank':
const vehicle = {move: moveTank};
return vehicle;
}
}
(x / 2) / x = 0.5
чему равен x? хром просто зачеркивает и всё
($size / 2) / $size
всегда будет 0.5 не зависимо от того, какое значение будет в $size (если конечно оно числовое)export const api = async (url, args) => {
const response = await fetch(`${apiUrl}${url}`, {
...args,
headers: {
"Content-type": "application/json; charset=UTF-8",
...args.headers,
},
});
return response.json();
}