Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Variable.Create; (https://www.delphipraxis.net/179403-variable-create%3B.html)

Zacherl 8. Mär 2014 01:04

AW: Variable.Create;
 
Warnung ok, ich denke jeder hat schonmal ausversehen die Zuweisung vergessen. Fehler aber definitiv nicht!

Konstrukte wie:
Delphi-Quellcode:
with TBitmap.Create do
try
  LoadFromFile('');
finally
  Free;
end;
würden dann wohl auch nicht mehr funktionieren.

Stevie 8. Mär 2014 01:09

AW: Variable.Create;
 
Gibt imho wichtigeres, als die Sprache idiotensicher zu machen... :roll:

Furtbichler 8. Mär 2014 07:32

AW: Variable.Create;
 
Zitat:

Zitat von jfheins (Beitrag 1250935)
@Furtbichler: Bitte, werde kein Designer von Programmiersprachen. :stupid: Soweit ich sehen kann, würdest du mehrfache Konstruktoraufrufe weiterhin zulassen? Und die fehlende Variablenzuweisung macht den Code unintuitiv.

Ich gebe den Tipp, kein Designer von Programmiersprachen zu werden, gerne an Herrn Wirth weiter. :stupid: In Pascal schreibt man nun einmal:
Delphi-Quellcode:
new(a)
und nicht
Delphi-Quellcode:
a:=new()
;-)
Und bezüglich der Vermeidung eines mehrfachen Konstruktoraufrufes könnte man ja im 'new' prüfen, die Referenz 'a' nil ist und ggf (Compilerswitch) eine Exception werfen ('Possible overwrite of an instantiated object'). Wäre auch nicht doof.
Zitat:

Zitat von Stevie (Beitrag 1251184)
Gibt imho wichtigeres, als die Sprache idiotensicher zu machen... :roll:

Z.B.? Exotische Blödsinnsfeatures, die keine Sau braucht und eh verbuggt umgesetzt werden? Ich dachte immer, Pascal ist eine Lehrsprache und man könnte sich auch mal darüber unterhalten, wie man Sprachen verbessert.:roll:

himitsu 8. Mär 2014 08:59

AW: Variable.Create;
 
Zitat:

Zitat von Zacherl (Beitrag 1251183)
Warnung ok, ich denke jeder hat schonmal ausversehen die Zuweisung vergessen. Fehler aber definitiv nicht!

Konstrukte wie:
Delphi-Quellcode:
with TBitmap.Create do
try
  LoadFromFile('');
finally
  Free;
end;
würden dann wohl auch nicht mehr funktionieren.

Wieso denn nicht?

Der Compiler macht intern doch sowas draus:
Delphi-Quellcode:
AutomatischGenerierteLokaleVariable1 := TBitmap.Create;
try
  AutomatischGenerierteLokaleVariable1.LoadFromFile('');
finally
  AutomatischGenerierteLokaleVariable1.Free;
end;

[edit]
Upss, du meinst den String?

Joar, das wird schwieriger.

Es gibt doch jetzt diese Attribute.
Darüber könnte man auch Anweisungen für den Compiler generieren, aber das wäre nur "halb" sinnvoll,
da der dann nur Konstanten und keine Variablen auswerten könnte.

Wenn, dann wäre es besser, wenn man, so wie bei der Index- oder Bereichsprüfung eine Codegenerierung aktivieren könnte, welche beim Programmablauf eine Parameterprüfung entsprechend der Attribute durchführen würde.
Allerdings wäre es wohl besser, wenn solche Sachen endlich mal standardmäßig aktiv sind, im Debug-Profil, und man sie geziehlt deaktivieren muß, wenn man Diese nicht will.

JamesTKirk 8. Mär 2014 09:18

AW: Variable.Create;
 
Zitat:

Zitat von jfheins (Beitrag 1250935)
@Furtbichler: Bitte, werde kein Designer von Programmiersprachen. :stupid: Soweit ich sehen kann, würdest du mehrfache Konstruktoraufrufe weiterhin zulassen? Und die fehlende Variablenzuweisung macht den Code unintuitiv.

