Xavier Nayrac

Rubyiste accro au TDD, serial blogger, apprenti data scientist, heureux utilisateur de Vim, accordéoniste.
Si vous vous sentez particulièrement généreux, suivez moi sur Twitter.

Un space invaders in Opal.rb - partie 13

| Comments

Niveau : intermédiaire

Voici un extrait de la classe SpaceCanvas actuelle:

app/space_canvas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class SpaceCanvas

  ...

  def draw_player(player)
    draw_rect(player.x, player.y, player.w, player.h, player.color)
  end

  def draw_enemy(enemy)
    draw_rect(enemy.x, enemy.y, enemy.w, enemy.h, enemy.color)
  end

  def draw_fire(fire)
    draw_rect(fire.x, fire.y, fire.w, fire.h, fire.color)
  end

  ...

end

Pas bien ! Le code est dupliqué, et si j’aime l’idée d’avoir trois méthodes différentes, dont le nom est explicite, je ne veux pas avoir à réécrire le même code chaque fois que j’ajouterais ce genre de méthode (draw_ship, draw_special_fire, draw_bomb, etc).

La solution réside dans l’utilisation de alias_method:

app/space_canvas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class SpaceCanvas

  ...

  def draw_object(object)
    draw_rect(object.x, object.y, object.w, object.h, object.color)
  end
  alias_method :draw_player, :draw_object
  alias_method :draw_enemy, :draw_object
  alias_method :draw_fire, :draw_object

  ...

end

Il n’y a plus de duplication, et l’ajout d’une nouvelle méthode se fait simplement en ajoutant un nouvel alias.

Le code de cette série d’articles est désormais sur Github ici : space-invaders-in-opal-rb, et le jeu lui-même (du moins dans son état actuel, c’est à dire pas grand chose) est visible ici : http://lkdjiin.github.io/space-invaders-in-opal-rb/.

À demain.

Articles connexes

Commentaires