@kotlin_lang

Страница 790 из 982
Alexander
03.08.2018
07:30:18
Скорее OutOfElectricityException

Andrew
03.08.2018
07:33:13
Я физик, а не математик, мне ближе какие-то реальные сущности. Я понимаю Unit и Nothing как некоторый вариант контрактов. Unit подразумевает, что функция что-то вернет, но это что-то никогда не будет использовано, а Nothing - функция никогда ничего не вернет
Если совсем уж откинуть практическую ценность, никто не мешает использовать результат функции, которая возвращает Unit. fun unitFn(a: Int) {} fun main(args: Array<String>) { val result = unitFn(5) println("${result.javaClass.canonicalName}") } вполне себе напечатает kotlin.Unit, к примеру ?

Alexander
03.08.2018
07:34:07
Это я понимаю, но это в некотором смысле нарушение контракта, бессмысленный код.

Я могу в принципе и `Nothing`обмануть, сделав вроде как бесконечный цикл, но прервав его по дороге каким-то способом

Google
Alexander
03.08.2018
07:34:56
наверное... не пробовал

Andrew
03.08.2018
07:37:28
Да нет, на самом деле, никакого нарушения контракта нету -- функция возвращает объект-синглтон, всё в порядке. И прерванный бесконечный цикл -- не обман Nothing, который, собственно, просто гарантирует, что функция не вернёт значение в рамках обычного control flow. Ну то есть если, положим, вызвать посредством JNI код, который поднимет нативный сигнал, и таким образом выйти из функции не через исключение в рамках JVM -- это всё ещё в рамках Nothing ?

Какая в этом практическая ценность -- другой вопрос.

Alexander
03.08.2018
07:39:09
Все это понятно. Вопрос в том, нужна ли теория категорий для того, чтобы это все понимать. Ваши примеры ровно также нарушают эти категории как и мое описание с контрактами.

Andrew
03.08.2018
07:43:07
Дык я наоборот о том, что никто ничего не нарушает. Всё вполне логично ложится в систему типов. Для понимания конкретно Unit и Nothing на уровне, на котором они нужны практику, который JSON-чики в БД укладывает -- вряд ли. Для расширения кругозора наверняка штука полезная. Но я боюсь глубоко нырять -- вдруг я ознакомлюсь с темой и пойму, что Kotlin -- ужасно неполноценный язык и уйду писать на Frege ?

Andrew
03.08.2018
07:49:01
Последний коммит 27 мая, вполне себе жив. А он собирался умирать? Я не интересовался особо им никогда)

Konstantin
03.08.2018
07:49:41
module Hello where greeting friend = "Hello, " ++ friend ++ "!" main args = do println (greeting "World")

чота два плюсика в синтаксисе настораживают

Alexander
03.08.2018
07:50:24
У нас хаскелист в группе, как-то обсуждали

Andrew
03.08.2018
07:50:39
чота два плюсика в синтаксисе настораживают
Наоборот круто, явно разделённые понятия о сложении и конкатенации.

Google
Alexander
03.08.2018
07:51:03
Не лезте в синтаксис хаскеля, у меня только от чтения голова болит

Konstantin
03.08.2018
07:51:09
книжка валяется по нему, скучает )

Quantum Harmonizer
03.08.2018
07:51:16
Konstantin
03.08.2018
07:51:33
почему-то подумал про пхп
там конкатенация через точку

Andrew
03.08.2018
07:51:47
почему-то подумал про пхп
Слушай, но не может же быть язык идеально плохим, должно же в нём быть хоть что-то хорошее. ?

Alexander
03.08.2018
07:52:14
Хаскелисты - это секта, они от него прутся

Andrew
03.08.2018
07:53:35
А потом мы удивляемся, что функциональщики в чатике набегами пытаются Котлин унижать. Надо быть выше этого, товарищи.

Andrew
03.08.2018
07:54:50
а как же javascript? )))
В основе JS стоят вполне себе крутые идеи, между делом.

Alexander
03.08.2018
07:54:54
А я не унижаю, я думаю, что они слишком умные для нас простых смертных

Andrew
03.08.2018
07:55:19
а как же javascript? )))
Но как язык я его от этого любить не начинаю, конечно ?

