В последнее время заметил, что меня гнетёт тишина в общем чате. Сразу возникают непонятки, мол, что-то происходит или просто все заняты своими делами. Пишешь одному человеку, он говорит, мол, тоже такое заметил. Пишешь другому, он просто не отвечает. Не надо так.
Который работает на Electron, а у Telegram — нативный клиент
После того, как телегу разблокировали в РФ, и после вот этой конфы, куда приехал представитель телеги, к ней возникает много вопросов. И тут уже не столь важно, на каких технологиях она написана, если она дескридитирует вот так себя.
А все потому что вместо цикла написали LINQ-запрос, следующий программист не стал вникать
Так проблема в LINQ-запросе или в том, что следующий программист не стал вникать?
Если бы там был цикл, а не LINQ-запрос, следующий программист стал бы?
У меня есть друг, опытный разраб высокого класса, который на днях выпнул человека с собеса, потому что тот предоставил медленное решение. Задача была — реализовать специфичный LINQ метод. В C# эти методы следует делать ленивыми — через итераторы и yeild — а парень просто зафигачил новый список, и стал пихать в него значения, чем сломал ленивость.
Если твой друг ориентировался тем, что решение — медленное, то, по-моему, это повод выпнуть и его с собеседования. Потому что проблема тут не в производительности, а в архитектуре. И если ты внутри LINQ-метода будешь создавать список, то сломаешь не только и не столько производительность, сколько саму идеологию LINQ.
Ты пишешь цикл foreach по сущности, возвращённой этим LINQ-методом. При нормальном ходе событий, на каждой итерации цикла дёргается итератор, внутри отрабатывает код до очередного yield, вытаскивая элемент откуда-то, как-то его обрабатывая, и выдавая тебе в цикл.
Ежели же парень решил запилить внутри список, то он таки создаст его на первой итерации цикла. И...? Тут у меня несколько идей, что он мог там такого запилить, и одна другой мрачнее. Возвращает итератор на этот список? Возвращает сам список как IEnumerable? Ну, ок, а на следующей итерации цикла что происходит? Создаётся список ещё раз или он как-то кешируется… но где?
Я повторюсь, здесь проблема не в производительности, а в полном непонимании азов LINQ.
Хотя, с другой стороны, часто ли кому-то приходится реализовывать специфичные методы LINQ? Я давно не помню, чтобы я этим занимался, хотя на дотнете регулярно пилю то десктоп, то веб. Тут можно было бы, наверное, просто не парить парня этой задачей, если на практике он этого не будет касаться, а будет пилить очередной CRUD — и всем бы было хорошо.
Очень печально, что медицина стоит дорого. Но куда более печально то, что заплатив много денег ты очень рискуешь как минимум не получить обещанного результата, а как макисимум — лишиться того, что имеешь.
Я не понял из статьи. Ты тем глазом, которым смотришь вдаль, не можешь работать за компьютером?
После того, как телегу разблокировали в РФ, и после вот этой конфы, куда приехал представитель телеги, к ней возникает много вопросов. И тут уже не столь важно, на каких технологиях она написана, если она дескридитирует вот так себя.
Так проблема в LINQ-запросе или в том, что следующий программист не стал вникать?
Если бы там был цикл, а не LINQ-запрос, следующий программист стал бы?
Понятнее некуда. Каждое слово в этой цепочке — некое конкретное преобразование данных.
На каждое слово из этой цепочки тебе может пригодиться минимум по циклу. Итого, в твоём примере будет семь циклов.
Если твой друг ориентировался тем, что решение — медленное, то, по-моему, это повод выпнуть и его с собеседования. Потому что проблема тут не в производительности, а в архитектуре. И если ты внутри LINQ-метода будешь создавать список, то сломаешь не только и не столько производительность, сколько саму идеологию LINQ.
Ты пишешь цикл foreach по сущности, возвращённой этим LINQ-методом. При нормальном ходе событий, на каждой итерации цикла дёргается итератор, внутри отрабатывает код до очередного yield, вытаскивая элемент откуда-то, как-то его обрабатывая, и выдавая тебе в цикл.
Ежели же парень решил запилить внутри список, то он таки создаст его на первой итерации цикла. И...? Тут у меня несколько идей, что он мог там такого запилить, и одна другой мрачнее. Возвращает итератор на этот список? Возвращает сам список как IEnumerable? Ну, ок, а на следующей итерации цикла что происходит? Создаётся список ещё раз или он как-то кешируется… но где?
Я повторюсь, здесь проблема не в производительности, а в полном непонимании азов LINQ.
Хотя, с другой стороны, часто ли кому-то приходится реализовывать специфичные методы LINQ? Я давно не помню, чтобы я этим занимался, хотя на дотнете регулярно пилю то десктоп, то веб. Тут можно было бы, наверное, просто не парить парня этой задачей, если на практике он этого не будет касаться, а будет пилить очередной CRUD — и всем бы было хорошо.
Я не понял из статьи. Ты тем глазом, которым смотришь вдаль, не можешь работать за компьютером?