Я читал раздел Lazyness [sic] на странице Эффективный Scala Twitter, в который включено это предложение (акцент мой):
Используйте для этой цели ленивые поля [вычисления и кэширование значений по запросу], , но избегайте использования ленивости, когда ленивость требуется по семантике. В этих случаях лучше быть явным, поскольку он делает модель затрат явной, а побочные эффекты можно контролировать более точно.
Я не понимаю, почему они заявили бы это. Почему бы лучше избегать использования ключевого слова lazy
для случаев, когда семантика требует лени (что означает, что это необходимо для правильности в вашей программе, а не просто для ее использования в качестве оптимизации). Я не вижу, как писать собственный ленивый код инициализации сделает тот факт, что лень требуется более ясно, чем использование ключевого слова lazy
, встроенного в язык! Я знаю, что некоторые дополнительные накладные расходы связаны с созданием полей lazy
потокобезопасными, но я не думаю, что они здесь...
Есть ли какая-то скрытая заслуга в этом руководстве по использованию lazy
, который я полностью потерял, или мне лучше просто игнорировать это предложение?