Die Extended Syntax von
Delphi-Quellcode:
New
und
Delphi-Quellcode:
Dispose
funktioniert nunmal so ähnlich... wenn auch nur für
Delphi-Quellcode:
object
:

Delphi-Quellcode:
program tobjectcstr;                                            

type
  TTest = object
    constructor Create(a, b: Integer);
    constructor Create(s: String);
    destructor Destroy;
  end;
  PTest = ^TTest;

constructor TTest.Create(a, b: Integer);
begin
  Writeln('Called constructor with ', a, ' & ', b);
end;

constructor TTest.Create(s: String);
begin
  Writeln('Called constructor with ', s);
end;

destructor TTest.Destroy;
begin
  Writeln('Called destructor');
end;

var
  t: PTest;
begin
  t := New(PTest, Create(42, 12));
  Dispose(t, Destroy);
  New(t, Create('Hello World'));
  Dispose(t, Destroy);
end.
Code:
$ fpc tobjectcstr.pas
Free Pascal Compiler version 2.6.2 [2013/02/16] for i386
Copyright (c) 1993-2012 by Florian Klaempfl and others
Target OS: Linux for i386
Compiling tobjectcstr.pas
Linking tobjectcstr
/usr/bin/ld: warning: testoutput/link.res contains output sections; did you forget -T?
33 lines compiled, 0.2 sec
$ ./tobjectcstr
Called constructor with 42 & 12
Called destructor
Called constructor with Hello World
Called destructor
(Ich habe jedoch nicht getestet, ob Delphi das auch ohne Probleme schluckt...)

Gruß,
Sven

Stevie 9. Mär 2014 17:40

AW: Variable.Create;
 
Zitat:

Zitat von Furtbichler (Beitrag 1251192)
Zitat:

Zitat von Stevie (Beitrag 1251184)
Gibt imho wichtigeres, als die Sprache idiotensicher zu machen... :roll:

Z.B.? Exotische Blödsinnsfeatures, die keine Sau braucht und eh verbuggt umgesetzt werden? Ich dachte immer, Pascal ist eine Lehrsprache und man könnte sich auch mal darüber unterhalten, wie man Sprachen verbessert.:roll:

Ich dachte, du wärst einer von denen, die auch mal über den Tellerrand von Delphi hinausgeblickt haben und in den Genuss von sinnvollen Language Features in anderen Sprachen gekommen sind, die sie in Delphi schmerzlich vermissen.
Und Pascal (bzw Delphi) ist schon lang keine Lehrsprache mehr.

Furtbichler 9. Mär 2014 18:45

AW: Variable.Create;
 
Zitat:

Zitat von Stevie (Beitrag 1251315)
Und Pascal (bzw Delphi) ist schon lang keine Lehrsprache mehr.

Da hast Du nun auch wieder recht.

DeddyH 10. Mär 2014 07:53

AW: Variable.Create;
 
Gerade durch Zufall entdeckt: http://docwiki.embarcadero.com/CodeE...e_%28Delphi%29
Zitat:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  regex: TRegEx;
  input: string;
  myEval: TMatchEvaluator;
begin
  i := 0;
  input := Edit1.Text;
  regex.Create('cc'); //<-- Nanu?
  myEval := ReplaceCC;
  Edit2.Text := regex.Replace(input, myEval);
end;


uligerhardt 10. Mär 2014 08:01

AW: Variable.Create;
 
Zitat:

Zitat von DeddyH (Beitrag 1251332)
Gerade durch Zufall entdeckt: http://docwiki.embarcadero.com/CodeE...e_%28Delphi%29
Zitat:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  regex: TRegEx;
  input: string;
  myEval: TMatchEvaluator;
begin
  i := 0;
  input := Edit1.Text;
  regex.Create('cc'); //<-- Nanu?
  myEval := ReplaceCC;
  Edit2.Text := regex.Replace(input, myEval);
end;


TRegEx ist ein record - da geht das.

DeddyH 10. Mär 2014 08:54

AW: Variable.Create;
 
Stimmt, hab ich dann auch gemerkt, verwirrend sieht es aber allemal aus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:14 Uhr.
Seite 3 von 5     123 45      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz