Re[4]: Linq : неудачный маркетинг?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 18.02.10 05:46
Оценка:
Здравствуйте, Al_Shargorodsky, Вы писали:

A_S>Но ведь синтаксис LINQ можно использовать с любым типом, например, отложенное выполнение:


Нет синтаксиса LINQ, есть:
* Query syntax, который является очень маааленькой и вовсе необязательной частью LINQ-а.
* Query expressions, который является реализацией QS в C#
Другие языки вольны выбирать свой синтаксис QS по усмотрению, либо не использовать его вовсе.
Re[5]: Linq : неудачный маркетинг?
От: Al_Shargorodsky Украина  
Дата: 18.02.10 06:40
Оценка:
Здравствуйте, samius, Вы писали:

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


A_S>>Но ведь синтаксис LINQ можно использовать с любым типом, например, отложенное выполнение:


S>Нет синтаксиса LINQ, есть:

S>* Query syntax, который является очень маааленькой и вовсе необязательной частью LINQ-а.
S>* Query expressions, который является реализацией QS в C#
S>Другие языки вольны выбирать свой синтаксис QS по усмотрению, либо не использовать его вовсе.

согласен. я имел ввиду саму возможность писать в декларативном стиле и ее реализацию, пусть в конкретном языке.
Re[10]: Linq : неудачный маркетинг?
От: Lloyd Россия  
Дата: 18.02.10 08:18
Оценка: 2 (1) +2
Здравствуйте, Dufrenite, Вы писали:

D>Не очевидно. Венгерская нотация, на мой взгляд, ухудшает читаемость программ.


Я вроде не ратовал за венгерскую нотацию, вы меня с кем-то путаете.

D>Тип переменной должен быть понятен из названия и контекста использования, а дублирование информации только захламляет код.


var customers = GetCustomers()

1. Что не так с названием переменой?
2. Какой тип у customers?

D>Например

D>
D>Dictionary<string, EntityData> nameToEntityData = new Dictionary<string, EntityData>();
D>

D>воспринимается хуже чем
D>
D>var nameToEntityData = new Dictionary<string, EntityData>();
D>


А в приведенном случае информация о типе не теряется, она записана справа от "="
Re[6]: Linq : неудачный маркетинг?
От: WolfHound  
Дата: 18.02.10 08:53
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Я так понимаю, вопрос синхронизации с базой возникает, когда мы начинаем эти полученные объекты менять и хотим, чтобы данные менялись в базе. И тут у линка не все гладко.

А просто не надо так делать.
Нужно взять BLToolkit и использовать DML.
... << RSDN@Home 1.2.0 alpha 4 rev. 1305>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: Linq : неудачный маркетинг?
От: vdimas Россия  
Дата: 18.02.10 10:03
Оценка: +1
Здравствуйте, D. Mon, Вы писали:

Да там не все так однозначно с тех пор, как в SQL появились подзапросы, ссылающиеся на значение полей вышестоящего запроса. Это же "построчное" замыкание, а подзапрос — суть параметризуемый предикат (т.е. ф-ия). Чистейшая, однако, функциональная декомпозиция.
Re[5]: Linq : неудачный маркетинг?
От: vdimas Россия  
Дата: 18.02.10 10:17
Оценка: 8 (2) +1
Здравствуйте, Temoto, Вы писали:

T>Да, ваша правда. А вы можете провести чёткую грань между функциональным и декларативным программированием?


Уже провели рядом, но не до конца. ИМХО, практика оперирования ф-иями как первоклассными объектами дает ф-ому программированию удобную возможность для определения параметризуемых "кирпичиков", дальнейшее использование которых очень смахивает на декларативное программирование. Наверно поэтому декларативное все время пытаются приписать ф-ому подходу, но это не правильно.

На самом деле, декларативность программирования — это сугубо относительное понятие. Любой ЯВУ декларативен по отношению к ассемблеру. Мы сразу говорим printf(2*2) — умножь 2 на 2 и выведи на экран, вместо объяснения, в какие регистры чего ложить и какие инструкции вызывать. При любой "правильной" декомпозиции (не обязательно функциональной), вышестоящие уровни демонстрируют по отношению к нижестоящим то самое декларативное программирование. SQL декларативен по отношению к реляционной алгебре, а по отношению к некоему вышестоящему DAL, с т.з. названия этого форума все-таки отвечает на вопрос "как", а не "что", ибо на вопрос "что" относительно данных во всей иерархии отвечает именно DAL. Собственно, как и сами подробности DAL — это ответ на вопрос "как", который возник после рассмотрения некоего ТЗ на систему (самого верхнего "Что").
Re[11]: Linq : неудачный маркетинг?
От: Jack128  
Дата: 18.02.10 13:08
Оценка: 1 (1)
Здравствуйте, Lloyd, Вы писали:

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


D>>Не очевидно. Венгерская нотация, на мой взгляд, ухудшает читаемость программ.


