
Fill
18.08.2017
08:36:03
И будет ли она полезна для меня? Я неплохо разбираюсь в ООП, но ФП не изучал ещё. Может стоит прочитать что-то конкретно о функциональном программировании?

Nikolay
18.08.2017
08:39:21

Fill
18.08.2017
08:41:01
Я начал читать. И стал выполнять практические задачи. Потратил день на это, но я всё ещё не могу реализовать даже сортировку (ручную, без Seq.sort и т.д.). Задумался вот о целесообразности.
Не могу понять, как можно сделать сортировку имея только иммутабельные данные

Google

Artemy
18.08.2017
08:42:24

Vlad
18.08.2017
08:42:33

Artemy
18.08.2017
08:43:21
Наверное, с непривычки звучит как не очень эффективный способ, но только так с неизменяемым и можно работать.)

Fill
18.08.2017
08:49:00

Vasily
18.08.2017
08:50:48

Fill
18.08.2017
08:51:06

Vasily
18.08.2017
08:51:10
Тем не менее, это не отменяет факта, что таки рекурсия явная

Fill
18.08.2017
08:51:41

Vasily
18.08.2017
08:51:57
Если в фп стиле, то да, плохая
Но есть сценарии, когда нужны мутабельные коллекции

Google

Artemy
18.08.2017
08:52:54

Fill
18.08.2017
08:53:36
Я понял. Если я всюду в коде создаю кучу новых коллекций, никто не скажет мне, что я дурак и сожрал всю память, ведь парадигма этого требует.
То-есть если у меня есть город, и мне нужно выключить свет в одной квартире, я создаю новый город, в котором в той кваритре свет выключен
Я всё правильно понял?

Artemy
18.08.2017
08:54:57
Лол, прикольный пример.)
Ну типа того

Vasily
18.08.2017
08:55:30
Если для того, чтобы выключить свет в квартире, нужно пересоздавать город, что-то идет не так

Fill
18.08.2017
08:55:57
Видимо, в фп нам не нужно иметь столь большие объекты

Vasily
18.08.2017
08:56:16
В фп имеет смысл продумывать доменную область

Fill
18.08.2017
08:56:23
?

Vasily
18.08.2017
08:56:44
Типы, взаимосвязи между ними этц

Artemy
18.08.2017
08:56:47

Fill
18.08.2017
08:57:11
в любом случаае, спасибо за ваш фидбэк

Vasily
18.08.2017
08:57:38

Artemy
18.08.2017
08:59:56
В моём случае этого не происходит?
в любом случаае, спасибо за ваш фидбэк
Такой себе фидбэк получился. К сожалению, не знаю, как лучше в ФП быстрее войти. Сам начинал с Haskell. Но навряд ли это единственный верный и лучший путь.)

Fill
18.08.2017
09:13:41

Artemy
18.08.2017
09:14:41
А, ну я начал Haskell на 2-м курсе, когда только начинал изучать ООП.
> Но у меня нихрена не получается, потому что решение проблем с точки зрения ФП для меня сейчас - дикость похлеще кучи интерфейсов.
Со временем пройдёт, если регулярно практиковаться. И будет ничуть не сложнее, чем решать в императивном стиле.

Google

Pavel
18.08.2017
09:21:40

Artemy
18.08.2017
09:22:50
Я с помощью этого курса начинал:
https://www.edx.org/course/introduction-functional-programming-delftx-fp101x-0

Pavel
18.08.2017
09:23:12
https://thomasbandt.com/the-problem-with-fsharp-evangelism статья о том, почему C# девами сложно рассказать про приемущества F#. Думаю все с этим сталкивались :)

Fill
18.08.2017
09:23:48
спасибо

Iskander
18.08.2017
09:28:51
Могу посоветовать курс Мартина Одерски на Coursera, вроде назвался Introduction to Functional Programming on Scala. Да, Scala != F#, но они похожи тем, что являются мультипарадигменными, OOP+FP, а в этом курсе концепция ФП объясняется очень даже неплохо

Fill
18.08.2017
09:31:02

Igor
18.08.2017
09:36:28

Artemy
18.08.2017
09:36:51
Да, точно
Если что, на Рутрэкере несколько F#-курсов с Pluralsight есть

Evgeniy
18.08.2017
09:49:32
Универсальный Мутатор!
http://fssnip.net/7Tu?utm_source=dlvr.it
@fvnever Тебе должно понравиться.

Vasily
18.08.2017
09:52:42
Прикольная штука на самом деле

Andrew
18.08.2017
09:53:21

Vasily
18.08.2017
09:53:33
На самом деле есть сценарии, где требуется мутация всех строк

Andrew
18.08.2017
09:54:38
например?

Mike
18.08.2017
10:28:55

Vasily
18.08.2017
10:35:01
например?
Я встречался с сценариями, где в графе объектов надо один айдишник на другой заменить
Т.е. условно был 23, надо заменить на 456
Графы сложные причем и большие

Andrew
18.08.2017
10:36:57
заменить значение в поле объекта - это одно, а заменить символы внутри строки...

Google

Vasily
18.08.2017
10:37:26
Ну может и такой сценарий подъехать

Andrew
18.08.2017
10:37:34
строки в дотнете не просто так немутабельные

Artem
18.08.2017
10:39:16
или есть ещё причины?

Roman
18.08.2017
10:39:46

Andrew
18.08.2017
10:40:10

Artem
18.08.2017
10:41:01

Andrew
18.08.2017
10:41:23
его использует например Dictionary

Aleksander
18.08.2017
10:41:28
и интернирование

Andrew
18.08.2017
10:41:50
вот в Ruby например строки мутабельные (по крайней мере когда-то были)
и поэтому можно было сделать
x = "test"
dict[x] = 1
x.replace!("e", "o")
и после этого нужно вызывать у словаря метод, пересчитывающий заново хеши всех ключей
иначе корректная работа не гарантируется
потому что хеш-код строки больше не соответствует ее значению
в общем, менять _значение_ строк в дотнете - это примерно то же, что в С++
#define TRUE rand() < 0.9

Artem
18.08.2017
10:46:30
ок, спасибо
теперь понял

Artemy
18.08.2017
10:49:59

Dmitry
18.08.2017
10:50:12

Google

Friedrich
18.08.2017
10:51:18

Andrew
18.08.2017
10:51:50
Классный пример.)
вот есть целая подборка, которую я иногда перечитываю:
https://github.com/kitcambridge/evil.js/blob/gh-pages/evil.js

Vlad
18.08.2017
10:53:08

Friedrich
18.08.2017
10:53:31

Artem
18.08.2017
10:55:08
а в с++ как? не тот тип, который стринг там прикрутили, а старый добрый char*
если я делаю char*x="qwe";
x[1]='Z';
?
я просто плюсы тыкал когда совсем молодой и неопытный был
не помню уже

Friedrich
18.08.2017
10:55:36
Ну то есть мутирование интернированных строк ломает вообще всю программу, ломает в неожиданных местах. А изменение ключей в словаре само по себе сломает только словари, в которых это значение использовалось в качестве ключа. Если нет интернирования — то это довольно локальная опасность.
Чтобы получить мутабельную строку — этот текст нужно будет скопировать в изменяемую область памяти. А дальше, да, они мутируются, но в C++ есть семантика, чтобы запрещать мутации там, где это целесообразно.
В дотнет-языках (которые я знаю) такой семантики нет.

Andrew
18.08.2017
10:57:33

Fill
18.08.2017
10:57:41

Friedrich
18.08.2017
10:58:15

Artem
18.08.2017
10:58:54
?

Friedrich
18.08.2017
10:59:19
Но, заметь, в него ты явным образом скопируешь содержимое какой-то строки.
А неаккуратным интеропом можно запросто поотстреливать себе все конечности.

Vlad
18.08.2017
11:00:50
там вроде же еще есть какие-то приколы, что строки по ссылке кроссдоменно передаются вместо копирования, или там нечем ломать?

Artem
18.08.2017
11:00:57
ну мне пока не приходилось интеропить, кроме как в универовских лабах