Фэндом

Smalltalk по-русски

Удобная работа в Squeak - маленькие хитрости

239статей на
этой вики
Добавить новую страницу
Обсуждение0 Поделиться

Статья предназначена для сбора разнообразных приёмов, делающих работу в Squeak более удобной. В дальнейшем, при увеличении объёма, вполне вероятно выделение самых больших описаний приёмов в отдельные статьи.

Выполнение действий при загрузке класса Править

Если создать в классе, который мы сохраняем в Monticello, метод SomeClass class>>initialize, то Monticello будет его выполнять при при операциях Load и Merge, причём только в тех случаях, когда этот метод изменился (относительно существующего в образе). Это позволяет выполнять действия, не предусмотренные изначально Monticello, например создавать instance variables в каком-нибудь базовом классе.

Вынесения кода для запуска в комментарии Править

Для удобства запуска чего-нибудь (например, тестов или примеров) можно вынести код, запускающий это "что-нибудь", в комментарий класса тестов (или в комментарий метода). При этом в комментарии класса можно использовать слово "self", которое будет означать "этот класс". Так, можно написать в комментарии класса

 self suite run.

а потом, когда потребуется, просто тыкать мышкой в эту строчку и нажимать Alt-d (т.е. выполнить).

Также можно вызывать графический интерфейс TestRunner-а:

(TestRunner open model)
	selectTestsSuchThat: [ :class | class = self name];
	runTests.

Разумеется, вместо "self" можно явно использовать имя класса.

Использование свойств вместо переменных объекта Править

Иногда бывает неудобно добавлять переменные объекта (instance variables) в какой-нибудь класс. Такое бывает, например, если вы изменяете какой-то базовый класс и хотите оформить эти изменения в виде Monticello-вского проекта (а Monticello не позволяет часть instance variables класса держать в одном проекте, а часть - в другом). Либо, если даже вы решили эту проблему, использовав вышеописанный совет, но добавление переменных объекта само по себе вызывает проблемы (например, если добавить переменные объекта в класс Morph, то с очень большой вероятностью в процессе перекомпиляции всех классов-потомков Morph произойдут какие-нибудь ошибки).

В таких случаях можно использовать не переменные объекта, а "свойства" (properties). Задаются они с помощью метода setProperty:toValue:, а используются с помощью методов hasProperty:, valueOfProperty: и еще нескольких подобных. Работа со свойствами происходит полностью динамически и не требует перекомпиляции класса.

Единственный недостаток этого приёма в том, что находятся все перечисленные методы в классе Morph, а зачит доступны только в нём и его потомках.

Похожие методы работы со свойствами есть в классе MAObject (в пакете Magritte-Model-Core).

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.

Также на Фэндоме

Случайная вики