Переменная экземпляра конструктора Pharo

Я новичок в Pharo, и мне было интересно, есть ли какой-нибудь метод автоматического рефакторинга для создания конструктора с одним параметром для каждой переменной экземпляра. Прямо сейчас, чтобы сделать это, я создаю метод стороны класса, который создает новый экземпляр класса и вызывает для нового экземпляра метод, который инициализирует переменные экземпляра. Это довольно скучно и долго, но я не смог найти способ сделать это автоматически (например, вместо этого я могу сделать это для создания методов доступа к переменной экземпляра и т. д.).

Есть ли способ?


person user1544128    schedule 24.12.2013    source источник


Ответы (1)


Краткий ответ: да, это возможно.

Длинный ответ: ты хочешь это сделать? Я имею в виду, что обычно вы создаете экземпляр и устанавливаете его переменные, например:

window := Window new
  width: 500;
  height: 300;
  x: 5;
  y: 10;
  yourself.

и вы можете создать геттер и сеттер (в Nautilus) для переменных экземпляра из контекстного меню метода или с помощью ярлыков.

Так что вы можете посмотреть, как они реализованы, и написать подобное для "конструкторов", но это не обычная практика в Pharo, так что дважды подумайте, прежде чем идти по этому пути.

person Uko    schedule 24.12.2013
comment
хорошо, но почему это лучше, чем: Windows initializeWithWidth: 500 height:300 x:5 y:10. ? В своем коротком ответе вы говорите, что это возможно, но не могли бы вы сказать мне, как? ой, и если я могу счастливого Рождества! :) - person user1544128; 25.12.2013
comment
@user1544128 user1544128, потому что вы многого не выиграете, если пойдете своим путем. Возможно, у вас есть значения по умолчанию и, возможно, у вас нет всех данных на момент инициализации. Дело в том, что вы должны быть уверены, что он действительно часто используется + я бы избегал методов с длинными именами. Я постараюсь расширить свой ответ в ближайшее время - person Uko; 25.12.2013
comment
Иногда полезны такие методы инициализации, как ваш #initializeWithWidth:height:x:y:. Например, когда переменные экземпляра не предназначены для изменения (неизменяемые объекты). Я не знаю никакого рефакторинга для этого. Тем не менее, при прототипировании приложения вы можете избежать этой практики. Раньше у меня было много методов инициализации, подобных этому, но я остановился, потому что это было слишком много работы для поддержки (например, когда переменные экземпляра добавляются/удаляются). - person Damien Cassou; 25.12.2013
comment
@DamienCassou да, но обычно я нахожу их адаптированными к идеям метода. Я не знаю, имеет ли смысл генерировать все, а затем вопрос в том, в каком порядке. Но muse может быть умным генератором. - person Uko; 26.12.2013