Различие между добавлением единицы к интерфейсу или разделу реализации

вы находитесь на правильном пути, в основном плохая вещь, которую вы делаете, - это создание новых массивов [...arr], когда map уже дает вам новый массив.

Другие вещи, которые можно использовать, могут быть троичным оператором и возвращать непосредственно результат функции map

. Проверьте здесь improvedGetUpdate:

[ 1110]
var id = 3;

var obj = {
  name: "test"
};

let arr = [{
  name: "dd",
  id: 1
}, {
  name: "dzxcd",
  id: 3
}, {
  name: "nav",
  id: 5
}, {
  name: "hhh",
  id: 4
}]

function getUpdated(obj, id) {
  var item = [...arr];
  const t = item.map((i) => {
    if (i.id == id) {
      return {
        ...obj,
        id
      }
    } else {
      return i;
    }
  })
  return t
}

improvedGetUpdate = (obj, id) => arr.map(i => {
  return i.id !== id ? i : {
    ...obj,
    id
  }
})

console.log(getUpdated(obj, id))
console.log(improvedGetUpdate(obj, id))

6
задан Triber 9 July 2019 в 18:48
поделиться

5 ответов

Различие имеет отношение, где Вам разрешают отослать к вещам это AConsts имеет в его интерфейсном разделе. В первом AUnit, Вы могли использовать Const4 для объявления фиксированного размера выстраивают в том интерфейсном разделе. Вы не могли сделать этого во втором AUnit потому что Const4 не находится в объеме.

Это может иметь эффект на скомпилированную программу, если Вы не осторожны. Предположим, что у нас есть другая единица, которая также объявляет названную константу Const4:

unit BConsts;
interface
const
  Const4 = 50;
implementation
end.

Теперь мы определяем массив в UnitA как это:

unit AUnit
interface
uses BConsts;
var
  data: array[0..Pred(Const4)] of Integer;
implementation
uses AConsts;
procedure Work;
var
  i: Integer;
begin
  for i := 0 to Const4 - 1 do begin
    data[i] := 8;
  end;
end;
end.

Тот код запишет вне конца массива потому что Const4 это находится в объеме в интерфейсном разделе, не то же Const4 это используется в разделе реализации. Этого часто не происходит с константами. Это обычно просто происходит с двумя идентификаторами, FindClose функция, определяемая в Windows и SysUtils, и TBitmap, определенный в Graphics и Windows. И в тех двух случаях, компилятор скажет Вам о выполнении чего-то не так хотя он не скажет Вам точно об использовании идентификатора, который имеет два различных значения. Можно разрешить проблему путем квалификации идентификатора:

for i := 0 to BConsts.Const4 - 1 do
  data[i] := 8;

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

10
ответ дан 8 December 2019 в 13:50
поделиться

Я поместил все ссылки в раздел реализации и только поставил те имена единицы в интерфейсе, к которому я имею.

Мне нравится ограничивать объем всего как можно больше, тем не менее, и эта политика в соответствии с этим.

3
ответ дан 8 December 2019 в 13:50
поделиться

IDE также использует как, где Вы объявляете, что Ваше использование устанавливает то, что он должен скомпилировать.

Если Ваш интерфейсный раздел будет использовать UnitA, и Ваш раздел реализации использует UnitB затем, если единица B перекомпиляция потребностей, Ваша единица не будет, но если Унита изменится затем, то Ваша единица должна будет быть перекомпилирована.

Это - один из секретов Delphis супер быстрая скорость сборки.

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

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

Я следую правилу, что я поместил все на Интерфейсную часть, если я не должен иметь дело с проблемами с циклическими ссылками. Это помогает принести немного ясности. Некоторые мастера в Delphi и "Файле> Единица Использования..." диалоговое окно помещают единицы на раздел реализации.

За исключением прерываний обзора, которые выделенный Rob Kennedy, это, не имеет значения. Сделайте свой стандарт и придерживайтесь его.

1
ответ дан 8 December 2019 в 13:50
поделиться

Объекты в операторе использования в интерфейсе видимы во всей единице.

Объекты в операторе использования в реализации только видимы в разделе реализации.

Пример:

unit A;
interface
const 
  cA = 1;
..


unit B;
interface
const 
  cB = 1;
..



unit C;
interface
uses
  A;
const 
  cC1 = cA;
  cC2 = cB; // Error

implementation
uses
  B;
const
  cC3 = cA;
  cC4 = cB;

end.

Можно создать взаимные зависимые единицы, если по крайней мере одна единица включена в раздел реализации:

unit A;
interface
implementation
uses
  B;
end.


unit B;
interface
implementation
uses
  A;
end.

Если оба будут использоваться в интерфейсном разделе, то он не будет компилировать/связывать.

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

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