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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
🧑‍💻 Новые возможности модификаторов доступа на авто-свойствах в F# 10

До F# 10, чтобы создать свойство с публичным геттером и приватным сеттером, приходилось писать много кода с явным объявлением полей и методов. Теперь это стало проще — можно задавать разные уровни доступа прямо на авто-свойствах.

Раньше подобное требовало большого количества шаблонного кода:
type Ledger() =
[<DefaultValue>] val mutable private _Balance: decimal
member this.Balance with public get() = this._Balance and private set v = this._Balance <- v


В F# 10 достаточно написать:
type Ledger() =
member val Balance = 0m with public get, private set


Особенности

• Модификатор доступа можно назначить либо на всё свойство, либо отдельно на геттер или сеттер.

• В сигнатурах .fsi это пока не поддерживается, ограничения остаются

Теперь можно писать меньше шаблонного кода, сохраняя чёткое разграничение прав собственности.

🔹 ML для старта в Data Science
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

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

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱43👾1
✏️ Сокращаем код

Collection expressions — удобный синтаксис для создания и инициализации коллекций и массивов с помощью квадратных скобок и элементов, разделённых запятыми. Можно использовать spread-элементы (..) для вставки содержимого других коллекций внутрь новой.

Пример:
int[] odds = [1, 3, 5, 7];

string[] vowels = ["a", "e", "i", "o", "u"];
string[] consonants = ["b", "c", "d", "f"];
string[] alphabet = [..vowels, ..consonants, "y"];


С помощью выражений коллекций можно легко создавать массивы, списки, Span и другие коллекторные типы. Появились они в C# 12.

🔹 Экспресс-курс «Математика для Data Science»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

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

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
🤨 Как искусственный интеллект помогает писать тесты

Создание качественных модульных тестов — важный, но утомительный и затратный процесс. GitHub Copilot Testing для .NET упрощает эту задачу, автоматически генерируя, собирая и выполняя тесты прямо в вашем рабочем процессе.

Как начать использовать

1. Установите последнюю версию Visual Studio 2026 Insiders и получите лицензию GitHub Copilot

