Delphi-PRAXiS
Seite 77 von 192   « Erste     2767757677 787987127177     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Klatsch und Tratsch (https://www.delphipraxis.net/34-klatsch-und-tratsch/)
-   -   Was nervt euch so, während der Programmierung oder so allgemein (https://www.delphipraxis.net/152540-nervt-euch-so-waehrend-der-programmierung-oder-so-allgemein.html)

himitsu 17. Dez 2011 22:54

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Sagen wir es mal so, ich hab das "absichtlich" gemacht, da die Liste sich nicht verändern darf.

Einzige andere sichere Möglichkeit wäre, daß man jeden Eintrag einzeln sperren können müßte,
daß jeder Thread, bzw. jedes Objekt (Enumerator und Co.) seinen eigenen Index-Zähler bekommt und die Indize gegenseitig synchronisiert würden.

himitsu 19. Dez 2011 13:04

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Man hat doch mal vor einer Weile das FastStringsProjekt in Delphi aufgenommen ... ist ja gut und schön,
aber wenn man jetzt dieses wieder mit vollkommen schrottigen Funktionen zur Minna macht ... also das nervt echt mal.


Frage: Was ist schneller?
Gesucht ist, ob ein String mit einem bestimmten Text beginnt.

*
Delphi-Quellcode:
if Pos(x,y)=1 then
den String überall suchen und danach schauen ob er gleich am Anfang gefunden wurde. (ist er nicht vorhanden, wurde umsonst der ganze String durchsucht)

*
Delphi-Quellcode:
if StartsStr(x,y) then
schauen ob der String damit beginnt


Vom Code her ist letzeres ja verständlicher.
Und auch von der Logik her sollte Letzteres schneller sein, oder nicht?



Nee, natürlich nicht, da kommt man dann auf die saudämliche Idee und fängt an Strings umzukopieren, anstatt einfach nur zu vergleichen :wall:
Zitat:

Delphi-Quellcode:
function AnsiStartsStr(const ASubText, AText: string): Boolean;
begin
  Result := AnsiSameStr(ASubText, Copy(AText, 1, Length(ASubText)));
end;


Luckie 19. Dez 2011 13:15

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Also ich gehe mal davon aus, dass die Entwickler keine vollkommenen Ioten sind. Deswegen gehe ich davon aus, dass sie sich was dabei gedacht haben.

himitsu 19. Dez 2011 13:29

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Ja, die haben sich Arbeit gespart (2 Sekunden weniger nachdenken müssen), ansonsten ist diese Funktion einfach nur grauenhaft.
Rufe diese Funktion so 300.000 Mal kurz hintereinander auf (mit unseren wenigen Testdaten ... wird mal mehr), da wird dann sinnlos unsere wertvolle Zeit verplempert.


Aktuell: Interne Aufrufe/Weiterleitungen
Delphi-Quellcode:
function StartsStr(const ASubText, AText: string): Boolean; inline;

Result := AnsiStartsStr(ASubText, AText);
Result := AnsiSameStr(ASubText, Copy(AText, 1, Length(ASubText)));
Result := AnsiCompareStr(S1, S2) = 0;
Result := CompareString(LOCALE_USER_DEFAULT, 0, PChar(S1), Length(S1),
  PChar(S2), Length(S2)) - CSTR_EQUAL;
Für den/jeden Stringvergleich wird hier eine temporäre Variable angelegt, umkopiert und freigegeben.


Besser (nur prüfen/nichts kopieren):
Delphi-Quellcode:
function StartsStr(const ASubText, AText: string): Boolean; inline;

Result := AnsiStartsStr(ASubText, AText);
Result := CompareString(LOCALE_USER_DEFAULT, 0, PChar(ASubText), Length(ASubText),
  PChar(AText), Min(Length(AText), Length(ASubText))) - CSTR_EQUAL;
MSDN-Library durchsuchenCompareString hat nicht umsonst eine Angabe für die Längen ... nämlich genu für sowas (Teilvergleiche).


PS: StartsText/AnsiStartsText ist da besser umgesetzt. (hier hätte ich jetzt zwei AnsiLowerCase und ein Copy erwartet :stupid:)

Bummi 19. Dez 2011 13:39

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Seit Jahren ein unaufhaltbarer Trend Mamutschkaprinzip, etwas funktionierendes immer wieder einzwiebeln und noch ne Schicht drum 20 Interfaces Dran, Wrappen, in eine Klasse packen , 20 Ableitungen davon machen, das ganze per einfacher Class Executefunktion zugrifbar machen, das dann wieder in eine Klasse übernehmen deren 27igste Ableitung dann das ist was der Entwickler am Ende der Kette meint nehmen zu müssen um ein inc(IntegerVar) auszuführen.

Sorry für den Enthusiasmus ....

Progman 19. Dez 2011 14:30

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Zitat:

Zitat von Bummi (Beitrag 1142217)
Seit Jahren ein unaufhaltbarer Trend Mamutschkaprinzip, etwas funktionierendes immer wieder einzwiebeln und noch ne Schicht drum 20 Interfaces Dran, Wrappen, in eine Klasse packen , 20 Ableitungen davon machen, das ganze per einfacher Class Executefunktion zugrifbar machen, das dann wieder in eine Klasse übernehmen deren 27igste Ableitung dann das ist was der Entwickler am Ende der Kette meint nehmen zu müssen um ein inc(IntegerVar) auszuführen.

Sorry für den Enthusiasmus ....

Ich glaube, besser kann man es gar nicht schildern 8-):-D

Bummi 21. Dez 2011 10:48

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
So langsam VirtualBox, das ist jetzt das 2. Upgrade das in die Hose geht.
Vor den Updates 3D und Aero.
1. Upgrade Additions bringen Maschine zum hängen (Wiederherstellungspunkt hilft)
2. Upgrade Hostnetzwerk komplett zerschossen (Mit neuen Additions kein Aero, 1920*1200 nur über force)

himitsu 5. Jan 2012 11:29

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Ein Pointer ist doch ein ordinaler Typ und Typen sind konstant?

Wenn das stimmt, dann ist Folgendes voll nervig gemein, also daß es nicht geht. :cry:

Delphi-Quellcode:
case Fields[i2].ClassType of
  TBooleanField: ...;
  TIntegerField: ...;
  TFloatField: ...;
  TDateField: ...;
  ...
end;

Medium 5. Jan 2012 12:57

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Typen sind aber keine ordinalen Werte, sie gehorchen insbesondere keiner wertmäßigen und eindeutig definierten Sortierung (Stichwort "Rang"). Gewünscht habe ich mir ähnliches auch schon desöfteren, aber zumindest im Rahmen der Definitionen für "Cases" ist das schon richtig, dass das nicht geht.

Stevie 5. Jan 2012 13:33

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Zitat:

Zitat von himitsu (Beitrag 1144427)
Ein Pointer ist doch ein ordinaler Typ und Typen sind konstant?

Wenn das stimmt, dann ist Folgendes voll nervig gemein, also daß es nicht geht. :cry:

Delphi-Quellcode:
case Fields[i2].ClassType of
  TBooleanField: ...;
  TIntegerField: ...;
  TFloatField: ...;
  TDateField: ...;
  ...
end;

In dem speziellen Fall gäb's dafür die Property DataType. Ansonsten müsstest du es analog zu dem case für Strings (nämlich unter Zuhilfenahme von StrUtils.IndexText bzw StrUtils.IndexStr).


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:10 Uhr.
Seite 77 von 192   « Erste     2767757677 787987127177     Letzte »    

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