Même 1 + 2 est un message. Trouve le receveur.Even 1 + 2 is a message. Find the receiver.
Une addition que tout le monde tape le premier jour. Elle n'a rien d'une opération câblée dans le langage : c'est la méthode + appelée sur l'objet 1, avec 2 pour argument. Trois caractères, et tout le modèle de Ruby tient dedans : il n'y a pas de calcul, seulement des objets qui s'envoient des messages.An addition everyone types on day one. It is nothing like an operation wired into the language: it's the method + called on the object 1, with 2 as its argument. Three characters, and all of Ruby's model fits inside: there is no computation, only objects sending each other messages.
1 + 2 # ce que tout le monde écrit 1.+(2) # ce que Ruby exécute, vraiment # => 3 # un message + envoyé à l'objet 1, avec 2 en argument
Il n'y a pas d'« opérateur + » dans Ruby. Il y a l'objet 1 qui reçoit le message + et décide, lui, quoi en faire.There is no "+ operator" in Ruby. There is the object 1 that receives the message + and decides, itself, what to do with it.
« À quel objet est-ce que j'envoie ce message — et qu'est-ce qu'il en fait ? » Lis obj.foo non pas comme « accès à un champ » mais comme « j'envoie le message foo à obj, qui est libre d'y répondre comme il veut ». L'addition, l'indexation, l'appel de méthode : autant d'envois de messages."Which object am I sending this message to — and what does it do with it?" Read obj.foo not as "field access" but as "I send the message foo to obj, which is free to answer however it likes." Addition, indexing, method calls: all message sends.
Tout le reste de Ruby — les blocs, les mixins, le duck typing, la métaprogrammation — est une conséquence de cette règle. On ne commence pas par la syntaxe des classes : on commence par une addition qu'on croyait primitive et qui était un message. Comprends l'envoi, et la « magie » de Ruby cesse d'en être.Everything else in Ruby — blocks, mixins, duck typing, metaprogramming — is a consequence of this rule. We don't start with class syntax: we start with an addition you thought was primitive and was actually a message. Understand the send, and Ruby's 'magic' stops being magic.