Процедура Default();

alekcvp
Дата: 03.12.2019 16:49:59
Нашёл тут в одном стороннем исходнике коде такую конструкцию:

 ProcessInfo := Default(TProcessInformation);

Вопрос: кто-нибудь знает где можно почитать про сабж?

CTRL-Click по ней отправляет в начало System, т.е. это макрос.
В справке я её не нашёл.
Гугл отправляет читать про default свойства объектов.
Копаться в ассемблерном коде очень не очень.

Что она делает вроде понятно, но хотелось бы посмотреть на документацию...
X-Cite
Дата: 03.12.2019 17:15:42
Возвращает значение по умолчанию для типа.

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    function Test<T>(): T;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.Test<T>: T;
begin
  Result := Default(T);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  var a := Test<Int32>();
  var b := Test<string>();
  var c := Test<TRect>();
end;
alekcvp
Дата: 03.12.2019 17:20:08
X-Cite
Возвращает значение по умолчанию для типа.
alekcvp
Что она делает вроде понятно, но хотелось бы посмотреть на документацию...

Какое значение считается значением по-умолчанию для TValue? Для Variant? Для string и PChar? И т.п.
0 / nil / NULL / '' для всех?
Всегда ли её можно использовать вместо FillChar(SomeRec, SizeOf(SomeRec), 0) ?
Есть ли какие-нибудь подводные камни или особенности её использования?
Почему её почти никто не использует, ведь это явно удобнее и читабельнее, чем FillRect?
И т.п. и т.д.
_Vasilisk_
Дата: 03.12.2019 17:27:22
alekcvp
0 / nil / NULL / '' для всех?
Да.
alekcvp
Всегда ли её можно использовать вместо FillChar(SomeRec, SizeOf(SomeRec), 0) ?
Да. Особенно в таких случаях
type
  TMyRec = record
    Str: string;
    Intf: IInterface;
  end;
С FillChar по такой записи будет утечка
alekcvp
Почему её почти никто не использует,
FillChar быстрее, Default безопаснее
X-Cite
Дата: 03.12.2019 17:30:33
Я всегда использую, когда нужно значение по умолчанию...

TValue - это record, значит поведение по умолчанию как для любых записей.

Я думаю может это вам поможет?
https://stackoverflow.com/questions/14176198/difference-between-initialize-default-and-fillchar
alekcvp
Дата: 03.12.2019 17:34:25
X-Cite
Я всегда использую, когда нужно значение по умолчанию...

TValue - это record, значит поведение по умолчанию как для любых записей.

Я думаю может это вам поможет?
https://stackoverflow.com/questions/14176198/difference-between-initialize-default-and-fillchar


Спасибо за ссылку.
Странно что в официальной справке её нет (или фиг найдёшь).
softwarer
Дата: 03.12.2019 17:42:17
alekcvp
Странно что в официальной справке её нет (или фиг найдёшь).

Официальная справка вообще годится только в помойку. Ещё несколько лет назад я, когда ставил дельфу, подключал к ней хелп от D6, в нём было куда больше полезной информации. Сейчас уже ленюсь и вообще не пользуюсь :)
Василий 2
Дата: 04.12.2019 11:53:09
Если поэкспериментировать и посмотреть итоговый асм, Default во многих случаях быстрее FillChar за счет того, что на небольших типах вставляются непосредственно инструкции mov вместо вызова функции. Я эту штуку обожаю и почти везде у себя применяю. Она еще и намного безопаснее за счет контроля типа.
Почему она мало распространена? Привычка олдфагов, отсутствие справки. По мне, одна из топ-5 самых полезных удобняшек в Дельфях после 7ки.
alekcvp
Дата: 04.12.2019 13:05:19
Василий 2
По мне, одна из топ-5 самых полезных удобняшек в Дельфях после 7ки.

Огласите весь список, пожалуйста (С)
Василий 2
Дата: 04.12.2019 13:30:13
alekcvp
Василий 2
По мне, одна из топ-5 самых полезных удобняшек в Дельфях после 7ки.

Огласите весь список, пожалуйста (С)

Что ж, я знал, что этот вопрос последует...))
Без сортировки по значимости
- Exit(value)
- Default
- inline
- методы и прочие class-фичи у записей
- for in