powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Константы
6 сообщений из 6, страница 1 из 1
Константы
    #34377484
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Риторический вопрос по поводу объявления контстант в коде.

Пример. Работаю с модулем, который формирует отчёт в Excel на основе шаблона.
Прекрасно понимаю, что путь к файлу шаблона обязатально вынести в const.
Но не понимаю, зачем поля отчёта (%Date%, %CustomerName% и т.п.) выносить в const.
Во втором случае мне видится константа на константу, названия полей в шаблоне это что-то вроде имён таблиц и колонок в БД, а они-то в коде лежат значениями.

Где критерий? Поделитесь пожалуйста...
...
Рейтинг: 0 / 0
Константы
    #34377830
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FrankieПрекрасно понимаю, что путь к файлу шаблона обязатально вынести в const.
Обязательно - это перебор. Например, часто его стоит вынести в настройки.

FrankieНо не понимаю, зачем поля отчёта (%Date%, %CustomerName% и т.п.) выносить в const.
Во втором случае мне видится константа на константу, названия полей в шаблоне это что-то вроде имён таблиц и колонок в БД, а они-то в коде лежат значениями.
Ну, вообще говоря, "имена колонок и таблиц" тоже могут лежать константами :)

Думаю, здесь нет единой точки зрения, вопрос в целесообразности (и ее понимании конкретным разработчиком).
...
Рейтинг: 0 / 0
Константы
    #34377859
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerОбязательно - это перебор. Например, часто его стоит вынести в настройки.
Я к тому, что в код писать значение пути никак нельзя :)

Думаю, здесь нет единой точки зрения, вопрос в целесообразности (и ее понимании конкретным разработчиком).
И я так думаю, а меня отправляют читать книжки по программированию! Добавляя, что никаких значений в коде лежать не должно, при этом True, False, nil, 0 это как бы исключительные случаи...
...
Рейтинг: 0 / 0
Константы
    #34377928
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FrankieЯ к тому, что в код писать значение пути никак нельзя :)
Не факт. Скажем, в следующем коде

Код: plaintext
1.
2.
3.
4.
5.
 class   function  LogManager.LogFileName :  string  ;
 begin 
  Result := ExcludeTrailingPathDelimiter ( ExtractFilePath ( Application.ExeName )) ;
  Result := Result + '\Log\' + FormatDateTime ( 'mmmm" "yyyy"\"', Now ) ;
  Result := Result + FormatDateTime ( 'dd"."mm"."yyyy".log"', Now ) ;
 end  ;

лично я криминала не вижу. Его конечно можно переписать, например, так:

Код: plaintext
1.
2.
3.
4.
5.
6.
 class   function  LogManager.LogFileName :  string  ;
 const  FileNameMask = '"%s\Log\"mmmm" "yyyy"\"dd"."mm"."yyyy".log"' ;
 begin 
  Result := Format ( 
    FormatDateTime ( FileNameMask, Now ), [ 
      ExcludeTrailingPathDelimiter ( ExtractFilePath ( Application.ExeName ))]) ;
 end  ;

но объяснение, чем это вариант лучше оригинала, скорее всего изрядно позабавит :)
FrankieИ я так думаю, а меня отправляют читать книжки по программированию!
Есть хорошая пословица про программиста, лоб которого подвергается повышенной опасности.... Лично я бы в таком случае отловил бы в коде крикунов фрагменты типа

Код: plaintext
for i =  0  to Count -  1  step  1  do

и заставил бы менять на

Код: plaintext
for i = ZERO to Count - ONE step ONE do
...
Рейтинг: 0 / 0
Константы
    #34378033
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerНе факт. Скажем, в следующем коде лично я криминала не вижу.
Тут вы генерите путь и имя для нового файла. Я о случае, когда файл создан.

softwarerЛично я бы в таком случае отловил бы в коде крикунов фрагменты...
Ага :) Ведь пишут же имена ХПшек и их поля как есть. Просто чтобы понять что такое LISTREP_NAMEORG надо, как говорится, контрол-клик сделать, а увидев '%NameOrg%', я бы сразу понял о чём речь...
...
Рейтинг: 0 / 0
Константы
    #34378157
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FrankieПросто чтобы понять что такое LISTREP_NAMEORG надо, как говорится, контрол-клик сделать, а увидев '%NameOrg%', я бы сразу понял о чём речь...
Это соображение на самом деле не значимо, вопрос договоренностей. Стоит "привыкнуть пользоваться константами", как "сразу понял о чем" будет выполняться.

Другой вопрос - зачем эта константа. В первую очередь: спасет ли она, если потребуется поменять %NameOrg% на %NameOrgMy%? Имхо - за код

Код: plaintext
1.
 const 
  cNameOrg = '%NameOrgMy%' ;

cледует однозначно отрывать яйца. Изменение значения однозначно влечет необходимость переименования константы. Далее, имя этой константы как минимум не короче оригинала, читаемость тоже не повышается, как в случае длинных текстовых констант. Единственное преимущество: если вдруг эта ячейка будет переименована, и если константа будет переименована вслед за ней, и если она используется в нескольких местах, то "прочие" места перестанут компилиться. С этим преимуществом связан и недостаток: если константа внедрена неудачно (скажем, в двух шаблонах были одинаково названные поля, использована одна константа, теперь мы переименовываем ячейку в одном из шаблонов, а в другом оставляем как есть) - все, мы самым что ни на есть незаметным образом сломали код. Можно быть почти уверенным, что исправленная версия пройдет тестирование (никто не будет запускать глобальное тестирование из-за такой мелочи), дойдет до пользователя и у него отвалится функциональность.

Да, это преимущество есть, вместе с недостатком. Но имхо - изредка нажать Ctrl-F куда выгоднее, нежели постоянно иметь геморрой с константами.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Константы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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