[Lazarus] Easiest way to "case" strings
Hans-Peter Diettrich
DrDiettrich1 at aol.com
Fri Mar 27 01:51:52 CET 2009
Alexander Klenin schrieb:
> 2) Iterating over characters in string -- at first, it seems no
> different from any other array,
> but consider UTF-8 strings. Using s[i] notation in a loop will lead to
> O(n^2) time,
> while 'for ... in' can generate linear-time code.
Please note that for an iteration over UTF-8 strings the data type
'string' is required, to hold the equivalent of a multi-byte UTF
"character". Unless there exist data types for both UTF8String and
UTF8Char, or MBCSString and MBCSChar etc., a 'for ... in' construct is
rather useless.
> 3) Iterating over hash, tree, dataset, or really anything more complex
> than an array --
> there is currently no language support for that, which leads to many
> awkward, buggy and incompatible implementations.
IMO the same as for strings. As is, the compiler can only handle basic
types, where e.g. a string is an array of fixed size elements (Char,
WideChar), with consequently a fixed length. Everything else can be
supported only by according class methods or user-supplied operators,
which again open the chance for different operators in different units,
projects, libraries...
> [regarding 'case of string']
>> Yes. But since this is not a simple type, but a complex type, it goes to a
>> different class. If that is your argument, make sure it works for arrays, records,
>> classes, interfaces and the other complex types too.
> I definitely agree that 'case' should work for classes --
> perhaps even more important than for strings. For records and static arrays
> it could be implemented, but the value of such feature would be truly marginal.
How would you define the equality and ranges of such types? I.e. what's
the literal value and representation of the case label for an record?
What for 'RecA..RecX:'?
DoDi
More information about the Lazarus
mailing list