Именованные/дополнительные параметры в Delphi?

Я бы оставил их как свойства. Но нет «стандартной» причины делать то или иное дело. Если ты один, делай все, что тебе больше нравится. Если вы в команде, следуйте правилам, которым следуют остальные члены вашей команды.

12
задан Wouter van Nifterick 20 May 2009 в 02:50
поделиться

3 ответа

Очевидно, что язык Delphi поддерживает именованные параметры, поскольку они появляются прямо здесь в образце кода Delphi. Delphi поддерживает именованные параметры для объектов автоматизации, которые являются объектами, реализующими интерфейс IDispatch . Существуют ограничения на типы, которые могут иметь параметры и возвращаемые типы ; в частности, они не могут быть классами Delphi.

Я не думаю, что удобство, которое вы ищете от именованных параметров, перевесит снижение производительности, которое вы получите, если каждый вызов метода будет маршрутизироваться через IDispatch.Invoke метод. Для вызова может также потребоваться сначала использовать GetIDsOfNames . Вы не увидите этого в большем количестве кода, потому что люди обычно стараются избегать позднего связывания. По возможности используйте раннее связывание, чтобы избежать затрат на поиск идентификаторов отправки и косвенные вызовы методов.

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

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

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

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

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

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

Объявление s позволяет это.

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

Объявление s позволяет это.

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

19
ответ дан 2 December 2019 в 05:15
поделиться

If you declare your procedure like so:

procedure DoSomething(AParam : integer = 0);

... it will assume a value of 0 for the parameter if it isn't given. As I recall, parameters with default values have to be at the end of the call, so like this:

procedure DoSomething(AFirstParam : string; AParam : integer = 0);

not like this:

procedure DoSomething(AParam : integer = 0; ASecondParam : string);
6
ответ дан 2 December 2019 в 05:15
поделиться

По сути, это «какой-то хак компилятора для объектов автоматизации». Иногда мне приходится использовать его для автоматизации Excel и Word.

например

  MSExcel.Application.Cells.Replace(What:='', Replacement:='', LookAt:=xlPart,
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True);

Эквивалент VBA

Application.Cells.Replace(What='', Replacement='', LookAt=xlPart, _
   SearchOrder=xlByRows, MatchCase=False, SearchFormat=True, ReplaceFormat=True)
4
ответ дан 2 December 2019 в 05:15
поделиться
Другие вопросы по тегам:

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