Создание коллекций с повторяющимися элементами
Генерация коллекций с повторяющимися значениями, например, для тестирования или заполнения данных, часто требует написания циклов. Это может быть громоздко и не очень выразительно.
Статический метод
👉 @web_craft | #laravel
Генерация коллекций с повторяющимися значениями, например, для тестирования или заполнения данных, часто требует написания циклов. Это может быть громоздко и не очень выразительно.
Статический метод
Collection::times() предлагает более декларативный подход. Он создает новую коллекцию, запуская переданную функцию указанное количество раз. Индекс текущей итерации передается в функцию, что позволяет легко генерировать уникальные значения.use Illuminate\Support\Collection;
// Задача: создать коллекцию из 10 пользователей
// с уникальными именами User 1, User 2 и т.д.
// Традиционный подход с циклом for:
$users = new Collection();
for ($i = 1; $i <= 10; $i++) {
$users->push((object)['name' => 'User ' . $i]);
}
// Подход с методом times():
$users = Collection::times(10, function (int $number) {
return (object)['name' => 'User ' . $number];
});
👉 @web_craft | #laravel
👍7🤔2
Асинхронная координация потоков
👉 @web_craft | #frontend
SharedArrayBuffer можно создавать с изменяемым размером, указав опцию maxByteLength и вызывая метод resize(). Для координации потоков без блокировок предназначен Atomics.waitAsync(). Он асинхронно ожидает, пока другой поток изменит значение в указанной ячейке памяти. После изменения worker вызывает Atomics.notify().// Главный поток
const sab = new SharedArrayBuffer(1024, { maxByteLength: 4096 });
const int32 = new Int32Array(sab);
console.log('Ожидаем изменения от воркера...');
const asyncWait = Atomics.waitAsync(int32, 0, 0); // Ждем, пока значение в 0-м индексе станет не 0
asyncWait.promise.then((result) => {
console.log('Ожидание завершено:', result); // 'ok'
console.log('Новый размер буфера:', sab.byteLength);
});
// Код, который мог бы быть в воркере (worker.js)
/*
// ... получает sab и int32 ...
// Растит буфер
sab.resize(2048);
// Обновляет флаг
Atomics.store(int32, 0, 1);
// Уведомляет главный поток
Atomics.notify(int32, 0);
*/
👉 @web_craft | #frontend
❤4
Атрибут #[\NoDiscard] в PHP 8.5
Случайное игнорирование возвращаемого значения «чистой» функции может привести к трудноуловимым багам. Статья рассказывает об атрибуте
👉 @web_craft | #php
Случайное игнорирование возвращаемого значения «чистой» функции может привести к трудноуловимым багам. Статья рассказывает об атрибуте
#[\NoDiscard] в PHP 8.5, который решает эту проблему. При его использовании PHP выдаст предупреждение, если результат выполнения функции не был использован, что помогает статическим анализаторам находить потенциальные ошибки в коде.👉 @web_craft | #php
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Ваши ожидания от удалёнки оправдались?
👍 – Да, всё как мечтал(а) — работаю и кайфую.
❤️ – Есть и плюсы, и минусы, но в целом устраивает.
🤔 – Не моё, максимум гибрид.
👉 @web_craft |#юмор
👍 – Да, всё как мечтал(а) — работаю и кайфую.
❤️ – Есть и плюсы, и минусы, но в целом устраивает.
🤔 – Не моё, максимум гибрид.
👉 @web_craft |#юмор
👍16❤7🤔3
АНТИ-План по устройству в бигтех, или Как всё пошло не по плану
Многие разработчики месяцами готовятся к поиску работы мечты: доделывают портфолио и «тренируются» на неинтересных вакансиях. Автор статьи не стал исключением.
👉 @web_craft | #собес
Многие разработчики месяцами готовятся к поиску работы мечты: доделывают портфолио и «тренируются» на неинтересных вакансиях. Автор статьи не стал исключением.
👉 @web_craft | #собес
❤2
Похоже на ваш рабочий день?
👍 – Да, если бы не было тимлида.
❤️ – Нет, я потом до вечера проверяю код от нейронки.
👉 @web_craft |#юмор
👍 – Да, если бы не было тимлида.
❤️ – Нет, я потом до вечера проверяю код от нейронки.
👉 @web_craft |#юмор
❤11🤔2
Сила Intl API: нативная интернационализация в браузере
Поддержка разных языков часто означает подключение тяжёлых библиотек вроде Moment.js только для того, чтобы правильно отформатировать даты и валюты. Статья показывает, как
👉 @web_craft | #frontend
Поддержка разных языков часто означает подключение тяжёлых библиотек вроде Moment.js только для того, чтобы правильно отформатировать даты и валюты. Статья показывает, как
Intl API решает эти и многие другие задачи локализации нативно, без лишних зависимостей. 👉 @web_craft | #frontend
❤3
Назначение метода guest
Какую основную задачу решает метод
Забыли? Вернитесь к посту от01.09.2025 .
👉 @web_craft | #laravel
Какую основную задачу решает метод
guest() фасада Auth?Забыли? Вернитесь к посту от
👉 @web_craft | #laravel
❤3
Какую основную задачу решает метод guest() фасада Auth?
Anonymous Quiz
24%
Аутентифицирует пользователя как гостя.
10%
Создает временного гостевого пользователя.
1%
Завершает гостевую сессию пользователя.
65%
Возвращает true, если текущий пользователь не аутентифицирован.
👍4
Механизм работы top-level await
Как
Забыли? Вернитесь к посту от02.09.2025 .
👉 @web_craft | #frontend
Как
top-level await влияет на процесс загрузки модулей?Забыли? Вернитесь к посту от
👉 @web_craft | #frontend
❤3
Как top-level await влияет на процесс загрузки модулей?
Anonymous Quiz
25%
Запускает все модули параллельно, игнорируя асинхронные операции.
42%
Выполняет асинхронный код после полной загрузки всех модулей.
28%
Приостанавливает выполнение текущего и зависимых модулей до завершения асинхронной задачи.
5%
Выбрасывает ошибку, если модуль содержит асинхронный код.
❤5👍1
Условное определение атрибута disabled
В Blade-шаблонах нередко возникает необходимость отключить элемент формы в зависимости от определенного условия. Традиционно для этого применялись конструкции
Чтобы упростить подобные случаи, в Laravel была добавлена директива
Предположим, требуется отключить кнопку, если пользователь не имеет права совершать определенное действие. Проверка осуществляется через метод
Стандартный подход:
Решение с директивой
👉 @web_craft | #laravel
В Blade-шаблонах нередко возникает необходимость отключить элемент формы в зависимости от определенного условия. Традиционно для этого применялись конструкции
@if, что делало разметку перегруженной и менее читаемой.Чтобы упростить подобные случаи, в Laravel была добавлена директива
@disabled. Она принимает булево выражение и автоматически добавляет атрибут disabled, если условие истинно. Такой подход делает код более лаконичным и удобным для восприятия.Предположим, требуется отключить кнопку, если пользователь не имеет права совершать определенное действие. Проверка осуществляется через метод
$user->cannot('delete', $post).Стандартный подход:
<button type="submit"
@if ($user->cannot('delete', $post))
disabled
@endif>
Удалить пост
</button>
Решение с директивой
@disabled:<button type="submit"
@disabled($user->cannot('delete', $post))>
Удалить пост
</button>
👉 @web_craft | #laravel
❤3👍2
Stateless сервисы в PHP
Статья объясняет принципы Stateless архитектуры и демонстрирует, как этот подход упрощает создание масштабируемых и отказоустойчивых сервисов. В ней рассматриваются ключевые концепции, а также практические примеры реализации Stateless сервисов с использованием PHP.
👉 @web_craft | #php
Статья объясняет принципы Stateless архитектуры и демонстрирует, как этот подход упрощает создание масштабируемых и отказоустойчивых сервисов. В ней рассматриваются ключевые концепции, а также практические примеры реализации Stateless сервисов с использованием PHP.
👉 @web_craft | #php
❤3
Какие записи выбирает метод whereNowOrPast?
Anonymous Quiz
4%
Только записи, созданные в прошлом.
87%
Записи с датой в прошлом или настоящем.
5%
Записи, у которых дата не указана.
4%
Только записи, обновленные сегодня.
❤1👍1
Назначение whereNowOrPast
Какие записи выбирает метод
Посмотреть ответ.
👉 @web_craft | #laravel
Какие записи выбирает метод
whereNowOrPast?Посмотреть ответ.
👉 @web_craft | #laravel
❤1
Что делает RegExp.escape() со строкой, содержащей специальные символы?
Anonymous Quiz
5%
Ничего не меняет.
5%
Выбрасывает ошибку.
35%
Заменяет их на эквивалентные символы Unicode.
55%
Подготавливает её для включения в шаблон, экранируя их.
👍2
Принцип работы RegExp.escape()
Что делает
Посмотреть ответ.
👉 @web_craft | #frontend
Что делает
RegExp.escape() со строкой, содержащей специальные символы?Посмотреть ответ.
👉 @web_craft | #frontend
❤3
Кэширование HTTP-запросов
При работе с внешними API нередко требуется повторно использовать один и тот же ответ, чтобы снизить нагрузку и ускорить работу приложения. Laravel HTTP Client поддерживает встроенное кэширование ответов, что позволяет сохранять результаты на заданное время.
Для этого применяется метод
Такой подход полезен, например, при интеграции с сервисами, где данные обновляются редко, а количество запросов ограничено.
👉 @web_craft | #laravel
При работе с внешними API нередко требуется повторно использовать один и тот же ответ, чтобы снизить нагрузку и ускорить работу приложения. Laravel HTTP Client поддерживает встроенное кэширование ответов, что позволяет сохранять результаты на заданное время.
Для этого применяется метод
withCache(), в который передаётся объект CacheStore и время жизни кэша. При повторном обращении в пределах указанного времени будет возвращаться сохранённый результат, без повторного запроса к API.use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Cache;
// Кэшируем ответ на 60 секунд
$response = Http::withCache(Cache::store('file'), 60)
->get('https://api.example.com/posts');
// Проверяем статус
if ($response->ok()) {
$posts = $response->json();
}
Такой подход полезен, например, при интеграции с сервисами, где данные обновляются редко, а количество запросов ограничено.
👉 @web_craft | #laravel
👍5👎4