@kotlin_lang

Страница 8 из 982
Anton
27.12.2016
11:08:11
философский вопрос

стоит сначала понять, что значит ФП вообще

лямбды есть - становится ли язык от этого функциональным?

first-level functions есть - достаточно?

Google
Nikita
27.12.2016
11:09:48
частичное применение надо же

карринг

Sergey
27.12.2016
11:10:15
карринг можно сделать экстеншенами

система типов еще ж нужна другая вроде?

Anton
27.12.2016
11:10:39
система типов еще ж нужна другая вроде?
да вот вроде бы нет, это не обязательное условие

Богдан
27.12.2016
11:10:51
тко?

Nikita
27.12.2016
11:10:52
ну вон тайпалиасы завезти обещают

Богдан
27.12.2016
11:11:03
без нее уж точно далеко не уедешь

Anton
27.12.2016
11:11:16
ленивость - Венкат как то вещал что это чуть ли не самый важный компонент

Oleksandr
27.12.2016
11:11:29
лень скорее антипаттерн

Sergey
27.12.2016
11:11:38
лень в смысле как концепт в языке)

Oleksandr
27.12.2016
11:11:43
нет HKT

нельзя делать тайпклассы

Google
Oleksandr
27.12.2016
11:12:17
нет макросов

Nikita
27.12.2016
11:12:19
идрис не ленивый

но чистый фп

Anton
27.12.2016
11:12:46
Вот ещё такое: “Purely functional data structures are persistent. “

Oleksandr
27.12.2016
11:13:01
нет контроля эффектов (следствие отсутствия HKT)

Sergey
27.12.2016
11:13:18
НКТ?

Oleksandr
27.12.2016
11:13:33
типы высших порядков

иногда -- весьма практичная штука

Sergey
27.12.2016
11:21:46
https://twitter.github.io/scala_school/advanced-types.html#higher по примерам не могу понять чем оно отличается от генериков?

Oleksandr
27.12.2016
11:23:41
это дженерик, где констуктором типа есть другой тип

например, List сам по себе бесполезен

он работает с каким-то типом, и последний выступает констуктром для листа

и вот штуки типа F<T<K, V>> и обзываются типами высших порядков

Sergey
27.12.2016
11:26:42
как-то все сложно)

Oleksandr
27.12.2016
11:27:03
это непривычно, но несложно)

Руслан
27.12.2016
11:30:14
Это все не нужно для функционального языка

Oleksandr
27.12.2016
11:32:34
define "fp l"

Sergey
27.12.2016
11:32:49
в чем вообще профит от функциональных подходов в привычных языках?

Руслан
27.12.2016
11:33:04
define "fp l"
ну вот, правильный вопрос задал, вместо того чтобы говорить что обязательно должно быть)

Google
Руслан
27.12.2016
11:35:08
Например erlang вообще со сторогой, но динамической типизаций :)

И че, он теперь не fpl?

Anton
27.12.2016
11:39:54
проще, и писать, и дебажить
вот на счёт дебажить, чёто не на все 100 уверен

тестировать удобно - да. но дебажить...

Sergey
27.12.2016
11:42:37
проще, и писать, и дебажить
в чем они вообще выражаются? вот сколько читал книженций типа "fp in javascript", "fp in java", "functional thinking" и один хрен непонятно) везде одно и то же глаголят вот юзайте иммутабельные структуры - не будете знать бед лямбды, собирайте в композиции, делайте пайплайны laziness, каррирование и тд вот например в джаве, заюзаю я стримы, обмажусь лямбдами, возьму какую-нибудь guava для иммутабельных коллекций - я сделаю дофига функционально?

Руслан
27.12.2016
11:44:20
fp в javascript это как секс в резиновой женщиной

Sergey
27.12.2016
11:45:09
fp в javascript это как секс в резиновой женщиной
ну там книга из разряда "смотрите как круто можно с lodash все делать"

вот можешь полистать если хочешь

Руслан
27.12.2016
11:49:28
Лодаш и иммютабле джс конечно норм

Ага, рекурсия и джс

Там большая глубина стека очень сильно бьет по перфу

Не говоря о том что tailrec нету

Anton
27.12.2016
11:59:52
@HeapyHop что за книга?

а, ок

Oleksandr
27.12.2016
13:09:55
что, по случайному совпадению, также является и признаком "хорошого кода"

лямбды и все такое -- просто приятный довесок к этому ядру, но они вторичны

с такой точки зрения, в ФП стиле можно писать хоть на коболе

Oleksandr
27.12.2016
13:14:16
но есть разные техники, которые упорядочивают частовозникаемые паттерны, HKT -- из них

