Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍11❤5🤝4
Свой defer в стиле Go: выполняем код при выходе из scope!
Иногда нужно гарантированно “убраться” при выходе из функции: закрыть файл, освободить ресурс, что-то залогировать.
В Go для этого есть
Подключаем заголовки:
Сделаем небольшой
Теперь используем
При запуске увидим примерно такое:
🔥 Если же мы выйдем раньше (через
📣 C++ Ready | #практика
Иногда нужно гарантированно “убраться” при выходе из функции: закрыть файл, освободить ресурс, что-то залогировать.
В Go для этого есть
defer, а в C++ мы можем сделать похожее поведение через RAII и лямбды — на чистом стандарте.Подключаем заголовки:
#include <cstdio>
#include <utility>
Сделаем небольшой
helper Defer, который запоминает лямбду и вызывает её в деструкторе (то есть при выходе из области видимости):template <typename F>
class Defer {
public:
explicit Defer(F&& f)
: func_(std::forward<F>(f)) {}
Defer(const Defer&) = delete;
Defer& operator=(const Defer&) = delete;
~Defer() {
func_();
}
private:
F func_;
};
template <typename F>
Defer<F> make_defer(F&& f) {
return Defer<F>{std::forward<F>(f)};
}
Теперь используем
make_defer как “defer” — описываем, что должно выполниться при выходе из функции, и больше об этом не думаем:int main() {
std::FILE* f = std::fopen("data.txt", "w");
if (!f) {
std::perror("fopen");
return 1;
}
auto close_file = make_defer([&] {
std::puts("closing file...");
std::fclose(f);
});
std::puts("writing...");
std::fputs("hello\n", f);
if (std::ferror(f)) {
std::puts("write error");
return 1; // defer всё равно сработает
}
std::puts("ok");
return 0; // здесь тоже автоматически закроем файл
}При запуске увидим примерно такое:
writing...
ok
closing file...
return при ошибке), лямбда из make_defer всё равно вызовется — файл будет закрыт, даже если в функции несколько разных точек выхода.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤9👍5
❖ Что делать в случае отключения России от глобального Интернета?
❖ Как не сливать государству гигабайты своих данных?
❖ Как обойти «глушилку» мобильной связи в регионах?
В 2025 году любое государство готово залезть к вам в прямую кишку ради контроля персональных данных. И тендеция только набирает обороты.
Чтобы щупальца РКН, правоохранителей и мошенников не коснулись вашей жизни, держите в подписках «cybr.»
Анонимный хакер из российской группировки рассказывает как обходить ограничения, не оставлять «цифровые следы» и пользоваться топовыми нейронками без ограничений.
Сохраняйте, пока в стране во всю закручивают гайки, такие каналы — на вес золота: @cybr.
❖ Как не сливать государству гигабайты своих данных?
❖ Как обойти «глушилку» мобильной связи в регионах?
В 2025 году любое государство готово залезть к вам в прямую кишку ради контроля персональных данных. И тендеция только набирает обороты.
Чтобы щупальца РКН, правоохранителей и мошенников не коснулись вашей жизни, держите в подписках «cybr.»
Анонимный хакер из российской группировки рассказывает как обходить ограничения, не оставлять «цифровые следы» и пользоваться топовыми нейронками без ограничений.
Сохраняйте, пока в стране во всю закручивают гайки, такие каналы — на вес золота: @cybr.
😁10🔥4❤1👎1
Иногда тело цикла обрастает условиями и временными векторами; удобнее один раз описать шаги обработки и воспринимать их как последовательный поток.
В этом гайде:
• Посмотрим, как переписать цикл в линейный конвейер;
• Увидим, как ленивость избавляет от лишних аллокаций;
• Разберём приём повторного использования одной цепочки шагов.
Как только начинаешь мыслить обработку данных как поток, циклы перестают пугать и начинают складываться в аккуратные, читаемые цепочки.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15🤝12❤9👍1
Как аккуратно разобрать результат функции на несколько значений?
Функции нередко возвращают несколько значений сразу: диапазон, координаты, параметры.
Классический вариант —
При чтении кода приходится постоянно держать в голове, что такое
С C++17 можно аккуратно «распаковать» результат в говорящие имена через structured bindings:
Теперь из строки сразу понятно, что вернула функция, а порядок значений фиксируется явно в одном месте.
🔥 Итог: возвращай
📣 C++ Ready | #совет
Функции нередко возвращают несколько значений сразу: диапазон, координаты, параметры.
Классический вариант —
std::tuple или std::pair, которые потом читают через std::get<0>, std::get<1> и прочую «магическую нумерацию индексов»:auto result = minmax(data);
std::cout << std::get<0>(result) << " " << std::get<1>(result); // что из этого min, а что max?
При чтении кода приходится постоянно держать в голове, что такое
0 и 1, легко перепутать порядок.С C++17 можно аккуратно «распаковать» результат в говорящие имена через structured bindings:
const auto [min, max] = minmax(data);
Теперь из строки сразу понятно, что вернула функция, а порядок значений фиксируется явно в одном месте.
std::tuple / std::pair, а на приёме сразу раскладывай их в осмысленные имена через structured bindings — так код становится короче и читается без расшифровки индексов.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍7🤝4
This media is not supported in your browser
VIEW IN TELEGRAM
Отсортировали их для вашего удобства и выложили в телеграм-каналы по категориям:
Всё лучшее про IT бесплатно — уже на Базе
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1👎1
Собираем небольшую утилиту, которая за пару секунд придумывает десятки живых никнеймов из слов и чисел, оставляя место твоей фантазии каждый день.
В этой задаче ты:
• Увидишь, как из пары слов рождаются десятки имён;
• Почувствуешь, как меняется настроение от разных сочетаний слов;
• Соберёшь небольшой источник вдохновения для игр, проектов, переписок.
Если захочешь, просто добавь свои слова — и генератор начнёт говорить уже по-настоящему твоим голосом.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍5🔥5🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
На этом сайте собраны учебники и статьи по Python, JavaScript, Java, C/C++ и даже по искусственному интеллекту. Если хочешь учиться результативно, разобраться с языком или модулем — можно открыть нужную тему и идти шаг за шагом.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍5😁3❤1