C# Ready | Unity
10.1K subscribers
1.2K photos
62 videos
552 links
Авторский канал по разработке на C# и Unity.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Автор: @energy_it

РКН: https://clck.ru/3SBaT3

Реклама на бирже: https://telega.in/c/csharp_ready
Download Telegram
📱 Корутины: сценарии времени без хаоса!

Когда события завязаны на время, удобнее описывать поведение как последовательность шагов с паузами, чем вручную крутить таймеры и внутренние флаги.

Коротко о корутинах:

Помогают вынести ожидания и задержки из игрового цикла;

Делают последовательные события читаемыми, как сценарий или раскадровка;

Упрощают отладку странных зависаний, редких триггеров и переходов.


Приручи сценарии времени, и игра откликнется стабильностью, плавностью, ясной логикой и быстрыми изменениями в будущем.

➡️ C# Ready | #unity
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1511👍6🤝4😁1
😁408🔥5👍1
Тестируем время с TimeProvider в .NET 8 без DateTime.UtcNow!

Когда код зависит от текущего времени (срок жизни токена, таймаут, ретраи) и везде стоит DateTime.UtcNow, такие вещи сложно тестировать.
В .NET 8 можно передавать время через TimeProvider — и сразу становится проще.

Сервис, который решает «просрочен токен или нет», принимает TimeProvider:
using System;

public class TokenService
{
private readonly TimeProvider _timeProvider;

public TokenService(TimeProvider timeProvider)
{
_timeProvider = timeProvider;
}

public bool IsExpired(DateTimeOffset expiresAtUtc)
{
var now = _timeProvider.GetUtcNow();
return now >= expiresAtUtc;
}
}


В тестах просто подменяем время на фейковое:
using System;
using Microsoft.Extensions.Time.Testing;

// "Замороженное" время
var fakeTime = new FakeTimeProvider(DateTimeOffset.UtcNow);
var service = new TokenService(fakeTime);

var expiresAt = fakeTime.GetUtcNow().AddMinutes(1);
Console.WriteLine(service.IsExpired(expiresAt)); // false

// Прокручиваем время вперёд
fakeTime.Advance(TimeSpan.FromMinutes(2));
Console.WriteLine(service.IsExpired(expiresAt)); // true


🔥 Главное — не дергайте DateTime.UtcNow напрямую. Пробрасывайте в код TimeProvider:
в приложении — TimeProvider.System, в тестах — FakeTimeProvider.

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍118🔥4
👩‍💻 Форматируем секунды в понятный текст!

Берём одно число в секундах и превращаем его в живое описание:
«1 день 3 часа 25 минут 4 секунды» — сразу понятно, сколько времени прошло или осталось.

В этой задаче:

Разложишь общее количество секунд на дни, часы, минуты и секунды простыми делениями;

Напишешь функцию, которая подбирает правильные окончания слов по правилам русского языка;

Соберёшь аккуратную строку, пропуская нулевые части и красиво выводя результат в консоль.


Из такого форматирования вырастают удобные логи, таймеры и отчёты, где за сухими секундами уже видно реальное время.

➡️ C# Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥149🤝8👍2👎1
This media is not supported in your browser
VIEW IN TELEGRAM
❤️ Если вы хотите прокачать навыки в C# и .NET, загляните на отличный ресурс — Code Maze!

Это современный сайт с обширной базой знаний по backend-разработке на ASP,NET Core, архитектуре приложений, шаблонам проектирования и лучшим практикам написания кода.

На Code Maze вы найдёте подробные гайды, пошаговые туториалы и примеры из реальных проектов. Материалы подойдут как для уверенных новичков, так и для опытных разработчиков.

📌 Оставляю ссылочку: code-maze.com

➡️ C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍7🔥4
👩‍💻 Почему интерфейсы делают код свободнее?

Когда логика начинает зависеть от конкретных классов, проект постепенно «деревенеет»: любое изменение тянет за собой цепочку правок, и система теряет гибкость для роста.

В этом гайде:

Поймём, как отделить намерение от реализации в поведении кода;

Увидим, почему подмена частей становится проще и безопаснее;

Разберём, как интерфейсы помогают тестировать модули без хаоса.


Думая в терминах контрактов — код становится гибче, чище и легче расширяется

➡️ C# Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1811🤝10👍7😁1
Измеряем время выполнения кода через Stopwatch — без догадок

Иногда кажется, что «этот метод тормозит», но без цифр это только ощущение. В .NET есть готовый инструмент для честного замера времени — класс Stopwatch.

Сначала подключим нужное пространство имён — оно лежит в System.Diagnostics:
using System;
using System.Diagnostics;


Теперь померяем, сколько времени занимает простой цикл с подсчётом суммы.
Создаём Stopwatch, запускаем, выполняем код, останавливаем и выводим результат:
var stopwatch = Stopwatch.StartNew(); // запускаем таймер

long sum = 0;
for (int i = 0; i < 10_000_000; i++)
{
sum += i;
}

stopwatch.Stop(); // останавливаем таймер

Console.WriteLine($"Сумма: {sum}");
Console.WriteLine($"Время выполнения: {stopwatch.ElapsedMilliseconds} мс");


Возможный вывод в консоли может выглядеть так:
Сумма: 49999995000000
Время выполнения: 35 мс


Stopwatch удобно использовать как «обёртку» вокруг любого участка кода: до него — StartNew(), после — Stop() и чтение ElapsedMilliseconds или Elapsed.

🔥Главное — не гадать «быстро или медленно», а мерить цифрами через Stopwatch и уже по ним решать: оптимизировать участок, менять алгоритм или оставить как есть.

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
16👍10🔥6
👩‍💻 Рисуем дерево файлов и папок в консоли!

Берём путь к папке и превращаем его в наглядное дерево: с отступами, «ветками» и файлами внутри. Вывод мгновенно показывает структуру проекта или директории — без проводника и лишних кликов.

В этой задаче:

Рекурсивно обойдёшь подкаталоги и соберёшь структуру папок и файлов;

Научишься рисовать ветки ├──, └── и вертикальные линии;

Выведешь аккуратное дерево в консоль, получив свой мини-tree.


Такой вывод удобно использовать, чтобы быстро просматривать структуру репозитория, делиться скриншотами дерева и встраивать результат в свои CLI-инструменты или скрипты сборки.

➡️ C# Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥128🤝5