bsl-language-server
bsl-language-server copied to clipboard
[NEW] Конкатенация строк
Описание проблемы, ошибки, которую надо диагностировать
Стоит вместо конкатенции строк использовать СтрШаблон, что позволяет оформить код более читабельно.
Например
// плохо
Результат = "По " + Документ.Номер + " от " + Документ.ДатаСозданияСчета + " произошло изменение статуса на " + СтатусДокумента(Документ) + " и прошла оплата на сумму " + СуммаВСтроку(Документ.Сумма) + ".";
// Хорошо
Результат = СтрШаблон("По %1 от %2 произошло изменение статуса на %3 и прошла оплата на сумму %4.",
Документ.Номер,
Документ.ДатаСозданияСчета,
СтатусДокумента(Документ),
СуммаВСтроку(Документ.Сумма)) ;
Ссылка на источник, подтверждающее нарушение либо обоснование наличия проблемы
https://its.1c.ru/db/v8std/content/782/hdoc/_top
Параметры диагностики
Тип Статья на русском
- [ ] :ant: Ошибка
- [ ] :cop: Уязвимость
- [x] :poop: Качество кода
- [ ] :trollface: Другое
Важность Статья на русском
- [ ] :broken_heart: Блокирующая / Blocker
- [ ] :heart: Критическая / Critical
- [ ] :yellow_heart: Важная / Major
- [x] :blue_heart: Незначительная / Minor
- [ ] :green_heart: Информационная / Info
- [ ] :revolving_hearts: Другое
Тэги Статья на русском
- [x]
STANDARD
- "Нарушение стандартов 1С" - [ ]
LOCKINOS
- "Не будет работать в другой ОС" - [ ]
SQL
- "Проблема с запросом" - [x]
PERFORMANCE
- "Проблема производительности" - [ ]
BRAINOVERLOAD
- "Непонятный код" - [ ]
BADPRACTICE
- "Плохая практика программирования" - [ ]
CLUMSY
- "Излишние действия" - [ ]
DESIGN
- "Ошибка в проектировании" - [ ]
SUSPICIOUS
- "Подозрительный код" - [ ]
UNPREDICTABLE
- "Непредсказуемо работающий код" - [ ]
DEPRECATED
- "Устаревшая функциональность" - [ ]
ERROR
- "Ошибочная конструкция"
Время на исправление (минут)
5
Дополнительная информация
Если внутри цикла, то это может быть и perfomance
ага
Какое количество конкатинаций допускается?
Иногда "А" + "Б"
проще СтрШаблон(%1%2, "А", "Б");
Мысль орать только на Нную стрингу.
Переменная + "Стринга" + Переменная
+ "ВтораяСтринга"
ЗЫ. Хотя сделать и посмотреть количество вонтФиксов
Я так и не нашел стандарта который бы это запрещал ((. Есть указанная выше ссылка, но она про производительность.
- Примечание: следует ориентироваться на 1000 операций конкатенации строк и более (эта величина также может быть еще меньше при увеличении длин строк: чем строки длиннее, тем операции выполняются дольше). Особого внимания требует конкатенация в циклах и в универсальных механизмах, которые могут применяться на сколь угодно больших объемах данных. В то же время, не следует отказываться от конкатенации строк в остальных случаях, так как это заметно снижает читаемость кода.
можно подумать о параметризации
- в циклах
- длина выражения
- количество операндов
Конкатенацию можно, а часто и лучше, делать через СтрСоединить. Особенно если строка собирается в цикле.
Больше 3-4 плюсов - ругаться. Уже нечитабельно.
В Пульском плагине мы уже несколько лет назад реализовали такое правило.
- можно там описание подсмотреть. я добавлял в него и СтрШаблон, и СтрСоединить.
- был параметр-минимальное количество учитываемых выражений
В Пульском плагине мы уже несколько лет назад реализовали такое правило.
- можно там описание подсмотреть. я добавлял в него и СтрШаблон, и СтрСоединить.
жжешь Артур: когда пульский плагин был опубликован в паблике, шоб "подсмотреть"
@otymko
@theshadowco так эта... https://docs.checkbsl.org/checks/%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B8%D0%9A%D0%BE%D0%B4%D0%B0/
Словили в проде падение на конкатенации в цикле.
@theshadowco так эта... https://docs.checkbsl.org/checks/%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B8%D0%9A%D0%BE%D0%B4%D0%B0/
Я пропустил...
ну и соответствующее Пульское правило, о котором я писал https://docs.checkbsl.org/checks/overall/StringConcat/