LINQ как шаг к функциональному программированию
От: Чистяков Влад (VladD2) Российская Империя www.nemerle.org
Дата: 28.08.08 14:11
Оценка: 1581 (55) +2
Статья:
LINQ как шаг к функциональному программированию
Автор(ы): Чистяков Влад (VladD2)
Дата: 26.01.2009
Цель данной статьи – объяснить читателю незнакомому с ФП, что такое функциональный подход, какие он дает преимущества, и как его можно использовать с помощью LINQ и C# 3.0.
Кроме того, эта статья дает некоторое понимание того, как работает «LONQ to Object» и на каких принципах он основан.


Авторы:
Чистяков Влад (VladD2)

Аннотация:
Цель данной статьи – объяснить читателю незнакомому с ФП, что такое функциональный подход, какие он дает преимущества, и как его можно использовать с помощью LINQ и C# 3.0.
Кроме того, эта статья дает некоторое понимание того, как работает «LINQ to Object» и на каких принципах он основан.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: LINQ как шаг к функциональному программированию
От: nikov США http://www.linkedin.com/in/nikov
Дата: 28.08.08 19:48
Оценка: +1
Здравствуйте, Чистяков Влад (VladD2), Вы писали:

ЧВV>Статья:

ЧВV>LINQ как шаг к функциональному программированию
Автор(ы): Чистяков Влад (VladD2)
Дата: 26.01.2009
Цель данной статьи – объяснить читателю незнакомому с ФП, что такое функциональный подход, какие он дает преимущества, и как его можно использовать с помощью LINQ и C# 3.0.
Кроме того, эта статья дает некоторое понимание того, как работает «LONQ to Object» и на каких принципах он основан.


Терминологическое уточнение: x = y это не "присвоение", а "присваивание".
Re: LINQ как шаг к функциональному программированию
От: _FRED_ Черногория
Дата: 29.08.08 05:51
Оценка:
Здравствуйте, Чистяков Влад (VladD2), Вы писали:

ЧВV>Статья:

ЧВV>LINQ как шаг к функциональному программированию
Автор(ы): Чистяков Влад (VladD2)
Дата: 26.01.2009
Цель данной статьи – объяснить читателю незнакомому с ФП, что такое функциональный подход, какие он дает преимущества, и как его можно использовать с помощью LINQ и C# 3.0.
Кроме того, эта статья дает некоторое понимание того, как работает «LONQ to Object» и на каких принципах он основан.


Обычно, при использовании сокращений (даже общеизвестных), принято в первый раз упомянуть термин полностью, а следом указать аббревиатуру в скобках, и, далее, уже пользоваться кратким обозначением.

Это как объявление и использование переменных

Даже в узкоспециализированной литературе пренебрегать этим, ИМХО, неправильно: тяжело сразу настроить мозг на "раскрытие" сокращений и чтение уже не такое лёгкое, и удовольствия от него меньше.

Аббревиатуры "ФП" и "ИЯ" встречаются сразу без предупреждения:

Но чтобы иметь возможность читать (и писать) функциональный код надо быт знакомыми с основными приемами ФП.

Меж тем в ИЯ имеется множество конструкций создающих побочные эффекты.

Help will always be given at Hogwarts to those who ask for it.
Re: LINQ как шаг к функциональному программированию
От: McSim  
Дата: 01.09.08 01:42
Оценка: :))
Здравствуйте, Чистяков Влад (VladD2), Вы писали:

ЧВV>Статья:

ЧВV>LINQ как шаг к функциональному программированию
Автор(ы): Чистяков Влад (VladD2)
Дата: 26.01.2009
Цель данной статьи – объяснить читателю незнакомому с ФП, что такое функциональный подход, какие он дает преимущества, и как его можно использовать с помощью LINQ и C# 3.0.
Кроме того, эта статья дает некоторое понимание того, как работает «LONQ to Object» и на каких принципах он основан.


Здравствуйте, Влад!
Статью читал в журнале. Очень понравилась. Взял на вооружение.
Но очень огорчает большое количество орфографических ошибок в тексте.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: LINQ как шаг к функциональному программированию
От: Cyberax Марс  
Дата: 01.09.08 02:28
Оценка: -1 :))) :))
Здравствуйте, McSim, Вы писали:

MS>Но очень огорчает большое количество орфографических ошибок в тексте.

Это чтоб сразу было видно, что Влад пишет
Sapienti sat!
Re[3]: LINQ как шаг к функциональному программированию
От: AngeL B. Россия  
Дата: 01.09.08 03:36
Оценка: +2
Здравствуйте, Cyberax, Вы писали:

MS>>Но очень огорчает большое количество орфографических ошибок в тексте.

