Здравствуйте, Serginio1, Вы писали:
I>> Вот еще одно заблуждение. С С++ и джавой ты не знаком?
S> Ииииииииииииии. Охренительный ответ.
S> Приводи код!! Знаком и там нет yield там и Linq нет!!
Ты адекватен, в джаве Linq искать? Там есть streams, которые покрывают твой любимый linq2objects
Employee employee = Stream.of(empIds)
.map(employeeRepository::findById)
.filter(e -> e != null)
.filter(e -> e.getSalary() > 100000)
.findFirst()
.orElse(null);
I>>А чуть выше ты соскакиваешь с цены в рантайме на цену в разработке.
I>>Например, когда я пишу, что IEnumerable имеет свою цену, ты начинаешь вещать про разработку.
S> Какую!!! Ты хоть напиши какую!!!
Четвертый раз — вместо x[i] у тебя MoveNext, проход через switch, присваивание Current и чтение Current
И вот эта каша крайне плохо инлайнится, а следовательно ест больше чем весит.
Заметь — это уже в четвертый раз я пишу, а до тебя не доходит.
S> Да извини но херню ты как раз пишешь. Никакой конкретики
Наоборот. Трижды пишу цену использования энумератор, но ты никак не поймешь.
I>>Это нужный сахар. И тем не менее его нельзя использовать бездумно. В числодробилках он может давать конские потери.
S>Причем тут числодробилки! Ты ратуешь за IQueriable. Вон Sinclair пришпондорил Linq.
IQueryable нужен там, где будет обработка Expression и нужен единый подход вне зависимости, BD или коллекции.
То есть, избавляет от дублирования.
Если это не является узким местом для перформанса — используй сколько хошь.
I>>Именно. Профайлер утверждает, что экономия может быть и полтора, и два, и даже десять раз.
S>Ну то есть ты за выполнение слева направо.
Откуда такой вывод? Я и слева направо обгоню это IEnumerable с не меньшим бенефитом.
S>же не заставляет использовать тебя IEnumerablt используй IList и обходись без ленивости.
Если собираешся итерировать по индексу, лучше запрашивать массив явно — исключается целый класс ошибок.
S>Только то вот Linq ленив и ленивость эту в основном создает yield с созданием определенных классов автоматов с сохранением состояния
Вот снова ересь — ленивость создаёт сам IEnumerable и никак иначе. Вобщем, каша. То одно пишешь, то другое, прямо противоположное