AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Vereinfachung von Procedurenaufrufe

Ein Thema von ferby · begonnen am 19. Nov 2005 · letzter Beitrag vom 30. Nov 2005
Antwort Antwort
Seite 1 von 2  1 2      
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#1

Vereinfachung von Procedurenaufrufe

  Alt 19. Nov 2005, 11:38
Hallo,

Ich habe ein Frage,
und zwar ob dieser Quelltext vereinfacht bzw. kürzer geschrieben werden kann:

Delphi-Quellcode:
  case ki_status[1] of
  '0': ki_status_0;
  'A': ki_status_A;
  'B': ki_status_B;
  'C': ki_status_C;
  'D': ki_status_D;
  'E': ki_status_E;
  'F': ki_status_F;
  'G': ki_status_G;
  'H': ki_status_H;
  'I': ki_status_I;
  'J': ki_status_J;
  'K': ki_status_K;
  end;

ki_status:string

ki_status_0 bis ki_status_K sind proceduren;


ferby
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#2

Re: Vereinfachung von Procedurenaufrufe

  Alt 19. Nov 2005, 12:01
Du könntest dir ein zusätzliches Array of Procedure anlegen, ca. so etwas:
KI_statusList: array['A'..'K'] of Procedure; Danach musst du die noch einmalig zuweisen:
Delphi-Quellcode:
KI_statusList['A'] := ki_status_a;
KI_statusList['B'] := ki_status_b;
//...
das aufrufen geht dann relativ einfach. Statt dem endlosen case gehts so:
KI_StatusList[KI_Status[1]](); Das dürfte vielleicht sogar noch schneller sein als das case.

Ich hab jetzt kein Delphi da, also kann ich für die Syntax nicht garantieren, aber das Prinzip dürfte ersichtlich sein
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

Re: Vereinfachung von Procedurenaufrufe

  Alt 19. Nov 2005, 13:43
Das zuweisen kann man sich auch vereinfachen, obwohl es mit dem Case in codetechnischer Hinsicht schon optimal ist.

Dises global (also außerhalb der Prozedur, eventuell direkt davor) definieren, dann kannst du das Array direkt vordefinieren.
Delphi-Quellcode:
Const KI_statusList: array['A'..'K'] of Procedure =
  (@ki_status_a, @ki_status_b, ..., @ki_status_k);
Und dann ist der Aufruf genauso wie bei Chimaira.

KI_StatusList[KI_Status[1]]();
Es kann auch sein, daß es ohne das @ geht, aber bei der Definition/Zuweisung in das Array muß in Cimairas version doch eigentlich das @ davor?
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#4

Re: Vereinfachung von Procedurenaufrufe

  Alt 19. Nov 2005, 14:59
Es gibt bei den beiden Lösungen aber einen wichtigen Unterschied zu beachten.

Würde in ki_status[1] zb. 'x' drinnenstehen so hat das bei der CASE Auswertung KEINERLEI Konsequenzen. Bei den anderen Lösungen greift man dann aber ausserhalb des deklarierten Arrays[] zu und springt somit an einer Addresse die undefinierten Code enthält, dies führt zwangsläufig zum Abkack.

Gruß Hagen
  Mit Zitat antworten Zitat
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#5

Re: Vereinfachung von Procedurenaufrufe

  Alt 19. Nov 2005, 15:09
Hi,

ich lass es einfach so wie es ist,
ich dachte es gibt da eine ganz einfache, ungefährliche möglichkeit...

was soll's, sind halt 5 Zeilen mehr code da.

Danke für eure Lösungen,
ich bleib aber lieber trotzdem bei meiner langen Variante,


Ferby
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: Vereinfachung von Procedurenaufrufe

  Alt 19. Nov 2005, 16:54
Wie gesagt, du hattest ja schon die "optimiertere" Version ... die Lange wäre die mit IFs -.-''

Delphi-Quellcode:
If ki_status[1] = '0Then ki_status_0
Else If ki_status[1] = 'AThen ki_status_A
Else If ki_status[1] = 'BThen ki_status_B
...
Else If ki_status[1] = 'JThen ki_status_J
Else If ki_status[1] = 'KThen ki_status_K;
Obwohl die lange Variante bei meiner Schreibweise noch 2 Zeilen einsparren würde, aber es wäre halt vom kompilieren Code mehr und auch noch ein kleines bissl uneflektiv ^^


[add]
Noch uneffektiver wäre es ohne die ELSE
Delphi-Quellcode:
If ki_status[1] = '0Then ki_status_0;
If ki_status[1] = 'AThen ki_status_A;
If ki_status[1] = 'BThen ki_status_B;
...
If ki_status[1] = 'JThen ki_status_J;
If ki_status[1] = 'KThen ki_status_K;
Dann würden ja immer alle IFs ausgewertet werden, wärend bei der Verwendung von ELSE wenigstens die IFs, nach dem Ausgeführen einer Prozedur, nicht ausgewertet werden.
$2B or not $2B
  Mit Zitat antworten Zitat
Nightshade

Registriert seit: 7. Jan 2003
Ort: Menden
192 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Vereinfachung von Procedurenaufrufe

  Alt 19. Nov 2005, 17:12
Die optimalste Version wäre erstmal zu wissen, was du in den vielen Prozeduren machst, und ob man das nicht zu einer Procedure verbessern / optimieren könnte.
Christian
Killing for peace is like fucking for virginity

Nightshade
  Mit Zitat antworten Zitat
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#8

Re: Vereinfachung von Procedurenaufrufe

  Alt 19. Nov 2005, 17:25
Hallo,

die Proceduren könnten alle auch in einer stehen,
ich habe es aus übersichtsgründen auf mehrere proceduren aufgeteilt.

Ferby
  Mit Zitat antworten Zitat
Premutos

Registriert seit: 6. Mär 2005
51 Beiträge
 
#9

Re: Vereinfachung von Procedurenaufrufe

  Alt 30. Nov 2005, 19:59
gibt es eine möglichkeit so etwas auch für functionen bzw. proceduren mit paramter nzw. rückgabewerten zu realiseren ?

bsp:
Code:
procedure dwijhdio(sqw:string);
begin
showmeesage(sqw);
end;
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#10

Re: Vereinfachung von Procedurenaufrufe

  Alt 30. Nov 2005, 20:24
Meinst du Chimairas Version? Dort musst du nur den Prozedurenzeigertyp ändern:
[...] of procedure(sqw: string);
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 Uhr.
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