2016-03-29 6 views
2

Почему у Swift есть понятия «ленивые переменные» и «вычисленные свойства», когда кажется, что простые методы или функции подходят для этой цели?Почему ленивые переменные/вычисленные свойства, а не только методы

В случае трудоемкого случая computing Pi, разве это не был метод? И то же самое в this case. Почему заставить что-то быть переменной/свойством, который явно более сложный?

+0

См. [Здесь] (http://stackoverflow.com/questions/25854300/how-to-initialize-properties-that-depend-on-each-other/43765143#43765143). Это очень связано ... – Honey

ответ

4

Ленивые переменные существуют, чтобы сократить время загрузки (т. Е. По соображениям оптимизации). Некоторые переменные не нужны немедленно, если явно не требуется. И они, как Math.pi, могут потратить некоторое время, чтобы вычислить. Таким образом, приложение может начать вычислять их в фоновом потоке, когда завершатся наиболее важные инициированные пользователем операции.

Что касается вычислительных свойств, я думаю, что это скорее решение языка. Objective-C давно появились, и их всегда технически «вычисляли» (с геттерами и сеттерами, автоматически ли они были синтезированы/явно реализованы), и это было (и -) безумно принятой функцией. Зачем? Я не знаю точно. Может быть, нет «одного ясного ответа» на этот вопрос. Как я уже сказал, я считаю, что это языковое решение, а не то, что можно полностью рационализировать.

Для меня лично я чувствую себя более интуитивно понятным как для чтения, так и для записи свойства, используя тот же синтаксис .property, а не и setProperty(_: Property). Это абстракция, а абстракции языка существуют для удобства/простоты использования. Ваши примеры очень надуманны, а рассчитанные свойства используются тысячами в рамках платформы Apple. Не каждое вычисляемое свойство должно быть чрезвычайно трудоемким, и большинство из них фактически практически мгновенно; таким образом, они абстрагируются, чтобы чувствовать это.

Когда вы думаете об этом, все технически вычисляется. Даже если вы, например, задаете целочисленное значение непосредственно в поле структуры, есть вещи, которые должны произойти в более низком масштабе. Эти низкоуровневые вычисления абстрагируются, чтобы чувствовать себя как не вычисленные, конкретные сущности, когда они на самом деле. Все это сводится к абстракции .