6
votes

Embaracdero documents "IsEmpty" methods for string types, which I've used successfully with C++ Builder code.

WideString s;

if (s.IsEmpty())
   ....

I tried the same from Delphi, and couldn't get it to compile:

var s: WideString;
begin
  if s.IsEmpty then
  ....

I know you can compare with an empty string, or call the Length function, but is it possible to call this IsEmpty method from Delphi?

EDIT: Just to clarify, this wasn't meant as a String vs Widestring issue.

Basically, the docs I link to above describe a Pascal syntax, as well as a C++ one, yet this doesn't seem to work. I assume this is just a flaw in the documentation.

Returns true if the System::WideString::WideString is empty.

Pascal: function IsEmpty: bool;

5
What does the C++ implementation look like? - Uli Gerhardt
You may not think it's a WideString vs. string issue, but it is. - Craig Stuntz
@Craig - The question shouldn't involve strings, only WideStrings. Can you elaborate? - Roddy
It involved strings before you edited the question to remove them. - Craig Stuntz
@Craig - Yup, can't argue with that.... - Roddy

5 Answers

15
votes

String is not a class in Delphi therefore it has no methods, you have to use functions for string manipulations like Length, Copy, etc... String is a class in C++ so maybe you are confused by that.

5
votes

Delphi is an hybrid language. It contains basic types and classes. Only classes (and records and objects) can contain methods.

String is a basic type, although a special one. It's the only type that has a reserved word. That's why its often written with a lowercase (string) unlike other types which have a starting captial (Integer).

You can if you like:

type
  TString = class
  private
    FString: string;
  public
    constructor Create(const AValue: string);

    property &String: string read FString write FString;
    property IsEmpty: Boolean read GetIsEmpty;
    // ...
  end;
5
votes

No. string is not WideString, even in D2009. You wouldn't want to, either; comparing with nil/empty string is much faster than a method call.

In Delphi:

var 
  s: string;
begin
  if s = '' then begin
    ShowMessage('It is empty or nil.');

...for string detects both nil and empty string (which is = nil).

1
votes
if Trim(s)='' then

???

1
votes

In the new editions you can use many string helper functions and s.IsEmpty too.