Xavier Nayrac

Accro au TDD, rubyiste mais pas que, maker, 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