[Голосование] Используете ли вы синтаксис в LINQ?
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.11.15 06:08
Оценка:
http://rsdn.ru/poll/5321
Автор: VladD2
Дата: 30.11.15
Вопрос: Используете ли вы синтаксис в LINQ? И как часто?
"Синтаксис" означает, что вы пишите "x from xs where x > 10 select x", а не xs.Where(x => x > 10)
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: [Голосование] Используете ли вы синтаксис в LINQ?
От: Shmj Ниоткуда  
Дата: 30.11.15 08:47
Оценка:
Здравствуйте, VladD2, Вы писали:

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

Люблю красоту. И ностальгирую по SQL, а синтаксис создает некую иллюзию SQL.
Re[2]: [Голосование] Используете ли вы синтаксис в LINQ?
От: Jack128  
Дата: 30.11.15 09:08
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, VladD2, Вы писали:


S>Использую когда возможно. Т.е. когда большая часть выражений представлена "сахаром".


S>Люблю красоту. И ностальгирую по SQL, а синтаксис создает некую иллюзию SQL.

Под красотой ты имеешь ввиду смесь query syntax и обычного в одном выражении??
Отредактировано 30.11.2015 9:09 Jack128 . Предыдущая версия .
Re: [Голосование] Используете ли вы синтаксис в LINQ?
От: Mihas  
Дата: 30.11.15 09:12
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>синтаксис в LINQ

Во фразе не хватает названия синтаксиса. Не сразу ясно, о чем речь.
Re: [Голосование] Используете ли вы синтаксис в LINQ?
От: Kolesiki  
Дата: 30.11.15 13:21
Оценка: -9
Пока только начало голосования, но уже очевидна тенденция: яйцеголовые шарпопилы (вы уж простите за такую точную аллегорию) наворотили космических абстракций там, где в них особо и не было нужды. Сразу вспоминается классическая отмаза всхлиппертов "Да вы знаете сколько нужно времени, чтобы реализовать оператор "вопросик"?!!!" — а не проще ли ПЕРЕД тем, как тратить впустую время, "пошевелить языком" (© анек про книжку "Куниллингус") и спросить юзеров — оно вам надо? Понятно, что концепция исходила из идеи "зачем нам гетерогенный SQL, когда на нём можно писать прямо в коде", но как видите, никто даже в мире баз данных не рвётся особо LINQовать. Видимо, потому что сам SQL суть принципиально другой язык и в императивном C# делать ему нечего. Вот что бывает, когда одну убогую концепцию (выборка из РСУБД) пытаются растянуть на всю вселенную (выборка из любой коллекции). Обрабатывать коллекции можно классическими функциями без вообще какого-либо касания синтаксиса. Вот так простота победила всемогутерство.
Re: [Голосование] Используете ли вы синтаксис в LINQ?
От: alexzz  
Дата: 30.11.15 14:08
Оценка: :)
Здравствуйте, VladD2, Вы писали:

x from xs where x > 10 select x


Такой вариант я не использую, потому что он не скопмилируется. Использую другой:

var result = from x in xs
             where x > 10
             select x;


Пишу так в половине случаев, там где не требуется добавлять в конце FirstOrDefault(), ToList() и т.п. Если синтаксиса запросов не хватает и требуется дополнительно использовать синтаксис методов, то пишу сразу используя синтаксис методов.
Отредактировано 30.11.2015 14:09 alexzzzz . Предыдущая версия .
Re[2]: [Голосование] Используете ли вы синтаксис в LINQ?
От: Sinix  
Дата: 30.11.15 14:08
Оценка: :)))
Здравствуйте, Kolesiki, Вы писали:

K>Обрабатывать коллекции можно классическими функциями без вообще какого-либо касания синтаксиса. Вот так простота победила всемогутерство.


Кажется, теперь я знаю, для кого придуман php.
Re: [Голосование] Используете ли вы синтаксис в LINQ?
От: Sinix  
Дата: 30.11.15 14:25
Оценка: 2 (1) +2
Здравствуйте, VladD2, Вы писали:

VD>http://rsdn.ru/poll/5321
Автор: VladD2
Дата: 30.11.15
Вопрос: Используете ли вы синтаксис в LINQ? И как часто?
"Синтаксис" означает, что вы пишите "x from xs where x > 10 select x", а не xs.Where(x => x > 10)


