Установка значений переменных экземпляра 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 - для значения, так как при написании метода значение неизвестно.

Я думаю, что концепция, которую вы можете искать, называется свойствами. Посмотрите здесь и здесь и здесь. Свойства позволят вам установить значения элементов без необходимости называть параметр или вызывать метод. Вы просто назначаете значение свойству.

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

Другие вопросы по тегам