-
Optimisation sur AVR
Bonjour,
Travaillant régulièrement sur Atmega328p, j'ai pris l'habitude d'éviter de créer des attributs en utilisant à la place des variables statiques locales dans les méthodes.
Est-ce une bonne habitude ? Y a t'il d'autres méthodes plus intéressantes dans certains cas ?
-
bonjour,
si par méthodes tu entends des fonctions membres de classes, alors tu prends le risque de générer des effets de bords (valeurs partagées entre toutes les instances, là où des attributs seraient correctement séparés) et tu te prives de mécanismes de protection comme la const-correctness.
Si tu ne crées et utilises jamais qu'une seul instance, je ne vois pas trop le gain de remplacer les attributs par des variables statiques locales...
-
Je ne créé et n'utilise en effet qu'une seule instance à chaque fois. Merci pour ta réponse !
-
Si tu n'utilises qu'une seule instance, à mon avis tu devrais choisir entre deux solutions:
1) écrire une classe, dans ce cas utiliser des attributs
Ça permet de minimiser les effets de bord, or quand le code prend de l'ampleur on a vite fait de se faire surprendre par les effets de bord.
2) zapper la classe et faire des fonctions libres auxquelles tu passes des paramètres.
Je ne vois pas vraiment quel pourrait être le surcoût d'une création d'attributs par rapport à du statique (le passage de paramètres c'est autre chose).
-
Bonsoir,
je serai plus direct : c'est une très mauvaise habitude, et l'oublier tout de suite serait certainement plus qu'intéressant, à fortiori sur le long terme.
Une classe, c'est pas juste des données et des méthodes pour faire jolie - pour ça on a plutôt les namespace -, c'est surtout un ensemble, une logique, qui fait que "oui, ma classe de gestion de dossier contient une liste des fichiers du-dit dossier, et une méthode pour récupérer cette liste", et "non tous les dossiers ne partagent pas une même liste de fichiers".
Pour l'instant tu "t'en sors" parce que tu n'alloues qu'une seule instance de chaque objet, mais dès que tu en voudras plusieurs, c'est foutu.
Une variable static dans une méthode a une seule vocation : être partagée entre tous les appels à cette méthode. Par exemple, un compteur du nombre d'appel. Dans le cas d'une classe elle est donc partagée par toutes les instances dans le cas d'une méthode non static.
Détourner cette utilisation c'est au mieux mal, voire carrément dangereux.