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

Содержимое удалено Содержимое добавлено
Строка 61:
Методы обычно возвращают объект (подробнее об это позже). Это значит что вы можете посылать сообщения последовательно, потому что гарантируется что возвращается объект при посылки каждого сообщения. Например, следующая строка возвращает -3.
 
3.14 усечьtruncated минусnegated
 
Когда мы посылаем числу с плавающей точкой сообщение <tt>усечь, оно возвращает МалоеЦелое, которое в свою очередь возвращает другое МалоеЦелое когда получает сообщение <tt>минус</tt>. Другим примером может быть строка которая содержит число. Мы хотим сменить знак числа и обратно перевести его в строку. Одним из вариантов этого действия будет:
числоnumber := '42' какЧислоasNumber.
negatedNumber := number negated.
минусЧисло := число минус.
string := negatedNumber printString.
строка := минусЧисло строкаДляПечати.
 
Однако, из за того что каждый метод возвращает объект мы можем написать данный пример как:
 
строкаstring := ( ( '42' какЧислоasNumber ) минусnegated ) строкаДляПечатиprintString.
 
Или мы можем опустить скобки пока мы работаем только с унарными сообщениями, все из которых имеют одинаковый приоритет.
 
string := '42' asNumber negated printString.
строка := '42' какЧисло минус строкаДляПечати.
 
<!--
Methods always return an object (more on this later). This means that you can chain messages together, because there is guaranteed to be an object to send each message to. For example, the following returns -3.
 
3.14 truncated negated
 
When the floating point number receives the truncated message, it returns a SmallInteger, which in turn returns another SmallInteger when sent the negated message. Another example might be a string that contains a number. We want to change the sign on the number and convert it back to a string. One option would be to say:
 
number := '42' asNumber.
negatedNumber := number negated.
string := negatedNumber printString.
 
However, because each method returns an object, we can write this as:
 
string := ( ( '42' asNumber ) negated ) printString.
 
or we can leave out the parentheses since we are dealing only with unary messages, all of which have the same precedence.
 
string := '42' asNumber negated printString.
-->
 
==Приоритет сообщений==