Note : l'astuce donnée dans ce post n'est pas vraiment relative à Android. C'est, en réalité, une astuce rendue possible par la flexibilité du langage Java. Néanmoins, il s'avère que cette technique est bien souvent utile et méconnue des développeurs Android.
Ne vous est-il jamais arrivé d'écrire des lignes répétitives un peu du genre de celles données ci-dessous?
1 2 3 4 5 6 7 8 9 10 11 |
|
J'espère pour vous que vous n'avez jamais fait cela ! En effet, en plus de faire grossir le code compilé résultant, ce genre de code source est surtout illisible pour de futurs utilisateurs/relecteurs, sujet à erreurs (copier-coller oblige) et surtout très ennuyant à écrire. Tout bon programmeur tente, dans la mesure du possible de factoriser le code. Pour ce faire, on définit d'abord les constantes au niveau de la classe (j'ai mis trois points parce que je suis feignant et que ça n'a pas de réelle utilité de mettre la vraie suite) :
1 2 |
|
Il est maintenant possible de factoriser le code via une simple boucle for
:
1 2 3 4 5 6 7 |
|
Une telle méthode a l'avantage certain de minimiser le code “effectif”, d'être beaucoup plus lisible et moins dangereuse. Malheureusement, elle reste encore assez rébarbative puisque il faut créer le tableau IMAGES_IDS
. Pour finir, si on souhaite ajouter de nouveaux Drawable
s, il faut retoucher au code du tableau IMAGES_IDS
pour qu'ils soient pris en compte.
Android regroupe, de façon automatique (c'est l'outil aapt qui s'en charge) , l'intégralité des ressources dans un fichier nommé R.java
. En d'autres termes, les ressources sont accessibles via le code Java par l'intermédiaire de constantes définies dans ce fichier de ressources. Pour faciliter la récupération de ressources, il est donc possible d'utiliser les Field
. Le code précédent devient maintenant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
Toute méthode a ses avantages et ses inconvénients. Cette dernière ne déroge pas à la règle. Son avantage indéniable est de supprimer le code à maintenir dans le cas d'ajout ou de suppression de drawable. Lorsqu'on ajoute un nouveau drawable au projet, il est automatiquement pris en compte au prochain lancement du programme. Son inconvénient réside dans sa “globalité”. Imaginons que vous souhaitiez ne prendre un compte qu'un nombre fini (20 par exemple) des 100 drawables de votre projet. La condition d'exclusion devient énorme !.