bsl-language-server icon indicating copy to clipboard operation
bsl-language-server copied to clipboard

[NEW] Конкатенация строк

Open theshadowco opened this issue 5 years ago • 14 comments

Описание проблемы, ошибки, которую надо диагностировать

Стоит вместо конкатенции строк использовать СтрШаблон, что позволяет оформить код более читабельно.

Например

// плохо
Результат = "По " + Документ.Номер + " от " + Документ.ДатаСозданияСчета + " произошло изменение статуса на " + СтатусДокумента(Документ) + " и прошла оплата на сумму " + СуммаВСтроку(Документ.Сумма) + ".";

// Хорошо
Результат = СтрШаблон("По %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

Дополнительная информация

theshadowco avatar Oct 30 '19 13:10 theshadowco

Если внутри цикла, то это может быть и perfomance

nixel2007 avatar Oct 30 '19 13:10 nixel2007

ага

theshadowco avatar Oct 30 '19 13:10 theshadowco

Какое количество конкатинаций допускается? Иногда "А" + "Б" проще СтрШаблон(%1%2, "А", "Б");

Мысль орать только на Нную стрингу.

Переменная + "Стринга" + Переменная + "ВтораяСтринга"

ЗЫ. Хотя сделать и посмотреть количество вонтФиксов

asosnoviy avatar Oct 30 '19 13:10 asosnoviy

Я так и не нашел стандарта который бы это запрещал ((. Есть указанная выше ссылка, но она про производительность.

qtLex avatar Oct 30 '19 13:10 qtLex

  • Примечание: следует ориентироваться на 1000 операций конкатенации строк и более (эта величина также может быть еще меньше при увеличении длин строк: чем строки длиннее, тем операции выполняются дольше). Особого внимания требует конкатенация в циклах и в универсальных механизмах, которые могут применяться на сколь угодно больших объемах данных. В то же время, не следует отказываться от конкатенации строк в остальных случаях, так как это заметно снижает читаемость кода.

nixel2007 avatar Oct 30 '19 13:10 nixel2007

можно подумать о параметризации

  • в циклах
  • длина выражения
  • количество операндов

theshadowco avatar Oct 30 '19 13:10 theshadowco

Конкатенацию можно, а часто и лучше, делать через СтрСоединить. Особенно если строка собирается в цикле.

akabrr avatar Mar 06 '20 18:03 akabrr

Больше 3-4 плюсов - ругаться. Уже нечитабельно.

EvilBeaver avatar Jun 28 '21 10:06 EvilBeaver

В Пульском плагине мы уже несколько лет назад реализовали такое правило.

  • можно там описание подсмотреть. я добавлял в него и СтрШаблон, и СтрСоединить.
  • был параметр-минимальное количество учитываемых выражений

artbear avatar Jun 29 '21 10:06 artbear

В Пульском плагине мы уже несколько лет назад реализовали такое правило.

  • можно там описание подсмотреть. я добавлял в него и СтрШаблон, и СтрСоединить.

жжешь Артур: когда пульский плагин был опубликован в паблике, шоб "подсмотреть"

@otymko

theshadowco avatar Jun 29 '21 14:06 theshadowco

@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/

nixel2007 avatar Jun 30 '21 07:06 nixel2007

Словили в проде падение на конкатенации в цикле.

asosnoviy avatar Oct 06 '21 10:10 asosnoviy

@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 avatar Oct 06 '21 11:10 theshadowco

ну и соответствующее Пульское правило, о котором я писал https://docs.checkbsl.org/checks/overall/StringConcat/

artbear avatar Oct 07 '21 17:10 artbear