En fait, c'est quoi l'optimisation ?

En fait, c'est quoi l'optimisation ? - Divers - Programmation

Marsh Posté le 10-04-2006 à 22:21:08    

C'est une question que je viens de me poser
voici 2 codes qui font la même chose, qui affiche un message d'erreur quand une variable LIGNE et COLONNE representant une position dans un tableau de 10x10, sors de celui-ci (ne vous preoccupez pas du langage)
 
if ( LIGNE < 1 ou LIGNE > 10 ) then
  printf 'vous sortez du tableau'
else if ( COLONNE < 1 ou COLONNE > 10 ) then
  printf 'vous sortez du tableau'
end if
 
et puis,
 
if ( min ( LIGNE, COLONNE ) < 1 ou max ( LIGNE, COLONNE ) > 10 ) then
  printf 'vous sortez du plateau'
end if
 
 
la 2e methode prend moins de ligne que la 1ere, mais quand le compilo passe par les fonction min et max il doit surement en lire 5 ou 6 pour chaque fonction
 
laquelle est plus optimisé selon vous ?
c'est un topic a debat ;)  personnellement je garde la 2e parce que ça prend moins de ligne et ça rend plus compliqué, donc ça fait mieux devant un prof ;)

Reply

Marsh Posté le 10-04-2006 à 22:21:08   

Reply

Marsh Posté le 10-04-2006 à 22:26:59    

Oui, mais la première méthode est peut-être plus lisible pour un collègue qui doit reprendre le code.

Reply

Marsh Posté le 10-04-2006 à 22:30:53    

1. Rien a faire du nombre de lignes, le compilo gère sans soucis
2. Plus c'est simple, mieux c'est
3. Voir le goulot d'étranglement, optimiser apres.
 
faire du code crado sous prétexte d'optimisation, c'est une très mauvaise pratique.

Reply

Marsh Posté le 10-04-2006 à 22:47:13    

Pour reprendre les deux posts précédents:
 
1. Le code est fait pour les humains. L'ordinateur peut lire plein de trucs, ce n'est pas le cas des humains, donc la simplicité et la clarté est importante (tout du moins dans un premier temps, et dans la majorité des cas). Viser la clarté, et viser la simplicité
2. Rien ne sert de courir tout ça. Avoir le code le plus rapide possible n'est que rarement intéressant, ce qu'il faut c'est avoir un code suffisament rapide.
3. Tes impressions sont toujours fausses, même les meilleurs codeurs se plantent 9 fois sur 10 quand ils estiment l'utilisation de ressources de leur appli (c'est pas une blague, ça revient en permanence dans les livres et les posts), si il y a besoin d'optimiser (parce que l'appli est clairement insuffisament rapide) il faut des données, et récupérer ces données est le rôle d'un profiler. Ne jamais rien optimiser sans avoir profilé auparavent.
 
Naturellement ces conseils tiennent pour de la prog classique, pas du temps réel.
 
Et pour ton problème, je choisis 3: je crée une fonction/méthode avec un nom bien clair (genre "dans_tableau" ou "in_table" ) qui prend une paire de coordonnées et ça me donne:
 

if( not in_table(ligne, colonne) ) then
    print "En dehors du tableau"


En bonus, si ce test est souvent répêté changer les conditions (si tu veux agrandir le tableau) ne sera effectué qu'en un seul point et non une demi douzaine (avec autant d'oublis et donc de bugs).
 
Ensuite, en fonction de l'expréssivité de ton langage tu peux aller encore plus loin.
 
Par exemple en Python je pourrais écrire un truc du style

Code :
  1. if (ligne, colonne) not in my_table:
  2.    print "En dehors du tableau"


Et pour être un peu plus propre je peux aussi créer un objet Point de coordonnées (ligne, colonne) qui permet de clarifier mon intention.

Code :
  1. if Point(ligne, colonne) not in my_table:
  2.    print "En dehors du tableau"


 
Note: en Ruby on écrira plutôt

Code :
  1. if not table.include?(ligne, colonne)
  2.    puts "En dehors du tableau"
  3. end


ou encore

Code :
  1. if not table.include? Point.new(ligne, colonne)
  2.    puts "En dehors du tableau"
  3. end


il n'y a pas qu'une manière d'écrire quelque chose de lisible, et la "meilleure manière" diffère en fonction du langage, de sa culture et de ses idiômes


Message édité par masklinn le 10-04-2006 à 22:55:36

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
Reply

Marsh Posté le 11-04-2006 à 07:55:36    

Fazer> L'optimisation que tu proposes - à supposer qu'il s'agisse d'une vraie optimisation, ce qui reste encore à voir - est plutôt une micro-optimisation. L'intérêt n'est rarement autre que didactique ou ludique.
 
Clarté et propreté avant-tout.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed