11 Stimmen

Utility-Methode - Übergabe einer Datei oder eines Strings?

Hier ist ein Beispiel für eine Dienstprogrammmethode:

public static Long getFileSize(String fileString) {

    File file = new File(fileString);

    if (file == null || !file.isFile())
        return null;

    return file.length();
}

Ist es eine gute Praxis, einen String statt einer Datei an eine Methode wie diese zu übergeben? Welche Überlegungen sollten im Allgemeinen angestellt werden, wenn Dienstmethoden dieser Art erstellt werden?

1voto

Stephen Punkte 45678

Meiner Meinung nach ist diese Funktion nur mit einem String-Parameter sinnvoll. Was macht sie?

  • Es wird ein Dateiobjekt erstellt.
  • Prüft, ob sie erstellt werden kann.
  • Überprüft, ob es sich um eine Datei handelt
  • Gibt die Länge

Wenn Sie eine Datei übergeben haben, wird der erste Punkt nicht benötigt, die nächsten beiden sollten wahrscheinlich angenommen werden, und die Länge ist eine Dateimitgliedsfunktion. Wenn Sie ihr eine Datei übergeben, wird diese Funktion zu trivial, um sie zu schreiben :)

(Außerdem finde ich es seltsam, wenn eine Funktion, die einen Long-Wert zurückgibt, null zurückgibt)

Wenn Sie bereits ein Dateiobjekt haben, verwenden Sie:

length = file.isFile() ? file.length() : -1;

Wenn Ihr Code mit Dateien statt mit Dateinamen arbeitet, können Sie sich einige Datei-Öffnungen sparen, wenn Sie die Dateizeiger wiederverwenden. In diesem Fall könnte es Sie dazu veranlassen, sie statt des Dateinamenansatzes zu verwenden.

1voto

Vlad Gudim Punkte 23001

Es gibt eine Reihe von Überlegungen:

  1. Es gibt Hilfsmethoden, um die Menge an sich wiederholendem Standardcode in Ihrer Anwendung zu reduzieren, was den Code lesbarer macht und die Anzahl möglicher Fehler verringert. Es ist sinnvoll, die gängigsten Verwendungsmuster zu berücksichtigen, d.h. wenn Sie die meiste Zeit einen String haben, der eine Datei beschreibt - übergeben Sie den String. Der meiste Nutzen entsteht dadurch, dass man überhaupt eine Utility-Methode hat und nicht die optimale Signatur, die 100% zukunftssicher ist.

  2. Die Übergabe einer Datei anstelle einer Zeichenkette bietet eine stärkere Typisierung, d.h. ein größerer Teil des Codes kann bei der Kompilierung geprüft werden, um Tippfehler zu vermeiden. Lassen Sie den Compiler die Arbeit für Sie machen und nutzen Sie die Vorteile der starken Typisierung.

  3. Die Übergabe einer Datei bedeutet, dass Sie jede Art von Datei-Objekt übergeben können, möglicherweise ein maßgeschneidertes speicherinternes Datei-Objekt, ohne dass Sie die Dienstprogramm-Methode ändern müssen, um den maßgeschneiderten Dateideskriptor zu behandeln.

  4. Die Übergabe einer Zeichenkette kann hilfreich sein, wenn Sie viel mit OS-Dateipfaden zu tun haben und nur die Größe mit einer Mindestanzahl von Zeilen prüfen wollen.

  5. Am Ende könnten Sie mehrere überlastete Dienstprogramme zu sehr geringen Kosten haben. Dieses Szenario ist genau der Grund für die Existenz der Methodenüberladung als Sprachmerkmal. Schauen Sie, was in Ihrer Codebasis natürlich funktioniert. Code ist formbar, und dies ist keine dieser Designentscheidungen, mit denen Sie für immer leben müssen, es sei denn, Sie bauen eine API, die andere Leute verwenden sollen.

  6. Sie könnten auch den Namen ändern, um ihn etwas anschaulicher zu gestalten, zum Beispiel

    • long sizeFromFile(Datei f)
    • long sizeFromFileName (String name)

    unter Verwendung der ursprünglichen Konvention vorgeschlagen von Joel Spolsky .

1voto

Phani Punkte 5099

Das Überladen von Methoden ist in solchen Fällen die beste Praxis.

0voto

Nikita Rybak Punkte 66202

Das Einzige, was zählt, ist, wie Sie diese Methode anwenden werden. Mit anderen Worten, wenn Ihre Anwendung mit Dateiobjekten arbeitet, können Sie diese übergeben und einige unnötige Operationen entfernen. Wenn Sie mit Dateipfaden arbeiten, kann der String-Parameter praktischer sein.

Letztendlich ist aber keine der beiden Optionen falsch: Keine der beiden Optionen wird Ihre Bewerbung verschlechtern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X