Основы C#

Теория: Цепочки вызовов методов

Обработка данных может состоять из достаточно большого количества шагов, которые нужно выполнить. Возьмем для примера такую задачу: На основе введенного пользователем названия статьи сформировать адрес страницы в интернете. Такая задача часто возникает при публикации статей в блогах. Подобные адреса выглядят так: https://ru.hexlet.io/blog/posts/iz-vahtovika-v-programmirovanie. Последняя часть здесь iz-vahtovika-v-programmirovanie создана автоматически кодом, который мы написали на Хекслете. Кстати у нее есть специальное название – это слаг.

Какие шаги нужно выполнить чтобы получить подобную строку? Вот лишь некоторые из них:

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

Часть шагов тут требует новых для нас знаний, поэтому мы их опустим. Остальные шаги будут выглядеть примерно так:

// Название введенное пользователем. Для простоты на английском
var name = " How match is the fish?   ";
name = name.Trim(); // вырезаем концевые пробелы
name = name.Replace("?", ""); // Удаляем вопрос
name = name.Replace(" ", "-"); // Заменяем пробелы на дефис
name = name.ToLower(); // в нижний регистр
Console.WriteLine(name); // => "how-match-is-the-fish"

Если внимательно посмотреть на этот код, то можно заметить общий шаблон. Метод возвращает данные, которые мы присваиваем переменные и дальше, по цепочке, обрабатываем. Этот шаблон можно упростить, убрав промежуточное перезаписывание переменной:

var name = " How match is the fish?   ";
name = name.Trim().Replace("?", "").Replace(" ", "-").ToLower();
Console.WriteLine(name); // => "how-match-is-the-fish"

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

name = name.Trim()
  .Replace("?", "")
  .Replace(" ", "-")
  .ToLower();

Несмотря на удобство этого механизма, им не стоит злоупотреблять. Иногда промежуточные переменные могут упростить понимание кода.

Рекомендуемые программы

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845