powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Стандартные константы Delphi
25 сообщений из 117, страница 3 из 5
Стандартные константы Delphi
    #39757542
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FИ, и?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
If s = '' then halt;
005F826D 837DFC00         cmp dword ptr [ebp-$04],$00
005F8271 7505             jnz $005f8278
005F8273 E884F9E0FF       call @Halt0
If s = EmptyStr then halt;
005F8278 8B45FC           mov eax,[ebp-$04]
005F827B 8B15C0E86000     mov edx,[$0060e8c0]
005F8281 8B12             mov edx,[edx]
005F8283 E8700CE1FF       call @UStrEqual
005F8288 7505             jnz $005f828f
005F828A E86DF9E0FF       call @Halt0
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39757552
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Я таки никуя ничего не понял, что мы экономим, - сегмент данных, или кода? Или изливаем свою желчь?
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39757554
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

В случае сравнения с конкретным/константным значением у компилятора нет необходимости ползать в память и вызывать метод сравнения. В случае с EmptyStr, как и с любой переменной, имеем всю эту прелесть.
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39757559
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впрочем, про код я уже присмотрелся. Но это же не противоречит моему певоначальному обоснованию использования этой псевдоконстанты?))
И уж в любом случае не стоит, чтобы из нее ругаться.
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39757565
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FНо это же не противоречит моему певоначальному обоснованию использования этой псевдоконстанты?))
В доке, и по месту декларации, сказано: только для обратной совместимости.
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39757568
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

И у меня сказано, ты что, до сих пор не понял о чем я?))
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39757569
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быстро же вы 3 страницы нафлудили :)

Глядя на тутошние мучения, лишний раз наслаждаюсь лазаревской справкой , для людей сделано.
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39757572
Фотография roschinspb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дабы расставить все точки над Ё выкладываю тестовую программку
Код: 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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
unit Unit2;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls;

const
  TestCount = 100000000;
type
  TForm2 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    FEmptyCount: Integer;
    FStrCount: Integer;
  public
    { Public declarations }
    procedure Test(const S: string);
    procedure TestAsEmptyStr;
    procedure TestLiteral;
  end;

var
  Form2: TForm2;

implementation

{$R *.fmx}

procedure TForm2.Button1Click(Sender: TObject);
var
  T2, T1: TDateTime;
begin
  T2 := Now;
  repeat
    T1 := Now;
  until T1 <> T2;
  TestAsEmptyStr;
  T2 := Now;
  Label1.Text := FormatFloat('0.000', (T2 - T1) * SecsPerDay);

  T2 := Now;
  repeat
    T1 := Now;
  until T1 <> T2;
  TestLiteral;
  T2 := Now;
  Label2.Text := FormatFloat('0.000', (T2 - T1) * SecsPerDay);
end;

procedure TForm2.Test(const S: string);
begin
  if S = EmptyStr then
    Inc(FEmptyCount)
  else
    Inc(FStrCount);
end;

procedure TForm2.TestAsEmptyStr;
var
  S: string;
  I: Integer;
begin
  for I := 0 to TestCount - 1 do
  begin
    S := EmptyStr;
    Test(S);
  end;
end;

procedure TForm2.TestLiteral;
var
  S: string;
  I: Integer;
begin
  for I := 0 to TestCount - 1 do
  begin
    S := '';
    Test(S);
  end;
end;

end.


Вопреки моим ожиданиям EmptyStr проигрывает по скорости в Win32, Win64, Android (Redmi 4x).
Таким образом, версии исходники выглядят куда как боле солидно и единственным побудительным мотивом было ЧСВ насяльника Allen`а Bauer`а внезапно находят своё подтверждение.
На этом отправляюсь в
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39757722
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roschinspbСтрока по сути динамическая переменная, пусть даже она нулевой длины (т. е. ''), но какие-то ресурсы и время на её создание тратятся.

Я извиняюсь, но строка нулевой длины - это nil, её вообще не нужно выделять. Но даже если строка не пуста, то ничего выделять опять не нужно, потому что строка будет хранится в уже готовом виде (вместе со служебным заголовком) в блоке констант. Счётчик при этом будет равен -1.

P.S. С мобилками, правда, не знаком, может там какие ужасы и понаворотили.
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39757743
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2"лучше использовать проверку <> nil вместо Assigned всегда кроме как для методов"
Assigned и так редко кто ставит без нужды
Я всегда использую Assigned. Что я делаю не так?
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39757747
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey http://docwiki.embarcadero.com/Libraries/Rio/en/System.SysUtils.EmptyStr System.SysUtils.EmptyStr

Up to Parent: System.SysUtils

Delphi

EmptyStr: string = '';

C++

extern DELPHI_PACKAGE System::UnicodeString EmptyStr;

Properties
Type Visibility Source Unit Parent
variable public
System.SysUtils.pas
System.SysUtils.hpp
System.SysUtils System.SysUtils
Description

An empty string constant.

Included for backward compatibility only .


Если поискать строку "EmptyStr" в cорцах RAD Studio, то во-первых у меня на XE4 туева хуча вхождений, а во вторых EmptyStr сплошь и рядом используется в firemonkey-модулях. На этом фоне странно смотрится "backward compatibility".
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39757761
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КвейдНа этом фоне странно смотрится "backward compatibility"
Нет, на фоне "backward compatibility" странно смотрится вот это всё.
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39757864
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это же firemonkey. Чего вас удивляет?
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39760951
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А есть константа для пробела?
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39760972
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11А есть константа для пробела?Уж символ есть точно, и клавиша может быть (с кодом). А вот как этот код воспримут разные системы/устройства зависит от неба imho. Если это код(символ), значит у него есть длина.
_________
Вот пауза, например, в музыке. Она может быть разной длины. Ещё и фермата есть
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39760982
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так речь именно о константе
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39760985
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11так речь именно о константе
Зачем константа для пробела? Контекст задачи какой?
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39761002
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite,

Т.е. сишники, явисты, дельфисты и остальные - дураки У них ведь есть хотя бы VK_SPACE
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39761008
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GatorX-Cite,

Т.е. сишники, явисты, дельфисты и остальные - дураки У них ведь есть хотя бы VK_SPACE
Так контекст VK_SPACE какой? Нажатие клавиши пробел.
К символу пробел никакого отношения не имеет.
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39761011
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11А есть константа для пробела?
А какой именно пробел из десятков возможных тебя интересует?
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39761028
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteX11так речь именно о константе
Зачем константа для пробела? Контекст задачи какой?

Использовать имя константы, а не ' '
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39761030
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteТак контекст VK_SPACE какой? Нажатие клавиши пробел.
К символу пробел никакого отношения не имеет.Нуу... Это меморандум,наверное.
Представь: на форме кнопка и едит.
Кнопка отправляет №, едит его принимает и заменяет на пробел (x20) или рисует прямоугольник. Клавы нет.
_____________________
Да даже все мы заявы писали и книжки читали! Ручка есть, бумага есть, пробелы есть...
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39761031
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteX11так речь именно о константе
Зачем константа для пробела? Контекст задачи какой?

вместо
Код: pascal
1.
s1 + ' ' + s2



чтобы было так:
Код: pascal
1.
s1 + sBlackSpace + s2
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39761034
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11X-Citeпропущено...

Зачем константа для пробела? Контекст задачи какой?

Использовать имя константы, а не ' 'Да-да.
Меня всегда убивали секретарши, тупо "наступавшие" на пробел. Типа такое форматирование таблиц
...
Рейтинг: 0 / 0
Стандартные константы Delphi
    #39761043
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11вместо
Код: pascal
1.
s1 + ' ' + s2



чтобы было так:
Код: pascal
1.
s1 + sBlackSpace + s2


т.е.
Пробел — интервал между буквами, обозначающий границы слов во многих системах письменности.

Если в этом контексте, то создайте свою константу, но используйте ее только в этом контексте, как знак препинания разделяющий буквы.
Например как разделитель в сообщениях для сокета, нужна другая константа, которая тоже может быть пробелом....

Контекстов задач много, под все константы не придумаешь.
...
Рейтинг: 0 / 0
25 сообщений из 117, страница 3 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Стандартные константы Delphi
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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