L>Я вроде не ратовал за венгерскую нотацию, вы меня с кем-то путаете.


D>>Тип переменной должен быть понятен из названия и контекста использования, а дублирование информации только захламляет код.


L>
L>var customers = GetCustomers()
L>

L>1. Что не так с названием переменой?
L>2. Какой тип у customers?

IEnumerable<Customer> ?
Re[12]: Linq : неудачный маркетинг?
От: Lloyd Россия  
Дата: 18.02.10 13:13
Оценка:
Здравствуйте, Jack128, Вы писали:

D>>>Тип переменной должен быть понятен из названия и контекста использования, а дублирование информации только захламляет код.


L>>
L>>var customers = GetCustomers()
L>>

L>>1. Что не так с названием переменой?
L>>2. Какой тип у customers?

J>IEnumerable<Customer> ?


С чего ты взял? Почему не Customer[], Collection<Customer>, HashSet<Customer> или List<Customer>?
Re[13]: Linq : неудачный маркетинг?
От: Jack128  
Дата: 18.02.10 13:57
Оценка:
Здравствуйте, Lloyd, Вы писали:

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


D>>>>Тип переменной должен быть понятен из названия и контекста использования, а дублирование информации только захламляет код.


L>>>
L>>>var customers = GetCustomers()
L>>>

L>>>1. Что не так с названием переменой?
L>>>2. Какой тип у customers?

J>>IEnumerable<Customer> ?


L>С чего ты взял? Почему не Customer[], Collection<Customer>, HashSet<Customer> или List<Customer>?


А какая разница? Тока ближе к практике, пожалуйста.
Re[6]: Linq : неудачный маркетинг?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.02.10 14:09
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Я так понимаю, вопрос синхронизации с базой возникает, когда мы начинаем эти полученные объекты менять и хотим, чтобы данные менялись в базе. И тут у линка не все гладко.


Ты не верно понимаешь. У лика в общем вообще вопрос изменения БД не оговорен. То как он реализован и реализован ли вообще решает конкретный линк-провайдер. В частности есть такой провайдер BLToolkit (созданный одним из основателей нашего сайта — IT) который решает данную проблему путем предоставления CRUD/DML-операций аналогичных запросам INSERT/DELETE/UPDATE из SQL.

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

Есть пожалуй только один провайдер (для NHibernate) который занимается кэшированием и прочей фигней. Ну, так это потому, что это провайдер к объектному-персистеру который использует идеологию, на мой взгляд, в корне порочную.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Linq : неудачный маркетинг?
От: Lloyd Россия  
Дата: 18.02.10 14:51
Оценка:
Здравствуйте, Jack128, Вы писали:

J>>>IEnumerable<Customer> ?


L>>С чего ты взял?


Я так понимаю, ответа на вопрос у вас нет?

L>>Почему не Customer[], Collection<Customer>, HashSet<Customer> или List<Customer>?


J>А какая разница? Тока ближе к практике, пожалуйста.


Например, вот в таком коде:
for(int i=0; i < customers.Count(); i++) {
  Consolw.WriteLine("{0}: {1}", i, customers.ElementAt(i).Name);
}

Если customers — IEnumerable, полученный из linq-овского запроса, то на 1000 customer-ах получили 2000 запросов в базу. Если просто лист — то ни одного.
Re[15]: Linq : неудачный маркетинг?
От: IT Россия linq2db.com
Дата: 18.02.10 15:09
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Если customers — IEnumerable, полученный из linq-овского запроса, то на 1000 customer-ах получили 2000 запросов в базу. Если просто лист — то ни одного.


Это конечно большая проблема! А как ты её решаешь, когда у тебя не List<Customer>, а, например, List<<>f__AnonymousTypef<int,string>>?
Если нам не помогут, то мы тоже никого не пощадим.
Re[16]: Linq : неудачный маркетинг?
От: Lloyd Россия  
Дата: 18.02.10 15:12
Оценка:
Здравствуйте, IT, Вы писали:

L>>Если customers — IEnumerable, полученный из linq-овского запроса, то на 1000 customer-ах получили 2000 запросов в базу. Если просто лист — то ни одного.


IT>Это конечно большая проблема! А как ты её решаешь, когда у тебя не List<Customer>, а, например, List<<>f__AnonymousTypef<int,string>>?


Если ты мне расскажешь, как мне из метода получить List<<>f__AnonymousTypef<int,string>>, я обязательно отвечу на твой вопрос.
Re[17]: Linq : неудачный маркетинг?
От: IT Россия linq2db.com
Дата: 18.02.10 15:18
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>>>Если customers — IEnumerable, полученный из linq-овского запроса, то на 1000 customer-ах получили 2000 запросов в базу. Если просто лист — то ни одного.


IT>>Это конечно большая проблема! А как ты её решаешь, когда у тебя не List<Customer>, а, например, List<<>f__AnonymousTypef<int,string>>?


