Size: a a a

Scala User Group

2020 August 23

Oℕ

Oleg ℕizhnik in Scala User Group
Oleksandr Olgashko
может, если внутри нет сайдэффектов
Ну а там есть мутабельное состояние
https://github.com/typelevel/cats/blob/master/core/src/main/scala/cats/Eval.scala#L138
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Eugene Bosiakov
Я помню, в этом чате обсуждалось, что в скала в рамках одного метода мутируемая структура это норм, главное чтобы результат функции был иммутабельный. А у вас в продакшн коде есть методы которые внутри себя реализуют алгоритмы с мутабельными структурами? или у вас все очень строго?
Фобос такой вроде в целом.
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Oleksandr Olgashko
(и я не очень понял, что такое "иммутабельная функция")
ну чистой функции
источник

OO

Oleksandr Olgashko in Scala User Group
прайват зис
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Oleksandr Olgashko
прайват зис
т.е. если private this то иммутабельное?
источник

OO

Oleksandr Olgashko in Scala User Group
это "недоступное извне"
источник

OO

Oleksandr Olgashko in Scala User Group
(пожалуйста, без рефлексии)
источник

OO

Oleksandr Olgashko in Scala User Group
то есть чистая функция может сколько угодно мутировать что угодно и оставаться "чистой", до тех пор, пока эти операции "недоступны извне"
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Oleksandr Olgashko
это "недоступное извне"
class Named{  
private[this] var name: String = _

def getName : name
def setName(value: String) : Unit =
    name = value
}

такой тоже иммутабельный?
источник

OO

Oleksandr Olgashko in Scala User Group
Oleg ℕizhnik
class Named{  
private[this] var name: String = _

def getName : name
def setName(value: String) : Unit =
    name = value
}

такой тоже иммутабельный?
нет, потому что есть публичный геттер
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Oleksandr Olgashko
нет, потому что есть публичный геттер
источник

OO

Oleksandr Olgashko in Scala User Group
ну ой, тогда не чистая функция
источник

Oℕ

Oleg ℕizhnik in Scala User Group
источник

Oℕ

Oleg ℕizhnik in Scala User Group
а то вы там привяжетесь, что не геттится
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Oleksandr Olgashko
ну ой, тогда не чистая функция
значит, функция, которая Eval возвращает - не чистая
источник

OO

Oleksandr Olgashko in Scala User Group
та не важно, конкретно геттер или что

если функция для внутренних нужд что-то там мутирует, то и ладно

до тех пор, пока эти мутации незаметны для стороннего кода
источник

Oℕ

Oleg ℕizhnik in Scala User Group
значит больше половины API Foldable нечистое, и кусок API всех наиболее используемых тайпклассов нечистый
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Oleksandr Olgashko
та не важно, конкретно геттер или что

если функция для внутренних нужд что-то там мутирует, то и ладно

до тех пор, пока эти мутации незаметны для стороннего кода
как определить "незаметность"
источник

OO

Oleksandr Olgashko in Scala User Group
в общем случае - не знаю
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Ну в общем, к тому, что в реальности всё равно придётся делать ансейф аннотации
источник