Descending Order
Создайте функцию, которая принимает число и возвращает цифры этого числа в убывающем порядке.
Пример:
Input:
Input:
Input:
👉 @seniorFront
Создайте функцию, которая принимает число и возвращает цифры этого числа в убывающем порядке.
Пример:
Input:
42145 Output: 54421Input:
145263 Output: 654321Input:
123456789 Output: 987654321👉 @seniorFront
👍2🤔2❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Smooth Liquid Background Effect
"Кляксы" созданы в HTML, а в JS создана логика их передвижения и анимации.
👉 @seniorFront
"Кляксы" созданы в HTML, а в JS создана логика их передвижения и анимации.
👉 @seniorFront
👍9
This media is not supported in your browser
VIEW IN TELEGRAM
Code ready — лучшие подборки эффектов, анимаций и многое другое для твоих проектов, сразу с готовым кодом и примером их использования.
Please open Telegram to view this post
VIEW IN TELEGRAM
Почему TypeScript считает compatible тип функции с меньшим количеством аргументов?
Ковариантность в TypeScript:
В контексте TypeScript, если функция ожидает аргументы определенного типа, то она также считается совместимой с функцией, требующей более узкий объем аргументов или более конкретный тип. То есть, функция, принимающая меньшее количество аргументов, считается совместимой с функцией, ожидающей большее количество аргументов, если они имеют подходящие типы. Это согласуется с принципом поддержки того, чтобы "меньший" тип мог быть использован в контексте, где ожидается "больший" тип.
Пример:
Преимущества:
1. Это предоставляет бóльшую гибкость в работе с функциями.
2. При правильном использовании позволяет избежать избыточной информации в определении функций.
Недостатки:
1. Может потенциально вызвать ошибки в ситуациях, когда поддерживается передача дополнительных аргументов без явного указания этого в сигнатуре функции.
2. Может показаться непривычным для разработчиков, привыкших к более строгой типизации в других языках.
👉 @seniorFront
Ковариантность в TypeScript:
В контексте TypeScript, если функция ожидает аргументы определенного типа, то она также считается совместимой с функцией, требующей более узкий объем аргументов или более конкретный тип. То есть, функция, принимающая меньшее количество аргументов, считается совместимой с функцией, ожидающей большее количество аргументов, если они имеют подходящие типы. Это согласуется с принципом поддержки того, чтобы "меньший" тип мог быть использован в контексте, где ожидается "больший" тип.
Пример:
type User = { name: string; };
type Admin = { name: string; adminRights: boolean; };
function logUser(user: User) {
console.log(user.name);
}
const admin: Admin = { name: 'Alice', adminRights: true };
logUser(admin); // TypeScript разрешит передачу admin в logUser
Преимущества:
1. Это предоставляет бóльшую гибкость в работе с функциями.
2. При правильном использовании позволяет избежать избыточной информации в определении функций.
Недостатки:
1. Может потенциально вызвать ошибки в ситуациях, когда поддерживается передача дополнительных аргументов без явного указания этого в сигнатуре функции.
2. Может показаться непривычным для разработчиков, привыкших к более строгой типизации в других языках.
👉 @seniorFront
🔥10❤3🤔3
This media is not supported in your browser
VIEW IN TELEGRAM
Day & Night Toggle
Внутри переключателя SVG картинка, стилизованная в CSS. Логика изменения фона реализована в JS.
👉 @seniorFront
Внутри переключателя SVG картинка, стилизованная в CSS. Логика изменения фона реализована в JS.
👉 @seniorFront
❤16👏3🔥2
Экстремальные практики программирования
Экстремальное программирование — это одна из гибких методологий разработки. Понятие относится скорее к менеджменту, построению процессов, но оно тесно переплетено с непосредственно разработкой: техническими возможностями и конкретными технологиями, которые помогают соблюдать практики этой методологии.
Рассмотрим некоторые практики:
Разработка через тестирование
Эта практика подразумевает, что разработчики сначала пишут тесты, а потом под эти тесты пишется программное обеспечение. Наличие автотестов, которые запускают после каждого изменения кода, — это критически важный момент. Без этого уже тяжело представить взаимодействие с большой кодовой базой.
«Игра в планирование»
Сложно запланировать большую систему на несколько месяцев вперед. Как правило, когда команда начинает работать, план быстро начинает расходиться с реальностью. Или все продолжают придерживаться плана, но едут не туда и получают не такой качественный результат.
Здесь же идея в том, чтобы планировать более «несерьёзно», меньшими итерациями, — не бояться что-то зафейлить, быстрее адаптироваться к меняющимся условиям. Команда обсуждает, что они могут сделать в рамках спринта, условно пары недель, это позволяет им быть более гибкими («agile»).
«Заказчик всегда рядом»
Классическая модель работы выглядит так: заказчик ставит задачу, бизнес-аналитики собирают требования, исполнители реализуют проект и приносят результат на утверждение. Часто это не самая удачная стратегия.
Принцип «заказчик всегда рядом» подразумевает, что команда контактирует с заказчиком супермаленькими интервалами, показывая ему процесс разработки в мелочах. Это помогает вовремя всё подправить и избежать ситуации, когда при сдаче проекта оказывается, что требования поняли некорректно и принесли не тот результат.
Парное программирование
Вместо того, чтобы разработчик работал в одиночку, а потом показывал результат коллегам или продакт-оунеру, процесс построен по аналогии с гонками: когда есть драйвер и штурман.
- Качество кода, как правило, выше за счёт двух моментов:
- Люди — «социальные животные»: когда за ними наблюдают, они стараются сильнее. Конечно, при условии, что наблюдение экологичное и не создаёт стресса.
Двое экспертов могут додуматься до вещей, к которым не прийти в одиночку. Они могут замахнуться на более сложные решения и, возможно, даже реализовать их быстрее.
👉 @seniorFront
Экстремальное программирование — это одна из гибких методологий разработки. Понятие относится скорее к менеджменту, построению процессов, но оно тесно переплетено с непосредственно разработкой: техническими возможностями и конкретными технологиями, которые помогают соблюдать практики этой методологии.
Рассмотрим некоторые практики:
Разработка через тестирование
Эта практика подразумевает, что разработчики сначала пишут тесты, а потом под эти тесты пишется программное обеспечение. Наличие автотестов, которые запускают после каждого изменения кода, — это критически важный момент. Без этого уже тяжело представить взаимодействие с большой кодовой базой.
«Игра в планирование»
Сложно запланировать большую систему на несколько месяцев вперед. Как правило, когда команда начинает работать, план быстро начинает расходиться с реальностью. Или все продолжают придерживаться плана, но едут не туда и получают не такой качественный результат.
Здесь же идея в том, чтобы планировать более «несерьёзно», меньшими итерациями, — не бояться что-то зафейлить, быстрее адаптироваться к меняющимся условиям. Команда обсуждает, что они могут сделать в рамках спринта, условно пары недель, это позволяет им быть более гибкими («agile»).
«Заказчик всегда рядом»
Классическая модель работы выглядит так: заказчик ставит задачу, бизнес-аналитики собирают требования, исполнители реализуют проект и приносят результат на утверждение. Часто это не самая удачная стратегия.
Принцип «заказчик всегда рядом» подразумевает, что команда контактирует с заказчиком супермаленькими интервалами, показывая ему процесс разработки в мелочах. Это помогает вовремя всё подправить и избежать ситуации, когда при сдаче проекта оказывается, что требования поняли некорректно и принесли не тот результат.
Парное программирование
Вместо того, чтобы разработчик работал в одиночку, а потом показывал результат коллегам или продакт-оунеру, процесс построен по аналогии с гонками: когда есть драйвер и штурман.
- Качество кода, как правило, выше за счёт двух моментов:
- Люди — «социальные животные»: когда за ними наблюдают, они стараются сильнее. Конечно, при условии, что наблюдение экологичное и не создаёт стресса.
Двое экспертов могут додуматься до вещей, к которым не прийти в одиночку. Они могут замахнуться на более сложные решения и, возможно, даже реализовать их быстрее.
👉 @seniorFront
❤5👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Cube Effect Slider
Куб сделан при помощи библиотеки Swiper. Частицы на фоне генерируются библиотекой tsparticles.
👉 @seniorFront
Куб сделан при помощи библиотеки Swiper. Частицы на фоне генерируются библиотекой tsparticles.
👉 @seniorFront
👍15❤1
Media is too big
VIEW IN TELEGRAM
Cursor Follow Navigation Menu
В этом видео создаётся оригинальный эффект при наведении на меню при помощи CSS и JS.
👉 @seniorFront
В этом видео создаётся оригинальный эффект при наведении на меню при помощи CSS и JS.
👉 @seniorFront
❤2👍1🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Pizza Toggles
Оригинальные переключатели, реализованные с использованием возможностей препроцессоров Haml и SCSS.
👉 @seniorFront
Оригинальные переключатели, реализованные с использованием возможностей препроцессоров Haml и SCSS.
👉 @seniorFront
🤔6
This media is not supported in your browser
VIEW IN TELEGRAM
Dots & Ring Loader
Оригинальный загрузчик, реализованный с использованием препроцессоров Pug и SCSS.
👉 @seniorFront
Оригинальный загрузчик, реализованный с использованием препроцессоров Pug и SCSS.
👉 @seniorFront
💯9👍2
Какой вариант ответа верно описывает SSL и TLS?
Anonymous Quiz
9%
Это протоколы для управления статическими данными и передачи файлов между серверами.
77%
Это протоколы, используемые для шифрования и обеспечения безопасной передачи данных в интернете.
11%
Это способы организации безопасного удаленного доступа к серверам и базам данных.
2%
Это протоколы, используемые для управления сетевым
😁6👍4🔥3
Media is too big
VIEW IN TELEGRAM
Animated Glowing Gradient Border
В этом видео создаётся светящаяся анимированная граница на CSS.
👉 @seniorFront
В этом видео создаётся светящаяся анимированная граница на CSS.
👉 @seniorFront
👍5
Как получить реальный опыт во фронтенд-разработке за 7 дней?
А именно:
- Сверстать веб-сайт на HTML + CSS;
- Реализовать функционал на JavaScript;
- Пощупать фронтенд-фреймворк Angular;
- Подключить Backend и загрузить сайт на хостинг.
В итоге своими руками разработаешь качественный сайт, который не стыдно добавить в портфолио или продать.
Такой опыт можно получить на бесплатном практикуме от Айтилогии с поддержкой от опытных разработчиков на каждом этапе.
👉 Приходи на бесплатное обучение и зови с собой друзей
Бонусом получишь гайд для поиска работы и заказов на фронтенд-разработку.
А именно:
- Сверстать веб-сайт на HTML + CSS;
- Реализовать функционал на JavaScript;
- Пощупать фронтенд-фреймворк Angular;
- Подключить Backend и загрузить сайт на хостинг.
В итоге своими руками разработаешь качественный сайт, который не стыдно добавить в портфолио или продать.
Такой опыт можно получить на бесплатном практикуме от Айтилогии с поддержкой от опытных разработчиков на каждом этапе.
👉 Приходи на бесплатное обучение и зови с собой друзей
Бонусом получишь гайд для поиска работы и заказов на фронтенд-разработку.
🤔4❤2👍1
Valid HK Phone Number
В Гонконге действительный телефонный номер имеет формат xxxx xxxx, где x - десятичная цифра (0-9). Определите две функции isValidHKPhoneNumber и hasValidHKPhoneNumber, которые возвращают, является ли заданная строка валидным номером телефона и содержит ли она валидный номер телефона соответственно (т.е. значения true/false).
Пример:
👉 @seniorFront
В Гонконге действительный телефонный номер имеет формат xxxx xxxx, где x - десятичная цифра (0-9). Определите две функции isValidHKPhoneNumber и hasValidHKPhoneNumber, которые возвращают, является ли заданная строка валидным номером телефона и содержит ли она валидный номер телефона соответственно (т.е. значения true/false).
Пример:
isValidHKPhoneNumber("1234 5678") = true👉 @seniorFront
👏3
Array.toLocaleString()
Метод массива toLocaleString() возвращает представление массива в виде строки, состоящей из результатов приведения каждого элемента массива к строке в соответствии с типом элемента и переданными параметрами локализации. В качестве разделителя значений используется символ определенный в соответсвии с параметрами локализации среды исполнения (',' или другой символ, используемый для разделения элементов в списке).
Для элементов массива, являющихся null или undefined, возвращается пустая строка.
Пример
Получим строку из массива с учётом локализации de-DE (немецкий язык и региональные стандарты чисел и дат Германии):
Получим строку из того же массива с учётом локализации en-US (английский язык и региональные стандарты чисел и дат США) и указанием часового пояса:
👉 @seniorFront
Метод массива toLocaleString() возвращает представление массива в виде строки, состоящей из результатов приведения каждого элемента массива к строке в соответствии с типом элемента и переданными параметрами локализации. В качестве разделителя значений используется символ определенный в соответсвии с параметрами локализации среды исполнения (',' или другой символ, используемый для разделения элементов в списке).
Для элементов массива, являющихся null или undefined, возвращается пустая строка.
Пример
Получим строку из массива с учётом локализации de-DE (немецкий язык и региональные стандарты чисел и дат Германии):
const array = [null, 50, 15000, new Date('2007-08-10')]
const arrayStr = array.toLocaleString('de-DE')
console.log(arrayStr)
// 50,15.000,10.8.2007, 03:00:00Получим строку из того же массива с учётом локализации en-US (английский язык и региональные стандарты чисел и дат США) и указанием часового пояса:
const array = [null, 50, 15000, new Date('2007-08-10')]
const arrayStr = array.toLocaleString('en-US', {timeZone: 'Europe/Amsterdam'})
console.log(arrayStr) // 50,15,000,8/10/2007, 2:00:00 AM👉 @seniorFront
🔥6👍4👏2👎1