L>Если ты мне расскажешь, как мне из метода получить List<<>f__AnonymousTypef<int,string>>, я обязательно отвечу на твой вопрос.


var arr  = new[] { new { String = "", Int = 1 } };
var list = arr.ToList();
Если нам не помогут, то мы тоже никого не пощадим.
Re[17]: Linq : неудачный маркетинг?
От: IT Россия linq2db.com
Дата: 18.02.10 15:21
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>>>Если customers — IEnumerable, полученный из linq-овского запроса, то на 1000 customer-ах получили 2000 запросов в базу. Если просто лист — то ни одного.

IT>>Это конечно большая проблема! А как ты её решаешь, когда у тебя не List<Customer>, а, например, List<<>f__AnonymousTypef<int,string>>?
L>Если ты мне расскажешь, как мне из метода получить List<<>f__AnonymousTypef<int,string>>, я обязательно отвечу на твой вопрос.

Могу ещё рассказать, как получить IEnumerable (ты будешь думать о 2000 запросах в базу), а запросов будет ни одного. Рассказывать или ты сам?
Если нам не помогут, то мы тоже никого не пощадим.
Re[18]: Linq : неудачный маркетинг?
От: Lloyd Россия  
Дата: 18.02.10 15:23
Оценка:
Здравствуйте, IT, Вы писали:

L>>Если ты мне расскажешь, как мне из метода получить List<<>f__AnonymousTypef<int,string>>, я обязательно отвечу на твой вопрос.


IT>
IT>var arr  = new[] { new { String = "", Int = 1 } };
IT>var list = arr.ToList();
IT>


Варианты, ToList, ToArray и т.д. не относятся к случаям, когда тип не указан, т.к. тип-таки фигурирует (List, Array).
Кроме того, тип переменных анонимного типа легко выводится из контекста.
Re[18]: Linq : неудачный маркетинг?
От: Lloyd Россия  
Дата: 18.02.10 15:28
Оценка: +1
Здравствуйте, IT, Вы писали:

L>>Если ты мне расскажешь, как мне из метода получить List<<>f__AnonymousTypef<int,string>>, я обязательно отвечу на твой вопрос.


IT>Могу ещё рассказать, как получить IEnumerable (ты будешь думать о 2000 запросах в базу), а запросов будет ни одного. Рассказывать или ты сам?


Нет, не надо.
Я не собираюсь вас убежать в чем либо, у меня есть свои предпочтения в использовании var-а и я им следую. Так же я знаю преимущества и недостатки обоих подходов. Не тратьте свое время на повтороение того, что было уже обсосано не по одному десятку раз.

Удачи.
Re[19]: Linq : неудачный маркетинг?
От: IT Россия linq2db.com
Дата: 18.02.10 15:29
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>>>Если ты мне расскажешь, как мне из метода получить List<<>f__AnonymousTypef<int,string>>, я обязательно отвечу на твой вопрос.

L>Варианты, ToList, ToArray и т.д. не относятся к случаям, когда тип не указан, т.к. тип-таки фигурирует (List, Array).
L>Кроме того, тип переменных анонимного типа легко выводится из контекста.

Ну ты упёртый.

List<T> GetCustomers<T>(T[] arr)
{
    return arr.ToList();
}

var arr  = new[] { new { String = "", Int = 1 } };
var list = GetCustomers(arr);

Теперь в методе GetCustomers меняем тип возвращемого значения на IEnumerable<T> и, 'О, чудо!', получаем IEnumerable, а запросов к базе ни одного!
Если нам не помогут, то мы тоже никого не пощадим.
Re[20]: Linq : неудачный маркетинг?
От: Lloyd Россия  
Дата: 18.02.10 15:33
Оценка: +3
Здравствуйте, IT, Вы писали:

L>>Кроме того, тип переменных анонимного типа легко выводится из контекста.


IT>Ну ты упёртый.


Да ваще, баран полный. Втемяшу себе в голову какую-нить глупость и потом хожу и на потеху публике выставляюсь полным дураком.
Чё с таким говорить, бесполезно же.

IT>Теперь в методе GetCustomers меняем тип возвращемого значения на IEnumerable<T> и, 'О, чудо!', получаем IEnumerable, а запросов к базе ни одного!


Вы правда-правда такие методы пишете или вы просто задались целью опровегнуть мое утверждение про анонимные типы?
Re[21]: Linq : неудачный маркетинг?
От: IT Россия linq2db.com
Дата: 18.02.10 15:38
Оценка: +1
Здравствуйте, Lloyd, Вы писали:

L>Вы правда-правда такие методы пишете или вы просто задались целью опровегнуть мое утверждение про анонимные типы?


Мы пишем разные методы, но никогда при этом не руководствуемся тем, будет ли лучше ставить var перед получением значения из этого метода или полный тип.
Если нам не помогут, то мы тоже никого не пощадим.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.