17 Stimmen

Soll ich 'null' oder ein leeres Array zurückgeben?

Angenommen, Sie haben eine Methode, die eine Art Array erstellen und zurückgeben soll. Was passiert, wenn das Array nicht ausgefüllt wird? Geben Sie ein leeres Array oder null/nichts zurück?

31voto

Greg Beech Punkte 127525

In .NET ist es besser, ein leeres Array als null zurückzugeben, weil es dem Aufrufer erspart, eine null-Prüfung zu schreiben und/oder einen Fehler zu riskieren. NullReferenceException Sie werden sehen, dass dies ein gängiges Muster in den Basisklassenbibliotheken ist. Der einzige Fall, in dem Sie dies nicht tun würden, ist der unwahrscheinliche Fall, dass ein leeres Array und null unterschiedliche semantische Bedeutungen haben.

El offizielle Array-Verwendungsrichtlinien Zustand:

Die allgemeine Regel lautet, dass null, leere String ("") und leere (0 Elemente) Arrays auf die gleiche Weise behandelt werden sollten. Rückgabe ein leeres Array anstelle einer null Referenz.

Wenn Sie jedoch .NET 2.0 oder höher verwenden, ist es viel besser, eine IEnumerable<T> oder eines seiner erweiterbaren Derivate wie Collection<T> , ReadOnlyCollection<T> , ICollection<T> o IList<T> (in diesem Fall würde ich immer noch dazu neigen, eine leere anstelle von null zurückzugeben). Weitere Informationen darüber, warum diese bevorzugt werden sollten, finden Sie im Blog von Eric Lippert .

2voto

Jörg W Mittag Punkte 349574

Wenn Sie Ihre Frage genau lesen, werden Sie feststellen, dass Sie sie eigentlich schon selbst beantwortet haben: Sie schrieben "eine Methode, die ein Array irgendeiner Art erstellen und zurückgeben sollte" und nicht "eine Methode, die ein Array erstellen und zurückgeben sollte vielleicht ein Array irgendeiner Art zurückgeben oder nicht ".

Das hängt wirklich von der Spezifikation ab. Aber so wie Sie es formuliert haben, kann die Methode auf keinen Fall null zurückgeben. Das ist der Stil, den ich sowieso bevorzugen würde, es macht die Behandlung von Randfällen so viel einfacher.

2voto

Kibbee Punkte 64039

Ihre Antwort auf diese Frage hängt wahrscheinlich stark davon ab, in welcher Sprache Sie arbeiten. In Sprachen wie C ist es nicht möglich, ein leeres Array zurückzugeben, da ein Array nur ein Zeiger auf eine Speicheradresse ist, an der das Array beginnt. In diesem Fall besteht die einzige Möglichkeit darin, einen Null-Zeiger zurückzugeben.

2voto

Patrick Harrington Punkte 45400

Ich gebe ein leeres Array zurück - das scheint einfach das Richtige zu sein.

1voto

Paul Tomblin Punkte 172816

Es hängt wirklich davon ab, was der Anrufer mit dem Ergebnis machen will.

Normalerweise gebe ich ein leeres Array (oder eine Collection in Java) zurück. Das liegt daran, dass ich in der Regel eine Schleife durchlaufe und sie optional zur Collection hinzufüge und sie dann zurückgebe. Am Ende prüfe ich, ob Collection.size() == 0 ist ein zusätzlicher Schritt. Und dann muss der Aufrufer noch zusätzlich prüfen, ob das Ergebnis 0 ist, und wenn ja, die Iteration der Sammlung vermeiden.

Ich verstehe, dass es sauberer sein könnte, null zurückzugeben, aber es ist einfacher, es nicht zu tun, wenn ich keinen Grund dazu habe.

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