Тема открыта по просьбе жителей Королевства и посвящена обсуждению вопросов оптимизации кода. Выставляйте свои лучшие и худшие тексты и не стесняйтесь их обсуждать. В споре рождается истина. Или, по крайней мере, оптимизация.
Всего в теме 737 сообщений
Добавить свое сообщение
Отслеживать это обсуждение 
- Тестирование проекта. Отладка.
- Подводные камни
- Централизованная обработка ошибок
- Бета-тестирование
- Давайте учиться на ошибках.
- Почему программисты допускают ошибки?
- Автоматизированные тесты для GUI
- О системах контроля ошибок
№ 377 20-01-2007 16:13 |  |
По моему Ins прав. Многие привыкают присваивать в начале функции значение Result. Во многих случаях это правильный стиль. Поэтому в приведенном выражденном случае делают присвоение автоматически.
Действие по шаблону. Не слишком подходящему в данном случае, но в принципе правильному.
№ 376 20-01-2007 15:14 |  |
Ответ на »сообщение 375« (Geniepro)
___________________________
>>> Если бы этот программист хоть немного поработал на функциональных языках и привык к тому, что повторно присвоить значение переменной нельзя <...>
Интересный момент. Я на функциональных языках не работад (Excel не в счет). Естественно, я привык иногда загонять в переменную промежуточные расчеты (для лучшей читаемости кода и, возможно, для поиска глюков при отладке). Однако такой способ реализации функции и у меня вызывает отторжение.
Не убедительно ;-)
№ 375 20-01-2007 13:57 |  |
Ответ на »сообщение 366« (Geo)
___________________________
Почему же чаще встречается первый вариант? Кто-нибудь задумывался над таким вопросом?
Элементарное бескультурье.
Следствие привычки работать на языках, в которых возможно изменение состояния...
Если бы этот программист хоть немного поработал на функциональных языках и привык к тому, что повторно присвоить значение переменной нельзя - для него однозначно допустимым был бы только второй вариант программы...
:о))
№ 374 20-01-2007 12:05 |  |
Ответ на »сообщение 373« (Ins)
___________________________
>>> В том то и дело, что ну никак не нарвемся! :)
Компилятор, как я понимаю, выдает свой варнинг исходя из того, что инициализация переменной Result происходит в операторе case, в котором нет раздела else. Соответственно, при таком подходе можно упустить какой-либо вариант. Вычислением логических выражение и определением их полноты компилятор не занимается.
Честно говоря, меня это устраивает. Пусть он проверяет синтаксис и быстро компилирует это дело в EXE. А смыслом получившегося кода я займусь сам. А если представить себе противоположное... Компилятор, который работает два часа, чтобы в конце концов определить, что такая-то потенциальная ошибка на самом деле в данной программе никогда не наступит ;-)
№ 373 20-01-2007 11:46 |  |
Ответ на »сообщение 372« (Geo)
___________________________
Компилятор просто честно и благородно предупреждает, что можем нарваться.
Ага, честно. В том то и дело, что ну никак не нарвемся! :)
А те, кому это давит на нервы, могут варнинги отключить ;-)
О, это как раз про меня! ;)
Так и поступаю, использую директивы {$WARNINGS ON} и {$WARNINGS OFF}
№ 372 20-01-2007 11:38 |  |
Ответ на »сообщение 371« (Ins)
___________________________
А что плохого в этом варнинге? Компилятор просто честно и благородно предупреждает, что можем нарваться. Он (в отличие от программиста) не может понять, что третьего не дано ;-) А работе программы наличие варнинга при компиляции, насколько мне известно, ничуть не мешает.
А те, кому это давит на нервы, могут варнинги отключить ;-)
№ 371 20-01-2007 10:59 |  |
Кстати, очень неприятно, что Delphi выдает
[Warning] Unit1.pas(31): Return value of function 'Max' might be undefined
на такую конструкцию
function Max(a, b: Integer): Integer;
begin
case a > b of
true: Result:=a;
false: Result:=b;
end;
end;
То же самое будет с другими перечислимыми типами, все значения которых можно перечислить в одном case. Приходиться либо использовать описанный Geo прием, либо вставлять в case..end else, что мне кажется не менее неестественным.
№ 370 20-01-2007 10:54 |  |
Ответ на »сообщение 367« (Антон Григорьев)
___________________________
>>> А вообще - как-то мало я с чужим кодом работаю...
Ну, я такое достаточно часто встречал, изучая примеры на VBA (Excel, Access). Будем считать, что это еще одна диверсия Микрософта против устоявшейся культуры программирования ;-)
Ответ на »сообщение 368« (Ins)
___________________________
>>> А я первый вариант использую часто <...>
Это совсем другой случай. Задаем одно значение и потом проверяем все условия выхода с этим значением. Если не вывалились и дошли до конца, значит реультат прямо пртивоположный. Там это оправданная методика, позволяющая сделать код более читаемым. Я же говорю про абсолютно симметричный случай из двух вариантов. Будем считать, что виновата привычка ;-)
Ответ на »сообщение 369« (panda)
___________________________
>>> Потому что Вы плохо отстреливаете тех, кто так пишет ;)
И чем я их буду отстреливать? МБР что ли? Никакое другое оружие просто не дострелит до США и не сможет поразить программистов Микрософта ;-)
Господа, спасибо! Вы меня успокоили. А то я уже волноваться начал, что я такой дурак и не понимаю таких простых вещей. Оказалось, что дурак все же не я :-D
№ 369 20-01-2007 10:35 |  |
Ответ на »сообщение 366« (Geo)
___________________________
Почему же чаще встречается первый вариант?
Потому что Вы плохо отстреливаете тех, кто так пишет ;)
Я вот хорошо отстреливаю, поэтому мне обычно второй вариант показывают :)
№ 368 20-01-2007 10:29 |  |
А я первый вариант использую часто. Только немного не в таком виде. Допустим есть функция, которая выполняет какие-либо действия и возвращает true, если все прошло хорошо и false, если где-то по дороге произошел сбой.
function SomeFunc: Boolean;
begin
Result:=false;
end;
А насчет таких коротеньких функциий, типа поиска максимального значения - возможно я бы тоже так поступил, чисто по привычке.
Добавить свое сообщение
Отслеживать это обсуждение 
Дополнительная навигация: |
|