Z.B. Bitmanipulationen mit Masken und shift. Da MSElang explizite Datengrössen bevorzugt (int8, int16, int32, int64, card8, card16..., string8, string16, string32, char8...) wäre es konsequent dies auch in Ausdrücken zu tun. Aber wie gesagt, ich muss noch mehr ausprobieren.braunbär hat geschrieben:Mir fällt eigentlich kein Beispiel ein, in der die Umwandlung von einem schmäleren in einen "breiteren" Datentyp zu schwierig zu erkennenden Fehlern führt. Die Gegenrichtung ist auch jetzt entweder gar nicht implizit möglich (real->integer), passiert nie innerhalb der Berechnung von Ausdrücken, sondern nur bei Zuweisungen (da sollte sich der Programmierer aber wirklich im Klaren darüber sein, welchen Wert er welcher Variablen zuweist), oder löst, zumindest in Delphi, eine Compilerwarnung aus (z.B. integer -> Byte oder char -> ansichar)mse hat geschrieben:Durch implizite Typumwandlungen gibt es schwierig zu erkennende Fehler in Ausdrücken.
"forward" property Felder/getter/setter?
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: "forward" property Felder/getter/setter?
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2825
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: "forward" property Felder/getter/setter?
Wie das? Hast du dafür bitte einmal ein Beispiel?braunbär hat geschrieben:Weil es einem manchmal ersparen würde, den exakt gleichen Programmcode zwei mal zu schreiben.m.fuchs hat geschrieben:Warum?1. Zuweisungen in Vergleichen wären manchmal sehr nützlich.
braunbär hat geschrieben:Es ist, wie ich oben begründet habe, BESSER leserlich: Bei ifthen stehen die Bedingung und die beiden Alternativausdrücke gleichberechtigt auf der gleichen Ebene als Funktionsparameter nebeneinander, während der ternäre Operator die Semantik des Befehls unmittelbar sichtbar macht.
Ich habe nicht gesagt dass ifthen lesbarer ist, das würde ich in vielen Fällen auch nicht verwenden.
Richtig, deswegen das ganze in eine eigene Funktion auslagern. Auf solche Konstrukte kann man dann ganz verzichten. Zumal sie keinen Informationsgewinn bieten.braunbär hat geschrieben:Dass bei Verwendung von IfThen immer beide Zweige ausgewertet werden, disqualifiziert das Konstrukt meines Erachtens komplett, ich verwende das prinzipiell gar nicht mehr, nachdem ich schon mehrmals unbedachter Weise über Laufzeitfehler wie den im oberen Post aufgezeigten gestolpert bin. Das ist eine unnötige Fehlerquelle.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: "forward" property Felder/getter/setter?
Führt aber zu Fehler Quellen.1. Zuweisungen in Vergleichen wären manchmal sehr nützlich.
Ja, so hatte ich es auch schon mal umgesetzt.Was du brauchst ist ein Basistyp, der alle verwendeten Datentypen beschreibt und spezialisierte Nachkommen, welche die Datentypen implementieren.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 463
- Registriert: Do 8. Jun 2017, 18:21
- OS, Lazarus, FPC: Windows 10 64bit, Lazarus 3.6, FPC 3.2.2
- CPU-Target: 64Bit
- Wohnort: Wien
Re: "forward" property Felder/getter/setter?
Programmieren ist eine einzige riesige Fehlerquellepluto hat geschrieben:Führt aber zu Fehler Quellen.1. Zuweisungen in Vergleichen wären manchmal sehr nützlich.

Und der ternäre Operator würde keine Zuweisungen in Vergleichen ermöglichen - oder kannst du dafür ein Beispiel bringen?
Schreibe einmal das folgende in normaler Pascal Syntax, ohne irgend etwas zwei mal zu machen.m.fuchs hat geschrieben:Wie das? Hast du dafür bitte einmal ein Beispiel?
Code: Alles auswählen
while (l := length(s)) < 10 do
insert('x', s, l div 2)
Lesbarkeit ist halt etwas reichlich subjektives. Ich finde Statements mit dem ternären Operator sehr gut lesbar, übersichtlich und dabei kompakt. Aber ich programmiere auch viel in autohotkey (das in anderer Hinsicht nicht sonderlich übersichtlich ist), deshalb bin ich diese Schreibweise gewöhnt.m.fuchs hat geschrieben:Ich habe nicht gesagt dass ifthen lesbarer ist, das würde ich in vielen Fällen auch nicht verwenden.
Gefällt dir das besser:
Code: Alles auswählen
ch := if length(s)>0 then s[1] else ' ';
Warum sollte man für eine einfache if-Abfrage mit je einer Zuweisung im then- und im else Zweig eine eigene Funktion machen? Meinst du wirklich, dass so etwas zur Lesbarkeit des Codes beiträgt?m.fuchs hat geschrieben:Richtig, deswegen das ganze in eine eigene Funktion auslagern.
Mit dem ternären Operator wird das zum einem einfachen Einzeiler, und das ist sicher nicht schlechter als eine separate Funktion, die man erst suchen muss.
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2825
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: "forward" property Felder/getter/setter?
Damit mse hier auch weiter ungestört Vor- und Nachteile seiner Sprache diskutieren kann, ist der Teil mit der Auslagerung in Funktion hierher verschoben: http://www.lazarusforum.de/viewtopic.php?f=9&t=10863
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de