Smalltalk-стиль обменивается сообщениями по сравнению с функциями C-стиля

В своем «ReactApp» вы можете создать глобальную функцию для ее рендеринга:

window.drawThisReactApp = (into, initialData) => {
  ReactDOM.render(<Provider ...><ReactApp {...initialData} /></Provider>, into);
}

Затем в «устаревшем» JS:

<script>
  window.drawThisReactApp(document.getElementById(...), {...});
</script>

N.B. Нет необходимости упоминать React или ReactDOM.

15
задан Binarian 30 May 2014 в 17:56
поделиться

3 ответа

Objective-c делает это различие для вас. Сообщения должны отправляться объектам, но функции могут использоваться в любое время.

messages :

Сообщения Objective C могут отправляться только объектам, а система обмена сообщениями - способ выполнять вызовы методов класса.

Пример:

// a class interface definition
// including a method named aMethod
@interface ANObject
{

}
- (void)aMethod;
@end


// a message sent to that object:
ANObject * myObject = [[ANObject alloc] init];
[myObject aMethod]; // <-- message
[myObject release];

functions :

Objective-C наследует весь язык C, поэтому вызовы функций в стиле C поддерживается и даже поощряется, когда ситуация требует их. Объекты Objective C просто передаются как указатели, так что вы все равно можете передавать их в функции в качестве аргументов. Конечно, следует соблюдать обычные предостережения и правила относительно передачи указателей на функции.

Пример:

// a regular C-style function
void someFunction(ANObject * argument)
{
    // do something here...
}


// and how to call it:
someFunction(someObject);

когда использовать каждый?

Используйте messages / method , когда вы хотите получить доступ к некоторой собственности на объект / класс. Хорошими примерами будет доступ к длине строки NSString:

int stringLength = [myString length];

Установка значения свойства:

[myObject setHidden:YES];

или указание объекту выполнить какую-либо задачу:

[myAccount withdrawMoneyAndDriveToMexico];

Использовать функции в стиле C , когда вы хотите выполнить задачу, которая не принадлежит классу; то, что должно стоять в одиночестве. Хорошими примерами могут быть математические функции, такие как:

double degrees = ConvertRadiansToDegrees(radians);
21
ответ дан 1 December 2019 в 02:37
поделиться

Как правило, используйте сообщения каждый раз, когда вы имеете дело с компонентом Objective C; более или менее каждый раз, когда вы используете тип NS *.

Под прикрытием вы, по сути, используете вызовы функций C в любом случае; Первоначальная реализация Objective C была препроцессором для C. Но весь смысл использования Objective C заключается в том, чтобы получить синтаксис Smalltalk, который есть у вас где-то внутри [].

4
ответ дан 1 December 2019 в 02:37
поделиться

Вы задали много вопросов по Java; возможно, аналогия с Java поможет. Где бы вы использовали метод в Java, используйте сообщение в Objective-C. Где можно использовать статический метод в Java, используйте метод класса в Objective-C. Если вы обнаружите, что создаете служебные пакеты в Java, которые полны статических методов, то это может иметь смысл как функция в Objective-C.

И, конечно, это может иметь смысл, если вы делаете странные вещи с Objective-C ++.

2
ответ дан 1 December 2019 в 02:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: