упоминания классов с артиклем и т.д.

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
10 messages Options
Reply | Threaded
Open this post in threaded view
|

упоминания классов с артиклем и т.д.

Genosse
Всех приветствую!
Часто вижу в коде упоминания классов с артиклем или конструкции вроде:
memory
^ memory asString asNumber
 
asString, asNumber и т. д. это что? Просто фигура речи, вместо которой в любой момент написать anAbraKadabra или есть в этом некие железные правила?
чем например выше приведённый метод будет отличаться от просто:
memory
^ memory
?

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
 
 
Reply | Threaded
Open this post in threaded view
|

Re: упоминания классов с артиклем и т.д.

vmusulainen-2
CONTENTS DELETED
The author has deleted this message.
Reply | Threaded
Open this post in threaded view
|

Re: упоминания классов с артиклем и т.д.

Alex Kogan
На мой взгляд первый вариант не корректен, поскольку допускает вариант
возрата неожиданного результата. Методы доступа к переменным образа не
должны манипулировать их значением, за исключением может быть
инициализации. Дело конечно хозяйское.

2013/5/31 Владимир Мусулайнен <[hidden email]>:

> Это методы которые присутствуют у объектров соответствующих классов.
>
> то есть объекту в переменной memory отправляют сообщение asString, которое,
> скорее всего, реализовано так, что возвращает строковое представление
> объекта, то есть некую строку. Строке в свою очередь отправляется сообщение
> asNumber которое, исходя из его названия, получив которое строка отдает свое
> числовое представление .
>
> Такие вещи иногда не просто объяснить в печатной форме. Возникает масса
> вопросов, которые сформулировать не получается. Тут проще устно - можно меня
> найти в скайпе  skype_id: vladimir.musulainen
>
> пятница, 31 мая 2013 г., 20:21:29 UTC+4 пользователь Genosse Alex написал:
>>
>> Всех приветствую!
>> Часто вижу в коде упоминания классов с артиклем или конструкции вроде:
>>>
>>> memory
>>> ^ memory asString asNumber
>>
>>
>> asString, asNumber и т. д. это что? Просто фигура речи, вместо которой в
>> любой момент написать anAbraKadabra или есть в этом некие железные правила?
>> чем например выше приведённый метод будет отличаться от просто:
>>>
>>> memory
>>> ^ memory
>>
>> ?
>
> --
> --
> http://groups.google.ru/group/sugr
> ---
> Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk
> User Group.
>
> Чтобы отказаться от подписки на эту группу и перестать получать из нее
> сообщения, отправьте электронное письмо на адрес
> [hidden email].
> Настройки подписки и доставки писем:
> https://groups.google.com/groups/opt_out.
>
>

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.

Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.


Reply | Threaded
Open this post in threaded view
|

Re: упоминания классов с артиклем и т.д.

Dmitry Matveev
In reply to this post by Genosse
> чем например выше приведённый метод будет отличаться от просто:
memory
^ memory
> ?

Тем, что в первом варианте объекту с именем memory посылают сообщение asString, а результату - сообщение asNumber. Вам надо запомнить, что в Смолтоке есть три типа конструкций - присваивание, отправка сообщения и возврат значения. "Фигур речи" нет.

asXXXX - стандартное соглашение для именования методов конвертации из типа получателя в тип ХХХХ. Естественно, объект должен знать, как представить себя в виде строки или числа, поэтому просто поищите в соответствующем классе (или в иерархии) такой метод. И все встанет на свои места :)

Дмитрий


31 мая 2013 г., 20:21 пользователь Genosse Alex <[hidden email]> написал:
Всех приветствую!
Часто вижу в коде упоминания классов с артиклем или конструкции вроде:
memory
^ memory asString asNumber
 
asString, asNumber и т. д. это что? Просто фигура речи, вместо которой в любой момент написать anAbraKadabra или есть в этом некие железные правила?
чем например выше приведённый метод будет отличаться от просто:
memory
^ memory
?

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
 
 

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
 
 
Reply | Threaded
Open this post in threaded view
|

Re: упоминания классов с артиклем и т.д.

Genosse
In reply to this post by vmusulainen-2

Такие вещи иногда не просто объяснить в печатной форме. Возникает масса вопросов, которые сформулировать не получается. Тут проще устно - можно меня найти в скайпе  skype_id: vladimir.musulainen

Спасибо, постараюсь не злоупотреблять.

  Вам надо запомнить, что в Смолтоке есть три типа конструкций - присваивание, отправка сообщения и возврат значения. "Фигур речи" нет.
 
Я поначалу очень долго искал откуда ноги растут у неких anInteger и т.п. в конструкциях вроде
right: anInteger
right := anInteger
Пока не допендрил, что волен сам писать  что угодно на их месте... Поэтому у меня этот вопрос и возник.

Спасибо, в явной форме стало понятно, что asString & asNumber это методы, я их нашел в соответствующих классах, но...
...Но теперь мне стало непонятно, что и главное как, по какому праву они делают в переменной "memory" класса являющегося подклассом AlignmentMorph и в конечном счёте в своём наследовании восходящего к Object, и ни String ни Number в этой иерархии таки не встречаются.
Как объект может понимать методы других объектов от которых не наследовал? 
 

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
 
 
Reply | Threaded
Open this post in threaded view
|

Re: упоминания классов с артиклем и т.д.

Dmitry Matveev
> ...Но теперь мне стало непонятно, что и главное как, по какому праву они делают в переменной "memory" класса являющегося подклассом AlignmentMorph и

А вы проверьте тип переменной memory на тот момент. Класс, в котором она содержится, роли не играет.

> ...в конечном счёте в своём наследовании восходящего к Object, и ни String ни Number в этой иерархии таки не встречаются.

А чтобы уметь обрабатывать asString (как и asNumber) - не нужно иметь отношение ни к String, ни к Number, в иерархии наследования. И, да, я акцентирую ваше внимание ещё раз - объекту memory посылается только asString. Сообщение asNumber посылаыется уже результату (который, по идее, должен быть строкой).

> Как объект может понимать методы других объектов от которых не наследовал?

Вдаваясь в дебри, объект может делать это в специальном методе "doesNotUnderstand: aMessage". Или использовать Traits, но это уже другая история, которая, возможно, вас только ещё больше запутает.

Дмитрий


1 июня 2013 г., 11:15 пользователь Genosse Alex <[hidden email]> написал:

Такие вещи иногда не просто объяснить в печатной форме. Возникает масса вопросов, которые сформулировать не получается. Тут проще устно - можно меня найти в скайпе  skype_id: vladimir.musulainen

Спасибо, постараюсь не злоупотреблять.

  Вам надо запомнить, что в Смолтоке есть три типа конструкций - присваивание, отправка сообщения и возврат значения. "Фигур речи" нет.
 
Я поначалу очень долго искал откуда ноги растут у неких anInteger и т.п. в конструкциях вроде
right: anInteger
right := anInteger
Пока не допендрил, что волен сам писать  что угодно на их месте... Поэтому у меня этот вопрос и возник.

Спасибо, в явной форме стало понятно, что asString & asNumber это методы, я их нашел в соответствующих классах, но...
...Но теперь мне стало непонятно, что и главное как, по какому праву они делают в переменной "memory" класса являющегося подклассом AlignmentMorph и в конечном счёте в своём наследовании восходящего к Object, и ни String ни Number в этой иерархии таки не встречаются.
Как объект может понимать методы других объектов от которых не наследовал? 
 

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
 
 

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
 
 
Reply | Threaded
Open this post in threaded view
|

Re: упоминания классов с артиклем и т.д.

Genosse
Да, вопрос кажись снят...
  
На меня самого уже снизошло озарение, пока в магазин ходил.
Эта переменная инициализируется как '0' т.е. как строка! 

А я опять на те же грабли наступил...
 '0' присвоенный это не просто некое значение а полноценный экземпляр соответствующего класса и т.о. переменная не то чтобы вбирает в себя некое значение само по себе, а просто становится ссылкой на некий экземпляр некого другого класса, со своими методами разумеется.



суббота, 1 июня 2013 г., 12:24:20 UTC+4 пользователь Dmitry Matveev написал:
> ...Но теперь мне стало непонятно, что и главное как, по какому праву они делают в переменной "memory" класса являющегося подклассом AlignmentMorph и

А вы проверьте тип переменной memory на тот момент. Класс, в котором она содержится, роли не играет.

> ...в конечном счёте в своём наследовании восходящего к Object, и ни String ни Number в этой иерархии таки не встречаются.

А чтобы уметь обрабатывать asString (как и asNumber) - не нужно иметь отношение ни к String, ни к Number, в иерархии наследования. И, да, я акцентирую ваше внимание ещё раз - объекту memory посылается только asString. Сообщение asNumber посылаыется уже результату (который, по идее, должен быть строкой).

> Как объект может понимать методы других объектов от которых не наследовал?

Вдаваясь в дебри, объект может делать это в специальном методе "doesNotUnderstand: aMessage". Или использовать Traits, но это уже другая история, которая, возможно, вас только ещё больше запутает.

Дмитрий


1 июня 2013 г., 11:15 пользователь Genosse Alex <<a href="javascript:" target="_blank" gdf-obfuscated-mailto="SNC94rKIU1AJ">gen...@...> написал:

Такие вещи иногда не просто объяснить в печатной форме. Возникает масса вопросов, которые сформулировать не получается. Тут проще устно - можно меня найти в скайпе  skype_id: vladimir.musulainen

Спасибо, постараюсь не злоупотреблять.

  Вам надо запомнить, что в Смолтоке есть три типа конструкций - присваивание, отправка сообщения и возврат значения. "Фигур речи" нет.
 
Я поначалу очень долго искал откуда ноги растут у неких anInteger и т.п. в конструкциях вроде
right: anInteger
right := anInteger
Пока не допендрил, что волен сам писать  что угодно на их месте... Поэтому у меня этот вопрос и возник.

Спасибо, в явной форме стало понятно, что asString & asNumber это методы, я их нашел в соответствующих классах, но...
...Но теперь мне стало непонятно, что и главное как, по какому праву они делают в переменной "memory" класса являющегося подклассом AlignmentMorph и в конечном счёте в своём наследовании восходящего к Object, и ни String ни Number в этой иерархии таки не встречаются.
Как объект может понимать методы других объектов от которых не наследовал? 
 

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес <a href="javascript:" target="_blank" gdf-obfuscated-mailto="SNC94rKIU1AJ">sugr+uns...@googlegroups.com.
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
 
 

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
 
 
Reply | Threaded
Open this post in threaded view
|

Re: упоминания классов с артиклем и т.д.

Denis Kudriashov
In reply to this post by Genosse
Привет.

1 июня 2013 г., 11:15 пользователь Genosse Alex <[hidden email]> написал:
Спасибо, в явной форме стало понятно, что asString & asNumber это методы, я их нашел в соответствующих классах, но...
...Но теперь мне стало непонятно, что и главное как, по какому праву они делают в переменной "memory" класса являющегося подклассом AlignmentMorph

Вобще, на мой взгляд, реализация морфов не самый лучший пример для изучения смолтолка с нуля.
При всех потрясающих возможностях живого взаимодействия с любыми видимыми объектами, внутренности морфика, мягко говоря, оставляют желать лучшего. Да, морфик очень гибкий, в нем очень много возможностей, и за счет инструментов смолтолка можно докопаться до любых его деталей. Но докопавшись, понимаешь реализация морфика - это ужас.Каждый раз, натыкаясь на очередное "магическое место" в морфике, я поражаюсь, какие смолтокеры могли такое написать? К счастью, Pharo имеет курс на уничтожение подобных "достопримечательностей сквиковского наследия".
Конечно, ни в какой другой системе так поиграться с интерфейсом не получится, а это всегда очень интересно. Сквик был моим первым смолтолком, и морфик, возможно, первое, что завлекло меня.
В качестве примера для изучения смолтолка я бы посоветовал посмотреть, как устроены FileSystem, Seaside - отличные примеры хорошего смолтолк кода. В общем, весь Smalltalk-80 сюда относится.

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
 
 
Reply | Threaded
Open this post in threaded view
|

Re: упоминания классов с артиклем и т.д.

Genosse
In reply to this post by Genosse
А вот ещё вопрос насколько принципиально указывать в явном виде в коде те же самые asString asNumber? 
Это просто правила хорошего тона или их несоблюдение чревато потенциальными проблемами?

Я удалил  asString asNumber при переосмыслении кода образца в свой код без каких либо последствий. 
Ведь мат операции и так проходят корректно. (по крайней мере в workspace (('2','1')+4=25)=true  даёт  true

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
 
 
Reply | Threaded
Open this post in threaded view
|

Re: упоминания классов с артиклем и т.д.

Nikolay Kleptsov
При использовании методов конвертации (asString asNumber) гарантированно будет получена ссылка на строку или число. Арифмитические операции будут выполняться быстрее если участвуют числа и еще быстрее когда числа одного типа.
Выполненный в Workspace пример демонстрирует использования полиморфизма, на мой взгляд очень сильное свойство Smalltalk. В двух словах полиморфизм - реализация методов имеющих одинаковое название, но разное содержимое в различных классах. Именно наличие метода "+" в строке и числах позволяет сложить нескладываемое. Обычно в таких методах сначала определяется тип операндов, далее идет конвертация и в последнем случае арифметическая операция.
Числа в Smalltalk реализованы гибко. Автоматическое преобразование одного типа в другой, позволяют забыть о типе числа. Например, выполнить в Workspace 1000 factorial. результатом будет число, экземпляр класса BigInteger.
В некоторых реализациях имеются комплексные числа



1 июня 2013 г., 19:34 пользователь Genosse Alex <[hidden email]> написал:
А вот ещё вопрос насколько принципиально указывать в явном виде в коде те же самые asString asNumber? 
Это просто правила хорошего тона или их несоблюдение чревато потенциальными проблемами?

Я удалил  asString asNumber при переосмыслении кода образца в свой код без каких либо последствий. 
Ведь мат операции и так проходят корректно. (по крайней мере в workspace (('2','1')+4=25)=true  даёт  true

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
 
 

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.