Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Expression Tree. Зачем оно ? / 17 сообщений из 17, страница 1 из 1
17.09.2014, 17:43
    #38749505
Ростигай
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Expression Tree. Зачем оно ?
Привет.

Для чего, в принципе, могут быть полезны деревья выражений в типичном приложении. В GUI приложении, или WIn-сервис может быть.

Вдруг я зря их не использовал ни разу :)
Можете привести примеры, может быть из собственного реального опыта, когда деревья выражений как-то существенно улучшили приложение. Если выгода лишь в 1%, то не уверен, что ради этого стоит усложнять поддержку приложения (не очень-то хочется слышать проклятья от своих коллег в будущем :) )

Пока я считаю их лишь неким инструментарием для тех, кто пишет некие компиляторы или еще что-то в этом духе - в общем не особо применимом в обычных приложении.
...
Рейтинг: 0 / 0
17.09.2014, 18:44
    #38749579
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Expression Tree. Зачем оно ?
Ростигай,

Вам - незачем. Мне - тоже.

Захотите свою ORM создать, с поддержкой LINQ - тогда пригодится. Ну или какие-нить динамические запросы в Where, вводимые пользователем. Хотя в последнем случае шаблон Specifications вроде как рулил.
...
Рейтинг: 0 / 0
17.09.2014, 19:00
    #38749593
Ростигай
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Expression Tree. Зачем оно ?
Спасибо за ответ.

Просто интересно стало.

Вдруг еще кто-то поделится историей, аналогичной этой (не пойму как вставить ссылку картинкой) :
https://lurkmore.to/Файл:Regular_expressions.png

:)
...
Рейтинг: 0 / 0
17.09.2014, 19:07
    #38749604
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Expression Tree. Зачем оно ?
РостигайСпасибо за ответ.

Просто интересно стало.

Вдруг еще кто-то поделится историей, аналогичной этой (не пойму как вставить ссылку картинкой) :
https://lurkmore.to/Файл:Regular_expressions.png

:)

Э... На всякий случай: Regular Expressions и Expressions Tree - это разные вещи.
...
Рейтинг: 0 / 0
17.09.2014, 19:13
    #38749611
Ростигай
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Expression Tree. Зачем оно ?
Arm79,

Ну я знаю это. Но спасибо за предупреждение :)

Картинко просто в тему первого поста вспомнилась. А вдруг, мол, знание деревьев выражений поможет мне в профессиональном плане. О том и топик.
...
Рейтинг: 0 / 0
17.09.2014, 19:26
    #38749628
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Expression Tree. Зачем оно ?
Ростигай,
Expression это скорее нужно для разработчиков и то строг мидл и выше, для простых программистов достаточно общих представлений..
имхо
...
Рейтинг: 0 / 0
17.09.2014, 19:54
    #38749663
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Expression Tree. Зачем оно ?
Если неизвестно зачем - значит, не нужно. Когда понадобится - будет понятно зачем, и для чего.
...
Рейтинг: 0 / 0
17.09.2014, 20:18
    #38749695
Ростигай
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Expression Tree. Зачем оно ?
Сон Веры Павловны,

Та ну, странное предположение.
Если ребенок не знает про существование букв и цифр, это еще не значит, что они ему не нужны :)

И он такой "Да зачем мне это. Я и без этого проживу, буду водонасосчиком работать" а ему такие "Не, ты смотри научишься читать, в программисты пойдешь, ферари там, 5 этажей апартаменты личные".

И вот я такой: "Зачем нужны деревья выражений ? Жил без них программером". А мне тут в теме: "тут ответ на вопрос топикстартера + про ферари и апартаменты" :)
...
Рейтинг: 0 / 0
17.09.2014, 20:28
    #38749708
zz
zz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Expression Tree. Зачем оно ?
Ростигай, ну в .NET хватает специфических вещей. Reflection.Emit используете в GUI приложениях? А он есть.
...
Рейтинг: 0 / 0
18.09.2014, 05:28
    #38749913
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Expression Tree. Зачем оно ?
РостигайВ GUI приложении...Например, вот:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class MyViewModel : NotificationObject
{
    public int Value
    {
        get { return _value; }
        set 
        {  
            _value = value;
            OnPropertyChanged("Value");
        }
    }
}

vs
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class MyViewModel : NotificationObject
{
    public int Value
    {
        get { return _value; }
        set 
        {  
            _value = value;
            OnPropertyChanged(() => Value);
        }
    }
}

Чуешь разницу?

В Asp.Net MVC куча хелперов использует такой подход, да много где. Про LINQ-to-XXX уже сказали, это основное применение Expression.
...
Рейтинг: 0 / 0
18.09.2014, 10:56
    #38750080
netivan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Expression Tree. Зачем оно ?
Алексей КРостигайВ GUI приложении...Например, вот:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class MyViewModel : NotificationObject
{
    public int Value
    {
        get { return _value; }
        set 
        {  
            _value = value;
            OnPropertyChanged("Value");
        }
    }
}

vs
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class MyViewModel : NotificationObject
{
    public int Value
    {
        get { return _value; }
        set 
        {  
            _value = value;
            OnPropertyChanged(() => Value);
        }
    }
}

Чуешь разницу?

