Je vous contactes ce soir car j'ai une importante question par rapport à la façon de coder que je suis entrain d'adopter.
Donc avant de l'adopter définitivement, je tenais à me renseigné si c'est une belle façon de coder. En quelque sorte, si la communauté des développeurs ne va pas hurler en voyant comment je code.
Voici ce que j'appelle un Flag (là encore, je ne suis pas sûr d'utiliser le bon mot) :
Sur une fonction qui utilise le type "CMD", je vais pouvoir passer énormément de valeurs booléennes différents. Par exemple si l'utilisateur appuie sur la touche destinée à avancer, et sur la touche droite, j'aurais un CMD = CMD_UP|CMD_RIGHT. On peut facilement retrouver les éventements avec l'opérateur binaire & (cmd&CMD_UP = true si cmd as le bit CMD_UP à 1).
J'ai l'impression que c'est vraiment une excellente technique pour passer des booléens ayant un rapport entre eux. Dites moi si c'est une bonne technique
J'ai poussé le concept encore plus loin avec un mélange binaire et entier non signé :
J'ai crée ce Flag pour gérer un sprite. en effet, apres la lecture d'une séquence d'images, il faut savoir que faire : refaire la séquence, aller a une certaine séquence, la refaire dans l'autre sens...
Alors j'ai définit deux parties dans mon flag. Une pour contenir, l'entier, et l'autre pour contenir les booléens.
Sur ce type de "Flag" j'ai pas mal de doutes a l'utiliser... En effet, on fais un mélange d'entiers et de booléens dans une même variable.
Merci d'avoir lu
- Edité par >KryptOs_ 6 septembre 2018 à 19:18:53
Avant les ordinateurs, les développeurs étaient-ils des musiciens ?
enum CMD : char{
/* ou mieux encore :
enum class CMD : char{
*/
NULL 0x00
RESET 0xEF
UP 0x01
DOWN 0x02
RIGHT 0x04
LEFT 0x08
JUMP 0x10
};
inline CMD operator & (CMD const & a , CMD const & b){
assert(a == UP && b != DOWN && "Make your choice: up or down?");
assert(a == DOWN && b != UP && "Make your choice: up or down?");
assert(a == LEFT && b != RIGHT && "Make your choic: left or right?");
assert(a == RIGHT && b != LEFT && "Make your choic: left or right?");
return static_cast<CMD>(static_cast<char>(a) & static_cast<char>(b));
inline CMD operator | (CMD const & a , CMD const & b){
assert(a == UP && b != DOWN && "Make your choice: up or down");
assert(a == DOWN && b != UP && "Make your choice: up or down");
assert(a == LEFT && b != RIGHT && "Make your choic: left or right?");
assert(a == RIGHT && b != LEFT && "Make your choic: left or right?");
return static_cast(static_cast(a) | static_cast(b));
Ca reviendrait strictement au même, mais en C++ et non en C
- Edité par koala01 7 septembre 2018 à 3:52:20
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
Merci pour ta démonstration koala01, je modifierai mon code pour qu'il soit plus présentable pour du C++
Avant les ordinateurs, les développeurs étaient-ils des musiciens ?
Découverte des mots binaires ou Flags
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Avant les ordinateurs, les développeurs étaient-ils des musiciens ?
Avant les ordinateurs, les développeurs étaient-ils des musiciens ?