AW: UnitOptimizer
Meine Bevorzugte Einrückung:
Delphi-Quellcode:
Auch ich verwende meist begin/end, auch wenn es nicht unbedingt notwendig ist.
case bla of
0: begin doSomething; end; 1: begin doSomethingElse; end; else DefaultCode; end; Wenn ich mir eine Syntax wünschen dürfte, wäre sie:
Delphi-Quellcode:
Also ohne begin, aber das geht ja leider nicht.
case bla of
0: doSomething; end; 1: doSomethingElse; end; else DefaultCode; end; |
AW: UnitOptimizer
Zitat:
Klar geht das solange man nur eine Funktion -> Aufruf im case verwendet. Dein End hat da nichts zu suchen.
Delphi-Quellcode:
case bla of
0: doSomething; 1: doSomethingElse; else DefaultCode; end; |
AW: UnitOptimizer
Für den Else-Zweig funktioniert das aber jetzt schon. Da wäre ein zusätzliches begin-end überflüssig:
Delphi-Quellcode:
Siehe: http://docwiki.embarcadero.com/RADSt...se-Anweisungen
case Bedingung of
1: begin Tuwas; end; 2: begin Abwarten; end; else MachNix; MichWasAnderes; end; Zitat:
|
AW: UnitOptimizer
Zitat:
|
AW: UnitOptimizer
Theoretisch wäre auch das
Delphi-Quellcode:
nicht notwendig, da die Befehlssequenz entweder durch ein neues case-Label, das
end
Delphi-Quellcode:
oder ein
else
Delphi-Quellcode:
beendet wird. Aber das ist nun mal schon vor langer Zeit eben so festgelegt worden...
end
|
AW: UnitOptimizer
Zitat:
Nur der sinn dahinter erschließt sich mir nicht. Zitat:
|
AW: UnitOptimizer
Zitat:
Zitat:
Zitat:
|
AW: UnitOptimizer
Zeilenumbrüche, Leerzeichen und Tabs sind erstmal vollkommen egal. (eigentlich sogar alles von #1 bis ' ')
Einzige Ausnahme ist der Zeilenumbruch hinter //-Kommentaren. Ein ; vor einem END wäre auch "optional", sowie doppelte ;; ... aber ich empfehle immer ; zu schreiben (außer vor einem ELSE bzw. nach einem THEN/DO) Das ist ja auch der Grund, warum ein Code-Formatierer alles umformatieren und nach "belieben" Zeilenumbrüche und Einrückungen einfügen/entfernen/ändern kann. :zwinker: (nicht so wie bei Python, wo die Einrückung essenziell ist und mit zum Programm-Code gehört) |
AW: UnitOptimizer
Liste der Anhänge anzeigen (Anzahl: 1)
Danke an Euch alle.
Das hilft mir schon mal weiter. @jaenicke Ich habe das Beispiel gleich mal durchlaufen lassen. Also die Standardfälle passen schon ganz gut. Nur der gesamte Else-Block wird noch nicht korrekt eingerückt. Das werde ich aber heute noch lösen können. Das ist eben auch wieder so ein spachlicher Sonderfall. Else zum if ist etwas anders zu händeln als else zum case. Ich konvertiere die Schlüsselwörter in Klassen mit bestimmten Eigenschaften. Bei Else im Kontext von Case werde ich wohl nur die Eigenschaft für die Einrückungsvorgaben ändern müssen. Schaue ich mir heute Abend an. Zitat:
Hier muss ich immer abwägen, was beibehalten werden muss und was einfach "korrigiert" werden kann. Z.B. Kann ein Zeilenumbruch innerhalb der Parameter einer Prozedur ausdrücklich gewünscht sein oder es kann sinnvoll sein, einen solchen automatisch zu entfernen, um die Parameter in einer Zeile zu haben. Solche Fragen stellen sich viele. Deswegen maskiert der Optimizer weiche (automatische) Umbrüche mit einem ESCAPE (das Kästchen am rechten Rand). So weiß er, dass dieser Umbruch auf jeden Fall entfernt werden kann. Je nach Entscheidung können in beiden Fällen (Umbruch belassen oder entfernen) potenzielle Nutzer das Tool genau deswegen ablehnen. Ich werde also viele Optionen anbieten müssen, allerdings wären weniger Optionen grundsätzlich natürlich wünschenswert. |
AW: UnitOptimizer
Liste der Anhänge anzeigen (Anzahl: 1)
... also das mit dem Einrücken funktioniert wie erwartet :-)
Wer mal einen kleinen Einblick möchte:
Delphi-Quellcode:
Zu den Format-Sonderfällen ist jetzt ein neuer Sonderfall hinzu gekommen. ;-)
if SupportsIn(lItemBlockStart, [IDetectThen, IDetectElse, IDetectDo]) then
begin if Supports(lItemBlockStart, IDetectElse, lDetectElse) then lDetectCaseFlag := Supports(lDetectElse.ItemBlockStartLink, IDetectCase) else lDetectCaseFlag := False; if (lDetectCaseFlag) then currentRealAlign.LeftSpaceNext := currentRealAlign.LeftSpaceNext + 1 // Sonderfall Else zum Case --> NEU <-- else if (not lDetectExceptFlag) then currentRealAlign.IncLeftSpaceMove; // sonst nach then/else/do eine Zeile/Anweisung einrücken (wenn Zeilenende) end; Ich versuche das halt alles durch zugewiesene Eigenschaften zu deklarieren, die der Formatierer dann entsprechend umsetzt. Da spielen dann noch die ganzen Verschachtelungen und Blöcke hinein. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:09 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