Re[7]: Какой код проще, лучше и почему
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.04.10 12:01
Оценка:
Здравствуйте, 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 ленивый и надо кругом это учитывать.
Re[6]: Какой код проще, лучше и почему
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.04.10 12:02
Оценка:
Здравствуйте, Undying, Вы писали:

U>
U>class _
U>{
U>}
U>


Лучше все таки человеческое имя, т.к. _ многие используют для приватных филдов и _. читается похуже
Re[6]: Какой код проще, лучше и почему
От: Undying Россия  
Дата: 02.04.10 12:02
Оценка: 1 (1)
Здравствуйте, Ikemefula, Вы писали:

I>почему тогда не так ?

I>return items.Where(item => criteria.All(spec => spec.IsMetBy(item))).FirstOrDefault();

Кстати да, в таком виде очень неплохо смотрится. Непонятно зачем вместо этого кучу from, in, select и where городить.
Re[6]: Какой код проще, лучше и почему
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.04.10 12:06
Оценка: +1
Здравствуйте, Lloyd, Вы писали:

I>>Еще мне не нравится sql-подобный синтаксис Сильно неясно, зачем его воткнули в язык.


L>А мне нравится. Имхо, гораздо читабельнее, чем нагромождение extension-методов.


Зато к нему надо привыкать, т.к. он менее прозрачный

I>>Я разделяю только кода это действитльно нужно. Т.е. когда мне на момент написания кода это необходимо.


L>А тут как раз этот случай и есть.


Нет. Этому коду три года и до сих пор никому это разделение не понадобилось.
Re[7]: Какой код проще, лучше и почему
От: Lloyd Россия  
Дата: 02.04.10 12:10
Оценка: -3 :)
Здравствуйте, Ikemefula, Вы писали:

L>>А мне нравится. Имхо, гораздо читабельнее, чем нагромождение extension-методов.


I>Зато к нему надо привыкать, т.к. он менее прозрачный


Ты шутишь? query-синтаксис как раз гораздо прозрачнее нагромождения extension-ов. Читается как текст на человеческом английском.

L>>А тут как раз этот случай и есть.


I>Нет. Этому коду три года и до сих пор никому это разделение не понадобилось.


Этот код ни разу за 3 года не понадобилось отлаживать?! Не верю.
Re[3]: Какой код проще, лучше и почему
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.04.10 12:10
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Тебе повезло с примером. Вот получше пример.


Я взял самый простой пример из имеющихся.
Re[4]: Какой код проще, лучше и почему
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.04.10 12:10
Оценка:
Здравствуйте, Undying, Вы писали:


U>А так работает?


U>
U>      foreach (var ss in new IEnumerable[] { sr.WorkingSegments, sr.ProtectionSegments })
U>        foreach (ServiceSegment s in ss)
U>          foreach (SegmentParcel p in s.SegmentParcels)
U>          {
U>            if (p.NetworkConnection != null)
U>              Collect(p.NetworkConnection, protection);
U>          }
U>


Это я туплю, предыдущий тоже рабочий.
Re[6]: Какой код проще, лучше и почему
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 02.04.10 12:11
Оценка:
Здравствуйте, 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();


В этом случае лучше именно так.
Re[8]: Какой код проще, лучше и почему
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 02.04.10 12:15
Оценка: :)
Здравствуйте, Ikemefula, Вы писали:

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


G>>>>3)В случае Linq matches это объект, который можно куда-то передать или как-то обработать, в случае с циклом такого не выйдет.

U>>>С каких это пор создание лишних сущностей стало достоинством кода?
G>>Это называется страшным словом composition. Чем выше возможности композиции тем лучше, это всегда так было.

I>Вообще говоря и в императивном можно что хошь передать куда хошь.


I>
I>IEnumerable<T> GetBlah(IEnumerable<T> items)
I>{
I>   foreach (T item in items)
I>    if (criteria.All(c => c.IsMetBy(item)))
I>      yield return item;
I>   yield break;
I>}
I>


I>пожалуйста, передавай куда хошь и что хошь.

Это ты как раз написал способ превращения императивного кода в функциональный ленивый список.
Далеко не в каждом языке такое есть.

I>
I>if(!GetBlah(items).MoveNext)
I>   throw new Exception(Res.BlahTargetNotFound);
I>

Это скомпилируется?
Re: Какой код проще, лучше и почему
От: Константин Л. Франция  
Дата: 02.04.10 12:15
Оценка:
Здравствуйте, Ikemefula, Вы писали:

[]

из этих двух — первый. а так Lloyd правильно заметил про разделение.
Re[8]: Какой код проще, лучше и почему
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.04.10 12:16
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Ты шутишь? query-синтаксис как раз гораздо прозрачнее нагромождения extension-ов. Читается как текст на человеческом английском.


Читается как текст, а девелоперу надо понимать, что, как будет работать.

I>>Нет. Этому коду три года и до сих пор никому это разделение не понадобилось.


L>Этот код ни разу за 3 года не понадобилось отлаживать?! Не верю.


Не понял, на 20 строчек примитивного кода уже отладчик нужен ? ну и дела.
Re[9]: Какой код проще, лучше и почему
От: dorofeevilya Россия  
Дата: 02.04.10 12:18
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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


