[PYTHON] Faisons la distinction entre la manipulation de la structure de données et le code logique.

Ce que j'ai ressenti lorsque j'ai commencé à écrire du code source en utilisant STL (Standard Template Library) en langage C ++, c'est que les opérations de structure de données étaient préparées dans la bibliothèque standard, donc la partie logique est devenue plus facile à comprendre. Il est.

** Bibliothèque de structure de données unique **

Lorsque j'ai lu le code qui utilisait la structure de données d'origine avant STL, j'ai remarqué qu'il était difficile de distinguer le fonctionnement de la structure de données de la logique, ce qui entravait la compréhension du code. Par exemple, même s'il existe un code qui utilise un tableau de structures pour lequel une zone a été réservée, le code pour affecter la valeur initiale, le code pour affecter une valeur valide au i-ème élément du tableau et le nombre de valeurs valides incluses. Le nombre magique qui vous indique où il se trouve et où il est invalide, ce qui signifie que si vous manipulez la structure solidement, vous ne pourrez pas faire la distinction entre la manipulation de la structure de données et la logique que vous implémentez.

** Opérations courantes requises après tout **

Par conséquent, même si vous utilisez votre propre structure de données telle qu'un tableau de structure, vous devez éventuellement créer une fonction qui ajoute des données, attribue des données, copie des données, affiche des données, supprime des données, etc. De plus, ne copiez pas les données de structure avec memcpy (Remarque 1). Même lors du codage dans le cadre de C, il est essentiel de mettre en œuvre (encapsuler) et de tester des opérations (méthodes de facto) sur ces structures de données. En testant une telle méthode, vous pouvez utiliser le tableau de structure en toute confiance (Remarque 2).

** Opérations et logique de structure de données séparées **

Lorsqu'une telle méthode de facto est préparée, la manipulation de la structure de données et le code de la logique peuvent être clairement distingués, et la logique du programme devient facile à comprendre. Écrivons donc le code source pour faire la distinction entre la manipulation de la structure de données et le code logique.

** Améliorations du code hérité **

Lorsque vous améliorez votre ancien code, commencez par la refactorisation. N'essayez pas soudainement de réécrire avec STL. Ajout de tests unitaires au code hérité. Assurons l'exactitude du code par des tests unitaires. N'essayez pas d'utiliser STL pour réécrire ce que fait votre code hérité avant qu'il ne soit totalement explicite.

Post-scriptum: Pour moi en tant que boutique Python, la structure de données standard de Python, liste (C ++) En utilisant l'équivalent de std :: vector en C ++ et l'équivalent de std :: unsorted_map en C ++, on peut dire que la structure de données standard a été utilisée. On peut également dire que le groupe de bibliothèques standard riches de Python a eu le même effet que l'utilisation de la bibliothèque Boost de C ++ et l'utilisation d'une bibliothèque standard riche et fiable indépendante du système d'exploitation. «Parfois, j'ai envie de tout réécrire à partir de zéro, mais je dois surmonter cette tentation.» Source [[06] Choses à surveiller lors de la refactorisation](http: // xn- -97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/%E3%83%AA%E3%83%95%E3%82%A1 % E3% 82% AF% E3% 82% BF% E3% 83% AA% E3% 83% B3% E3% 82% B0% E3% 81% AE% E9% 9A% 9B% E3% 81% AB% E6 % B3% A8% E6% 84% 8F% E3% 81% 99% E3% 81% B9% E3% 81% 8D% E3% 81% 93% E3% 81% A8)

Post-scriptum: Lors du développement d'un programme, il est plus facile de déterminer le code pour les opérations de structure de données et le code logique pour les opérations de structure de données. Lorsque la manipulation de la structure de données devient définitive, le code a tendance à devenir un code suffisamment mort. D'autre part, l'algorithme est susceptible d'être changé plusieurs fois en raison d'essais et d'erreurs, à moins que l'algorithme déjà terminé ne soit porté. Par conséquent, il est conseillé de conserver les opérations de structure de données dans un fichier séparé.

Remarque 1: Avec memcpy, il est facile de faire une copie superficielle involontaire, et la chaîne de caractères d'une certaine structure (pointeur de la position de départ) et la chaîne de caractères de la structure de destination de la copie (pointeur de la position de départ) deviennent les mêmes. Si vous modifiez l'un, l'autre changera également. En particulier, memcmp ne doit pas être utilisé pour comparer des structures. EXP04-C. Ne comparez pas les octets incluant les structures.

Note 2: Mon opinion personnelle est que la STL devrait être utilisée. Le remplacement d'un tableau de structure par une STL dans un programme existant peut être une tâche ardue. Dans un tel cas, je pense qu'il est nécessaire d'ajouter une fonction de méthode de facto pour réduire l'opération sur la structure de données exposée pour le tableau de structure.

Recommended Posts

Faisons la distinction entre la manipulation de la structure de données et le code logique.
Structure de données Python et implémentation interne ~ Liste ~
Structure et fonctionnement des données Python (mémo d'apprentissage Python ③)
Faisons la manipulation des données MySQL avec Python
Communication de données chiffrées entre Python et C #
Visualisons la relation entre le salaire moyen et l'industrie avec des données XBRL et seaborn! (7/10)
Distinguer les chiffres et les lettres avec des expressions régulières
Relation entre la conversion des types de données Firestore et Go