Zitat von
Luckie:
Zitat von
choose:
Mal davon ab, dass der Funktionsname HasBackslash ebenfalls nicht sprechend ist (schließlich könnte er irgendeinen Backslash erkennen)
Zitat:
Er sit aussagekräftig, da sich die Funktion in einer Include-Datei namens FileTools befindet. Um was soll es also anderes gehen, als um Pfade?
Dieser String "c:\foo\bar\foobar" enthält drei Backslashes, ich erwarte, dass der Rückgabewert einer Funktion
HasBackslash den Wert
True enthält.
Zitat von
Luckie:
Hm, das könnte in der Tat ein Problem sein. Aber die modifizierte Fassung hab eich nich nicht benutzt.
funktioniert sie nun, oder nicht?
Zitat von
Luckie:
[...]und was ist HasTrailingBackSlash? Eine Funktion? Nicht sehr gut, die wird ja jedes mal auf gerufen, so lange die Schleife läuft.
Wenn dann so:
Delphi-Quellcode:
function DelBackSlash(Dir: String): String;
begin
result := Dir;
if (length(dir) > 0) and (Dir[length(Dir)] = '\') then
SetLength(Result, Length(Result)-1);
end;
Genau genommen wird sie im Idealfall genau einmal aufgerufen und mach die selben Tests wie die direkte Implementierung (short-circuit). Der Aufruf der Funktion ist daher kaum "teurer", verdeutlicht hingegen aber die Intention, ohne dass die Statements verstanden werden müssen.
Eine Schleife habe ich nur für den unwahrschienlichen Fall, dass der Inhalb des Strings etwas in dieser Form ist "c:\foo\\". Unter diesen Umständen würde die Implementierung mit
if trotzdem einen Backslash am Ende hinterlassen...
[edit]zu den mitromanenvergleichbaren Bezeichnern: Auch hier wird durch
DelBackslash nicht klar, welcher Backslash nun gelöscht wird, bzw. ob im Fall "c:\\" beide gelöscht werden, tatsächlich setzt sich der Bezeichner
GetWithoutTrailingBackslash aus mehr Zeichen zusammen, enthält aber auch mehr information:
- Es wird nicht der Parameter verändert, wie der gekürzte Imparativ "Delete" suggeriert (siehe auch System.Delete)
- Die Funktion betrachtete ausschließlich die Backslashes am Ende des Strings
- Die Funktion gibt einen String zurück, der keinen der betrachteten Backslashes mehr enthält (also ist auch der Fall mit mehreren Backslashes geklärt)
[/edit]