Alexander
03.08.2018
07:56:05
Когда мне теоретики про теорию струн начинают рассказывать, у меня уши тоже в трубочку сворачиваются. При всем уважении.

(Теория струн - это еще не самое мощное)

Igor
03.08.2018
07:56:24
Хаскелисты - это секта, они от него прутся
Они прутся от: - краткости + выразительности - понятности тк что бы понять что делает функция, надо видеть только сигнатуру (тк они чистые и не делают ничего неявно) - стат. типизации (там ведь даже эффекты выражены в типах) - простое тестирования (даешь аргументы - смотри результат, каждый раз возращается одно и тоже) (а не просто от факта, что пишут на хаскеле и знаю (на пол шишечки) теоркат)

Andrew
03.08.2018
07:59:08
Параллелизм из коробки и широкое поле интерпретатору для оптимизаций ещё опущены как минимум. Но тулинг, интероп с остальным миром и сообщество... Ну его.

Alexander
03.08.2018
07:59:12
Да какие возражения. Но от синтаксиса голова болит

Параллелизм там крутой, но ограниченный. Что-нибудь вроде переключения контекстов может быть очень сложным.

Вообще любой контроль рантайма.

Которого кстати нет

Google
Andrew
03.08.2018
08:03:22
Которого кстати нет
Я вот тут не просто "не настоящий сварщик", а "даже рядом не сварщик", но разве это не должно решаться в рамках IO?

Alexander
03.08.2018
08:04:37
Я тоже не прикладывался, говорю же, аллергия, но в чисто функциональных языках вообще нет рантайма, соответственно нет контроля поведелния в рантайме. Вроде как там все тоже можно сделать, но слооожно

Alexander
03.08.2018
08:06:58
Это был бы сферический язык в вакууме

Andrew
03.08.2018
08:10:26
Да фиг знает, никто не мешает писать на чисто функциональном языке библиотечный код и вызывать его из кода на другом языке. Тот же F# вполне себе могёт общаться с ООП-миром, но на нём всё-таки библиотеки пишут обычно ?

В качестве альтернативного варианта можно посмотреть на какую-нибудь прототипную Lua с подобной картиной.

Andrew
03.08.2018
08:13:43
Да никто и не мешает взять Kotlin и писать чисто функционально (вывожу разговор на тему чата ?)
Как это никто? А как же соблазн писать императивщину?)) Я в Arrow до сих пор не смог, отчасти, конечно, потому, что его авторы не умеют на человеческом языке а) объяснять подходы, б) объяснять практическую ценность. Выпуск Talking Kotlin на эту тему, ИМО, был просто отвратительный.

Igor
03.08.2018
08:17:21
Как это никто? А как же соблазн писать императивщину?)) Я в Arrow до сих пор не смог, отчасти, конечно, потому, что его авторы не умеют на человеческом языке а) объяснять подходы, б) объяснять практическую ценность. Выпуск Talking Kotlin на эту тему, ИМО, был просто отвратительный.
Так там авторы же упоротые. Если глянуть их github, они в основном на скале пишут с либа, которые вообще из хаскеля принесены. А теперь они еще и решили портануть их котлин ? - ну это же бред

Andrew
03.08.2018
08:34:20
Arrow не нужен чтобы писать в функциональном стиле. Хотя наверное только частично можно
В этом "только частично" вся суть. То, что в коде есть композиция чистых функций, ещё не значит, что весь код выдержан в функциональном стиле. Хотя Arrow, само собой, не обязательное требование ?

Igor
03.08.2018
08:35:55
В этом "только частично" вся суть. То, что в коде есть композиция чистых функций, ещё не значит, что весь код выдержан в функциональном стиле. Хотя Arrow, само собой, не обязательное требование ?
А вообще, есть теория что в программах _которые мы обычно пишем_, вообще не нужно сложное-типизированое-ФП. Заодно закину интересную мысль и пропиарю @pofftop чатик https://t.me/pofftop/14527

Andrew
03.08.2018
08:37:24
Я согласен с тем, что соблюдать конкретную парадигму не должно быть самоцелью. Как обычно пафосно заявляют в таких случаях, каждой задаче -- свой инструмент. *ушёл искать наушники*

