как делает ми | frontend
8 subscribers
63 photos
14 videos
1 file
53 links
транслирую, как пишу фронт на vue

p.s. все, что здесь описывается, через неделю потеряет свою актуальность, потому что я уже делаю рефакторинг :з

p.p.s правильного нет, есть удобное

внимание, токсичность сильно вредит вашему здоровью, лучше курит
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Luhn check

Реализует алгоритм Luhn, используемый для проверки различных идентификационных номеров, таких как номера кредитных карт, номера IMEI, идентификационные номера национального провайдера и т.д.

📂 Подробнее

#сниппет

💛 Настоящий JavaScript
#архитектура
Open-Closed Principle, OCP

задача:
на входе в функцию filteredOrderList мы передаем orders и какую-то функцию filter а на выходе получаем отфильтрованный список ордеров

но в будущем нам захочется изменить логику фильтрации

решение:


// Базовый класс для фильтров
class OrderFilter {
filter(orders) {
throw new Error("Метод 'filter' должен быть переопределён в наследнике");
}
}

// Фильтр по статусу
class StatusFilter extends OrderFilter {
constructor(status) {
super();
this.status = status;
}

filter(orders) {
return orders.filter(order => order.status === this.status);
}
}

// Фильтр по сумме
class AmountFilter extends OrderFilter {
constructor(minAmount) {
super();
this.minAmount = minAmount;
}

filter(orders) {
return orders.filter(order => order.amount >= this.minAmount);
}
}

// Функция для отфильтровывания заказов
function filteredOrderList(orders, filter) {
return filter.filter(orders);
}

// Пример использования
const orders = [
{ id: 1, status: 'completed', amount: 150 },
{ id: 2, status: 'pending', amount: 200 },
{ id: 3, status: 'completed', amount: 300 },
{ id: 4, status: 'cancelled', amount: 100 },
];

// Создаем экземпляры фильтров
const completedFilter = new StatusFilter('completed');
const amountFilter = new AmountFilter(200);

// Применяем фильтры
const completedOrders = filteredOrderList(orders, completedFilter);
const highAmountOrders = filteredOrderList(orders, amountFilter);

console.log('Completed Orders:', completedOrders);
console.log('High Amount Orders:', highAmountOrders);


а если бы захотелось применять несколько фильтров, то


class CompositeFilter extends OrderFilter {
constructor(filters) {
super();
this.filters = filters;
}

filter(orders) {
return this.filters.reduce((filteredOrders, filter) => {
return filter.filter(filteredOrders);
}, orders);
}
}
const orders = [
{ id: 1, status: 'completed', amount: 150 },
{ id: 2, status: 'pending', amount: 200 },
{ id: 3, status: 'completed', amount: 300 },
{ id: 4, status: 'cancelled', amount: 100 },
];

// Создаем экземпляры фильтров
const completedFilter = new StatusFilter('completed');
const amountFilter = new AmountFilter(200);

// Объединяем фильтры
const combinedFilter = new CompositeFilter([completedFilter, amountFilter]);

// Применяем комбинированный фильтр
const filteredOrders = filteredOrderList(orders, combinedFilter);

console.log('Filtered Orders:', filteredOrders);
Forwarded from FrontEndDev
AbortController не только для fetch

Несколько вариантов использования AbortController'a, о которых мало кто знает, но которые могут быть сподручными при решении задач разработки.

https://kettanaito.com/blog/dont-sleep-on-abort-controller
#архитектура

про нейминг
абстрактный нейминг использовать только тогда, когда неважно, что лежит за этим неймингом - что-то обобщеное (list, item, value, number и тд)
но когда мы работаем с чем-то специфичным, то нейминг должен быть специфичным. например мы фильтруем заказы значит
const filterOrderList = (orderList) => { 
return filteredOrderList
}


не стоит конкретизировать с фанатизмом там, где не нужно
пример: если в этом случае нам важно чтобы функция работала именно с провалидироваными заказами, то все ок

const filterOrderList = (validOrderList) => {
return filteredOrderList
}

но если нам не важно это углубленное уточнение, то стоит его избегать, чтобы не вводить других в заблуждение

const validateEmail = (userEmail/customerEmail) // неважно чью почту мы валидируем, важно, что мы в принципе валидируем почту
на заметку - попробовать схлопнуть фильтрацию, в которой мы будем передавать только колбэк
дробление одного loop, на много маленьких - тестировать проще
гениально 🥲
Forwarded from Frontend Portal
This media is not supported in your browser
VIEW IN TELEGRAM
💡👩‍💻 Совет по CSS: Используйте табличные цифры для отображения таймеров

Cвойство font-variant-numeric определяет, как будут отображаться числа. При значении 'tabular-nums' числа будут представлены с одинаковой шириной, что позволит им идеально выстраиваться в ряд

✔️ #tip by Shripal Soni

➡️ @FrontendPortal | #CSS
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Frontend Portal
🌟 Некоторые забавные вещи, о которых вы, возможно, не знали, можно делать с помощью тега <a>

➡️ @FrontendPortal | #CSS
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM