Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5   вперед  Ctrl      все
 Re: Стандартные константы Delphi  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3508
Vlad F
И, и?


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
9 янв 19, 22:52    [21781091]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
Vlad F
Member

Откуда:
Сообщений: 807
Kazantsev Alexey,

Я таки никуя ничего не понял, что мы экономим, - сегмент данных, или кода? Или изливаем свою желчь?
9 янв 19, 23:24    [21781115]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3508
Vlad F,

В случае сравнения с конкретным/константным значением у компилятора нет необходимости ползать в память и вызывать метод сравнения. В случае с EmptyStr, как и с любой переменной, имеем всю эту прелесть.
9 янв 19, 23:33    [21781119]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
Vlad F
Member

Откуда:
Сообщений: 807
Впрочем, про код я уже присмотрелся. Но это же не противоречит моему певоначальному обоснованию использования этой псевдоконстанты?))
И уж в любом случае не стоит, чтобы из нее ругаться.
9 янв 19, 23:39    [21781129]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3508
Vlad F
Но это же не противоречит моему певоначальному обоснованию использования этой псевдоконстанты?))

В доке, и по месту декларации, сказано: только для обратной совместимости.
9 янв 19, 23:57    [21781140]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
Vlad F
Member

Откуда:
Сообщений: 807
Kazantsev Alexey,

И у меня сказано, ты что, до сих пор не понял о чем я?))
10 янв 19, 00:31    [21781148]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
Док
Member

Откуда: Казань
Сообщений: 6163
Быстро же вы 3 страницы нафлудили :)

Глядя на тутошние мучения, лишний раз наслаждаюсь лазаревской справкой, для людей сделано.
10 янв 19, 00:33    [21781149]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
roschinspb
Member

Откуда: С-Пб
Сообщений: 1615
Дабы расставить все точки над Ё выкладываю тестовую программку
+
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`а внезапно находят своё подтверждение.
На этом отправляюсь в Картинка с другого сайта.
10 янв 19, 01:11    [21781153]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
GunSmoker
Member

Откуда:
Сообщений: 3109
roschinspb
Строка по сути динамическая переменная, пусть даже она нулевой длины (т. е. ''), но какие-то ресурсы и время на её создание тратятся.


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

P.S. С мобилками, правда, не знаком, может там какие ужасы и понаворотили.
10 янв 19, 11:00    [21781348]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
Квейд
Member

Откуда: Kyiv, Ukraine
Сообщений: 5213
Василий 2
"лучше использовать проверку <> nil вместо Assigned всегда кроме как для методов"
Assigned и так редко кто ставит без нужды
Я всегда использую Assigned. Что я делаю не так?
10 янв 19, 11:52    [21781393]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
Квейд
Member

Откуда: Kyiv, Ukraine
Сообщений: 5213
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".
10 янв 19, 11:56    [21781398]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3508
Квейд
На этом фоне странно смотрится "backward compatibility"

Нет, на фоне "backward compatibility" странно смотрится вот это всё.
10 янв 19, 12:13    [21781418]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
rgreat
Member

Откуда:
Сообщений: 5004
Это же firemonkey. Чего вас удивляет?
10 янв 19, 13:40    [21781583]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12997
А есть константа для пробела?
17 янв 19, 15:20    [21787992]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
Gator
Member

Откуда: Москва
Сообщений: 14270
X11
А есть константа для пробела?
Уж символ есть точно, и клавиша может быть (с кодом). А вот как этот код воспримут разные системы/устройства зависит от неба imho. Если это код(символ), значит у него есть длина.
_________
Вот пауза, например, в музыке. Она может быть разной длины. Ещё и фермата есть
17 янв 19, 15:39    [21788029]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12997
так речь именно о константе
17 янв 19, 15:49    [21788044]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1388
X11
так речь именно о константе

Зачем константа для пробела? Контекст задачи какой?
17 янв 19, 15:50    [21788048]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
Gator
Member

Откуда: Москва
Сообщений: 14270
X-Cite,

Т.е. сишники, явисты, дельфисты и остальные - дураки У них ведь есть хотя бы VK_SPACE
17 янв 19, 16:00    [21788070]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1388
Gator
X-Cite,

Т.е. сишники, явисты, дельфисты и остальные - дураки У них ведь есть хотя бы VK_SPACE

Так контекст VK_SPACE какой? Нажатие клавиши пробел.
К символу пробел никакого отношения не имеет.
17 янв 19, 16:04    [21788078]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
Василий 2
Member

Откуда:
Сообщений: 554
X11
А есть константа для пробела?

А какой именно пробел из десятков возможных тебя интересует?
17 янв 19, 16:07    [21788082]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12997
X-Cite
X11
так речь именно о константе

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


Использовать имя константы, а не ' '
17 янв 19, 16:24    [21788101]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
Gator
Member

Откуда: Москва
Сообщений: 14270
X-Cite
Так контекст VK_SPACE какой? Нажатие клавиши пробел.
К символу пробел никакого отношения не имеет.
Нуу... Это меморандум,наверное.
Представь: на форме кнопка и едит.
Кнопка отправляет №, едит его принимает и заменяет на пробел (x20) или рисует прямоугольник. Клавы нет.
_____________________
Да даже все мы заявы писали и книжки читали! Ручка есть, бумага есть, пробелы есть...
17 янв 19, 16:25    [21788103]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12997
X-Cite
X11
так речь именно о константе

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


вместо
s1 + ' ' + s2


чтобы было так:
s1 + sBlackSpace + s2
17 янв 19, 16:26    [21788105]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
Gator
Member

Откуда: Москва
Сообщений: 14270
X11
X-Cite
пропущено...

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


Использовать имя константы, а не ' '
Да-да.
Меня всегда убивали секретарши, тупо "наступавшие" на пробел. Типа такое форматирование таблиц
17 янв 19, 16:29    [21788108]     Ответить | Цитировать Сообщить модератору
 Re: Стандартные константы Delphi  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1388
X11
вместо
s1 + ' ' + s2


чтобы было так:
s1 + sBlackSpace + s2

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

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

Контекстов задач много, под все константы не придумаешь.
17 янв 19, 16:45    [21788131]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5   вперед  Ctrl      все
Все форумы / Delphi Ответить