2013-12-24 4 views
4

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

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

ответ

2

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

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

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

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

Итак, вы можете посмотреть, как они реализованы и написать аналогичную вещь для «конструкторов», но это не обычная практика в Pharo, поэтому подумайте дважды, прежде чем идти этим путем.

+1

ОК, но почему это лучше, чем: 'Windows initializeWithWidth: 500 height: 300 x: 5 y: 10.'? Я, ваш короткий ответ, вы говорите, что это возможно, но можете ли вы сказать мне, как это сделать? ой, и если я могу с Рождеством! :) – user1544128

+0

@ user1544128, потому что вы не выигрываете много, делая свой путь. Возможно, у вас есть значения по умолчанию, и, возможно, у вас нет всех данных в момент инициализации. Дело в том, что вы должны быть уверены, что он очень много используется +, я бы избегал методов с длинными именами. Я скоро попытаюсь расширить свой ответ. – Uko

+0

Иногда такие методы инициализации, как ваш #initializeWithWidth: height: x: y: полезны. Например, когда переменные экземпляра не подлежат изменению (неизменяемые объекты). Я не знаю никаких рефакторингов, чтобы сделать это. Тем не менее, когда вы создаете прототипы своего приложения, вы можете избежать этой практики. У меня было много таких методов инициализации, как этот, но я остановился, потому что было слишком много работы для поддержки (например, когда переменные экземпляра добавляются/удаляются). –

Смежные вопросы