if abfrage oder wert setzen was ist schneller [gelöst]

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
laz847
Beiträge: 114
Registriert: Mi 18. Jun 2014, 16:39

if abfrage oder wert setzen was ist schneller [gelöst]

Beitrag von laz847 »

Hallo, nur mal eine ganz kurze Frage.

Code: Alles auswählen

if(FormCid.Value <> _cid) then FormCid.Value := _cid;
oder

Code: Alles auswählen

FormCid.Value := _cid;
Was ist sinnvoller, im 1. Fall muss der Wert ja erst gelesen und verglichen werden.

Im 2. Fall wird einfach geschrieben ohne zu prüfen, vermutlich merkt da dann eine interne Routine (wenn der Wert bereits identisch ist) das nichts geändert werden muss.

Gibts da noch eine "innere" Routine?

Was bedeuten würde (2) sollte auch schneller sein oder? Ich könnte es einfach testen, ich will aber generell wissen was wie funktioniert um mein Wissen zu erweitern und meinen Stil zu verbessern. :roll:
Zuletzt geändert von laz847 am Di 31. Mär 2015, 00:42, insgesamt 1-mal geändert.

mse
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: if abfrage oder wert setzen was ist schneller

Beitrag von mse »

Warum schaust du nicht selber im Code von FormCid nach?

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: if abfrage oder wert setzen was ist schneller

Beitrag von theo »

Üblicherweise wird das beim Setzen des Propertys Komponentenintern geprüft.

Die Lazarus IDE selbst schlägt folgenden Code vor für einen Property Setter:

Schreibe z.B. folgendes Code Fragment:

Code: Alles auswählen

  ...
  public
    { public declarations }
    property myprop:integer
  end;
  ...
Setzte das Caret hinter "integer" und drücke Shift + Ctrl + C. Lazarus ergänzt den Code dann u.a. zu:

Code: Alles auswählen

procedure TForm1.Setmyprop(AValue: integer);
begin
  if Fmyprop=AValue then Exit;
  Fmyprop:=AValue;
end;  
Ob das wirklich einen Geschwindigkeitsvorteil ausmacht, hängt wahrscheinlich auch davon ab, wie oft der Setter mit dem unveränderten Wert aufgerufen wird. Ist wahrsch. nur statistisch und anwendungsspezifisch zu klären, ob das schneller ist.

Grundsätzlich gehört so etwas aber in die Komponente, so dass der User der Komponente sich darüber nicht den Kopf zerbrechen muss.
Also gutes Design = Der Komponentenentwickler kümmert sich darum - der Komponentenanwender kümmert sich nicht darum.

laz847
Beiträge: 114
Registriert: Mi 18. Jun 2014, 16:39

Re: if abfrage oder wert setzen was ist schneller

Beitrag von laz847 »

"Grundsätzlich gehört so etwas aber in die Komponente, so dass der User der Komponente sich darüber nicht den Kopf zerbrechen muss."

Verstanden, vielen Dank :D

Antworten