Здравствуйте, gandjustas, Вы писали:
G>>>3)В случае Linq matches это объект, который можно куда-то передать или как-то обработать, в случае с циклом такого не выйдет. U>>С каких это пор создание лишних сущностей стало достоинством кода? G>Это называется страшным словом composition. Чем выше возможности композиции тем лучше, это всегда так было.
Вообще говоря и в императивном можно что хошь передать куда хошь.
IEnumerable<T> GetBlah(IEnumerable<T> items)
{
foreach (T item in items)
if (criteria.All(c => c.IsMetBy(item)))
yield return item;
yield break;
}
пожалуйста, передавай куда хошь и что хошь.
if(!GetBlah(items).MoveNext)
throw new Exception(Res.BlahTargetNotFound);
Более того, если выставляешь API наружу, этот GetBlah придется писать и в императивном и в функциональном стиле.
и здесь в любом случае надо указывать, что GetBlah ленивый и надо кругом это учитывать.
Здравствуйте, Lloyd, Вы писали:
I>>Еще мне не нравится sql-подобный синтаксис Сильно неясно, зачем его воткнули в язык.
L>А мне нравится. Имхо, гораздо читабельнее, чем нагромождение extension-методов.
Зато к нему надо привыкать, т.к. он менее прозрачный
I>>Я разделяю только кода это действитльно нужно. Т.е. когда мне на момент написания кода это необходимо.
L>А тут как раз этот случай и есть.
Нет. Этому коду три года и до сих пор никому это разделение не понадобилось.
Здравствуйте, Ikemefula, Вы писали:
L>>А мне нравится. Имхо, гораздо читабельнее, чем нагромождение extension-методов.
I>Зато к нему надо привыкать, т.к. он менее прозрачный
Ты шутишь? query-синтаксис как раз гораздо прозрачнее нагромождения extension-ов. Читается как текст на человеческом английском.
L>>А тут как раз этот случай и есть.
I>Нет. Этому коду три года и до сих пор никому это разделение не понадобилось.
Этот код ни разу за 3 года не понадобилось отлаживать?! Не верю.
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, gandjustas, Вы писали:
G>>1)Количеством строк. G>>2)FirstOrDefault гораздо понятнее, чем использование break. FirstOrDefault лучше отражает суть того что происходит. G>>3)В случае Linq matches это объект, который можно куда-то передать или как-то обработать, в случае с циклом такого не выйдет.
I>почему тогда не так ?
I>return items.Where(item => criteria.All(spec => spec.IsMetBy(item))).FirstOrDefault();
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, gandjustas, Вы писали:
G>>>>3)В случае Linq matches это объект, который можно куда-то передать или как-то обработать, в случае с циклом такого не выйдет. U>>>С каких это пор создание лишних сущностей стало достоинством кода? G>>Это называется страшным словом composition. Чем выше возможности композиции тем лучше, это всегда так было.
I>Вообще говоря и в императивном можно что хошь передать куда хошь.
I>
I>пожалуйста, передавай куда хошь и что хошь.
Это ты как раз написал способ превращения императивного кода в функциональный ленивый список.
Далеко не в каждом языке такое есть.
I>
I>if(!GetBlah(items).MoveNext)
I> throw new Exception(Res.BlahTargetNotFound);
I>
Здравствуйте, Lloyd, Вы писали:
L>Ты шутишь? query-синтаксис как раз гораздо прозрачнее нагромождения extension-ов. Читается как текст на человеческом английском.
Читается как текст, а девелоперу надо понимать, что, как будет работать.
I>>Нет. Этому коду три года и до сих пор никому это разделение не понадобилось.
L>Этот код ни разу за 3 года не понадобилось отлаживать?! Не верю.
Не понял, на 20 строчек примитивного кода уже отладчик нужен ? ну и дела.
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, Lloyd, Вы писали:
L>>Ты шутишь? query-синтаксис как раз гораздо прозрачнее нагромождения extension-ов. Читается как текст на человеческом английском.
I>Читается как текст, а девелоперу надо понимать, что, как будет работать.
Существует четкая спецификация, как это работает.
Здравствуйте, Undying, Вы писали:
U>Здравствуйте, gandjustas, Вы писали:
G>>composition — композиция, имеется ввиду функциональная, применение одной функции (в общем куска кода) к результату работы другой. G>>Это наилучший вид композиции, другие виды композиции, например через изменяемое состояние, гораздо хуже.
U>Это потому что все остальные виды композиции хуже, до недавнего времени среди мэйнстримовских языков не было ни одного функционального?
Не прикидывайся, ты прекрасно знаешь что и почему было.
Здравствуйте, dorofeevilya, Вы писали:
L>>>Ты шутишь? query-синтаксис как раз гораздо прозрачнее нагромождения extension-ов. Читается как текст на человеческом английском.
I>>Читается как текст, а девелоперу надо понимать, что, как будет работать. D>Существует четкая спецификация, как это работает.
Вот если бы это читалось на раз безо всяких спецификацй, тогда было бы прозрачно.
Прозрачность и легкость чтения — это немного разные вещи.
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, dorofeevilya, Вы писали:
L>>>>Ты шутишь? query-синтаксис как раз гораздо прозрачнее нагромождения extension-ов. Читается как текст на человеческом английском.
I>>>Читается как текст, а девелоперу надо понимать, что, как будет работать. D>>Существует четкая спецификация, как это работает.
I>Вот если бы это читалось на раз безо всяких спецификацй, тогда было бы прозрачно.
Так не получится, поскольку язык программирования — это формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под ее управлением. (википедия)
Не хочешь же ты сказать, что на C# стал писать сразу, как только услышал о нем, не читая не единой книги, статьи и т. д.
I>Прозрачность и легкость чтения — это немного разные вещи.
I>>Вот если бы это читалось на раз безо всяких спецификацй, тогда было бы прозрачно. D>Так не получится, поскольку язык программирования — это формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под ее управлением. (википедия)
В данном форуме википедия не сильно приветствуется
D>Не хочешь же ты сказать, что на C# стал писать сразу, как только услышал о нем, не читая не единой книги, статьи и т. д.
Я именно это и хочу сказать. Если надо читать спецификацию, книгу и тд то язык однозначно плох.
Здравствуйте, Ikemefula, Вы писали:
L>>Ты шутишь? query-синтаксис как раз гораздо прозрачнее нагромождения extension-ов. Читается как текст на человеческом английском.
I>Читается как текст, а девелоперу надо понимать, что, как будет работать.
А что непонятного для девелопера в query-синтаксисе?
L>>Этот код ни разу за 3 года не понадобилось отлаживать?! Не верю.
I>Не понял, на 20 строчек примитивного кода уже отладчик нужен ? ну и дела.
Да иной раз и для одной отладчик крайне желателен.
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, gandjustas, Вы писали:
G>>Это ты как раз написал способ превращения императивного кода в функциональный ленивый список.
I>Просто ленивый список, никакой он не фунциональный.
G>>Далеко не в каждом языке такое есть. I>да, придется попотеть и реализовать автомат.
Сильно попотеть...
Здравствуйте, Lloyd, Вы писали:
I>>Читается как текст, а девелоперу надо понимать, что, как будет работать.
L>А что непонятного для девелопера в query-синтаксисе?
Это еще один язык. Для его освоения нужно время.
I>>Не понял, на 20 строчек примитивного кода уже отладчик нужен ? ну и дела.
L>Да иной раз и для одной отладчик крайне желателен.
Это не тот случай. В других случаях будет вот так (сейчас чуть больше кода)
GetRouting(selection).DisposeAll();
...
if (GetRouting(selection).AtLeastOne())
{
context.CommandEnabled = true;
return;
}
GetRouting — ленивая коллекция, обработка отдельно от сбора была сделана в тот момент, когда понадобилась проверка.