Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥18🤝15❤3
Например,
код 200 означает, что всё прошло успешно, а 404 сообщает, что страница не найдена.Очень полезно держать под рукой, когда работаешь с API или отлаживаешь backend.
На картинке показаны самые часто используемые статусы от 100 до 599.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍10❤9
args[] легко превращается в понятные настройки: флаги включают режимы, --file принимает путь, а всё лишнее аккуратно ловится как ошибка.В этой задаче узнаешь:
• Как разбирать флаги -v/-h без путаницы;
• Как поддержать --file=... и --file ... одним правилом;
• Зачем нужен --, чтобы отделять опции от аргументов.
Такой каркас можно спокойно расширять: добавлять
--out, --mode, команды и нормальные сообщения об ошибках.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍6❤5👎3🤝3
This media is not supported in your browser
VIEW IN TELEGRAM
На нём собраны структурированные уроки, которые охватывают как базовые, так и продвинутые темы — от переменных и циклов до ООП, работы с файлами и созданием оконных приложений.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥6👍3
Читаем большой файл построчно — когда лог огромный, а память не резиновая!
Иногда нужно обработать большой лог или CSV на десятки/сотни мегабайт. Если читать его целиком через
Для таких случаев в C# есть
Подключим нужные пространства имён:
Зададим путь к файлу:
Пройдёмся по файлу построчно и посчитаем ошибки:
🔥
➡️ C# Ready | #практика
Иногда нужно обработать большой лог или CSV на десятки/сотни мегабайт. Если читать его целиком через
ReadAllLines(), файл сначала полностью грузится в память — это лишние аллокации и давление на GC.Для таких случаев в C# есть
File.ReadLines() — он читает файл лениво, отдавая строки по мере чтения.Подключим нужные пространства имён:
using System;
using System.IO;
Зададим путь к файлу:
string path = @"C:\Logs\app.log";
Пройдёмся по файлу построчно и посчитаем ошибки:
int errors = 0;
foreach (var line in File.ReadLines(path))
{
if (line.Contains("ERROR"))
errors++;
}
Console.WriteLine($"Найдено ошибок: {errors}");
ReadLines() идеально подходит для больших файлов: не загружает всё в память, обрабатывает “на лету” и помогает избежать лишних аллокаций.Please open Telegram to view this post
VIEW IN TELEGRAM
❤13🔥6👍3
На картинке — простая схема, которая показывает, как браузер и сервер создают безопасное соединение: сначала проверяют сертификат через CA, затем обмениваются ключами и выбирают шифры, а после поднимают зашифрованный туннель для передачи данных с сеансовым ключом.
Сохрани, чтобы быстро освежить в голове TLS-рукопожатие и легко объяснить HTTPS на собесе или друзьям!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍7❤3
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥12🤝6❤4
This media is not supported in your browser
VIEW IN TELEGRAM
Там собрано множество обучающих материалов, начиная с простого уровня, вы сможете обучаться, а также проходить тесты. Подмечу что в нужных местах присутствуют картинки, что помогает усвоить материал лучше.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20🤝11❤7
Как писать SQL / JSON с интерполяцией без +, \n и экранирования?
Когда в коде появляются большие SQL или JSON, обычные строки быстро превращаются в кашу: конкатенации,
В C# 11 появились raw-строки (
Но что делать, если в тексте нужны переменные?
Для этого используются raw-строки с интерполяцией —
Количество
🔥 raw-строки с интерполяцией — лучший способ хранить большие тексты в коде.
➡️ C# Ready | #совет
Когда в коде появляются большие SQL или JSON, обычные строки быстро превращаются в кашу: конкатенации,
\n, кавычки, сложно читать и ещё сложнее править.В C# 11 появились raw-строки (
"""), которые позволяют писать многострочный текст “как есть”:var sql = """
SELECT * FROM Users
""";
Но что делать, если в тексте нужны переменные?
Для этого используются raw-строки с интерполяцией —
$$""" и {{ }}:var sql = $$"""
FROM {{table}}
WHERE Name = '{{name}}'
""";
Количество
$ определяет, сколько { нужно для вставки значения — это позволяет без боли писать JSON, SQL и шаблоны с фигурными скобками внутри.Please open Telegram to view this post
VIEW IN TELEGRAM
❤17👍11🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
На нём вы найдёте каталог
code smells (запахов кода) и техник рефакторинга, а также разбор 22 классических паттернов с понятными объяснениями и примерами. Плюс — книги и материалы для системного изучения темы.Please open Telegram to view this post
VIEW IN TELEGRAM
❤13🔥5👍3
CallerArgumentExpression: показываем точное выражение в ошибке без ручных строк!
Часто в коде есть проверки аргументов: null, пустая строка, отрицательное значение. Обычно хочется, чтобы ошибка сразу говорила, какое именно выражение провалилось, но это быстро превращается в ручные строки и копипасту.
Раньше приходилось писать сообщения руками, чтобы понять причину падения:
Здесь метод универсальный, но он ничего не знает про то, какое условие ты проверяешь, поэтому информацию приходится передавать строкой.
И вот как это выглядит на реальном вызове:
Проблема в том, что это шумно: строки надо поддерживать, легко забыть обновить при рефакторинге, а сложные условия превращаются в “конструктор сообщений”.
В C# 10 появился CallerArgumentExpression — он умеет получать исходный текст выражения, которое передали в метод:
А вызов теперь можно сделать коротким, без ручных строк:
Если условие провалится, сообщение получится информативным автоматически, например “Проверка не прошла: age > 0”.
🔥 Проверки становятся короче, а сообщения об ошибках — намного полезнее без копипасты.
➡️ C# Ready | #практика
Часто в коде есть проверки аргументов: null, пустая строка, отрицательное значение. Обычно хочется, чтобы ошибка сразу говорила, какое именно выражение провалилось, но это быстро превращается в ручные строки и копипасту.
Раньше приходилось писать сообщения руками, чтобы понять причину падения:
static void Ensure(bool condition, string message)
{
if (!condition)
throw new ArgumentException(message);
}
Здесь метод универсальный, но он ничего не знает про то, какое условие ты проверяешь, поэтому информацию приходится передавать строкой.
И вот как это выглядит на реальном вызове:
var user = "Анна";
var age = -1;
Ensure(!string.IsNullOrWhiteSpace(user), $"Некорректный user: '{user}'");
Ensure(age > 0, $"Некорректный age: {age}");
Проблема в том, что это шумно: строки надо поддерживать, легко забыть обновить при рефакторинге, а сложные условия превращаются в “конструктор сообщений”.
В C# 10 появился CallerArgumentExpression — он умеет получать исходный текст выражения, которое передали в метод:
using System.Runtime.CompilerServices;
static void Ensure(bool condition, string? message = null,
[CallerArgumentExpression("condition")] string? expr = null)
{
if (!condition)
throw new ArgumentException(message ?? $"Проверка не прошла: {expr}");
}
А вызов теперь можно сделать коротким, без ручных строк:
var user = "Анна";
var age = -1;
Ensure(!string.IsNullOrWhiteSpace(user));
Ensure(age > 0);
Если условие провалится, сообщение получится информативным автоматически, например “Проверка не прошла: age > 0”.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍7🔥3