В целом логично. Не зря же тут в чатике постоянно ругают даггер и зависимости пропагандируют исключительно через конструкторы передавать. Оно ж о том же ?

Ivan
03.08.2018
08:41:37
сейчас бы кучу сервисов через конструктор тащить

Quantum Harmonizer
03.08.2018
08:41:53
Alexandr
03.08.2018
08:43:53
Ivan
03.08.2018
08:43:54
куча сервисов == нарушение SRP
а 0 сервисов в зависимостях == анемичные ДО

Andrew
03.08.2018
08:44:30
А 0 сервисов в зависимостях -- не лучше, чем куча.

Google
Ivan
03.08.2018
08:45:50
Уже два-три сервиса замусорят параметры конструктора

Quantum Harmonizer
03.08.2018
08:46:52
Andrew
03.08.2018
08:47:04
Уже два-три сервиса замусорят параметры конструктора
Звучит как объективный аргумент ? </sarcasm>

Ivan
03.08.2018
08:47:43
Quantum Harmonizer
03.08.2018
08:48:32
типа service locator?
Типа сарказм. Зависимости не в конструктор == говнокод.

Alexandr
03.08.2018
08:52:33
если только у тебя не прилождение на 10 классов с моделями

Admin
ERROR: S client not available

Anton
03.08.2018
08:53:01
причем тут di ))

Alexandr
03.08.2018
08:53:03
ну тогда только DI на синглтонах
а зачем синглтоны то?

Quantum Harmonizer
03.08.2018
08:53:07
не, DI это нормально
всё зависит то того, что такое DI

а зачем синглтоны то?
ну чтобы конструкторы не замусоривать

Alexandr
03.08.2018
08:54:01
ну чтобы конструкторы не замусоривать
так не замусореваются. для чего request/session/prototype scope?

автовайринг

Anton
03.08.2018
08:54:57
автовайринг и прочее это по моему просто скоупы не?

и сколько инстансов создастся

Alexandr
03.08.2018
08:55:22
да, я это к синглтонам

что не обязательно все синглтонами делать

Quantum Harmonizer
03.08.2018
08:55:46
короче, вместо того, чтобы просто создать объект, создаются сложный правила, по которым создаются объекты

Google
Alexandr
03.08.2018
08:56:46
короче, вместо того, чтобы просто создать объект, создаются сложный правила, по которым создаются объекты
они создаются что бы передавать что либо только там где надо передавать, а не что бы пропихивать на 10 вызовов вглубь, когда он нужен на 11-м

Quantum Harmonizer
03.08.2018
08:57:29
не надо вглубь, все зависимости должна создать точка входа

Andrew
03.08.2018
08:58:23
Б-же, что я наделал ?

Alexandr
03.08.2018
08:59:57
Andrew
03.08.2018
09:01:05
you are holywar god :)
А я просто хотел, чтобы у меня хотя бы в чатике был чистый код ?

Andrew
03.08.2018
09:12:03
А вы говорите, хаскеллисты упоротые. Вон люди усиленно прячут от себя свои графы зависимостей за 3rd-party фреймворками и слоем рефлексии / кодогенерации, вместо того, чтобы меньшими усилиями собрать их явно, и утверждают, что это круто.

Sergey
03.08.2018
09:15:00
аминь

Quantum Harmonizer
03.08.2018
09:16:46
а если нужна динамика?
тогда Python, Clojure, Groovy

Alexandr
03.08.2018
09:17:20
тогда Python, Clojure, Groovy
я про динамический граф

и самое интересное, как в этом динамическом дереве делать hot replace в зависимости от контекста?

Alexandr
03.08.2018
09:20:25
самое интересное — зачем
иначе получим anemic data model либо фп на объектах

Quantum Harmonizer
03.08.2018
09:20:50
Andrew
03.08.2018
09:21:05
Не доводилось с этим чудом инженерной мысли работать, потому не скажу ничего конкретного. Пользуюсь Ktor -- вполне себе всё успешно руками раскладывается на модули в духе тех, которые генерирует даггер на основании задекларированных интерфейсов, без существенного увеличения количества кода, но с заметным повышением наглядности. В том же Android без DI-фреймворка кода рисуется больше, но исключительно за счёт идиотской архитектуры. Присоединяюсь к вопросу, зачем hot replace.

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