Отладка проблем с оператором 'WITH' в Delphi 2006 [дубликат]

Использование some является лучшим подходом для этого, оно остановится, как только что-то найдет. для больших массивов это будет улучшение:)

products = [
{id: 'pdc', code: '123456', name: 'pompa'},
{id: 'kbr', code: '2365', name: 'kit kbr'},
{id: 'boiler', code: '23165', name: 'VPB'}
];

const result = products.some(product => Object.keys(product).some(key => product[key].includes('kbr')))
console.log(result)

6
задан Community 23 May 2017 в 12:26
поделиться

8 ответов

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

Это действительно имеет тенденцию привыкать слишком много в примерах, поскольку код, конечно, выглядит более чистым, но на практике влияние обслуживания выяснения, если переменная проста или часть структуры при рассмотрении кода, Вы не записали или не использовали в течение периода, легко перевешивает это. Известными проблемами с отладчиком на каждой версии Delphi, который я когда-либо использовал, является решающий довод.

17
ответ дан 8 December 2019 в 02:08
поделиться

Отладчик не может установить связь между переменной, показанной в исходном коде, который Вы хотите исследовать и связанный с оператором, когда Вы наведение мыши переменная. Необходимо будет исследовать значения в окне часов отладки и указать полную переменную там, например, MyNumber. Цифра.

8
ответ дан 8 December 2019 в 02:08
поделиться

Я использую С.. сделайте редко и будьте склонны делать как это

var
  Sc : TE_Type;
begin
  Sc := A.B.C.D.E;
  sc.Method1;
  sc.Method2;
  sc.Method3;
  sc.Method4;
  sc.Method5;
  sc.Method6;
end;

Конечно, достойное название кв/см не причинит боль. И я думаю, что это более ясно, чем с.. сделайте и отладчик оказывается намного лучше. Так, мне нравится много того 'ярлыка' переменные.

5
ответ дан 8 December 2019 в 02:08
поделиться

"С" представляет неоднозначности и может вызвать больше проблем, чем это решает. Рассмотрите просто не использование его.

Источник вдохновения имеет рефакторинг, который помогает удалить их.

4
ответ дан 8 December 2019 в 02:08
поделиться

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

Основная причина, она повреждает отладчик. Это было бы очень непрактично, чтобы отладчик оценил все пункты при нахождении значения переменной, таким образом, не ошибка, ее просто неподдерживаемый во всех отладчиках Дельфи я знаю о. Если Вы похожи на меня, застрявшее поддержание сотни тысяч строк от программиста, который в основном скопировал все из учебника, он делает отладку живущего ада.

Нижняя строка, не ИСПОЛЬЗУЙТЕ С ПУНКТАМИ... КОГДА-ЛИБО!

2
ответ дан 8 December 2019 в 02:08
поделиться

Проблемы отладки с с оператором известны. Это - одна из причин, я удаляю их, когда я вижу их. По-моему, Вы никогда не должны улучшать скорость кодирования за счет пригодности для обслуживания.

Общая конструкция я вижу много (и изученный для ненависти):

with TMyObject.Create do
  try
    Method1(blah, blah, blah);
    Method2(blah, blah, blah);
  finally 
    Free;
  end;

Даже возможно включить больше конструкций с оператором:

with A, B, C, D do
  // Aargh!

Но с другой стороны, иногда существует допустимое использование для с оператором, если можно заменить:

A.B.C.D.E.Method1;
A.B.C.D.E.Method2;
A.B.C.D.E.Method3;
A.B.C.D.E.Method4;
A.B.C.D.E.Method5;
A.B.C.D.E.Method6;

С

with A.B.C.D.E do begin
  Method1;
  Method2;
  Method3;
  Method4;
  Method5;
  Method6;
end;

Хотя использование A.B.C.D.E немного сомнительно, это имеет тенденцию быть "Дельфи путь". Но теперь с помощниками класса, у нас может быть совершенно допустимое решение:

TAHelper = class helper for TA
public
  procedure Method1;
endl

procedure TAHelper.Method1;
begin
  // You can (should) add sanity checks here.
  B.C.D.E.Method1;
end;

Таким образом, теперь можно использовать:

A.Method1;

Который намного лучше, по-моему.

6
ответ дан 8 December 2019 в 02:08
поделиться

С оператором синтаксический NutraSweet: Это является на вкус много как синтаксический сахар, но оставляет плохой остаточный вкус и, оказывается, на самом деле вредно в долгосрочной перспективе. Лучше просто не использовать его.

6
ответ дан 8 December 2019 в 02:08
поделиться

С это совсем не плохая практика. Плохо только то, что вы не можете легко отладить эти строки, но если вы используете их осторожно, проблем не возникнет. Может быть, это не очень хорошая практика для юниоров, но если вы знаете, где ее использовать, все в порядке.

Позвольте EMBA улучшить его любым способом, чтобы избежать распространенной тирады по этому поводу.

-1
ответ дан 8 December 2019 в 02:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: