Re[7]: Какой код проще, лучше и почему
От: Undying Россия  
Дата: 02.04.10 09:58
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>А с break что получишь? Тот же самый 0 при наивной реализации или придется более сложные конструкции городить.


Каким это таким образом этот код запишет в match 0 при отсутствии item'ов удовлетворяющих критерию?

      int? match = null;
      foreach (var item in items)
      {
        if (criteria.All(criterion => criterion.IsMetBy(item)))
        {
          match = item;
          break;
        }
      }
Re[5]: Какой код проще, лучше и почему
От: Undying Россия  
Дата: 02.04.10 10:01
Оценка: +1 -1
Здравствуйте, Nose, Вы писали:

N>intention лучше выражен.


Е-мое, сколько новых модных слов появилось, у тебя intention, у gandjustas'а composition. А разъяснить что эти слова значат можете?
Re[4]: Какой код проще, лучше и почему
От: Muxa  
Дата: 02.04.10 10:05
Оценка:
U>Объединение произвольного количества коллекций.
не понял. вы про ф-цию Combine говорите?
я спрашивал что означает конструкция _. (подчерк-точка) с точки зрения языка.
Re[5]: Какой код проще, лучше и почему
От: Undying Россия  
Дата: 02.04.10 10:14
Оценка:
Здравствуйте, Muxa, Вы писали:

M>не понял. вы про ф-цию Combine говорите?

M>я спрашивал что означает конструкция _. (подчерк-точка) с точки зрения языка.

class _
{
}
Re[8]: Какой код проще, лучше и почему
От: Silver_s Ниоткуда  
Дата: 02.04.10 10:15
Оценка:
Здравствуйте, Undying, Вы писали:
G>>А с break что получишь? Тот же самый 0 при наивной реализации или придется более сложные конструкции городить.
U>Каким это таким образом этот код запишет в match 0 при отсутствии item'ов удовлетворяющих критерию?

U>
U>      int? match = null;
U>      foreach (var item in items)
U>


Ну там тоже можно сделать:
matches.Select(_=>(int?)_).FirstOrDefault()

Короче бы получилось: from .... (int?)select
Но это гораздо хуже.
Re[9]: Какой код проще, лучше и почему
От: Silver_s Ниоткуда  
Дата: 02.04.10 10:24
Оценка:
S_>Ну там тоже можно сделать:
S_> matches.Select(_=>(int?)_).FirstOrDefault()
А если часто такое писать, то лучше аналог такой функции реализовать:
public static T? FirstOrNull<T>(this IEnumerable<T> en) where T: struct
{
    return en.Count() > 0 ? (T?)en.First() : null;
}
Re[6]: Какой код проще, лучше и почему
От: Muxa  
Дата: 02.04.10 10:30
Оценка:
M>>не понял. вы про ф-цию Combine говорите?
M>>я спрашивал что означает конструкция _. (подчерк-точка) с точки зрения языка.

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

а почему не
Some _ = new Some();
?
откуда этот класс изначально взялся. чота я вообще запутался?
Re[9]: Какой код проще, лучше и почему
От: Undying Россия  
Дата: 02.04.10 10:32
Оценка:
Здравствуйте, Silver_s, Вы писали:

S_>Ну там тоже можно сделать:

S_> matches.Select(_=>(int?)_).FirstOrDefault()

И еще одну сущность создать? А зачем? Уж лучше как-то так:

if (matches.CountMore(0))
match = matches.First();
Re[10]: Какой код проще, лучше и почему
От: Undying Россия  
Дата: 02.04.10 10:37
Оценка: +1
Здравствуйте, Silver_s, Вы писали:

S_>
S_>public static T? FirstOrNull<T>(this IEnumerable<T> en) where T: struct
S_>{
S_>    return en.Count() > 0 ? (T?)en.First() : null;
S_>}
S_>


Плохо, т.к. надо постоянно помнить с коллекцией структур или с коллекцией классов происходит работа. Вот если бы к этой функции можно было добавить функцию для классов с тем же именем:

public static T FirstOrNull<T>(this IEnumerable<T> en) where T: class
{
}


то было бы нормально. Однако фиг, компилятор этого сделать не даст.
Re[7]: Какой код проще, лучше и почему
От: Undying Россия  
Дата: 02.04.10 10:42
Оценка:
Здравствуйте, Muxa, Вы писали:

M>откуда этот класс изначально взялся. чота я вообще запутался?


Кто-то написал, в стандартной библиотеке такого класса нет:

