Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Möglichkeiten den QuellCode zu optimieren
kiwicht - Do 06.02.03 18:46
Titel: Möglichkeiten den QuellCode zu optimieren
Hallo...
mein Programm umfasst mittlerweile um die 4500 zeilen, und irgendwann stresst es doch ganz gewaltig immer nach irgendwelchen code-schnipseln zu suchen....
was hab ich für möglichkeiten, ausser dll´s, programm-code, der eigentlich nich mehr gebraucht wird, auszulagern.
am liebsten wär mir ne gaaanze einfach lösung, bei der ich einfach eine platzhalter setzt und delphi dementsprechend vor dem kompilieren den code dort einfügt... geht sowas?
mfg
kiwicht
Jack Falworth - Do 06.02.03 18:55
Nein außer dlls,
aber du könntest alles was irgendwie initialisiert oder gespeichert wird in Datein lagern. Da spart oft viel code und ist übersichtlicher und einfacher zu benutzen.
MfG
Jack Falworth
tommie-lie - Do 06.02.03 19:20
Wie wär's mit Funktionen und Units?
Manchmal ist es sinnvoll, Programmblöcke einfach nur der Übersichtlichkeit wegen in Prozeduren auszulagern, obowhl man sie gar nicht oft braucht. Das ist zwar erst sinnvoll, wenn dieser Programmblock viele Zeilen enthält, aber das dürfte ja wohl gegeben sein (bei 4000 Zeilen findet man doch bestimmt was, was zusammen gehört). Das ist dann zwar nicht der ursprüngliche Einsatzzweck von Prozeduren, nämlich nicht das Abkürzen wiederholt aufzurufender Prozesse, aber als Strukturierungsmittel ist das das einfachste, mit dem wenigsten Aufwand und ohne große Performanceeinbuße.
Einige Prozeduren würde ich dann wieder gruppieren und in Units auslagern. Zum Beispiel einen speicherprozess. Da werden normalerweise Infos gesammelt (aus TMemo o.Ä.), konvertiert (eigene Header davor, eigenes Dateiformat) und dann die Daten in einen File geschrieben. Das sind mehrere Prozeduren, die man in eine Unit machen könnte (zum Beispiel save.pas).
kiwicht - Do 06.02.03 19:27
also das mit den prozeduren hört sich ja ganz lecker an... hast du dazu ein verständliches (also auf newbies zugeschnittenes) tutorial parat?
auszulagern gibts bei mir jedenfalls genug, allein die initalisierung meine 100 edit-felder oder das auslesen von der registry sind alles sachen, die hab ich einmal geschrieben, muss daran aber nie wieder was änder....
mfg & thx
ps. @ Jack Falworth
das mit den dll´s ist mir schon wieder zu overkill, zumal ich das schonmal probiert hab, und jämmerlich versagt habe... :oops:
Delete - Do 06.02.03 19:46
kiwicht hat folgendes geschrieben: |
also das mit den prozeduren hört sich ja ganz lecker an... hast du dazu ein verständliches (also auf newbies zugeschnittenes) tutorial parat? |
Du weißt nicht, wie man Prozeduren schreibt und nutzt? :?
btw: Ein Tutorial zum Optimieren von Quellcode (wenn ich das jetzt richtig verstanden habe) wird´s nicht geben, denn das kommt doch sehr auf das Programm und seinen Zweck an.
Mit Tipps, die man dir evtl. gibt, kannst du möglicherweise gar nichts anfangen, usw.
tommie-lie - Do 06.02.03 20:08
wie lange programmierst du denn?
Prozeduren müsste man eigentlich kennen.
Oben in der type-Deklaration der Form schreibst du
Quelltext
1:
| procedure Prozedurname(Parameter); |
Wenn keine Parameter gebraucht werden, einfach weglassen.
Im implementation-Teil kommt dann irgendwo ein
Quelltext
1: 2: 3: 4: 5: 6:
| procedure FormKlasse.Prozedurname(Parameter); begin
// irgendwelcher Code
end; |
Wäre eigentlich das allererste was man lernt, wenn man eine Programmiersprache lernt...
Und wenn man Projekte mit 4000 Zeilen Code in Angriff nimmt, dachte ich bisher immer,daß man genug Wissen hat, zu wissen was eine Prozedur und eine Funktion und eine Unit ist...
Und das hat Mathias ja auch gemeint, nur hab' ich geschrieben, wie's geht *g*
kiwicht - Do 06.02.03 20:23
:lol: ... da muss ich ja ersma schmunzeln... ist aber verständlich das ihr euch wundert... ich bin seit einem halben jahr dabei.. vielleicht hab ich mich auch n bisschen unpassend ausgedrückt...
also das mit den prozeduren, wie ich die erstelle, klar, das krieg ich hin, ich meinte die frage jetzt eher bezogen auf "auslagern" von prozeduren.... aber trotzdem danke für den hinweis.. ;)
mfg
kiwicht
ps:
sieht schon nett aus, wenn jemand n 4000-zeilen progg schreibt, und keine proceduren kennt... ich kann euch gut verstehen... :D :D ....
[/quote]
maximus - Fr 07.02.03 13:15
hi, vielleicht machste das mit {$INCLUDE filename}. Ist zwar nicht so sauber, aber das hört sich bei deinem code eh hoffnungslos an (ich glaube jeder von uns hat schonmal hoffnungslosen code geschrieben).
Also, einfach den teil, den du nie wieder brauchst in eine .inc datei tun und mit der directive...{$INCLUDE auslager.inc}...liest der compiler in dieser datei weiter.
Wichtig ist nur, das du ganze blöcke auslagerst, dh. du darfst begin und end nicht trennen. Ferner muss dir klar sein, das er bei compiler-fehlern die stelle in dieser datei nicht anzeigt.
viel spass
Raphael O. - Fr 07.02.03 22:40
kann auch nur auf units und procedure's verweisen...
ich mach auf jeden Fall, wenn der Quelltext ziemlich lang ist für alles was zusammengehört und einigermaßen lang ist eine eigene unit...
mit Proceduren auslagern ist gemeint, dass du Code der in einer anderen Procedure steht, und der zusammengehört in eine neue Procedure geschrieben wird und in der aktuellen Procedure (wos vorher drin war) nur die procedure aufgerufen wird...
dadurch wird der Wuelltext pro Procedure verringert und alles wird übersichtlicher...
des weiteren mache ich es zum Beispiel immer so, dass ich zwischen den Prozeduren immer eine Kommerntarzeile mache, di nur aus "-" oder "#" besteht...
dadurch werden die Proceduren auch optisch voneinander abgegrenzt, denn bei mir sind Comments gelb... :wink:
Fiji-Fighter
kiwicht - Mo 10.02.03 13:06
jepp.. danke für die tips...
das mit den INCLUDE, das meint ich, mir isses da erstmal auch wurscht.
ob er mir die fehler da dann nicht anzeigt, da es sicht dort hauptsächlich um reine Datenzuweisungen handelt, die einfach nur da sind, aber keine fehler enthalten können....theoretisch
mfg
kiwicht
foxy - Mo 10.02.03 13:30
Guden Kiwi
also wenn ich grosse Prjekte habe mach ich das weder mit .dll oder mache das in Units ... das iss dann eigentlich ganz simpel
nur dann wird ab und zu die Uses Liste ganz schön lang :D
kiwicht - Do 13.02.03 09:50
jo, danke, aber ich hab mich gerade mit noch was, wie ich find, besserem angefreundet:
MDI-Forms! :D .... da kann ich schön alles Mögliche an Code und Zeugs was zusammengehört, auslagern, und die Teile zur Laufzeit auch mal schliessen, was den Speicher-Verbrauch extrem mindert!
vielen Dank für eure Mühen!
mfg
kiwicht
hansg - Mi 26.02.03 18:41
Hallo,
zu diesem Thema hätte ich eine Frage.
Wenn ich Programmcode auslagern möchte z.B. in Speichern.pas
wie rufe ich diesen in einer Anwendung auf bzw. wie und wo muß man was
deklarieren?
Raphael O. - Mi 26.02.03 19:50
bei uses musst du die andere unit eintragen, bei der die Funktion / Prozedur drinsteht...
und die Funktion muss auch global sein:
du musst sie oben im "Kopf" deklarieren, wo auch immer alles eingetragen wird von den Buttonclick-Procedures...
Wenns nicht klar war, dann frag nochmal nach nem BSP...
hansg - Mi 26.02.03 20:08
Hallo,
danke für das Angebot mit dem BSP, folgendes habe ich nicht verstanden:
Zitat: |
und die Funktion muss auch global sein:
du musst sie oben im "Kopf" deklarieren, wo auch immer alles eingetragen wird von den Buttonclick-Procedures...
|
kiwicht - Mi 26.02.03 20:39
der "Kopf" ist da, wo ganz am Anfang in deinem ProgrammCode ganz oft untereinander Procedure oder Function steht. Das ist der Teil zwischen Uses und Var... guck mal hier im FAQ-Bereich, ich glaub da gabs einiges zum Thema Aufbau und Struktur von QuellCodes...
hansg - Mi 26.02.03 20:50
Hallo,
habe in meinem Hauptformular bei uses den Eintrag speichern hinzugefügt.
In der Unit speichern.pas kommt dann meine Procedure, wo und wie genau muß ich diese deklarieren?
Hier der nackte Quelltext aus meiner Unit (speichern.pas)
Quelltext
1: 2: 3: 4: 5: 6: 7:
| unit speichern;
interface
implementation
end. |
Delete - Mi 26.02.03 23:49
maximus hat folgendes geschrieben: |
Also, einfach den teil, den du nie wieder brauchst in eine .inc datei tun und mit der directive...{$INCLUDE auslager.inc}...liest der compiler in dieser datei weiter.
|
Warum nur Blöcke auslagern, die er nicht mehr braucht? Ich nutze eigentlich Include-Dateien auch für Source, den ich noch brauche.
Zitat: |
Wichtig ist nur, das du ganze blöcke auslagerst, dh. du darfst begin und end nicht trennen.
|
Irgendwie logisch oder? :roll:
Zitat: |
Ferner muss dir klar sein, das er bei compiler-fehlern die stelle in dieser datei nicht anzeigt.
|
Und das ist schlicht und ergreifend falsch. Das einzigste, wa snicht geht ist die Quellcode-Vervollständigung, weil in den Include-Dateien keine Units eingebunden werden.
hansg - Do 27.02.03 07:00
An Luckie,
danke für die Info, ich möchte aber wissen wie ich das mit einer pas Datei
machen muß.
Sprich was und wo genau muß ich in der Unit speichern.pas deklarieren?
Tino - Do 27.02.03 09:46
hansg hat folgendes geschrieben: |
Sprich was und wo genau muß ich in der Unit speichern.pas deklarieren? |
Schau Dir mal die Antwort von Tommie-lie an. Die sollte es glaube ich erklären!
Gruß
TINO
hansg - Do 27.02.03 14:42
Hallo,
wie ich innerhalb einer Unit eine Procedure deklarieren muß und das im implementation-Teil irgendwo die Procedure hinkommt weiß ich schon nur nicht bei einer externen Unit.
Es geht um folgendes:
1. Ich hab eine Unit mit dem Namen speichern.pas
2. In dieser steht bis jetzt folgendes:
Quelltext
1: 2: 3: 4: 5: 6:
| unit speichern; Interface implementation
end. |
3. die Procedure an sich heißt dann savedata
Quelltext
1: 2: 3: 4: 5: 6:
| procedure TFormSpeichern.savedata; begin // irgendwelcher Quelltext
end; |
4. Wo genau muß ich diese Procedure deklarieren, im Hauptformular oder
in der Unit speichern.pas?
5. Habe ich Procedure so richtig bei implementation plaziert ?
Quelltext
1:
| procedure TFormSpeichern.savedata; |
maximus - Do 27.02.03 15:29
Hi, In der regel sieht das so aus:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| Unit speichern;
interface
procedure saveData; // deklaration
implementation
uses mainUnit; // wenn du auf daten der mainform speichern willst
procedure saveData; begin ... // daten speichern end; |
...in der mainForm dann
Quelltext
1: 2: 3: 4:
| ... uses speichern; ... saveData; |
Oder soll sich in der neuen unit ein formular befinden?
mfg mx
hansg - Do 27.02.03 16:05
@maximus
Genau das war die Antwort die ich gesucht habe.
Danke für die Hilfestellung
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!