
Тимур
19.09.2018
10:14:13
конфиг и ссылается на id, но потом загрузчик все ресурсы резолвит в прямые ссылки на id
потому что дальше эти id никому не нужны
прямая ссылка на соответствующий ресурс - это и есть id


Andrey
19.09.2018
10:14:17
мне кажется все(ну по крайней мере большинство) из тех кто топит за ручную сборку и прочие kiss не заглядывали даже в gof
Насчёт gof - а вы читали критику паттернов проектирования?
В курсе, что большую часть из них становится не нужной, если есть анонимные функции в языке, а остальные перекрываются таким формализмом общей алгебры, как монада?
Вообще, мне периодически приходится не только писать код, но и рассказывать про программирование (занимаюсь репетиторством ради удовольствия).
Вот заметил такую болезнь: паттерны головного мозга - когда школьник/студент легко понимает простые абстракции общей алгебры, но если перед началом занятий он уже пробовал паттерны, понятие монады может как-то осознать только когда скажешь ему, что это такой специальный билдер с хорошо определённым контрактом на операции.
В общем, прошить недостающую часть компилятора себе в голову - не лучшая идея, как по мне.

Тимур
19.09.2018
10:21:35

Google

Andrey
19.09.2018
10:29:47
описать граф можно кучей способов
но главное, что по своей природе граф может иметь циклы
когда мы заменяем объекты на id, всякие прокси и так далее - это просто такая попытка обмануть природу вещей, замаскировать циклы ООП трюками
иногда это работает
но иногда проще и удобнее хранить граф в его натуральной, естественной форме
А что такое натуральная и естественная форма хранения графа?
Направленный граф, например, можно хранить в виде Map<Node, List<Node>>, где ключи - узлы, значения - список узлов, в которые можно пройти из узла. Это естественная форма?

Тимур
19.09.2018
10:32:38

Alexandr
19.09.2018
10:40:08
это в какой-то степени стратегия получается

Andrey
19.09.2018
10:57:54

Alexandr
19.09.2018
11:00:15
ну можете дальше так жить :)
а, да, еще и через весь стек с парой десятков вызовов прокинуть) мои поздравления)

Andrey
19.09.2018
11:04:51

Alexandr
19.09.2018
11:06:54

Mikhail
19.09.2018
11:07:02

Alexandr
19.09.2018
11:07:43

Mikhail
19.09.2018
11:08:05
я бы не давал таких поспешных заявлений

Google

Mikhail
19.09.2018
11:08:43
но я намекаю что если система изначально задумывалась для использования прокси любой другой паттерн будет выглядеть как сова на глобусе


Andrey
19.09.2018
11:09:47
я просто спорить не буду :) каждй все равно при своем мнении останется
Да я и не призываю спорить. Я просто предлагаю вам посмотреть альтернативы, как ещё это решается без лишних проблем.
Бандой четырёх проектирование не исчерпывается. Как по мне, так они продали под разнообразным соусом то, что называется лямбда абстракцией и частичным применением.
И вообще, они эти паттерны писали под C++, в котором, на тот момент, не было анонимных реализаций классов, лямбд и прочего.
То есть, как раз и предлагали прошить в голову недостающую часть языка/компилятора в виде паттернов.
Тот же DI в функциональных языках с богатой системой типов (F#, Haskell) вполне может быть отдан на откуп компилятора, который, в зависимости от типа контекста подберёт нужную реализацию, статически свяжет её в выражении, где она используется, возможно ещё и заинлайнит для скорости.
И всё это с проверками типов и на этапе компиляции. В Kotlin так не всегда получится (система типов бедновата), но в большинстве случаев тоже реально.


Igor
19.09.2018
11:37:58
А тут кто-то использовал Nginx-clojure на котлине, какие впечатления?

Alexey
19.09.2018
11:46:17
намекаете что с нуля вы бы написали по другому?
Я бы точно написал по другому, и все варианты отчётов с параметрами передавал явно в зависимости от ситуации. Ситуации явно заведомо известны. И тут удже компилятор будет моим другом. А вашим другом будет только внимательность.
Нет кейс вообще не убедительный ¯\_(ツ)_/¯

Andrey
19.09.2018
11:54:56
Или вы про Kotlin?

Alexey
19.09.2018
11:56:00
C хаскелем то всё понятно

Andrey
19.09.2018
11:56:13

Max
19.09.2018
12:02:10
Ребята, как лучше передать контекст в фрагмент который вызывается из dialogfragment?

Микола
19.09.2018
12:04:19

Alexandr
19.09.2018
12:04:49

Alexey
19.09.2018
12:12:59

Alexandr
19.09.2018
12:13:35

Anatolii
19.09.2018
12:14:43
с динамикой есть свобода отстрелить себе гениталии и не более

Alexey
19.09.2018
12:18:21
Ну построение отчёт - это по сути функция:
(Data, Template) => Report
А дальше - это уже pattern matching в чистом виде
В котлине не хватает PartialFunction, которые можно комбинировать
Так бы можно было описать каждый кейс отдельно и потом в одном месте сделать что то вроде
val report: (Data, Template) -> Report = {
reportA
.orElse(reportB)
.orElse(reportC)
.andSoOn
}
Всё отлично расширяется и описывается нормально

Google

Igor
19.09.2018
12:22:35
И паттерн-матчинг тоже, если видели наши с еще одним фанатично-фпшным товарищем посты, вполне себе реально сделать.

Igor
19.09.2018
12:25:08
?? ??

Alexey
19.09.2018
12:28:16

Andrey
19.09.2018
12:40:23

Alexey
19.09.2018
12:41:39

Andrey
19.09.2018
12:42:02

Alexey
19.09.2018
12:42:13
PartialFunction про другое

Andrey
19.09.2018
12:42:44

Alexey
19.09.2018
12:43:51
нет
val foo: PartialFunction[Int, Int] = {
case 1 => 2
}
функция foo определена только на значении 1

Andrey
19.09.2018
12:45:14
Ааа. PartialFunction - не тотальные функции.

Alexey
19.09.2018
12:45:19
ага

Andrey
19.09.2018
12:46:27
ага
Ну да. В Kotlin when выражение требует, чтобы все варианты были рассмотрены. Правда некоторые могут бросать исключение, но это уже другое.
У PartialFunction в Scala есть метод для проверки, определена она на значении, или нет.

Anatolii
19.09.2018
12:47:27

Andrey
19.09.2018
12:47:58
when expression VS when statement

Mikhail
19.09.2018
12:51:22

Alexey
19.09.2018
12:51:56

Andrey
19.09.2018
12:52:31

Google

Mikhail
19.09.2018
12:53:37
ну да, через ?: будет очень даже идиоматично

Andrey
19.09.2018
12:57:59

Mikhail
19.09.2018
12:59:25

Alexey
19.09.2018
12:59:43

Admin
ERROR: S client not available

Алексей
19.09.2018
13:00:21
Всем привет! Вопрос немного (совсем) оффтоп, но я просто не знаю, где спрашивать (может, посоветуете чего). Вопрос следующий - что необходимо при оформлении на дистанционную работу за границу из России?

Andrew
19.09.2018
13:01:00

Alexey
19.09.2018
13:01:26

Алексей
19.09.2018
13:01:54
понял, спасибо

Andrey
19.09.2018
13:05:44
+
Вот практически 1 в 1 пример из Scala:
typealias PartialFunction<A, B> = (A) -> B?
infix fun <A, B> PartialFunction<A, B>.orElse(other: PartialFunction<A, B>): PartialFunction<A, B> = { this(it) ?: other(it) }
fun main(args: Array<String>) {
val isEven: PartialFunction<Int, String> = { if (it % 2 == 0) "$it is even" else null }
val isOdd: PartialFunction<Int, String> = { if (it % 2 == 1) "$it is odd" else null }
println((1..10).map(isEven orElse isOdd))
}
https://www.scala-lang.org/api/2.12.1/scala/PartialFunction.html

Alexey
19.09.2018
13:06:57
тоже пойдёт
Проблема только будет, если тебе надо будет комбинировать PartialFunction<A, B?>

Andrey
19.09.2018
13:08:37
Ну чтобы сделать их различимыми надо уже делать через Option. Тогда null и empty станут разными значениями.

Sergey
19.09.2018
17:48:31
https://github.com/JetBrains/kotlin/blob/1.3.0/ChangeLog.md#13-rc
вот даже хз, будут релизить до конфы или после. не думаю что во время, ибо будут заняты самой конфой..

Leonid
19.09.2018
18:46:03
Всё вам расскажи… Вы что, сюрпризов не любите? ?

Sergey
19.09.2018
18:46:26
?

Жабра
19.09.2018
18:51:11

Sergey
19.09.2018
18:52:33

Google

Жабра
19.09.2018
18:52:43

OlegKrikun
19.09.2018
20:02:15
ээээ... а может мне кто объяснить мотивацию запрета на использовани kotlin.Result как типа возвращаемого значения? =) https://youtrack.jetbrains.com/issue/KT-26659

Quantum Harmonizer
19.09.2018
20:13:57

OlegKrikun
19.09.2018
20:17:26
непонятно ?

Quantum Harmonizer
19.09.2018
20:18:29
непонятно ?
Чтобы никак не получилось Result<Result<...>>, это сломает инлайновость

OlegKrikun
19.09.2018
20:19:25
ЭЭЭ... а зачем нужен результ который вернуть нельзя? о_О

Quantum Harmonizer
19.09.2018
20:19:43
Можно, но только руками компилятора

OlegKrikun
19.09.2018
20:20:16
тоесть без использования корутин его не имеет смысл юзать?

Quantum Harmonizer
19.09.2018
20:21:29
Ну, имеет, но нельзя :)

OlegKrikun
19.09.2018
20:22:06
мля ?

Руслан
19.09.2018
20:22:21
Почему бы не спросить об этом в тикете?
А потом тут рассказать почему же

OlegKrikun
19.09.2018
20:23:15
Хороший вопрос, пойду порефлексирую

Roman
19.09.2018
20:23:24
Здесь описано почему: https://github.com/Kotlin/KEEP/blob/result-rename/proposals/stdlib/result.md

OlegKrikun
19.09.2018
20:23:53
Спс