powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Процедура Default();
22 сообщений из 22, страница 1 из 1
Процедура Default();
    #39897668
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашёл тут в одном стороннем исходнике коде такую конструкцию:

Код: pascal
1.
 ProcessInfo := Default(TProcessInformation);


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

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

Что она делает вроде понятно, но хотелось бы посмотреть на документацию...
...
Рейтинг: 0 / 0
Процедура Default();
    #39897700
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возвращает значение по умолчанию для типа.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
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;
...
Рейтинг: 0 / 0
Процедура Default();
    #39897703
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite
Возвращает значение по умолчанию для типа.
alekcvpЧто она делает вроде понятно, но хотелось бы посмотреть на документацию...
Какое значение считается значением по-умолчанию для TValue? Для Variant? Для string и PChar? И т.п.
0 / nil / NULL / '' для всех?
Всегда ли её можно использовать вместо FillChar(SomeRec, SizeOf(SomeRec), 0) ?
Есть ли какие-нибудь подводные камни или особенности её использования?
Почему её почти никто не использует, ведь это явно удобнее и читабельнее, чем FillRect?
И т.п. и т.д.
...
Рейтинг: 0 / 0
Процедура Default();
    #39897714
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
0 / nil / NULL / '' для всех?
Да.
alekcvp
Всегда ли её можно использовать вместо FillChar(SomeRec, SizeOf(SomeRec), 0) ?
Да. Особенно в таких случаях
Код: pascal
1.
2.
3.
4.
5.
type
  TMyRec = record
    Str: string;
    Intf: IInterface;
  end;

С FillChar по такой записи будет утечка
alekcvp
Почему её почти никто не использует,
FillChar быстрее, Default безопаснее
...
Рейтинг: 0 / 0
Процедура Default();
    #39897716
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я всегда использую, когда нужно значение по умолчанию...

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

Я думаю может это вам поможет?
https://stackoverflow.com/questions/14176198/difference-between-initialize-default-and-fillchar
...
Рейтинг: 0 / 0
Процедура Default();
    #39897719
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite
Я всегда использую, когда нужно значение по умолчанию...

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

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


Спасибо за ссылку.
Странно что в официальной справке её нет (или фиг найдёшь).
...
Рейтинг: 0 / 0
Процедура Default();
    #39897725
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Странно что в официальной справке её нет (или фиг найдёшь).

Официальная справка вообще годится только в помойку. Ещё несколько лет назад я, когда ставил дельфу, подключал к ней хелп от D6, в нём было куда больше полезной информации. Сейчас уже ленюсь и вообще не пользуюсь :)
...
Рейтинг: 0 / 0
Процедура Default();
    #39898014
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если поэкспериментировать и посмотреть итоговый асм, Default во многих случаях быстрее FillChar за счет того, что на небольших типах вставляются непосредственно инструкции mov вместо вызова функции. Я эту штуку обожаю и почти везде у себя применяю. Она еще и намного безопаснее за счет контроля типа.
Почему она мало распространена? Привычка олдфагов, отсутствие справки. По мне, одна из топ-5 самых полезных удобняшек в Дельфях после 7ки.
...
Рейтинг: 0 / 0
Процедура Default();
    #39898056
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2
По мне, одна из топ-5 самых полезных удобняшек в Дельфях после 7ки.

Огласите весь список, пожалуйста (С)
...
Рейтинг: 0 / 0
Процедура Default();
    #39898072
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Василий 2
По мне, одна из топ-5 самых полезных удобняшек в Дельфях после 7ки.

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

Что ж, я знал, что этот вопрос последует...))
Без сортировки по значимости
- Exit(value)
- Default
- inline
- методы и прочие class-фичи у записей
- for in
...
Рейтинг: 0 / 0
Процедура Default();
    #39898077
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда надо было сразу говорить,
что "удобняшек в языке Дельфи".
И где генерики, анонимные методы
и пр. радости жизни ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Процедура Default();
    #39898091
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Тогда надо было сразу говорить,
что "удобняшек в языке Дельфи".
И где генерики, анонимные методы
и пр. радости жизни ?

Еще Юникод вспомни)
Это не удобняшки, а серьезные фичи.

Вот кстати еще одна неочевидная ситуация, когда Default помогает избежать бага

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
function Foo: TSomeRec;
begin
  // ! Delphi оставляет значение Result от предыдущего вызова. FillChar после этого
  // затирает ссылки на строки, и происходит утечка памяти. Поэтому обнуляем результат
  // через присвоение нулевой записи.
  Result := Default(TSomeRec);
  ...
  Result.str := '...';
end;
...
Рейтинг: 0 / 0
Процедура Default();
    #39898102
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2

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

Василий 2

Вот кстати еще одна неочевидная ситуация, когда Default помогает избежать бага
Код: pascal
1.
2.
function Foo: TSomeRec;
....


Потому что, по-факту, компилятор этот вызов преобразует в
Код: pascal
1.
2.
procedure Foo(var Result: TSomeRec); // только Result будет не в EAX, а на стеке ЕМНИП
....


Такая же хрень со строками и прочими ссылочными типами.
...
Рейтинг: 0 / 0
Процедура Default();
    #39898127
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Такая же хрень со строками и прочими ссылочными типами.

Угу, но остальные типы не затираешь FillChar-ом, поэтому на утечку памяти и нет шанса наткнуться.
...
Рейтинг: 0 / 0
Процедура Default();
    #39898303
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
_Vasilisk_
alekcvp
0 / nil / NULL / '' для всех?
Да.
alekcvp
Всегда ли её можно использовать вместо FillChar(SomeRec, SizeOf(SomeRec), 0) ?
Да. Особенно в таких случаях
Код: pascal
1.
2.
3.
4.
5.
type
  TMyRec = record
    Str: string;
    Intf: IInterface;
  end;


С FillChar по такой записи будет утечка
alekcvp
Почему её почти никто не использует,
FillChar быстрее, Default безопаснее


А для чего использоватьFillChar для структуры, содержащей string и прочие указатели ?
Как-бы очевидно, что будет утечка
...
Рейтинг: 0 / 0
Процедура Default();
    #39898319
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а в чем практический смысл этой процедуры? Разве при объявлении рекордов они не инициализируются? Даже в микроконтроллерах объявляемые переменные чистятся.
...
Рейтинг: 0 / 0
Процедура Default();
    #39898344
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin,

локальные не чистятся.
...
Рейтинг: 0 / 0
Процедура Default();
    #39898345
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin,

да и result, как выше писали, не всегда.
...
Рейтинг: 0 / 0
Процедура Default();
    #39898351
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
А для чего использоватьFillChar для структуры, содержащей string и прочие указатели ?
Как-бы очевидно, что будет утечка
+1
...
Рейтинг: 0 / 0
Процедура Default();
    #39898356
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
makhaon,

ну как бы не новость - языку не один десяток лет - радость-то в чем? Тут FMX до путя довести не могут много лет - реальный объем работы. И тут в топе - цикл for in, exit(), классовые функции........ И в чем академическая ценность?? Сэкономил 4 строчки кода? Да, еще забыл один из топов - инлайн функции - ну прям задышалось легче....
...
Рейтинг: 0 / 0
Процедура Default();
    #39898438
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
А для чего использоватьFillChar для структуры, содержащей string и прочие указатели ?
Как-бы очевидно, что будет утечка

Потому что для локальной переменной компилятор инициализирует строки пустым значением, а вот простые поля не инициализирует, поэтому при первом обращении к локальной переменной можно использовать FillChar();, кроме случая с Result.
...
Рейтинг: 0 / 0
Процедура Default();
    #39898446
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
А для чего использоватьFillChar для структуры, содержащей string и прочие указатели ?

Для зануления остальных полей

GrigoriyFomin
И тут в топе - цикл for in, exit(), классовые функции........ И в чем академическая ценность?? Сэкономил 4 строчки кода? Да, еще забыл один из топов - инлайн функции - ну прям задышалось легче....

Для тех, кто не умеет читать - прямым текстом: топ удобных мелочей , без которых можно обойтись, но которые делают процесс немного приятнее.
Ну а то, что ты не в состоянии оценить инлайн функции, это твои личные трудности.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Процедура Default();
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]