В Asp.Net MVC куча хелперов использует такой подход, да много где. Про LINQ-to-XXX уже сказали, это основное применение Expression.
пожалуй кроме этого нигде не использовал. Ну один раз собирал "дерево" и компилил вместо аналогичного подхода с рефлекшеном
...
Рейтинг: 0 / 0
18.09.2014, 11:49
    #38750146
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Expression Tree. Зачем оно ?
РостигайЕсли ребенок не знает про существование букв и цифр, это еще не значит, что они ему не нужны :)
Аналогия некорректна, поскольку предполагает развитие разработчика на уровне ребенка. Хотя такие есть, не спорю.
...
Рейтинг: 0 / 0
18.09.2014, 12:21
    #38750222
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Expression Tree. Зачем оно ?
Ростигай,
Классические программы могут менять свои данные во время исполнения.
Используя деревья выражений, можно менять код во время исполнения, а это уже попахивает искусственным интеллектом. То есть такие программы смогут обучаться.
...
Рейтинг: 0 / 0
19.09.2014, 07:03
    #38751115
НемоКэп42
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Expression Tree. Зачем оно ?
Алексей КРостигайВ GUI приложении...Например, вот:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class MyViewModel : NotificationObject
{
    public int Value
    {
        get { return _value; }
        set 
        {  
            _value = value;
            OnPropertyChanged("Value");
        }
    }
}

vs
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class MyViewModel : NotificationObject
{
    public int Value
    {
        get { return _value; }
        set 
        {  
            _value = value;
            OnPropertyChanged(() => Value);
        }
    }
}

Чуешь разницу?
С версии 4.5 это уже не комильфо. Рулит CallerMemberName.

А вот когда надо получить строковое имя переменной или функции:

всякие такие штуки и их вариации, типа расширяющих дженериков, для удобства

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
/// <summary>
/// Returns the member name of the specific type.
/// </summary>
/// <typeparam name="TResult">Type of the member of the type whose member name will be obtained.</typeparam>
/// <param name="expression">Lambda expression of member access. "MemberAccess" for properties, "Call" for methods.</param>
/// <returns></returns>
public static string GetMemberName<TResult>(Expression<Func<T, TResult>> expression, ExpressionType expressionType)
{
	switch (expressionType)
	{
		case ExpressionType.MemberAccess:
			var memberExpression = (MemberExpression)expression.Body;
			if (memberExpression == null)
			{
				throw new InvalidOperationException("Expression must be of member access.");
			}
			return memberExpression.Member.Name;

		case ExpressionType.Call:
			var methodCallExpression = (MethodCallExpression)expression.Body;
			if (methodCallExpression == null)
			{
				throw new InvalidOperationException("Expression must be of method access.");
			}
			return methodCallExpression.Method.Name;

		default:
			throw new InvalidOperationException("No appropriate expression was passed.");
	}
}

...
Рейтинг: 0 / 0
19.09.2014, 07:08
    #38751116
НемоКэп42
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Expression Tree. Зачем оно ?
ЕвгенийВРостигай,
Классические программы могут менять свои данные во время исполнения.
Используя деревья выражений, можно менять код во время исполнения, а это уже попахивает искусственным интеллектом. То есть такие программы смогут обучаться.
А ещё можно передавать код через сериализацию, не выходя из рантайма и не используя для этого внешние компиляторы.

Правда, я не уверен, что метод Expression<TDelegate>.Compile не использует внешний компилятор и всё делает чисто "средствами рантайма дотнета".
...
Рейтинг: 0 / 0
19.09.2014, 10:46
    #38751257
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Expression Tree. Зачем оно ?
НемоКэп42А ещё можно передавать код через сериализацию, не выходя из рантайма и не используя для этого внешние компиляторы.
Хейсберг обещал сериализацию деревьев выражений, но что то у них не сраслось.
НемоКэп42Правда, я не уверен, что метод Expression<TDelegate>.Compile не использует внешний компилятор и всё делает чисто "средствами рантайма дотнета".
MSIL генерируется "средствами рантайма дотнета", дальше JIT компилятор, как обычно.
...
Рейтинг: 0 / 0
20.09.2014, 10:32
    #38752281
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Expression Tree. Зачем оно ?
НемоКэп42Алексей Кпропущено...
Например, вот:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class MyViewModel : NotificationObject
{
    public int Value
    {
        get { return _value; }
        set 
        {  
            _value = value;
            OnPropertyChanged("Value");
        }
    }
}

vs
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class MyViewModel : NotificationObject
{
    public int Value
    {
        get { return _value; }
        set 
        {  
            _value = value;
            OnPropertyChanged(() => Value);
        }
    }
}

Чуешь разницу?
С версии 4.5 это уже не комильфо. Рулит CallerMemberName.StackTrace Class есть с версии 3.5
НемоКэп42А вот когда надо получить строковое имя переменной или функции:

всякие такие штуки и их вариации, типа расширяющих дженериков, для удобства

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
/// <summary>
/// Returns the member name of the specific type.
/// </summary>
/// <typeparam name="TResult">Type of the member of the type whose member name will be obtained.</typeparam>
/// <param name="expression">Lambda expression of member access. "MemberAccess" for properties, "Call" for methods.</param>
/// <returns></returns>
public static string GetMemberName<TResult>(Expression<Func<T, TResult>> expression, ExpressionType expressionType)
{
	switch (expressionType)
	{
		case ExpressionType.MemberAccess:
			var memberExpression = (MemberExpression)expression.Body;
			if (memberExpression == null)
			{
				throw new InvalidOperationException("Expression must be of member access.");
			}
			return memberExpression.Member.Name;

		case ExpressionType.Call:
			var methodCallExpression = (MethodCallExpression)expression.Body;
			if (methodCallExpression == null)
			{
				throw new InvalidOperationException("Expression must be of method access.");
			}
			return methodCallExpression.Method.Name;

		default:
			throw new InvalidOperationException("No appropriate expression was passed.");
	}
}

Что и предлагается.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Expression Tree. Зачем оно ? / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]