[Lazarus] Delphi post-XE3 roadmap

Graeme Geldenhuys graeme at geldenhuys.co.uk
Thu Aug 30 15:23:18 CEST 2012


On 30/08/12 13:49, leledumbo wrote:
> straight, easy to write code to load a file contents into a string
> variable easily. complicated techniques required)

What's so difficult about:

var
   sl: TMyNewStringList;
   fn: IString;
begin
   fn := s('c:\myfile.txt');
   sl := TMyNewStringList.Create;
   sl.LoadFromFile(fn, encUTF8);  // for a UTF-8 encoded file
// ...or...
   sl.LoadFromFile(fn, encUTF16); // for a UTF-16 encoded file


Internally TMyNewStringList will use the TString type. The second 
parameter in LoadFromFile() is the encoding the file is in. 
TMyNewStringList will load the data and do the encoding conversion (if 
required) to store the data in the encoding used by TString.

Just because Java requires 3 classes to work together to read a text 
file [1], doesn't mean Object Pascal must too.


> Anyway Graeme, if you like the expression style, overloaded operators
> would be more intuitive. Or a(nother) proper naming: .Append and
> .Replace should NOT create new instance,

The same confusion could arise as before, and that is what immutable 
objects try to avoid. For example:

var
   lUserJohn: IString;
   lFirstName: IString;
begin
   lUserJohn := s('john');
   lUserJohn.Replace('sussie');
   { now lUserJohn doesn't store the name one would expect }

// ...or...

   lFirstName := s('John');
   lFirstName.Append(' Doe');
   { now lFirstName doesn't store what the variable name suggests }

...but this is much more clear...

   lFullName := lFirstName.Append(' Doe');

lFirstName still contains what it says, and so does lFullName.


Then also throw multi-threading into the mix. With immutable strings or 
objects you don't need to worry about Mutexes or Critical Sections 
etc... This simplifies multi-threaded programming a lot.



[1] 
http://www.mkyong.com/java/how-to-read-utf-8-encoded-data-from-a-file-java/


Regards,
   - Graeme -






More information about the Lazarus mailing list