- 1
List(1,2,3) + "X" == "List(1, 2, 3)X"
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+130
List(1,2,3) + "X" == "List(1, 2, 3)X"
Скала
laMer007 13.03.2015 15:07 # 0
roman-kashitsyn 13.03.2015 15:13 # 0
3.14159265 13.03.2015 16:05 # 0
This is actually deserving how awesomw ruby is.
laMer007 13.03.2015 18:20 # +2
laMer007 14.03.2015 10:13 # 0
угадай, что будет в s? )
kegdan 13.03.2015 15:52 # 0
roman-kashitsyn 13.03.2015 15:53 # +1
kegdan 13.03.2015 15:56 # 0
почему не нужна? жаболожцы же ее боготворят
3.14159265 13.03.2015 16:07 # 0
>читаю книжки по крестам, хаски, J
Почему я СОВЕРШЕННО не удивлён таком сочетанию?
kegdan 13.03.2015 16:24 # 0
Dummy00001 13.03.2015 16:26 # 0
kegdan 13.03.2015 18:15 # 0
LispGovno 14.03.2015 21:05 # +2
Vasiliy 13.03.2015 19:08 # 0
Abbath 15.03.2015 17:19 # 0
Прям как я раньше.
kegdan 15.03.2015 17:29 # 0
3.14159265 13.03.2015 16:04 # 0
Бухыхыхы. А чё так? Помню год-два назад я слышал совсем другие разговоры.
Dummy00001 13.03.2015 16:30 # 0
в чем цель скалы я так и не уловил. груви - да. скала - нет.
roman-kashitsyn 13.03.2015 16:43 # +2
Dummy00001 13.03.2015 17:31 # 0
wvxvw 13.03.2015 17:48 # 0
roman-kashitsyn 13.03.2015 18:10 # 0
wvxvw 13.03.2015 18:32 # 0
Грейдл, например, не смотря на то, что компилируемый язык, на столько не однозначный, что при отсутствии какого-то импрота (которые он сам может добавить, а может и не добавить) один и тот же код скомпилируется по-разному, только в одном случае ошибка случится в рантайме.
По этому поводу очень хорошо сказал Уилкинсом, автор Grammar of Graphics, [...]orthogonality (as much as possible, everything should work everywhere and in every combination) and hierarchy (complicated tasks should be done by enlisting the support of simple helpers) [...] А эти языки только ухудшают и без того плохую ситуацию.
roman-kashitsyn 13.03.2015 23:03 # +2
kegdan 13.03.2015 23:14 # +2
wvxvw 13.03.2015 23:53 # 0
roman-kashitsyn 13.03.2015 16:49 # +5
Я осознал, что гораздо лучше иметь относительно простой язык с чёткой семантикой, возможно, не очень мощный, чем здоровенный сложный язык с пятью системами типизаций и макросами, который умеет всё.
Старый я стал, короче.
3.14159265 13.03.2015 16:57 # +1
Бинго! Абсолютно такие же ощущения сложились при небольшом экскурсе, эдакие кресты в жабомире.
Притом что я обломался её учить, спрашиваю как у более осведомлённого.
>>Я осознал, что гораздо лучше иметь относительно простой язык с чёткой семантикой
Добро пожаловать...
Голанг кстати сразу понравился, хоть в нем на порядок меньше всякого.
roman-kashitsyn 13.03.2015 18:06 # 0
В действительности скалка зачастую сложнее крестов. Я как-то пытался коллеге объяснить, что в деталях происходит в несчастном куске кода Это трындец сколько букв пришлось сказать. Надо знать слишком много, чтобы понимать код.
3.14159265 13.03.2015 18:17 # 0
Слушайте я реально не знаю скалы, но код очевидный. Кресты гораздо сильнее мозг выносят.
laMer007 13.03.2015 18:26 # +2
3.14159265 13.03.2015 18:31 # +3
[эта часть комментария доступна только пользователям премиум-аккаунтов]
Vasiliy 13.03.2015 19:10 # 0
3.14159265 13.03.2015 19:20 # +4
kegdan 14.03.2015 00:19 # 0
LispGovno 14.03.2015 10:08 # +3
3.14159265 14.03.2015 22:30 # +5
kegdan 15.03.2015 10:46 # 0
kegdan 13.03.2015 18:28 # +1
roman-kashitsyn 13.03.2015 19:02 # 0
Ну вот тут пришлось рассказать про имплиситы - что справа это строка, у которой нет метода r, но он есть у какого-то другого класса, и компилятор ищет, во что такое можно сконвертировать объект, чтобы у него был метод r, и слава либе, это объект, создающий регулярку.
> for (Code(len, c) <- Code findAllIn s) sb.append(c * len.toInt)
Тут я вообще устал объяснять - тип c не сразу очевиден, нужно понять, что это поматченная строка, которая повторяется len.toInt раз. А Code можно использовать в левой части for, т.к. добрые авторы либы определили у регулярок волшебный метод unapply, который выковыривает группы в переменные, и это мы ещё даже не дошли до семантики for.
Короче две строчки, но детально объяснять код замучаешься, слишком много слоёв.
3.14159265 13.03.2015 19:18 # 0
Поясните за чудесный механизм вызова самого себя в паттерн-матчинге:
case (i,p,s) => if (p==c) (i+1,p,s)
Как это работает?
roman-kashitsyn 13.03.2015 19:58 # 0
roman-kashitsyn 13.03.2015 20:05 # 0
3.14159265 13.03.2015 20:15 # 0
3.14159265 13.03.2015 18:28 # 0
Мозг тут выносит перегрузка плюса на StringBuffere/строке: s+i+p, который неявно вызывает {s.append(i);s.append(p)}. И то что этот append флюент-интерфейсный, то бишь возвращает себя модифицированного или новую немутабельную копию (я хз как там строки).