AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.12.2007, 16:37   #1  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Вернуть this из класса
(С маленькой надеждой в голосе) Может кто-нибудь знает красивый способ вернуть экземпляр класса (this) из метода этого же экземпляра класса?

То есть вместо такого:

X++:
var.parm1(...);
var.parm2(...);
var.parm3(...);
var.parm4(...);
var.doIt();
хочется писать так:

X++:
var.parm1(...).parm2(...).parm3(...).parm4(...).doIt();
Старый 11.12.2007, 16:41   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Андре Посмотреть сообщение
(С маленькой надеждой в голосе) Может кто-нибудь знает красивый способ вернуть экземпляр класса (this) из метода этого же экземпляра класса? хочется писать так:
X++:
var.parm1(...).parm2(...).parm3(...).parm4(...).doIt();
А вот так не прокатывает?
X++:
class Smth
{
}
Smth parm(...)
{
    // ...
    return this;
}
Старый 11.12.2007, 16:43   #3  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Если бы все было так просто - не спрашивал.
Ругается на return this;
В декларации метода в качестве возвращаемого типа указан сам класс.
Старый 11.12.2007, 16:47   #4  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Аааа.....сорри, прошу прощения.
Это косяки местного приложения.
Старый 11.12.2007, 16:47   #5  
leva is offline
leva
Участник
 
52 / 36 (2) +++
Регистрация: 03.08.2005
Странно, у меня не ругается. Проверил - работает на AX3 SP1
Старый 11.12.2007, 17:11   #6  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Белугин так реализовывал QueryBuilder - методы которые обычно находятся на QueryBuildDataSource возвращали его же, что позволяло вызывать несколько методов подряд на том же queryBuildDataSource.
Старый 11.12.2007, 17:15   #7  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Хм... а я сделал оболочку над Args().
Старый 11.12.2007, 17:20   #8  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
То есть, вместо подобного:
X++:
    Args   args;
    ;
    args = new Args();
    args.name(formStr(reportURLedgerTurnoverSetup));
    args.parmEnumType(enumnum(reportUReportType));
    args.parmEnum(reportUserReport.ReportType);
    args.parm(reportUserReport.ReportName);
    formRun = classFactory.formRunClass(args);
Можно писать так:

X++:
formRun = new my_Args().name(formStr(reportURLedgerTurnoverSetup))
                           .parmEnumType(enumnum(reportUReportType))
                           .parmEnum(reportUserReport.ReportType)
                           .parm(reportUserReport.ReportName)
                           .formRun();
В общем то тоже, но такой стиль кода мне последнее время привычнее.
Старый 11.12.2007, 22:54   #9  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от Андре Посмотреть сообщение
В общем то тоже, но такой стиль кода мне последнее время привычнее.
За что любил, люблю и буду любить Axapt-у, за то что есть хоть какие-то правила групповой разработки. За то что прежде чем написать что-то программисты писавшие её думали, а какого этим будет пользоваться другим, как это код будет читаться. Вам то может превычней. Потому что натация короче. А какого просматривать код, тем кто после прийдёт?
Осуждать не люблю просто прошу задуматься хоть на секунду, стоит ли ломать такие привычные вещи, как ввод параметров в класс Args. Тем более опыта то у вас намного больше. Но честно лучше уж такие превычные вещи оставлять такими какие они есть.
Старый 12.12.2007, 07:49   #10  
Silence is offline
Silence
Участник
Аватар для Silence
 
287 / 27 (1) +++
Регистрация: 29.09.2004
Адрес: г. Москва, Зеленоград
Цитата:
Сообщение от miklenew Посмотреть сообщение
За что любил, люблю и буду любить Axapt-у, за то что есть хоть какие-то правила групповой разработки. За то что прежде чем написать что-то программисты писавшие её думали, а какого этим будет пользоваться другим, как это код будет читаться. Вам то может превычней. Потому что натация короче. А какого просматривать код, тем кто после прийдёт?
Осуждать не люблю просто прошу задуматься хоть на секунду, стоит ли ломать такие привычные вещи, как ввод параметров в класс Args. Тем более опыта то у вас намного больше. Но честно лучше уж такие превычные вещи оставлять такими какие они есть.
Аха, изменим мир к лучшему!!! Только все как писали, так и будут писать. (Т.е. что бы самим было удобно)
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу)
Старый 12.12.2007, 10:18   #11  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
За что любил, люблю и буду любить Axapt-у, за то что есть хоть какие-то правила групповой разработки.
Аксапта тут как раз ни при чем. Правила групповой разработки могуть быть (а могут и не быть) в группе разработчиков и от языка(и среды) разработки это никак не зависит.
В Аксапте, кстати, с правилами разработки довольно плохо. На мой взгляд, среда (или инструменты) разраблотки должны поддерживать автоматическую валидацию правил разработки, иначе контроль за их соблюдением превышает преимущества их выполнения.

