Smalltalk в примерах/Сообщения: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 115:
1 + (2 * 3)
 
Ещё один пример, <tt>2 + '4' какЧислоasNumber максимумmax: 5</tt> даёт 6, потому что в соответствии с правилами, унарное сообщение <tt>какЧислоasNumber</tt> даёт
 
2 + 4 максимумmax: 5
 
Затем бинарное сообщение <tt>+</tt> даёт <tt>6 максимумmax: 5</tt>, которое даётвозвращает 6.
 
Вычисление
30 максимумmax: 3 + 4 * 5
даёт 35. Нет унарных сообщений, Но бинарные сообщения выполняются слева направо. После отправления первого сообщения получаем:
 
даётдает 35. НетВ этом выражении нет унарных сообщений, Ноа бинарные сообщения выполняются слева направо. После отправления первого сообщения получаем:
30 максимум: 7 * 5
 
30 максимумmax: 7 * 5
После следующего: <tt>30 максимум: 35</tt>, которое возвращает 35. Чтобы получить ответ 30, как вы и ожидали используя обычную алгебру, вы должны использовать скобки <tt>30 максимум: 3 + (4 * 5)</tt>.
 
После следующего: бинарного сообщения, мы получаем <tt>30 максимумmax: 35</tt>, котороечто возвращает 35. Чтобы получить ответ 30, как вы и ожидали, используя обычную алгебру, вы должны использовать скобки, к примеру: <tt>30 максимумmax: 3 + (4 * 5)</tt>.
 
<!--
Message precedence
Unlike C++, which has very complicated rules of precedence, Smalltalk has very easy rules:
1. Evaluation is done left to right.
2. Unary messages have the highest precedence.
3. Binary messages have the next precedence.
4. Keyword message have the lowest precedence.
5. You can alter precedence by using parentheses.
One thing that is immediately different from most languages is that there is no algebra. + and * are not algebraic symbols — they are simply messages. Using the precedence rules above,
 
1 + 2 * 3
 
equals 9, not 7. To get the result you would expect, you have to use parentheses to specify the precedence.
 
1 + (2 * 3)
 
To give two more examples, 2 + '4' asNumber max: 5 gives 6, because by the above rules, the
unary asNumber is sent first, giving 2 + 4 max: 5. Then the binary + is sent, giving 6 max: 5, which
returns 6.
The computation 30 max: 3 + 4 * 5 gives 35. There are no unary messages, so the binary messages
are sent in left to right order. With the first message sent, we get 30 max: 7 * 5. With the next binary
message send, we get 30 max: 35, which returns 35. To get an answer of 30, as you would expect from
normal algebra, you would have to use parentheses such as 30 max: 3 + (4 * 5).
-->
 
==Что происходит когда посылается сообщение==