Библиотека шарписта | C#, F#, .NET, ASP.NET
22.7K subscribers
2.35K photos
38 videos
85 files
4.53K links
Все самое полезное для C#-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/b60af5a4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
🤖 Курс «ИИ-агенты для DS-специалистов»

Последняя возможность в этом году освоить ИИ-агентов — курс стартует уже 3 октября! Первый вебинар пройдёт в день старта, а подробности вебинара можно найти на сайте.

📚 Бонус: при оплате до 30 сентября вы получите дополнительный лонгрид для подготовки к курсу. Это отличный способ подойти к занятиям уже с базой.

🔥 А ещё после прохождения курса у вас будет достаточно знаний, чтобы участвовать в хакатоне с призовым фондом 1 125 000 ₽.

🔗 Записаться на курс и узнать подробности
🥱5
⚡️ Nullable vs null-check

работа с null всегда была источником ошибок. Каждый хоть раз ловил NullReferenceException в рантайме.
Есть два подхода: старый — вручную проверять null, и новый — использовать nullable reference types с поддержкой компилятора.

Код с ручной проверкой на null:
public string GetUserName(User? user)
{
if (user == null)
return "Anonymous";

return user.Name;
}


Плюсы:

• просто и понятно
• работает везде

Минусы:

• легко забыть проверить
• ошибки проявятся только в рантайме

С включённой фичей #nullable enable компилятор начинает помогать:
public string GetUserName(User? user)
{
return user?.Name ?? "Anonymous";
}


User? явно говорит: объект может быть null
• компилятор подсветит, если забыли проверить
• меньше бойлерплейта, больше читаемости

🐸 Библиотека шарписта

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥5🥱53
🐘 PostgreSQL 18 — быстрее, умнее, надёжнее

Вышла новая версия PostgreSQL 18. Главное новшество — асинхронный ввод-вывод. Также ускорили апгрейды: теперь статистика оптимизатора сохраняется между версиями, и база работает быстрее сразу после обновления.

Для разработчиков добавили виртуальные вычисляемые колонки, генерацию UUIDv7 для оптимальной индексации и поддержку SSO через OAuth 2.0. В текстовых операциях появился быстрый PG_UNICODE_FAST для Unicode-сравнений и новые возможности для полнотекстового поиска.

➡️ Анонс обновления

🐸 Библиотека шарписта

#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
🤖 Курс «ИИ-агенты для DS-специалистов»

Последняя возможность в этом году освоить ИИ-агентов с Proglib— старт живых вебинаров на курсе уже 3 октября!

Уже 24 студента изучают 5 лонгридов подготовительного модуля, чтобы сформировать базу к старту живых вебинаров с Никитой Зелинским.

📚 Бонус: при оплате до 30 сентября вы получите дополнительный лонгрид для подготовки к курсу. Это отличный способ подойти к занятиям уже с базой.

🔥 А ещё после прохождения курса у вас будет достаточно знаний, чтобы участвовать в хакатоне с призовым фондом 1 125 000 ₽.

🔗 Записаться на курс и узнать подробности
1🥱1
🔥 Избавляемся от if-else деревьев

Когда логика программы разрастается, мы часто пишем целые деревья if-else или switch. Но такой код тяжело читать и сопровождать.

Вместо if-ветвей можно использовать паттерн State. Он выносит каждое состояние в отдельный класс. Объект делегирует своё поведение текущему состоянию, а переходы происходят прозрачно.

Код с if'ами:
public class Document
{
public string State { get; set; } = "Draft";

public void Publish()
{
if (State == "Draft") State = "Moderation";
else if (State == "Moderation") State = "Published";
else Console.WriteLine("Документ уже опубликован");
}
}


Код со State:
public interface IDocumentState
{
void Publish(Document doc);
}

public class Draft : IDocumentState
{
public void Publish(Document doc) => doc.State = new Moderation();
}

public class Moderation : IDocumentState
{
public void Publish(Document doc) => doc.State = new Published();
}

public class Published : IDocumentState
{
public void Publish(Document doc) => Console.WriteLine("Уже опубликован");
}

public class Document
{
public IDocumentState State { get; set; } = new Draft();
public void Publish() => State.Publish(this);
}


Теперь добавление нового состояния — просто новый класс, без переписывания всей логики.

🐸 Библиотека шарписта

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82😢1