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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.01.2004, 15:05   #1  
Юрий_imported is offline
Юрий_imported
Участник
 
4 / 10 (1) +
Регистрация: 12.01.2004
Привет, читаю документацию, раздел "Dead code examples", там написано:
In the following example else is never "used" as execution already ended at the return statement (the else construct has no use here), it's "dead code":

if (a)
{
return a;
}
else
{
b++:
return b;
}

Use this form instead:
if (a)
return a;
b++:
return b;


Мне кажется, что это бред. Так ли это в действительности или это опечатка?
(Аксапту не юзаю т.к. нет рег. ключа для режима конфигурирования...)
Старый 12.01.2004, 16:26   #2  
Mr.Doc_imported is offline
Mr.Doc_imported
Участник
 
6 / 10 (1) +
Регистрация: 09.01.2004
Второй вариант предпочтительнее ...

if (a)
return a;
b++;
return b;

Какой смысл ставить else ?

И помоему у тебя очепятка. После b++ должна быть ";"
Старый 12.01.2004, 17:32   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Юрий
Привет, читаю документацию, раздел "Dead code examples", там написано:
In the following example else is never "used"...
а этот пример откуда?
там ничего про переменную а не было?
там нигде не было a = true; ?
__________________
полезное на axForum, github, vk, coub.
Старый 12.01.2004, 19:00   #4  
Юрий_imported is offline
Юрий_imported
Участник
 
4 / 10 (1) +
Регистрация: 12.01.2004
1.Понятно что можно без else, но я речь веду про строгость и интуитивность языка...
2.Пример из файла Axapta-obj.chm, нарыл где-то в инете по ссылкам с этого сайта - но точно не помню.
Старый 12.01.2004, 19:03   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
странно, у меня такого файла.
а файл большой? можно по почте прислать?
или если он небольшой, то на форум выложить?
__________________
полезное на axForum, github, vk, coub.
Старый 12.01.2004, 19:24   #6  
komar is offline
komar
Шаман форума
Аватар для komar
Ex AND Project
 
5,571 / 600 (32) +++++++
Регистрация: 24.05.2002
Это development best practices - прислать?
__________________
All information in this post is strictly confidential. If you have read it in error, please forget it immediately.
Старый 12.01.2004, 19:24   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
стандартный? нет не надо.
лучше ссылку на эту страницу
__________________
полезное на axForum, github, vk, coub.
Старый 12.01.2004, 19:27   #8  
komar is offline
komar
Шаман форума
Аватар для komar
Ex AND Project
 
5,571 / 600 (32) +++++++
Регистрация: 24.05.2002
Ссылку куда...не понял
У меня на локале болтается :-))) вхожу в Указатель, там набираю слово dead....
__________________
All information in this post is strictly confidential. If you have read it in error, please forget it immediately.
Старый 12.01.2004, 19:29   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
нашел
http://technet.navision.com/usered/BPH/Bes...CodeExample.htm

это?
действительно странно. Это не dead код.
Может здесь правила, когда Best Practices Check срабатывает?
__________________
полезное на axForum, github, vk, coub.
Старый 12.01.2004, 21:18   #10  
komar is offline
komar
Шаман форума
Аватар для komar
Ex AND Project
 
5,571 / 600 (32) +++++++
Регистрация: 24.05.2002
Наверное, авторы имели в виду, что и без "else" будет работать.
__________________
All information in this post is strictly confidential. If you have read it in error, please forget it immediately.
Старый 13.01.2004, 09:29   #11  
Ruff
Гость
 
n/a
К сожалению, не нашел точного определения "dead code" в руководстве. Может, кто-нибудь подскажет?

Поэтому решил посмотреть на указанный пример с "низкоуровневой" точки зрения. Вспоминается студенческий курсовой по проектированию трансляторов. Ниже приведен грубый перевод указанных фрагментов кода на Ассемблер, как его сделал бы компилятор. Смешно, конечно, проводить такие аналогии, но кое-что интересное в этом можно заметить.

1-Й вариант:
Код:
          TST AX, AX
          JZ  L01
// начало блока if
          MOV RESULT, AX
          RET
// конец блока if
          JMP	L02	// эта команда НИКОГДА не выполнится !!!
L01:	
// начало блока else
          INC	BX
          MOV RESULT, BX	
          RET
// конец блока else
L02:
 ...
2-Й вариант
Код:
          TST AX, AX
          JZ  L01
// начало блока if
          MOV RESULT, AX
          RET
// конец блока if
L01:	
          INC BX
          MOV RESULT, BX	
          RET
Хотя, вцелом, согласен с Юрием насчет строгости и интуитивности...
Старый 13.01.2004, 12:43   #12  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Думаю, что имелось ввиду как раз то, о чем Ruff написал (см. вариант на Ассемблере). Хотя пример, наверное, не самый удачный. Можно еще предположить, что это как-то связано с оптимизацией интерпретации кода. Во втором варианте граф потока управления получается проще, чем в первом, хотя вариант с a=false получит некоторое преимущество.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 13.01.2004, 14:28   #13  
Юрий_imported is offline
Юрий_imported
Участник
 
4 / 10 (1) +
Регистрация: 12.01.2004
На самом деле вы меня не поняли
Меня интересует будет ли работать оба варианта и таким образом это просто неточность в руководстве. Или не будет. Просто Аксапты нет, а функционалом интересуюсь (с точки зрения программиста конечно).
Старый 13.01.2004, 14:40   #14  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
скорее всего неточность в руководстве.
__________________
полезное на axForum, github, vk, coub.
Старый 13.01.2004, 15:43   #15  
Ruff
Гость
 