2. Включите функцию GitHub Copilot Testing через настройки (Tools > Options > GitHub > Copilot > Testing

3. Откройте проект или решение на C# и убедитесь, что оно успешно собирается

4. В чате Copilot напишите команду @Test #target, где #target — имя метода, класса, файла, проекта, решения или #changes для git diff

5. Copilot автоматически проанализирует код, создаст проект с тестами (если его нет), сгенерирует, соберёт и выполнит тесты.

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

🔹 Специалист по ИИ
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

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

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7😁1🤩1
Не кодь — вайбкодь. Бесплатно 🚀

Сбер представил бесплатный агентный режим GigaCode — нового цифровой разработчика, который берет на себя рутину, чтобы вы могли сосредоточиться на крутых задачах!

Что умеет GigaCode в агентном режиме?

Сам находит и открывает нужные файлы

Вносит изменения в код, запускает тесты, собирает проекты и оформляет коммиты в Git

Работает в вашей любимой среде: JetBrains IDE, GigaIDE Desktop, а скоро еще и в VS Code

Плюс, в GigaCode появилась новая модель автодополнения кода — GigaCode Inline 4.0. Она мгновенно предлагает нужные фрагменты кода для Python, Java, JavaScript и других языков. Подсказки стали еще точнее, а работа с контекстом — еще лучше.

🖱 Хотите ускорить разработку? Обновленный GigaCode уже доступен на GitVerse.

Начать вайбкодить — по ссылке
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱16😢13😁2🤩1👾1
🛠 Структурные опциональные параметры в F# 10

В F# 10 появилась возможность использовать структурный тип ValueOption<'T> для опциональных параметров. Это позволяет избежать выделения памяти в куче.

Теперь, применяя атрибут [<Struct>], можно указать компилятору использовать ValueOption<'T> — структуру, которая хранится на стеке и не требует дополнительных аллокаций.

Раньше:
type X() =
static member M(?x: string) =
match x with
| Some v -> printfn "Some %s" v
| None -> printfn "None"


Теперь с F# 10:
type X() =
static member M([<Struct>] ?x: string) =
match x with
| ValueSome v -> printfn "ValueSome %s" v
| ValueNone -> printfn "ValueNone"


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

🔹 Экспресс-курс «Математика для Data Science»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

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

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
2
⭐️ Логирование исключений с помощью фильтров

Фильтры исключений позволяют выполнить код при срабатывании catch, но при этом не перехватывать исключение.

Пример:
try 
{
await work();
}
catch (Exception ex) when (Log(ex))
{
// этот блок не выполняется, так как Log возвращает false
}

static bool Log(Exception ex)
{
// логируем исключение
return false;
}


Метод Log вызывается один раз при исключении, логирует его и возвращает false, чтобы исключение продолжило всплывать дальше без перехвата.

🔹 Алгоритмы и структуры данных
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

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

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔11😁42👾1
🤝 Перестаньте ждать, пока вас найдут

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

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

➡️ Действуйте, ищите, откликайтесь

🔸 Практический интенсив «Архитектуры и шаблоны проектирования»
🔸 Получить консультацию менеджера
🔸 Сайт Академии 🔸 Сайт Proglib

🐸 Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 На рынке сейчас математика — снова король: AI растёт быстрее, чем вузы успевают обновлять программы. Мы же перестраиваем курс под индустрию мгновенно.

Хочешь наконец разобраться в математике для DS, а не гуглить «что такое градиент» перед собесом?

Новый курс «Математика для разработки AI-моделей» — это 8 недель плотной подготовки, свежая программа и только актуальные темы, которые реально нужны в ML.

Что в курсе:

→ линал, производные, градиенты, вероятности, статистика;
→ практика на Python и 3 большие ДЗ;
→ живые вебинары + разбор ваших вопросов;
→ финальный мини-проект, который можно положить в портфолио;
→ доступ к материалам и чат с экспертами.

Для старта нужны только школьная математика и базовый Python.

🎁 Бонусы ноября:

— скидка 40% до 30 ноября;
— «Базовая математика» в подарок при оплате;
→ бесплатный тест уровня математики.

👉 Записывайся на курс
🤩 Типизированные вычислительные выражения в F# 10 без скобок

В F# 10 упростили синтаксис для аннотирования типов в вычислительных выражениях. Теперь можно добавлять типы в let!, use! и and! без необходимости использовать дополнительные скобки вокруг идентификаторов.

ньше для указания типа в вычислительном выражении приходилось писать так:
let! (x: int) = fetchValue()


Сейчас можно написать короче:
let! x: int = fetchValue()


Если вы часто работаете с async, task или другими вычислениями, это изменение вы оцените.

🔹 Алгоритмы и структуры данных
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

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

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
3🤔1🥱1
👨‍💻 Обработка ошибок в .NET minimal API

При разработке API важно правильно и понятно передавать клиентам информацию о возникших ошибках.

Одним из удобных способов сделать это в .NET minimal API является использование встроенного метода Results.Problem. Он возвращает объект с подробностями ошибки в стандарте ProblemDetails, что упрощает клиентам обработку ответа.

Пример:
app.MapGet("/users/{id}", async (string id, IUserRepo repo) =>
{
if (!Guid.TryParse(id, out var guid))
return Results.Problem("Invalid id", statusCode: 400);

var user = await repo.Find(guid);
return user is null ? Results.NotFound() : Results.Ok(user);
});


В этом коде при неверном формате id возвращается ProblemDetails с кодом 400, если пользователь не найден — 404, иначе 200 с данными.

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

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
3
💼 Карьерная «страховка» для IT‑шника

Рынок IT сильно изменился за последние годы. После бурного роста начались крупные сокращения и оптимизация команд. Сегодня никто не может быть уверен в стабильности работы — даже опытные разработчики сталкиваются с риском внезапного увольнения.

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

➡️ Собрать свою страховку

🔸 ML для старта в Data Science
🔸 Получить консультацию менеджера
🔸 Сайт Академии 🔸 Сайт Proglib

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4👍1
Коллекции .NET: взгляд изнутри

Как устроены стандартные коллекции в .NET и почему понимание их внутренней логики помогает писать более производительный код? На открытом вебинаре курса OTUS «C# Developer. Advanced» Антон Герасименко покажет, что происходит «под капотом» List, Dictionary и других структур данных.

🗓 4 декабря, 20:00

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

Вебинар будет полезен разработчикам уровня Junior и выше, которые хотят глубже понимать, как устроены базовые механизмы .NET и как использовать их эффективнее.

👉 Зарегистрируйтесь: https://clc.to/8-oWYg

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍2🥱21
💡 Tail-call оптимизация в вычислительных выражениях F# 10

В F# 10 появилась важная возможность оптимизировать использование вычислительных выражений с помощью поддержки tail-call оптимизации для ключевых вызовов return!, yield! и do!.

Теперь компилятор распознаёт, когда эти вызовы находятся в хвостовой позиции, и, если реализация билдера поддерживает специальные методы ReturnFromFinal, YieldFromFinal и им подобные, он применяет оптимизацию tail call. Это позволяет выполнять вызовы без дополнительного роста стека.

🔹 Основы IT для непрограммистов
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

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

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👾2
⚡️ Batch-обработка с помощью Chunk

Если нужно обработать коллекцию по частям — например, выгрузить данные пакетами, есть решение: метод Chunk. Он создаёт из исходного списка последовательность подсписков одинакового размера.

Пример:
foreach (var batch in items.Chunk(100))
{
await SaveBatch(batch);
}


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

🤌 Бонусы для подписчиков:
Скидка 40% на все курсы Академии
Розыгрыш Apple MacBook
Бесплатный тест на знание математики

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

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍202🥰2❤‍🔥1
💳 Как выбить зарплату побольше

Собрали для вас в карточках 5 стратегий для торгов на собеседовании. Есть ещё несколько, которые подробно описаны в статье.

🤌 Бонусы для подписчиков:
Скидка 40% на все курсы Академии
Розыгрыш Apple MacBook
Бесплатный тест на знание математики

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
2🥰1👾1
💻 Поддержка паттерна discard в use! в F# 10

Раньше в use! вычислительных выражениях нельзя было указать _ для игнорирования результата, что заставляло создавать ненужные имена переменных, например, __ или _ignored.

Теперь можно прямо написать:
use! _ = acquireResourceAsync()


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

🤌 Бонусы для подписчиков:
Скидка 40% на все курсы Академии
Розыгрыш Apple MacBook
Бесплатный тест на знание математики

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

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
3