Size: a a a

Software Design/Architecture/Zen

2020 October 07

AL

Anton Lakotka in Software Design/Architecture/Zen
обязан следить за порядком выполнения
источник

E

Evgen in Software Design/Architecture/Zen
Anton Lakotka
обязан следить за порядком выполнения
с чего бы?
источник

R

Roman in Software Design/Architecture/Zen
Anton Lakotka
а вот в мутабельном сетапе например может быть так
fun mut() = { global var x = 0; x+=2;  return x / 2; }
А это сайд-эффекты. Которые так же неприлично делать в нормальном ООП
источник

AL

Anton Lakotka in Software Design/Architecture/Zen
да с того бы. mut() + mut() - mut() имеет значение
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
Evgen
с чего бы?
С того что ты не можешь предсказать что вернёт mut()?
источник

a

atcq (Алексей)... in Software Design/Architecture/Zen
Anton Lakotka
не имеет значения в иммутабельном сетапе
иммутабельно порядок вызовов тоже может иметь значение
let value = 3;
value = addIfLess10(value, 3)
value = addIfLessr10(value, 7)
// value is 13

let value = 3;
value = addIfLess10(value, 7)
value = addIfLess10(value, 3)
// value is 10
источник

AL

Anton Lakotka in Software Design/Architecture/Zen
Roman
А это сайд-эффекты. Которые так же неприлично делать в нормальном ООП
ну так значит в нормальном ООП нет места мутабельности?
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
Roman
А это сайд-эффекты. Которые так же неприлично делать в нормальном ООП
Ну вот. Ты понял почему иммутабельность важно)
источник

DE

Dmitry Eliseev in Software Design/Architecture/Zen
Anton Lakotka
ну так значит в нормальном ООП нет места мутабельности?
Верно. Но хейтеры ООП в каждой статье пишут про мутабельный шаред стейт.
источник

E

Evgen in Software Design/Architecture/Zen
Anton Lakotka
да с того бы. mut() + mut() - mut() имеет значение
ну и как будет отличаться не иммутабельный код от этого?
источник

R

Roman in Software Design/Architecture/Zen
Ну нет. Вы сейчас говорите "объекты нельзя менять". Я говорю "чужие объекты нельзя менять". Если юзеру нужно в текущей функции поменять емейл — он поменяется, хоть это будет в пределах того же объекта, хоть это будет новый. То есть, концептуально я не вижу разницы между:

user = getUser();
print(user.getEmail());  // hello@hello
user.changeEmail(newEmail);
print(user.getEmail());  // world@world


и

user = getUser();
print(user.getEmail());  // hello@hello
newUser = user.changeEmail(newEmail);
print(newUser.getEmail());  // world@world
источник

R

Roman in Software Design/Architecture/Zen
При этом, в последнем есть риск использовать старый и неактуальный объект юзера, у которого будет неактуальный email
источник

AL

Anton Lakotka in Software Design/Architecture/Zen
Evgen
ну и как будет отличаться не иммутабельный код от этого?
а никак. в иммутабельном коде, просто невозможно иметь функцию mut в таком виде.
она будет выглядеть примерно так:
data class Context(val x: Int = 0)

fun Context.mut(): Pair<Int, Context> {
  Pair(x / 2, Context(x + 2))
}


т.е. вся суть в том, что ты получаешь контекст на вход вы выдаешь новый на выходе.
источник

AL

Anton Lakotka in Software Design/Architecture/Zen
таким образом твоя функция внутри ничего не "запоминает"
источник

AL

Anton Lakotka in Software Design/Architecture/Zen
но хочу сказать, что я не фанатик лепить во всех местах иммутабельные функции.
и например можно всегда сделать красивую приватную функцию
источник

DE

Dmitry Eliseev in Software Design/Architecture/Zen
Dmitry Eliseev
Верно. Но хейтеры ООП в каждой статье пишут про мутабельный шаред стейт.
Чем и вызывают подозрения, что они не осилили нормальный ООП, где глобального мутабельного стейта вообще-то нет.
источник

E

Evgen in Software Design/Architecture/Zen
Anton Lakotka
а никак. в иммутабельном коде, просто невозможно иметь функцию mut в таком виде.
она будет выглядеть примерно так:
data class Context(val x: Int = 0)

fun Context.mut(): Pair<Int, Context> {
  Pair(x / 2, Context(x + 2))
}


т.е. вся суть в том, что ты получаешь контекст на вход вы выдаешь новый на выходе.
Тогда почему вы говорите что где-то важен порядок вызова, а где-то не важен если сравнивать вам не с чем
источник

AL

Anton Lakotka in Software Design/Architecture/Zen
Evgen
Тогда почему вы говорите что где-то важен порядок вызова, а где-то не важен если сравнивать вам не с чем
еще раз говорю. в иммутабельном коде, такой функции просто невозможно сделать.
в этом вся и суть
источник

E

Evgen in Software Design/Architecture/Zen
Anton Lakotka
еще раз говорю. в иммутабельном коде, такой функции просто невозможно сделать.
в этом вся и суть
Тогда утверждение о порядке вызова функции заведомо ложное
источник

AL

Anton Lakotka in Software Design/Architecture/Zen
нет, в иммутабельном коде порядок выполнения функций внутри другой функции не имеет значения
источник