Виходячи з фону OOP (Java), я самостійно навчаюсь Scala. Хоча я легко бачу переваги використання незмінних об'єктів індивідуально, мені важко зрозуміти, як можна створити таке додаток. Наведу приклад:
Скажімо, у мене є предмети, які представляють "матеріали" та їх властивості (я конструюю гру, тому я справді маю цю проблему), як вода та лід. У мене був би "менеджер", який володіє усіма такими екземплярами матеріалів. Однією властивістю була б температура замерзання та плавлення, а також те, до чого матеріал замерзає або плавиться.
[EDIT] Усі матеріальні екземпляри є "однотонними", подібними до Java Enum.
Я хочу, щоб "вода" сказала, що вона замерзає до "ожеледиці" при 0 ° С, а "лід" - щоб вона танула до "води" при 1 ° С. Але якщо вода і лід незмінні, вони не можуть отримати посилання один на одного як параметри конструктора, тому що один з них повинен бути створений першим, і він не міг отримати посилання на ще не існуючий інший як параметр конструктора. Я міг би вирішити це, подавши їм обоє посилання на менеджера, щоб вони могли запитувати його, щоб знайти інший матеріальний екземпляр, який їм потрібен щоразу, коли їх запитують про їхні властивості заморожування / плавлення, але потім у мене виникає однакова проблема між менеджером і матеріали, що вони потребують посилання один на одного, але це може бути надано в конструкторі лише одному з них, тому ні керівник, ні матеріал не можуть бути непорушними.
Це просто не обійдеться з цією проблемою, чи мені потрібно використовувати "функціональні" методи програмування чи якусь іншу схему для її вирішення?
h2o
матеріал