Цитата:
За то что прежде чем написать что-то программисты писавшие её думали, а какого этим будет пользоваться другим, как это код будет читаться.
Хм.... мой код читается проще, чем конструкция Args() придуманная разработчиками. Это просто мое утверждение, но если ты обоснуешь свою позицию, я попробую привести аргументы в защиту моей конструкции

Цитата:
Вам то может превычней. Потому что натация короче.
Нет, не потому, что короче (хотя это тоже играет роль). Причины скорее лежат в области функционального программирования, элементы которого, последнее время, все активнее привносятся в императивные языки (в том числе и самой MS).
Старый 12.12.2007, 10:42   #12  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Андре Посмотреть сообщение
На мой взгляд, среда (или инструменты) разраблотки должны поддерживать автоматическую валидацию правил разработки, иначе контроль за их соблюдением превышает преимущества их выполнения.
Ну есть Best Practice Check - правда тормозной....
Старый 12.12.2007, 15:16   #13  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,689 / 1192 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от miklenew
Вам то может превычней. Потому что натация короче.
Цитата:
Сообщение от Андре Посмотреть сообщение
Нет, не потому, что короче (хотя это тоже играет роль). Причины скорее лежат в области функционального программирования, элементы которого, последнее время, все активнее привносятся в императивные языки (в том числе и самой MS).
Это аргумент из разряда "привычки". Вы хотите использовать синтаксис и идеологию другой среды программирования (той, которая лично Вам кажется привычней или удобней) в Axapta.

В лучшем случае, у Вас ничего не получится. В худшем, Вы получите пародоксальное (не предсказуемое) поведение Axapta.

Каждая среда программирования имеет свою собственную идеологию. Следствием которой и является используемый синтаксис языка и интерфейс приложений. И в чужой монастырь со своим уставом лучше не лезть. Ведь и побить могут
Старый 13.12.2007, 17:37   #14  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,230 / 975 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от Андре Посмотреть сообщение
Причины скорее лежат в области функционального программирования, элементы которого, последнее время, все активнее привносятся в императивные языки (в том числе и самой MS).
Согласен, что функциональное программирование увлекает красотой концепции. Это практически чистая математика, его хочется использовать. Но я считаю, что на данный момент не стоит привносить этот стиль в Axapta по следующим причинам:
1) Сами функциональщики признают, что их стиль написания часто делает программы нечитабельными.
К примеру, не сложно написать полноценный интерпретатор в одну строку. Прочитать сложнее.
2) Сама суть функционального стиля заключена в рекурсии. В Axapta есть технологическое ограничение на число вложенных вызовов, т.е. использование рекурсии невозможно
3) Основные причины возобновления интереса к функциональным языкам это:
- удобство работы с текстами
- практически идеальное распараллеливание вычислений
- дешевая оперативная память, позволяющая полностью "развернуть" граф и т.о. получить хорошую скорость работы
Для axapta ни один из этих критериев не применим
4) Очень тяжело дебажить такой код
__________________
Isn't it nice when things just work?
Старый 12.12.2007, 10:26   #15  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Только все как писали, так и будут писать. (Т.е. что бы самим было удобно)
Нет, просто проектирование приложений и требования к оформлению исходного кода - есть разные вещи и смешивать их не стоит
Старый 12.12.2007, 10:45   #16  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Ну есть Best Practice Check - правда тормозной....
Он ловит не все. Самые плохие вещи (например, int i1, i2,i3....) он не ловит.
Кстати, а где можно посмотреть QueryBuilder?
Старый 12.12.2007, 10:48   #17  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
что за QueryBuilder?
Старый 12.12.2007, 10:50   #18  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
kashperuk: Белугин так реализовывал QueryBuilder - методы которые обычно находятся на QueryBuildDataSource возвращали его же, что позволяло вызывать несколько методов подряд на том же queryBuildDataSource.
Старый 12.12.2007, 10:58   #20  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Ктати Best Practice Check - расширяемая штука
Теги
ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вызов метода базового класса Eldar9x DAX: Программирование 15 22.03.2008 19:10
Переменные в наследнике класса longson DAX: Программирование 32 12.07.2007 00:09
передача курсора в два класса kitty DAX: Программирование 3 09.08.2006 13:21
Запустить метод класса loka DAX: Программирование 2 13.03.2006 15:40
Какой метод какого класса может вернуть величину прихода/расходa по номенклатуре ATimTim DAX: Программирование 3 21.02.2005 13:06

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:49.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.