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?
Antworten
Zu viele Anzeigen?Wenn dies wirklich sprachunabhängig ist, würde ich ein leeres Array-Objekt zurückgeben, die meisten Container sollten eine Funktion wie IsEmpty() haben, so dass der Aufrufer der Funktion prüfen würde, ob das Array IsEmpty ist, bevor sie etwas damit tun.
Wenn dies in C++ ist, kann ich sehen, dass es entweder auf null gehen, oder wenn Sie in einen Verweis auf das Array übergeben werden, dann Sie die Array-Größe zurückgeben...
Ich gebe zurück, was der Anrufer erwartet. Wenn die Funktion "alle Objekte, für die X wahr ist" zurückgeben soll und X für keines der Objekte wahr ist, gebe ich ein leeres Array zurück.
wenn die Funktion nicht einmal in der Lage war, diese Suche nach "Objekten, für die X wahr ist" durchzuführen, dann ist sie gescheitert und muss dies dem Aufrufer irgendwie mitteilen. Dies könnte durch die Rückgabe von null geschehen.
Es sei denn, aus irgendeinem Grund gibt es einen Unterschied in der Bedeutung in Ihrem Code für ein Ergebnis ein Null-Array Verses eine einfache alte leere ein, würde ich eine leere zurückgeben. Dies könnte auch eine sprachspezifische Sache sein. In einigen Sprachen haben Sie möglicherweise nur eine Option.
Ich könnte mir vorstellen, dass dies von der Art und Weise abhängt, wie die Sprache dies handhabt.
In C übergebe ich Zeiger und füge immer einen Zeiger hinzu, der der Größe des Arrays entspricht. Die aufrufende Funktion muss dann zwei Dinge bereitstellen: das Array und die Größe des Arrays. Wenn die Funktion das Array nicht auffüllt, gibt sie einfach denselben Zeiger zurück und ändert nichts an der Arraygröße. Normalerweise implementiere ich einfach eine Struktur vom Typ Vektor und arbeite damit.
In Perl wird die Array-Größe implizit behandelt, also gebe ich einfach ein leeres Array zurück, oder wenn ein Fehler auftritt, ändere ich die Fehlercode-Variable und gebe ein Undef zurück.
In Java verwende ich ArrayLists, und verwenden Sie die Größe Eigenschaft.
Wenn Sie das Glück haben, C# zu verwenden, deklarieren Sie eine statische Readonly-Eigenschaft wie diese:
public static class ArrayUtil<TElement>
{
public static readonly Empty = new TElement[0];
}
(Steht das in den BCL? Warum nicht?)
Sie können nun zurückkehren ArrayUtil<int>.Empty
oder was auch immer. Dadurch entfallen die Laufzeitkosten für die Verwendung eines leeren Arrays anstelle von null und der Aufrufer hat es einfacher, als wenn er sich mit Nullen herumschlagen müsste.