n/a
Цитата:
скорее всего неточность в руководстве.
И все-таки, я считаю, что в руководстве сказано именно то, о чем в нем хотели сказать. Вся суть в терминологии. Если кто-нибудь здесь приведет однозначное определение понятия "dead code", тогда и можно будет ответить на вопрос о неточности.

А я пока продолжу свои мысли по этому поводу.

1. Обратите внимание на примеры, приведенные в Best Practices. Dead code там выделен красным цветом. И в нашем примере - это именно оператор else с открывающей фигурной скобкой (я бы подкрасил еще и закрывающую скобку). Но не b++ и не return b.

2. Обратите внимание на текст, сопровождающий примеры в руководстве. В первых двух примерах (в которых dead кодом являются соответственно b++ и return a) ключевой фразой является ... is never reached (не будут достигнуты). Тогда как в третьем (рассматриваемом нами) примере ключевая фраза звучит по-другому: else is never "used". То есть, как я понимаю, код достижим, но является лишним. Или, я бы даже сказал "виртуально" не достижим (т.е. на более низком уровне - см. Ассемблер).

Из всего сказанного выше я бы сделал вывод о том, что "dead code" - это недостижимый или лишний, бессмысленный в данном контексте код.

Отвечая Юрию, работать будут оба варианта, причем абсолютно идентично, но присутствие в первом варианте оператора else - признак dead code. Вот и все.

Кстати, первые два примера тоже будут работать, просто в них есть операторы, которые не выполнятся. В третьем примере - это оператор else. Он и не выполнится, а не его тело.

PS: Что-то я много всего понаписал тут - обидно будет, если никто не ответит. Может, кто-то все-таки знает точное определение dead code?
Старый 14.01.2004, 08:32   #16  
Антон Солдатов_imported is offline
Антон Солдатов_imported
Участник
 
79 / 10 (1) +
Регистрация: 10.11.2003
Цитата:
Сообщение от Ruff
Цитата:
скорее всего неточность в руководстве.
PS: Что-то я много всего понаписал тут - обидно будет, если никто не ответит. Может, кто-то все-таки знает точное определение dead code?
Извините пожалуйста меня за занудность. Долго сдерживался и не влезал в разговор. Но за что я все-таки благодарен своим учителям, так это, прежде всего, за то, что они мне вдолбили в голову необходимость в проведении "разбора по понятиям" возникшей проблемы. 50% проблем отпадают после выяснения определений.

dead code = Любая часть программы, которая никогда не может быть доступна из за того, что все вызовы этой части были удалены, либо из за управляющей структуры, которая логически обязана переводить управление в другое место.

Оригинал(http://www.hyperdictionary.com/computing/dead+code):
Any part of a program that can never be accessed because all calls to it have been removed, or because it is guarded by a control structure that provably must always transfer control somewhere else. The presence of dead code may reveal either logical errors due to alterations in the program or significant changes in the assumptions and environment of the program (see also software rot); a good compiler should report dead code so a maintainer can think about what it means. Sometimes it simply means that an *extremely* defensive programmer has inserted can't happen tests which really can't happen - yet.

Synonym grunge
__________________
WBR, Anton
Старый 14.01.2004, 09:32   #17  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Антон Солдатов
dead code = Любая часть программы, которая никогда не может быть доступна
Спасибо за замечание и за ссылку. Словарик добавил в свой список.

Только дело в том, что в приведенном примере НЕТ кода, который НИКОГДА не может быть доступным.
__________________
полезное на axForum, github, vk, coub.
Старый 14.01.2004, 09:45   #18  
Антон Солдатов_imported is offline
Антон Солдатов_imported
Участник
 
79 / 10 (1) +
Регистрация: 10.11.2003
Цитата:
Сообщение от mazzy
Только дело в том, что в приведенном примере НЕТ кода, который НИКОГДА не может быть доступным.
Спорно. Я стараюсь в таких случаях else не писать. Это imho.
Ruff вполне хорошо обьяснил почему часть логической конструкции else можно считать "мертвым кодом".
Опять же imho, считаю else после return, просто неэстетичным. Для кого то так писать покажеться более логичным.. для кого то нет. Но ошибки в документации нет.
__________________
WBR, Anton
Старый 14.01.2004, 10:04   #19  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
[quote=Антон Солдатов]
Цитата:
Сообщение от mazzy
Ruff вполне хорошо обьяснил почему часть логической конструкции else можно считать "мертвым кодом".
в том то и дело, что только МОЖНО считать.
но по приведенному определению эта конструкция dead code'ом не является

С эстетическими оценками согласен.
__________________
полезное на axForum, github, vk, coub.
Старый 14.01.2004, 11:44   #20  
Ruff
Гость
 
n/a
Но самое смешное во всем этом то, что сама Аксапта (3.0 SP1) на приведенный фрагмент не ругается ни при компиляции, ни при проверке Best Practices!
Более того, она не ругается даже на такой ЯВНЫЙ "мертвяк":
Код:
if (a)
{
 return a;
}
else
{
 b++;
 return b;
}
 b--;
Ведь никто не будет спорить, что b-- - dead code?
Вот и читай после этого Best Practices... То есть, верь после этого людям! Написано-то складно, а на деле...
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:26.