Tableau facultatif vs tableau vide dans Swift

J'ai un simple Person classe Swift qui ressemble à quelque chose comme ceci:

class Person {
    var name = "John Doe"
    var age = 18
    var children = [Person]?

    \\ init function goes here, but does not initialize children array
}

Au lieu de déclarer children être un tableau facultatif, je pourrais simplement déclarer et initialiser un tableau vide comme ceci:

var children = [Person]()

Je suis en train de décider quelle approche est la meilleure. La déclaration du tableau comme un tableau facultatif signifie qu'il ne va pas prendre de la mémoire à tous, alors que l'un tableau vide a au moins de la mémoire allouée pour lui, correct? Donc, en utilisant le tableau optionnel signifie qu'il y aura au moins de la mémoire de l'épargne. Je suppose que ma première question est: Est-il vraiment aucune mémoire réelle économie en cause ici, ou sont mes hypothèses à propos de ce incorrect?

D'autre part, si elle est facultative, alors, chaque fois que j'essaie de l'utiliser, je vais avoir à vérifier pour voir si elle est nil ou non avant d'ajouter ou de supprimer des objets à partir d'elle. Donc, il y aura une perte de l'efficacité de là (mais pas beaucoup, j'imagine).

J'aime bien l'option d'approche. Pas tous les Person aura des enfants, pourquoi ne pas les laisser children être nil jusqu'à ce que le Person décide de s'installer et de fonder une famille?

En tout cas, je voudrais savoir si il y a des autres avantages ou les inconvénients d'une approche ou l'autre. C'est une question de conception qui va venir encore et encore.

  • Vous avez une question valable, mais je pense que les arguments pour et contre sont dangereux basé sur l'optimisation prématurée et non sémantique. Il est de loin préférable de se concentrer sur la "affordance" du code - combien il suggère l'intention (quoi que peut-être pour le contexte). Il y a un tas de choses que je n'aime pas à propos de Swift, mais pour moi, l'Option type est un véritable bijou. Il n'existe pas de "bonne" réponse à votre question, je l'utilise largement dans des contextes comme la vôtre. À l'aide d'une option pour le cas de l'option d'enfants semble tout à fait raisonnable et minimaliste.
  • Je suppose que le nombre d'éléments dans la matrice de zéro signifie qu'il ya zéro des enfants. Un néant tableau voudrais suggérer qu'il existe un certain nombre d'enfants qui ne peuvent pas être égal à zéro et ne peut pas être non nulle. Il n'y a pas de logique dans le retour de néant, car il n'y a pas de sens en elle. Ayant dû maintenir le code qui a été écrit il y a 20 ans, je peux vous dire que si vous suggérer d'autres sens, en retournant néant, certains seront confus par elle et me demande ce que vous avez l'intention de faire avec ce néant qu'un tableau vide n'a pas d'accomplir. les performances du tableau vide n'est pas susceptible d'affaire.