Установка значений переменных экземпляра Objective-C
У меня есть следующий код:
@implementation Fraction
{
int numerator;
int denominator;
}
-(void) setNumerator: (int) n
{
numerator = n;
}
-(void) setDenominator: (int) d
{
denominator = d;
}
@end
Мне было интересно, почему у вас должны быть оба "n" и "числитель" для числителя? Например, почему вы не можете просто установить
-(void) setNumerator: (int) numerator
по отношению к:
-(void) setNumerator: (int) n
numerator = n;
}
Извините, если это такой основной вопрос, но я начинаю с самого начала без опыта программирования.
2 ответа
setNumerator
Метод используется, чтобы сказать Fraction
объект, какое значение он должен хранить в переменной с именем numerator
, Как в "Здесь, мистер Фракцион, пожалуйста, используйте значение n для вашего числителя". В реализации этого метода код должен иметь дело с двумя различными понятиями: переменная параметра n, содержащая новое значение, и числитель переменной экземпляра, который должен быть изменен на значение в n; отсюда необходимость двух разных имен. Линия
numerator = n;
буквально означает "скопировать число в n в числитель переменной".
Помните, что есть две половины сделки. Скажем, я объект Fraction, и вы хотите, чтобы я установил для моего числителя значение 4. Вы говорите "Установите для числителя значение 4 или setNumerator (4)", что хорошо, потому что вы человек, и вы можете выбирать любой номер, который вы хотите.
Но как непритязательный объект Objective-C, весь мой код был написан некоторое время назад; это было написано до того, как значение 4 было даже мерцанием в ваших глазах. Таким образом, код для setNumerator() должен быть универсальным; это должно быть написано, чтобы сказать "установите числитель на любое значение, которое хочет человек - назовите его n". Помните, мой реальный числитель скрыт от вас; все, что вы можете сделать, это вызвать мой метод, и я могу установить переменную.
Вот почему метод должен быть написан так, чтобы использовать абстрактное имя - n - для значения, так как при написании метода значение неизвестно.
Я думаю, что концепция, которую вы можете искать, называется свойствами. Посмотрите здесь и здесь и здесь. Свойства позволят вам установить значения элементов без необходимости называть параметр или вызывать метод. Вы просто назначаете значение свойству.
При вызове функции вы должны присвоить имя параметру, который вы передаете в функцию, чтобы вы могли назначить его члену класса.