L>>Ты шутишь? query-синтаксис как раз гораздо прозрачнее нагромождения extension-ов. Читается как текст на человеческом английском.


I>Читается как текст, а девелоперу надо понимать, что, как будет работать.

Существует четкая спецификация, как это работает.
Re[8]: Какой код проще, лучше и почему
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 02.04.10 12:18
Оценка:
Здравствуйте, Undying, Вы писали:

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


G>>composition — композиция, имеется ввиду функциональная, применение одной функции (в общем куска кода) к результату работы другой.

G>>Это наилучший вид композиции, другие виды композиции, например через изменяемое состояние, гораздо хуже.

U>Это потому что все остальные виды композиции хуже, до недавнего времени среди мэйнстримовских языков не было ни одного функционального?


Не прикидывайся, ты прекрасно знаешь что и почему было.
Re[9]: Какой код проще, лучше и почему
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.04.10 12:20
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Это ты как раз написал способ превращения императивного кода в функциональный ленивый список.


Просто ленивый список, никакой он не фунциональный.

G>Далеко не в каждом языке такое есть.


да, придется попотеть и реализовать автомат.

I>>
I>>if(!GetBlah(items).MoveNext)
I>>   throw new Exception(Res.BlahTargetNotFound);
I>>

G>Это скомпилируется?

Нет конечно, я слегка погорячился Нужен энумератор и круглые скобки.
Re[10]: Какой код проще, лучше и почему
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.04.10 12:26
Оценка:
Здравствуйте, dorofeevilya, Вы писали:

L>>>Ты шутишь? query-синтаксис как раз гораздо прозрачнее нагромождения extension-ов. Читается как текст на человеческом английском.


I>>Читается как текст, а девелоперу надо понимать, что, как будет работать.

D>Существует четкая спецификация, как это работает.

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

Прозрачность и легкость чтения — это немного разные вещи.
Re[11]: Какой код проще, лучше и почему
От: dorofeevilya Россия  
Дата: 02.04.10 12:31
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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


L>>>>Ты шутишь? query-синтаксис как раз гораздо прозрачнее нагромождения extension-ов. Читается как текст на человеческом английском.


I>>>Читается как текст, а девелоперу надо понимать, что, как будет работать.

D>>Существует четкая спецификация, как это работает.

I>Вот если бы это читалось на раз безо всяких спецификацй, тогда было бы прозрачно.

Так не получится, поскольку язык программирования — это формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под ее управлением. (википедия)

Не хочешь же ты сказать, что на C# стал писать сразу, как только услышал о нем, не читая не единой книги, статьи и т. д.

I>Прозрачность и легкость чтения — это немного разные вещи.
Re[12]: Какой код проще, лучше и почему
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.04.10 12:35
Оценка: +1 -3
Здравствуйте, dorofeevilya, Вы писали:


I>>Вот если бы это читалось на раз безо всяких спецификацй, тогда было бы прозрачно.

D>Так не получится, поскольку язык программирования — это формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под ее управлением. (википедия)

В данном форуме википедия не сильно приветствуется

D>Не хочешь же ты сказать, что на C# стал писать сразу, как только услышал о нем, не читая не единой книги, статьи и т. д.


Я именно это и хочу сказать. Если надо читать спецификацию, книгу и тд то язык однозначно плох.
Re[9]: Какой код проще, лучше и почему
От: Lloyd Россия  
Дата: 02.04.10 12:37
Оценка:
Здравствуйте, Ikemefula, Вы писали:

L>>Ты шутишь? query-синтаксис как раз гораздо прозрачнее нагромождения extension-ов. Читается как текст на человеческом английском.


I>Читается как текст, а девелоперу надо понимать, что, как будет работать.


А что непонятного для девелопера в query-синтаксисе?

L>>Этот код ни разу за 3 года не понадобилось отлаживать?! Не верю.


I>Не понял, на 20 строчек примитивного кода уже отладчик нужен ? ну и дела.


Да иной раз и для одной отладчик крайне желателен.
Re[10]: Какой код проще, лучше и почему
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 02.04.10 12:45
Оценка: +1 -1
Здравствуйте, Ikemefula, Вы писали:

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


G>>Это ты как раз написал способ превращения императивного кода в функциональный ленивый список.


I>Просто ленивый список, никакой он не фунциональный.



G>>Далеко не в каждом языке такое есть.

I>да, придется попотеть и реализовать автомат.
Сильно попотеть...
Re[10]: Какой код проще, лучше и почему
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.04.10 12:49
Оценка: +1
Здравствуйте, Lloyd, Вы писали:

I>>Читается как текст, а девелоперу надо понимать, что, как будет работать.


L>А что непонятного для девелопера в query-синтаксисе?


Это еще один язык. Для его освоения нужно время.

I>>Не понял, на 20 строчек примитивного кода уже отладчик нужен ? ну и дела.


L>Да иной раз и для одной отладчик крайне желателен.


Это не тот случай. В других случаях будет вот так (сейчас чуть больше кода)

GetRouting(selection).DisposeAll();
...
if (GetRouting(selection).AtLeastOne())
            {
                context.CommandEnabled = true;
                return;
            }


GetRouting — ленивая коллекция, обработка отдельно от сбора была сделана в тот момент, когда понадобилась проверка.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.