В данной статье поговорим об использовании циклов. Какие нужны, а какие смогут уронить наш замечательный терминал. Кроме того, поговорим о синтаксическом сахаре из библиотеки LINQ, которая, как не сложно догадаться по динамике этих записей, тоже под запретом. Почему и как?
Один из самых быстрых циклов, которые существуют. Это основная боевая единица, которую нужно использовать.
Данный цикл не создаёт дополнительных методов в памяти и не является потоконебезопасным. Практически любую ситуацию внутри него можно обработать. Также он позволяет ставить внутри себя точки останова.
Бесконечный цикл с условием продолжения.
Также разрешён к использованию. Имеет все плюсы цикла for.
Этот цикл создаёт метод внутри памяти и не даёт контролировать выбор объекта. В случае, если есть какие-то проблемы с перечислением или листом, выбрасывается неконтролируемое исключение.
Данный цикл нельзя использовать в многопоточном окружении при работе с листами.
Он выдаст исключение в случае, если коллекция, по которой он бежит, изменилась.
Также нельзя из самого цикла foreach изменять коллекцию, с которой он работает.
Также, во время дебаггинга, в случае изменения кода внутри этого цикла, обычно Visual Studio не даёт продолжить работу программы, что затруднит отладку.
В общем и целом, применение данного цикла связано с трудноуловимыми ошибками, которые обязательно будут. Именно поэтому он полностью запрещён в использовании внутри коннекторов OsEngine.
Полный запрет на использование выражений из LINQ библиотеки. Это плачевно. Это грустно. Я сам эту библиотеку очень люблю. Однако по прошествии лет я понимаю, что это рассадник самых трудноуловимых багов, которые только могут быть.
Ниже картинка из обычного запроса к перечислению через эту библиотеку. Это чертовски удобно, ибо взамен данного выражения придётся написать цикл, а то и несколько. Пример взят отсюда: https://learn.microsoft.com/ru-ru/dotnet/standard/linq/
В процессе работы подобных запросов образуются методы в методе. Выделяется память под это.
Подобные запросы используют не потокобезопасные циклы, и в случае изменения коллекции в процессе работы будет исключение. Исключение выпадет не тогда, когда Вы будете это тестировать, а у другого пользователя через полгода.
Кроме того у данных типов запроса проблемы с дебаггингом и правками кода на лету. Что очень неудобно в итоге.
Поэтому, данные типы запросов при помощи LINQ под запретом. Как бы это прискорбно не было.
Данные стандарты существуют, чтобы начинающие программисты могли сделать качественный продукт, которым приятно пользоваться и пополнили своё резюме.
А сеньорам, которым эти стандарты могут не понравится, сообщаю, что мне они тоже не нравятся. Но никаких помощников кроме студентов и джунов у OsEngine нет, что и не плохо. При этом, к моему глубочайшему сожалению, код с LINQ, Task и прочими изысками отправится на помойку.
Что почитать?
Серия о том, как стать настоящим программистом и изменить свою профессию.
Оглавление и смыслы здесь: https://smart-lab.ru/company/os_engine/blog/959953.php
Комментарии открыты для друзей, добавляйтесь!
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