C>Это чтоб сразу было видно, что Влад пишет

Вместо того, чтобы писать вот такие комментарии про людей, которые для тебя статьи пишут, лучше бы предложил свои услуги по вычитке и коррекции текста.
Re[4]: LINQ как шаг к функциональному программированию
От: McSim  
Дата: 01.09.08 03:58
Оценка:
Здравствуйте, AngeL B., Вы писали:

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


AB>Вместо того, чтобы писать вот такие комментарии про людей, которые для тебя статьи пишут, лучше бы предложил свои услуги по вычитке и коррекции текста.

Да разве же я с претензией написал это? Скорее просто пожелание на будущее. И если что, то мог бы принять участие в корректировке тексте перед публикацией.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: LINQ как шаг к функциональному программированию
От: AngeL B. Россия  
Дата: 01.09.08 06:06
Оценка:
Здравствуйте, McSim, Вы писали:

MS>Да разве же я с претензией написал это? Скорее просто пожелание на будущее. И если что, то мог бы принять участие в корректировке тексте перед публикацией.


To McSim: Я не про твою фразу написал, а про Cyberax-овскую
Re[2]: LINQ как шаг к функциональному программированию
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.09.08 07:44
Оценка:
Здравствуйте, McSim, Вы писали:

MS>Но очень огорчает большое количество орфографических ошибок в тексте.


Это довольно странно, так как статьи проходит корректуру в редакции.
Огромная просьба выслать примеры ошибок на адрес mag@rsdn.ru или submit@rsdn.ru.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: LINQ как шаг к функциональному программированию
От: McSim  
Дата: 01.09.08 08:30
Оценка: :)
Здравствуйте, VladD2, Вы писали:

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


VD>Это довольно странно, так как статьи проходит корректуру в редакции.

VD>Огромная просьба выслать примеры ошибок на адрес mag@rsdn.ru или submit@rsdn.ru.

К сожалению с собой только диск от журнала. Мне надо посмотреть на сами страницы журнала.
Сейчас же из статьи с диска несколько цитат:
1.

Далее в запросе просто используются выражения:

where УСЛОВИЕ_ФИЛЬРАЦИИ
select ОПИСАНИЕ_ВОЗВРАЩЯЕМОГО_ЗНАЧЕНИЯ


2. Такая проблема может возникнуть, например, если вам потребуется создать собственную реализацию EqualityComparer основанную на лябде:

и т.д.

Т.е., то буква пропущена, то местами поменяны, то запятой нету.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: LINQ как шаг к функциональному программированию
От: Kupaev Россия www.rsdn.ru
Дата: 01.09.08 11:25
Оценка:
Здравствуйте, McSim, Вы писали:

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


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


VD>>Это довольно странно, так как статьи проходит корректуру в редакции.

VD>>Огромная просьба выслать примеры ошибок на адрес mag@rsdn.ru или submit@rsdn.ru.

MS>К сожалению с собой только диск от журнала. Мне надо посмотреть на сами страницы журнала.


Спешка, увы, дает о себе знать.
Re[4]: LINQ как шаг к функциональному программированию
От: Cyberax Марс  
Дата: 01.09.08 14:00
Оценка: :)
Здравствуйте, AngeL B., Вы писали:

C>>Это чтоб сразу было видно, что Влад пишет

AB>Вместо того, чтобы писать вот такие комментарии про людей, которые для тебя статьи пишут, лучше бы предложил свои услуги по вычитке и коррекции текста.
Я это не в упрёк Владу, его орфографические ашыпки и очепятки — уже давно неотъемлимая часть РСДН.
Sapienti sat!
Re: LINQ как шаг к функциональному программированию
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.09.08 00:34
Оценка:
Хороший сравнительный пример использования LINQ привел IT в этом сообщении
Автор: IT
Дата: 22.09.08
.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: LINQ как шаг к функциональному программированию
От: Alf США  
Дата: 12.01.09 21:16
Оценка:
Похоже китайская техника копипейста добралась и до статей =)

Особенность 1: В ФЯ иногда можно встретить два варианта этой функции FoldLeft, FoldRight. Первая производит свертку от начала списка к концу, вторая, соответственно, наоборот, от начала к концу.
Re: LINQ как шаг к функциональному программированию
От: alvas  
Дата: 13.01.09 07:11
Оценка:
Здравствуйте, Чистяков Влад (VladD2), Вы писали:

ЧВV>Аннотация:

ЧВV>Цель данной статьи – объяснить читателю незнакомому с ФП, что такое функциональный подход, какие он дает преимущества, и как его можно использовать с помощью LINQ и C# 3.0.
ЧВV>Кроме того, эта статья дает некоторое понимание того, как работает «LINQ to Object» и на каких принципах он основан.