По-моему, тут опрос некорректно составлен.

Если запрос хорошо ложится на linq (тот же orm, или, например, вытащить данные из csv в нескольких папках, собрать значения в бизнес-объекты и посчитать/закинуть куда-нить) — смысла использовать extension-методы никакого.
Если нужен банальный отбор/select — зачем тут linq? чтоб было?

Теперь сравниваем, как часто нужен первый случай и как часто второй и получаем прям-таки эталонный "нинужен": большинство linq не юзает, т.к. не залазит в нишу, где без сабжа сложновато.
Re: [Голосование] Используете ли вы синтаксис в LINQ?
От: tyomchick Россия  
Дата: 30.11.15 14:37
Оценка: +1
Здравствуйте, VladD2, Вы писали:

Если бы запросы реально писались как в SQL, то наверное использовал бы.
А так мне его читать сложно. Часто пишу SQL-запросы, и видимо от этого эти "перевернутые" SQL-подобные запросы меня вгоняют в ступор.
Мне кажется, если бы не знал SQL или просто очень редко писал на нем, то мне было бы проще.
Даже самую простую задачу можно сделать невыполнимой, если провести достаточное количество совещаний
Re[2]: [Голосование] Используете ли вы синтаксис в LINQ?
От: Yoriсk  
Дата: 30.11.15 16:44
Оценка: 2 (1) +4
Здравствуйте, tyomchick, Вы писали:

T>А так мне его читать сложно. Часто пишу SQL-запросы, и видимо от этого эти "перевернутые" SQL-подобные запросы меня вгоняют в ступор.


Вообще-то наоборот, это в SQL запросы перевёрнутые. Пытаясь добававить "естественности" (select name from people) убили автокомплиты: from идёт ближе к концу, поэтому пока этот конец не написан принципиально непонятно, что за фигня стоит в select.
Re[3]: [Голосование] Используете ли вы синтаксис в LINQ?
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.11.15 18:13
Оценка: -8
Здравствуйте, Yoriсk, Вы писали:

Y>Пытаясь добававить "естественности" (select name from people) убили автокомплиты: from идёт ближе к концу, поэтому пока этот конец не написан принципиально непонятно, что за фигня стоит в select.


Это аргумент высосан из пальца пиарщиками из Макрософт. На практике нет никаких проблем написать "SELECT FROM xs", а потом вернуться к секции SELECT и пользоваться комплитом. Парсеру совершенно фиолетово где этот самый SELECT находится.

Надо более критично воспринимать пропаганду пиарщиков. Они любую глупость могут обосновать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 04.12.2015 15:56 VladD2 . Предыдущая версия .
Re[4]: [Голосование] Используете ли вы синтаксис в LINQ?
От: alexzz  
Дата: 30.11.15 19:06
Оценка: 34 (1) +8 :)
Здравствуйте, VladD2, Вы писали:

VD>Это аргумент высосан из пальца пиарщиками из Макрософт. На практике нет никаких проблем написать "SELECT FROM xs", а потом вернуться к секции SELECT и пользоваться комплиту. Парсеру совершенно фиолетово где этот самый SELECT находится.

VD>Надо более критично воспринимать пропаганду пиарщиков. Они любую глупость могут обосновать.

Не вижу в этом смысла. В C# сделано логично ― от источника данных через ряд фильтров и преобразований постепенно продвигаешься к финальному результату. Можно прочитать запрос от начала до конца, не прыгая взад-вперёд, чтобы понять, что в нём откуда берётся.

var closestMarker = (from body in bodies
                      where body != ignoreBody
                      from part in body.Parts
                      from marker in part.attachables.OfType<Marker>()
                      let distance = Vector3.Distance(marker.WorldPosition, pointerPosition)
                      where distance < SNAP_DISTANCE_LIMIT
                      orderby distance ascending
                      select marker).FirstOrDefault();
Re[4]: [Голосование] Используете ли вы синтаксис в LINQ?
От: Sinix  
Дата: 30.11.15 20:02
Оценка: 11 (2) +3
Здравствуйте, VladD2, Вы писали:

VD>Надо более критично воспринимать пропаганду пиарщиков. Они любую глупость могут обосновать.