Google
Oleksandr
27.12.2016
13:14:44
глупый вопрос: совпадающих сигнатур не бывает?
бывают, конечно, и это не особо хорошо

например, перевернуть список и отсортировать

где-то здесь вписываются зависимые типы

Anton
27.12.2016
13:15:38
ну вот мне кажется что сигнатуры в общем случае недостаточно. разные методы могут брать один тип, и его же возвращать. трансофрмации всякие

Oleksandr
27.12.2016
13:16:59
ну вот мне кажется что сигнатуры в общем случае недостаточно. разные методы могут брать один тип, и его же возвращать. трансофрмации всякие
согласен я к тому, что надо минимизировать такие случаи чем меньше тебе надо усилий, чтобы вьехать в код, тем лучше

Anton
27.12.2016
13:17:33
согласен

Oleksandr
27.12.2016
13:20:35
плюс разные техники автоматически добавляют "защиту от дурака" можно добиться того же тонной юнит-тестов, а можно умнее написать метод вот есть тьма градаций, что такое "умнее" -- от, скажем, перехода на статически типизированный ЯП до обмазывания всего скалаз/шейплесом

Sergey
27.12.2016
13:21:04
я если фп код должен упрощать чтение и понимание, почему я не могу с первого раза разобраться что происходит в скала коде?)

а кложа вообще с ума свести любого может

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

Oleksandr
27.12.2016
13:21:45
непривычка

не начинай с скалаз

Anton
27.12.2016
13:24:15
я заметил, что любой код в ФП стиле сначала трудно даётся просто потому, что он как правило очень “конденсированый”. Сидишь, и думаешь, что же он делает. В отличае от языков типа go, где просто надо прочитать, и вроде бы сразу понятно, если сможешь полотно кода в голове удержать.

а кложа вообще с ума свести любого может
а чего там странного то? скобочки? дык можно цветовую подсветку такую сделать, что скобочки не видны будут. Вообще на Python станет похоже :)

Sergey
27.12.2016
13:25:50
(+ 1 2 3) ну так себе читаемость

Nikita
27.12.2016
13:30:12
(print “Hello World”) аааааа сложна

Anton
27.12.2016
13:30:27
ну представь, что нет скобочек. Получается + 1 2 3 Далее, представь что + - это “plus” ну и получам вызов функции с переменным количеством параметров как если бы в Java было plus(1,2,3)

но без лишних скобочек и запятых

всё нормально читается :)

Nikita
27.12.2016
13:31:23
к синтаксису многих языков надо привыкать, у меня немного горит, когда говорят, что у лиспов сложный синтаксис (он бы еще был ага)

Google
Sergey
27.12.2016
13:32:27
(let [people (repeatedly 5 lvar) magazines (repeatedly 5 lvar) cheeses (repeatedly 5 lvar) reservations (repeatedly 5 lvar) answers (map list people magazines cheeses reservations)] (run 1 [q] (== q answers) (== people [:amaya :bailey :jamari :jason :landon]) (permuteo magazines [:fortune :time :cosmopolitan :us-weekly :vogue]) (permuteo cheeses [:asiago :blue-cheese :mascarpone :mozzarella :muenster]) (permuteo reservations [5 6 7 7.5 8.5])))

я вот только догадываться могу что тут реально происходит

Nikita
27.12.2016
13:33:07
после let в квадратных скобках создаются “локальные переменные”

типа как val people = repeatedly(5, lvar)

слева всегда ф-я, справа всегда аргументы

Sergey
27.12.2016
13:34:16
да расшифровывать мне не нужно) просто говорю что такое читается в разы хуже чем какой-нибудь го

Nikita
27.12.2016
13:35:08
вот реально по-моему дело привычки просто)

по мне так го какой-то кривой в плане синтаксиса

вот я его не знаю, смотрю и не совсем понятно (совсем непонятно) чего там происходит например

Sergey
27.12.2016
13:37:47
https://github.com/ognick/wizards-of-portal/blob/master/core/src/main/scala/wop/game/ai/WopSolver.scala вот это считается чистым функциональным подходом ведь?

код Фомкина если че

Anton
27.12.2016
13:38:40
да чёт от обычной Java особо не отличается. но я не спец, если чо :)

вот это больше на настоящий ФП похоже :) https://gist.github.com/viktorklang/9414163

Sergey
27.12.2016
13:42:46
хм, а в котлине нельзя ж написать x when {...}? только when(x){...}?

https://blog.jetbrains.com/kotlin/2016/12/kotlin-1-0-6-is-here/

погнали all-open костыли)

Anton
27.12.2016
17:54:53
Sergey
27.12.2016
17:55:48
немного странные решения

Страница 8 из 982