Здравствуйте, Влад!
Статья очень понравилась. С нетерпением жду продолжения.
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[3]: LINQ как шаг к функциональному программированию
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.01.09 10:19
Оценка:
Здравствуйте, Alf, Вы писали:

Alf>Похоже китайская техника копипейста добралась и до статей =)


Ну, обладая некоторым талантом можно и без копипаста накосячить

Alf>Особенность 1: В ФЯ иногда можно встретить два варианта этой функции FoldLeft, FoldRight. Первая производит свертку от начала списка к концу, вторая, соответственно, наоборот, от начала к концу.


Да, есть такая ошибка. Сам заметил, но уже поздно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: LINQ как шаг к функциональному программированию
От: _FRED_ Черногория
Дата: 13.01.09 10:40
Оценка:
Здравствуйте, VladD2, Вы писали:

Извиняюсь, что спамлю, но на форум mag ты, наверное, не подписан, и личные сообщения не получаешь

Что с подпиской на журнал?
Автор: _FRED_
Дата: 24.12.08
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Help will always be given at Hogwarts to those who ask for it.
Re: LINQ как шаг к функциональному программированию
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 13.01.09 11:26
Оценка:
Здравствуйте, Чистяков Влад (VladD2)

Идентификатор seed при вызове func -- это ошибка или что-то другое?
public static TAccumulate AggregateRight<TSource, TAccumulate>(
  this IEnumerable<TSource> source, 
  TAccumulate acc, 
  Func<TAccumulate, TSource, TAccumulate> func)
{
  if (source == null)
    throw New ArgumentNullException("source");
  if (func == null)
    throw New ArgumentNullException("func");

  foreach (TSource item in source.Reverse())
    acc = func(seed, item);

  return acc;
}


PS. Из статьи можно было бы смело выкинуть, как минимум, 1/3 текста при сохранении той же информативности.
PPS. По ходу чтения сильно напрягает стиль изложения "от первого лица" с наездами на "императивных программистов".
PPPS. Надеюсь, что 90% императивных программистов все-таки пишут так:
for (int i = 0; i < array1.Length; i++)
{
  if (i != 0)
    result += ", ";

  result += array1[i];
}


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: LINQ как шаг к функциональному программированию
От: server_mouse Беларусь about:blank
Дата: 13.01.09 16:44
Оценка:
Здравствуйте, Чистяков Влад (VladD2), Вы писали:

ЧВV>Статья:

ЧВV>LINQ как шаг к функциональному программированию
Автор(ы): Чистяков Влад (VladD2)
Дата: 26.01.2009
Цель данной статьи – объяснить читателю незнакомому с ФП, что такое функциональный подход, какие он дает преимущества, и как его можно использовать с помощью LINQ и C# 3.0.
Кроме того, эта статья дает некоторое понимание того, как работает «LONQ to Object» и на каких принципах он основан.


ЧВV>Авторы:

ЧВV> Чистяков Влад (VladD2)

ЧВV>Аннотация:

ЧВV>Цель данной статьи – объяснить читателю незнакомому с ФП, что такое функциональный подход, какие он дает преимущества, и как его можно использовать с помощью LINQ и C# 3.0.
ЧВV>Кроме того, эта статья дает некоторое понимание того, как работает «LINQ to Object» и на каких принципах он основан.


Жаль про join не рассказали ничего.
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
Re[2]: LINQ как шаг к функциональному программированию
От: Andrey Gliznetsov  
Дата: 14.01.09 08:39
Оценка:
Здравствуйте, eao197, Вы писали:

E>PPPS. Надеюсь, что 90% императивных программистов все-таки пишут так:

E>
E>for (int i = 0; i < array1.Length; i++)
E>{
E>  if (i != 0)
E>    result += ", ";

E>  result += array1[i];
E>}
E>


Надеюсь что любой грамотный программист напишет вот так:



var sb = new StringBuilder();
for (int i = 0; i < array1.Length; i++)
{
    if (i != 0)
    sb.Append(", ");
    sb.Append(array1[i]);
}
result = sb.ToString();



Кроме того за все в этой жизни надо платить, в том числе и за лаконичность LINQ, вот результаты конкатенации массива чисел из 10000 элементов:

Способ: императивный
Расход памяти: 1200 kb
Время: 1600 ms

Способ: LINQ
Расход памяти: 2400 kb
Время: 860 ms

Способ: StringBuilder
Расход памяти: 580 kb
Время: 4 ms

Интересно что Linq отаработал в два раза быстрее и сожрал в два раза больше памяти, чем простой цикл. Ну а последний результат, как говорится без коментариев
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.