class _
{
  public IEnumerable<T> Combine<T>(params IEnumerable<T>[] collections)
  {
  }
}
Re[8]: Какой код проще, лучше и почему
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 02.04.10 10:59
Оценка: :)
Здравствуйте, Undying, Вы писали:

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


G>>А с break что получишь? Тот же самый 0 при наивной реализации или придется более сложные конструкции городить.


U>Каким это таким образом этот код запишет в match 0 при отсутствии item'ов удовлетворяющих критерию?


U>
U>      int? match = null;
U>      foreach (var item in items)
U>      {
U>        if (criteria.All(criterion => criterion.IsMetBy(item)))
U>        {
U>          match = item;
U>          break;
U>        }
U>      }
U>


Думаешь сложно сделать преобразование к int? в коде с Linq?
Re[6]: Какой код проще, лучше и почему
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 02.04.10 11:06
Оценка:
Здравствуйте, Undying, Вы писали:

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


N>>intention лучше выражен.


U>Е-мое, сколько новых модных слов появилось, у тебя intention, у gandjustas'а composition. А разъяснить что эти слова значат можете?


intention — намерение, суть того что делает код.
composition — композиция, имеется ввиду функциональная, применение одной функции (в общем куска кода) к результату работы другой.
Это наилучший вид композиции, другие виды композиции, например через изменяемое состояние, гораздо хуже.
Re[8]: Какой код проще, лучше и почему
От: Muxa  
Дата: 02.04.10 11:30
Оценка:
U>Кто-то написал, в стандартной библиотеке такого класса нет:

а в первом вашем сообщении _ (подчерк) это имя класса? (тогда метод должен быть статическим)
или экземпляр? (тогда должно присутствовать объявление переменной)
Re[2]: Какой код проще, лучше и почему
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.04.10 11:37
Оценка:
Здравствуйте, Undying, Вы писали:

U>
U>      foreach (var ss in new[] { 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>


U>В функциональном варианте 250 символов, в императивном 220, т.е. даже меньше.


Твой код не работает потому что ss имеет тип ServiceSegmentCollection [] те. нужен еще один foreach
Re[4]: Какой код проще, лучше и почему
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.04.10 11:45
Оценка: +1
Здравствуйте, Lloyd, Вы писали:

I>>смотрится покрасивше, но это плохой способ.


L>Это хороший способ. Два плохих я не стал квотить.


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

I>>Один из хелперов ты скипнул почему то и заменил на цикл.


L>Их пристраивать просто не нужно. Не надо в одну кучу валить получение данных и обработку, потом вам за это спасибо скажут.


Я разделяю только кода это действитльно нужно. Т.е. когда мне на момент написания кода это необходимо.
Re[5]: Какой код проще, лучше и почему
От: Lloyd Россия  
Дата: 02.04.10 11:50
Оценка: +1
Здравствуйте, Ikemefula, Вы писали:

L>>Это хороший способ. Два плохих я не стал квотить.


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


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

I>>>Один из хелперов ты скипнул почему то и заменил на цикл.


L>>Их пристраивать просто не нужно. Не надо в одну кучу валить получение данных и обработку, потом вам за это спасибо скажут.


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


А тут как раз этот случай и есть.
Re[9]: Какой код проще, лучше и почему
От: Undying Россия  
Дата: 02.04.10 11:52
Оценка:
Здравствуйте, Muxa, Вы писали:

M>а в первом вашем сообщении _ (подчерк) это имя класса? (тогда метод должен быть статическим)

M>или экземпляр? (тогда должно присутствовать объявление переменной)

Подчеркивание это тип класса, метод Combine разумеется статический.
Re[5]: Какой код проще, лучше и почему
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.04.10 11:54
Оценка: 1 (1) +1
Здравствуйте, gandjustas, Вы писали:

G>1)Количеством строк.

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

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

return items.Where(item => criteria.All(spec => spec.IsMetBy(item))).FirstOrDefault();
Re[3]: Какой код проще, лучше и почему
От: Undying Россия  
Дата: 02.04.10 11:55
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Твой код не работает потому что ss имеет тип ServiceSegmentCollection [] те. нужен еще один foreach


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

      foreach (var ss in new IEnumerable[] { sr.WorkingSegments, sr.ProtectionSegments })
        foreach (ServiceSegment s in ss)
          foreach (SegmentParcel p in s.SegmentParcels)
          {
            if (p.NetworkConnection != null)
              Collect(p.NetworkConnection, protection);
          }
Re[7]: Какой код проще, лучше и почему
От: Undying Россия  
Дата: 02.04.10 11:58
Оценка:
Здравствуйте, gandjustas, Вы писали:

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

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

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