Изображение блога
Алексей Ван <o-s-a.net>
Алексей Ван <o-s-a.net> Блог компании Os_Engine
20 декабря 2023, 19:08

Стандарты кода #7. Циклы и LINQ. Коннекторы для OsEngine #27.

В данной статье поговорим об использовании циклов. Какие нужны, а какие смогут уронить наш замечательный терминал. Кроме того, поговорим о синтаксическом сахаре из библиотеки LINQ, которая, как не сложно догадаться по динамике этих записей, тоже под запретом. Почему и как?

Стандарты кода #7.  Циклы и LINQ. Коннекторы для OsEngine #27. 

Цикл for – РАЗРЕШЁН.

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

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

 

Цикл while – РАЗРЕШЁН.

Бесконечный цикл с условием продолжения.

Также разрешён к использованию. Имеет все плюсы цикла for.

 

Цикл foreach – ЗАПРЕТ.

Этот цикл создаёт метод внутри памяти и не даёт контролировать выбор объекта. В случае, если есть какие-то проблемы с перечислением или листом, выбрасывается неконтролируемое исключение.

Данный цикл нельзя использовать в многопоточном окружении при работе с листами.

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

Также нельзя из самого цикла foreach изменять коллекцию, с которой он работает.

Также, во время дебаггинга, в случае изменения кода внутри этого цикла, обычно Visual Studio не даёт продолжить работу программы, что затруднит отладку.


В общем и целом, применение данного цикла связано с трудноуловимыми ошибками, которые обязательно будут. Именно поэтому он полностью запрещён в использовании внутри коннекторов OsEngine.

 

LINQ – ЗАПРЕТ.

Полный запрет на использование выражений из LINQ библиотеки. Это плачевно. Это грустно. Я сам эту библиотеку очень люблю. Однако по прошествии лет я понимаю, что это рассадник самых трудноуловимых багов, которые только могут быть.

Ниже картинка из обычного запроса к перечислению через эту библиотеку. Это чертовски удобно, ибо взамен данного выражения придётся написать цикл, а то и несколько. Пример взят отсюда: https://learn.microsoft.com/ru-ru/dotnet/standard/linq/

Стандарты кода #7.  Циклы и LINQ. Коннекторы для OsEngine #27. 

В процессе работы подобных запросов образуются методы в методе. Выделяется память под это.

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

Кроме того у данных типов запроса проблемы с дебаггингом и правками кода на лету. Что очень неудобно в итоге.

Поэтому, данные типы запросов при помощи LINQ под запретом. Как бы это прискорбно не было.

 

Зачем эти запреты? Напоминаю.

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

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

Что почитать?

  1. https://translated.turbopages.org/proxy_u/en-ru.ru.f6f9097d-64c1007b-c7c496e2-74722d776562/https/stackoverflow.com/questions/1167333/why-doesnt-a-foreach-loop-work-in-certain-cases про цикл foreach и то, как он генерирует ошибки.
  2. https://habr.com/ru/articles/503734/  О том, как прекрасен LINQ, но как опасно его юзать, ибо из читателей этой статьи 99% нихрена не поймут.

 

Пост из серии «Коннекторы к OsEngine»

Серия о том, как стать настоящим программистом и изменить свою профессию.

Оглавление и смыслы здесь: https://smart-lab.ru/company/os_engine/blog/959953.php

Комментарии открыты для друзей, добавляйтесь!

Стандарты кода #7.  Циклы и LINQ. Коннекторы для OsEngine #27.

OsEngine: https://github.com/AlexWan/OsEngine
Поддержка OsEngine: https://t.me/osengine_official_support

Регистрируйся в АЛОР и получай бонусы: https://www.alorbroker.ru/open
Сайт АЛОР БРОКЕР: https://www.alorbroker.ru
Раздел «Для клиентов»: https://www.alorbroker.ru/openinfo/for-clients

Стандарты кода #7.  Циклы и LINQ. Коннекторы для OsEngine #27.

0 Комментариев

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн