Ленивые переменные существуют, чтобы сократить время загрузки (т. Е. По соображениям оптимизации). Некоторые переменные не нужны немедленно, если явно не требуется. И они, как Math.pi
, могут потратить некоторое время, чтобы вычислить. Таким образом, приложение может начать вычислять их в фоновом потоке, когда завершатся наиболее важные инициированные пользователем операции.
Что касается вычислительных свойств, я думаю, что это скорее решение языка. Objective-C давно появились, и их всегда технически «вычисляли» (с геттерами и сеттерами, автоматически ли они были синтезированы/явно реализованы), и это было (и -) безумно принятой функцией. Зачем? Я не знаю точно. Может быть, нет «одного ясного ответа» на этот вопрос. Как я уже сказал, я считаю, что это языковое решение, а не то, что можно полностью рационализировать.
Для меня лично я чувствую себя более интуитивно понятным как для чтения, так и для записи свойства, используя тот же синтаксис .property
, а не и setProperty(_: Property)
. Это абстракция, а абстракции языка существуют для удобства/простоты использования. Ваши примеры очень надуманны, а рассчитанные свойства используются тысячами в рамках платформы Apple. Не каждое вычисляемое свойство должно быть чрезвычайно трудоемким, и большинство из них фактически практически мгновенно; таким образом, они абстрагируются, чтобы чувствовать это.
Когда вы думаете об этом, все технически вычисляется. Даже если вы, например, задаете целочисленное значение непосредственно в поле структуры, есть вещи, которые должны произойти в более низком масштабе. Эти низкоуровневые вычисления абстрагируются, чтобы чувствовать себя как не вычисленные, конкретные сущности, когда они на самом деле. Все это сводится к абстракции .
См. [Здесь] (http://stackoverflow.com/questions/25854300/how-to-initialize-properties-that-depend-on-each-other/43765143#43765143). Это очень связано ... – Honey