Огосспидя, ну взрослые вроде люди, а всё к пиарщикам сводят
Интеллисенс — самый понятный довод был, его и использовали чтоб не объяснять.
Собственно комментарии выше в топике наглядно показывают почему: люди очень не любят изучать что-то непривычное и объяснения воспринимают чуть ли не как агрессию/попытку оправдаться. А вот обозвать непонятное идиотизмом — эт всегда пожалуйста

Основная причина варианта с select в конце была в трёх моментах:
1. linq не затачивался под реляционные структуры данных. Т.е. linq — это _НЕ_ sql. Как результат, он одинаково натягивается на практически всё, что угодно, rx/tpl/xml/... — подставить по вкусу.
2. Одним из ключевых требований было таким: дерево выражений для linq-запроса не должно принципиально отличаться от того же дерева, полученного через цепочку ext-методов. Это здорово упростило написание linq-провайдеров, т.к. не надо было держать отдельные ветки кода+тестов для каждого из случаев (т.е. да, могло быть _ещё_ хуже).
3. Вариант с select вначале никак не ложился на сложные цепочки вида from ... select ... into ... where ... select ... и выдавал совершенную ересь вместе с let clause. Это с учётом предыдущих пунктов и поставило крест на идее.

Ну и интеллисенс, да. Эксперимент ставили, не пошло. Поскольку речь шла про фичу для мейнстрим языка, "мы сделаем вам неудобно, зато по феншую" за довод не прокатил.
Re[5]: [Голосование] Используете ли вы синтаксис в LINQ?
От: GlebZ Россия  
Дата: 30.11.15 20:20
Оценка: +2
Здравствуйте, Sinix, Вы писали:

S>1. linq не затачивался под реляционные структуры данных.

оно и реляционке по барабану. Вероятнее всего это результат требований английского языка, используемый кухарками, для которых проектировали sql. При синтаксичесом разборе — очень неудобная штука.
Re[3]: [Голосование] Используете ли вы синтаксис в LINQ?
От: Kolesiki  
Дата: 30.11.15 23:08
Оценка: :)
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, Kolesiki, Вы писали:


K>>Обрабатывать коллекции можно классическими функциями без вообще какого-либо касания синтаксиса. Вот так простота победила всемогутерство.


S>Кажется, теперь я знаю, для кого придуман php.


Ты не знаешь, для кого придуман LINQ — как ты можешь знать про похапэ?? И остальные 90% прогеров (включая меня) тоже без особого энтузиазма смотрят на этот "недоSQL", на который, кстати, затрачены ресурсы. На которые вечно уповают "запиливатели фич" (не могу называть их профессионально "программистами").
Re[4]: [Голосование] Используете ли вы синтаксис в LINQ?
От: Yoriсk  
Дата: 01.12.15 07:26
Оценка:
Здравствуйте, VladD2, Вы писали:

Y>>Пытаясь добававить "естественности" (select name from people) убили автокомплиты: from идёт ближе к концу, поэтому пока этот конец не написан принципиально непонятно, что за фигня стоит в select.

VD>Это аргумент высосан из пальца пиарщиками из Макрософт. На практике нет никаких проблем написать "SELECT FROM xs", а потом вернуться к секции SELECT и пользоваться комплиту.

Ага, ну то есть тот факт, что в sql запрос как раз "перевёрнут" вы таки признали. А вот аргументации "ну и что, задом-наперёд очень даже удобно, всегда можно написать конец, а потом вернуться, это очень здорово" я как-то не встечал, это весьма свежо.

VD>Надо более критично воспринимать пропаганду пиарщиков. Они любую глупость могут обосновать.


Не надо вполне очевидные аргументы воспринимать как пиар враждебных сил. Любой, кто писал sql запросы прекрасно знает как это неудобно.
Re[5]: [Голосование] Используете ли вы синтаксис в LINQ?
От: Yoriсk  
Дата: 01.12.15 07:36
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Поскольку речь шла про фичу для мейнстрим языка, "мы сделаем вам неудобно, зато по феншую" за довод не прокатил.


Интересно, а в пользу sql-синтаксиса кроме как "зато по феншую"(весльма сомнительному надо сказать) аргументы вообще какие-то есть?
Re[6]: [Голосование] Используете ли вы синтаксис в LINQ?
От: Sinix  
Дата: 01.12.15 08:01
Оценка: 1 (1)
Здравствуйте, Yoriсk, Вы писали:

Y>Интересно, а в пользу sql-синтаксиса кроме как "зато по феншую"(весльма сомнительному надо сказать) аргументы вообще какие-то есть?

Дык тёмное наследие прошлого(pdf) же 41 год закапывания закапывателей намекают, что дедушка ещё и нас переживёт.
Re[5]: [Голосование] Используете ли вы синтаксис в LINQ?
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.12.15 11:43
Оценка:
Здравствуйте, alexzz, Вы писали:

A>Не вижу в этом смысла.


SQL и английский язык бессмысленны?

A>В C# сделано логично ― от источника данных через ряд фильтров и преобразований постепенно продвигаешься к финальному результату.


Это не логично, а близко к модели в которую переписывается выражение. С точки зрения английской грамматики Select something from some table не менее логично.

Вам же втюхали (по средством пиара) мысль о том, что именно так правильно. И теперь вы считаете это логичным.

A>Можно прочитать запрос от начала до конца, не прыгая взад-вперёд, чтобы понять, что в нём откуда берётся.


Человеческий разум без проблем "прыгает". Это не аргумент. Миллиарды людей каждый день говорят на английском, в котором постоянно приходится прыгать. Я уже не говорю уже о сотнях миллионах русских которые постоянно воспринимают предложения слова в которых стоят то так, то эдак. Нам совершенно все равно попросят ли нас:
1. Выбрать красные шары из мешка.
2. Из мешка взять красные шары.
3. Выбрать шары красного цвета из мешка.
4. Выбрать шары из мешка, но те у которых красный цвет.

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

Так что этот ваш аргумент это не более чем тест на подверженность пропаганде. И не мудрено, что те кто ее принял будут с пеной у рта защищать навязанное им мнение. Такова человеческая природа.

Те кто создавал SQL исходили из того, что запросы должны быть нормальными фразами на английском языке. В этом тоже есть смысл.

Лично по мне по фигу как записан запрос. Я пойму любую его форму. А, если мне нужно будет записать его на C#, то я предпочту версию без синтаксиса: xs.Where(x => x > 0).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: [Голосование] Используете ли вы синтаксис в LINQ?
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.12.15 14:23
Оценка:
Здравствуйте, Yoriсk, Вы писали:

Y>Ага, ну то есть тот факт, что в sql запрос как раз "перевёрнут" вы таки признали.


Это ты только что сам придумал. Видимо для собственного успокоения. Я утверждаю, что в SQL это работает. А вопрос где что перевернуто — это вопрос философский. Человеку привыкшему к английскому такой вариант кажется более естественно. Человеку привыкшему мыслить абстрактно просто по фигу. Машине вообще все равно. Она любой текст разберет.

В аргументах же пиарщиков говорилось именно о невозможности реализации качественного интеллисенса. И это явная ложь.

Y>А вот аргументации "ну и что, задом-наперёд очень даже удобно, всегда можно написать конец, а потом вернуться, это очень здорово" я как-то не встечал, это весьма свежо.


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

VD>>Надо более критично воспринимать пропаганду пиарщиков. Они любую глупость могут обосновать.


Y>Не надо вполне очевидные аргументы воспринимать как пиар враждебных сил. Любой, кто писал sql запросы прекрасно знает как это неудобно.


Вам промыли голову пиаром и вы защищаете навязанные ложные утверждения.

Я понимаю, что обидно понимать, что ты поддался на рекламу и маркетинг. Но реальность лучше признавать. Это помогает лучше оценивать обстановку.

Когда ты пишешь код ты редко пишешь его слева направо сверху вниз. Ты пишешь что-то. Потом возвращаешься и пишешь еще что-то. Знаешь почему это не взывает у тебя протеста? Потому что ты воспринимаешь это как само собой разумеющееся, а пиарщики и прогандисты не заострили твое внимание на этом.

Возьмем, например, foreach. В нем сначала описание элемента, а потом идет список. Почему не писать:
foreach (from xs var x)

?
Ответ очень прост — потому что это не соответствует нормам английского языка, т.е. плохо читается. А, вот, с линком уже этот аргумент не работает, так как пиарщики его "развенчали".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.