Opérateurs

Les opérateurs comme + et - sont des appels ordinaires de méthode. Par exemple:

a + b

Est équivalent à:

a.+(b)

Vous pouvez définir un opérateur pour un type comme suit:

struct Vector2
  getter x, y

  def initialize(@x : Int32, @y : Int32)
  end

  def +(other)
    Vector2.new(x + other.x, y + other.y)
  end
end

v1 = Vector2.new(1, 2)
v2 = Vector2.new(3, 4)
v1 + v2               #=> Vector2(@x=4, @y=6)

Dans la suite se trouve la liste complète des opérateurs avec leurs significations habituelles.

Opérators unaires

+   # positif
-   # négatif
!   # négation
~   # complément bit à bit

Ils sont définis sans argument. Par exemple:

struct Vector2
  def -
    Vector2.new(-x, -y)
  end
end

v1 = Vector2.new(1, 2)
-v1                    #=> Vector2(@x=-1, @y=-2)

Note: ! (négation) ne peut être défini comme méthode (sa signification ne peut être changée).

Opérateurs binaires

+   # addition
-   # soustraction
*   # multiplication
/   # division
%   # modulo
&   # ET
|   # OR
^   # XOR
**  # exponentielle
<<  # décalage à gauche
>>  # décalage à droite
==  # égal
!=  # différent
<   # inférieur
<=  # inférieur ou égal
>   # supérieur
>=  # supérieur ou égal
<=> # comparaison
=== # test d'égalité

Indexage

[]  # index d'un array (renvoie l'erreur en dehors des limites)
[]? # index d'un array (nil si en dehors des limites)
[]= # affectation de l'index d'un array

Par exemple:

class MyArray
  def [](index)
    # ...
  end

  def [](index1, index2, index3)
    # ...
  end

  def []=(index, value)
    # ...
  end
end

array = MyArray.new

array[1]       # invoque la première méthode
array[1, 2, 3] # invoque la seconde méthode
array[1] = 2   # invoque la troisième méthode

array.[](1)       # invoque la première méthode
array.[](1, 2, 3) # invoque la seconde méthode
array.[]=(1, 2)   # invoque la troisième méthode

Signification

On peut assigner toute signification aux opérateurs, mais suivez les conventions précédentes pour éviter que votre code soit difficile à lire, ou qu'il se comporte de manière inattendue.

results matching ""

    No results matching ""