Size: a a a

2020 March 06

G

Gymmasssorla in rust_offtopic
Pavel
ок, а если убрать футуры, то что изменится?
Если убрать футуры, то наши функции потеряют ссылочную прозрачность, и как следствие - более простой рефакторинг/чтение кода. Давай проверим: если мы заменим print_something() только на возвращаемое значение (которое будет () без футур), то поведение программы изменится.
источник

P

Pavel in rust_offtopic
Gymmasssorla
Если убрать футуры, то наши функции потеряют ссылочную прозрачность, и как следствие - более простой рефакторинг/чтение кода. Давай проверим: если мы заменим print_something() только на возвращаемое значение (которое будет () без футур), то поведение программы изменится.
и что ты тут рефакторить хотел?
источник

G

Gymmasssorla in rust_offtopic
Pavel
и что ты тут рефакторить хотел?
Эмм, код?
источник

G

Gymmasssorla in rust_offtopic
https://habr.com/en/post/479238/

В секции "Зачем это нужно" есть показательный пример как ссылочная прозрачность понижает количество ошибок при рефакторинге.
источник

P

Pavel in rust_offtopic
Gymmasssorla
Эмм, код?
ну вот какую часть кода? вот у тебя возвращается (), очень полезно, конечно, ведь он не синглтон ни разу. Тоесть у тебя и так всегда возвращается олно и то же значение, а значит функция пригодна только для сайд-еффекта. Внимание вопрос: зачем заворачивать её в футуру при этом, если можно просто взять функцию, которая желает то, что у тебя в async и заворачивать при желании? как это упростит рефакторинг? вот я сделаю extract method что с ней, что без неё, только с ней мне опять футуру таскать
источник

P

Pavel in rust_offtopic
у меня ни разу не было, чтоб именно при рефакторинге я что-то сломал.
источник

G

Gymmasssorla in rust_offtopic
Pavel
ну вот какую часть кода? вот у тебя возвращается (), очень полезно, конечно, ведь он не синглтон ни разу. Тоесть у тебя и так всегда возвращается олно и то же значение, а значит функция пригодна только для сайд-еффекта. Внимание вопрос: зачем заворачивать её в футуру при этом, если можно просто взять функцию, которая желает то, что у тебя в async и заворачивать при желании? как это упростит рефакторинг? вот я сделаю extract method что с ней, что без неё, только с ней мне опять футуру таскать
Это MRE, слишком простой пример, чтобы его как-то пытаться рефакторить.
источник

P

Pavel in rust_offtopic
вот буквально, я не помню такого, чтоб я рефакторил, а не переписывал и сломал что-то
источник

G

Gymmasssorla in rust_offtopic
Pavel
у меня ни разу не было, чтоб именно при рефакторинге я что-то сломал.
источник

G

Gymmasssorla in rust_offtopic
У меня было и много раз
источник

P

Pavel in rust_offtopic
Gymmasssorla
Это MRE, слишком простой пример, чтобы его как-то пытаться рефакторить.
только без R, потому, что он не репродьюсит ничего, просто "ну, вот так можно писать футуры"
источник

P

Pavel in rust_offtopic
Gymmasssorla
У меня было и много раз
попробуй языки, для которых работает автоматизированный рефакторинг
источник

P

Pavel in rust_offtopic
где IDE понимает код, а не ты как раб бегаешь и ищешь, где у тебя  foo -- переменная, вызов метода, декларация метода, строка или комментарий, чтоб sed'ом не сломать всё
источник

P

Pavel in rust_offtopic
где ты нажимаешь один шорткат и видишь как данные проходят через твою программу
источник

G

Gymmasssorla in rust_offtopic
Pavel
где ты нажимаешь один шорткат и видишь как данные проходят через твою программу
Отсюда приходим к пункту "чтение" кода, или правильнее будет выразиться "понимание". С ссылочной прозрачностью ты можешь просто подставить вместо выражения его значение, в нечистом коде тебе придётся следить за неявным изменяемым состоянием.
источник

P

Pavel in rust_offtopic
Gymmasssorla
Отсюда приходим к пункту "чтение" кода, или правильнее будет выразиться "понимание". С ссылочной прозрачностью ты можешь просто подставить вместо выражения его значение, в нечистом коде тебе придётся следить за неявным изменяемым состоянием.
не придётся, мне плевать, что делает метод который я вызываю,  он лучше знает, что ему делать
источник

G

Gymmasssorla in rust_offtopic
Pavel
не придётся, мне плевать, что делает метод который я вызываю,  он лучше знает, что ему делать
Но тебе _придётся_ следить за изменяемым состоянием, т.к. после нечистого метода оно может поменяться и оказать влияние на остальной код.
источник

P

Pavel in rust_offtopic
separation of concerns, простой принцип, который в фп-школе не проходят и пишут в одном месте вычисления, эффекты и всё-всё, как я понял
источник

P

Pavel in rust_offtopic
Gymmasssorla
Но тебе _придётся_ следить за изменяемым состоянием, т.к. после нечистого метода оно может поменяться и оказать влияние на остальной код.
это если ты пишешь на коленке для олимпиады, то да
источник

G

Gymmasssorla in rust_offtopic
Pavel
separation of concerns, простой принцип, который в фп-школе не проходят и пишут в одном месте вычисления, эффекты и всё-всё, как я понял
Этот принцип работает во всех парадигмах, в том числе - в ФП
источник