Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#1

Wenn man sich was wünschen dürfte...

  Alt 17. Sep 2015, 16:48
Unabhängig von konkreten und existierenden Programmiersprachen habe ich mal einige grundsätzliche Überlegungen bzw. Fragen, was Ihr generell als sinnvoll bzw. zweckmäßig ansehen würdet.

Ich will hier keine Pascal-Änderungen anregen, sondern einfach mal ein paar grundsätzliche (quasi philosophische) Überlegungen anstellen und diskutieren - wem das gelingt auch gern unter Berücksichtigung der Sicht eines Programmieranfängers.

„Das war aber schon immer so“ und „das kennt man halt so“ wären natürlich legitime Standpunkte, mir geht es aber darum, was der sinnvollere Ansatz ist. In dem Fall würde ich die Fragen halt so stellen: Hätte man nicht damals besser….


1) 1-basierte Listen

Ich fände generell 1-basierte Listen sinnvoll.
Wenn ich 3 Autos habe, dann zähle ich die abends in der Garage ja auch immer von 1 an durch.
In einer Hochsprache finde ich 0-basierte Listen umständlich und unnötig.


2) Werte- und Referenzzuweisungen
Delphi-Quellcode:
I1, I2: Integer;
I2 := I1; // kopiert den Wert. Änderungen in I1 wirken sich nicht auf I2 aus und umgekehrt

P1, P2: TPerson;
P2 := P1; // kopiert den Zeiger, also "beinhalten" P1 und P2 das gleiche Objekt (die gleiche Person). Änderungen „in P1“ (Vornamenänderung) wirken sich auch auf P2 aus und umgekehrt.
Wäre es generell nicht sinnvoll, das zu vereinheitlichen?
Delphi-Quellcode:
I2 := I1; // kopiert den Wert
I2 -> I1; // lässt I2 den Inhalt von I1 referenzieren

P2 := P1; // würde eine Objektkopie erzeugen (andere Speicherstelle (und wenn das Objekt über eine ID verfügt auch andere ID) , wobei alle Propertys (einschließlich anderen Referenzen wie z.B. Vater und Mutter als Personenobjekte) kopiert würden
P2 -> P1; // lässt P2 den Inhalt von P1 referenzieren
Als Parameter könnte man das ähnlich regeln:
Delphi-Quellcode:
MyProcedure(I: Integer; P: TPerson); // beides KEINE Referenzen sondern Datenkopien
MyProcedure(-> I: Integer; -> P: TPerson); // beides als Referenzen (wie im Delphi var-Parameter)
Allerdings bin ich mir selbst nicht sicher, wie die beste Lösung aussehen sollte.
Der Vorteil des „->“ (gelesen: "referenziert") wäre, dass es zwischen primitiven Werten und Businessobjekten dann nicht mehr unterschiedliche Verfahrensweisen geben würde.
Andererseits würde die klassische Zuweisung von Objektinstanzen nicht (mehr) das tun, was man landläufig kennt.
Person.Chef := Cheffe würde eben eine Datenkopie von Cheffe erzeugen und zuweisen, was man sicher seltenst benötigt. Viel eher will man wohl tatsächlich i.d.R. ein anderes Objekt referenzieren.
Logisch wäre somit dann Person.Chef -> Cheffe Eine Schreibweise mit „:=“ würde bei (Business)Objekten dann so gut wie nicht mehr vorkommen.

Positiv wäre, dass man in Anweisungen und bei Übergabeparametern sowohl bei primitiven Typen als auch bei Businessobjekten immer eine einheitliche Schreib- und Verfahrensweise hätte.


3) Strings im Quelltext

So etwas ist ja ziemlich umständlich:
S := Vorname + ' ' + Nachname + '(' + Ort + ')';

C# bietet so etwas:
S := String.Format("{0} {1} ({2:x})", Vorname, Nachname, Ort) // wobei das x für Formatierungsregeln steht

Wäre es nicht sinnvoll, so etwas zu haben wie:
S := '<Vorname> <Nachname> (<Ort:x>)'

Wenn man noch Regeln unterbringen will wie bedingte Leerzeichen, wird es schon schwieriger:
S := '<Vorname><? ?><Nachname> (<Ort:x>)// <? ?> steht hier für einen bedingtes Leerzeichen bzw. Text, wenn beide Bezeichner rechts und links keine leeren Strings enthalten

Verkürzt könnte man es noch so schreiben:
S := '<Vorname? ?Nachname> (<Ort:x>)'

(Eine einfache und logische Lösung für den Fall, dass man z.B. die Klammern nur will, wenn der Ort und der linke Text nicht leer sind fällt mir hier erst mal nicht ein. Klassisch würde man ja S1, S2 und S3 als Trenner festlegen und den Ergebnisstring dann zusammenbauen. Das wird man vielleicht nicht umgehen können aber vielleicht kann man bestimmte Standardkriterien durch einfache Regeln abbilden.)

Der Parser müsste natürlich die Klammern interpretieren können.
Der Editor müsste umschaltbar sein, so dass man entweder die Klammern (Formatanweisungen) sieht oder diese ausblendet werden und die Darstellung auf die farbigen Bezeichner reduziert wird.
S := 'Vorname Nachname (Ort)'
(So ähnlich, wie man im Word Felder und Formeln unterschiedlich anzeigen kann.)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat