Oleg
А шкала сама - алгоритм сравнения свойств
Oleg
Он может быть и в самом объекте хранится сравниваемом, а может быть и вовне
Oleg
В другом объекте, что производить сравнения
Oleg
Ладно, обещаю прочитать ответ завтра и ответить на него, а сейчас увы, но надо уже спать 😄
Дима
В данном случае прикладываем к некоторым свойствам
class Eq a where
eq :: a -> a -> Boolean
Тайпкласс сравниваемых на равенство объектов тривиален — его инстансы имеют функцию возвращающая bool после двух инстансов класса
Пока что можешь представить себе как обычный интерфейс с методом eq
Вводим понятие сравнения — все инстансы этого тайпкласса можно сравнить
data Ordering = LT | EQ | GT
class Eq a <= Ord a where
compare :: a -> a -> Ordering
Как видишь, Ord определяется через отношение с другим тайпклассом
The Ord type class defines the compare function, which can be used to compare two values, for types which support ordering
И погнали
Можно делать сложение (массивы сущностей, строки — всё едино)
class Semigroup a where
append :: a -> a -> a
Если мы можем показать, где в тайпклассе пустой элемент — можем делать reduce
class Semigroup m <= Monoid m where
mempty :: m
Дима
И так далее)
Дима
Пытаясь это выражать отталкиваясь от объектов, у тебя просто будет безумный и бесполезный дженерик дженерика дженерика
Oleg
А как это простым способом сделать через ФП?
Дима
Я тебе его уже описал выше 🙃
Oleg
Эм, почему я вижу классы? 😄
Дима
Это тайпкласс
Дима
Это действительно ровно весь код, требуемый для описания сложных взаимозависимых понятий. По этой причине они отходят в разряд простых понятий
Oleg
Так это же всё можно также в ООП сделать
Дима
А в ранг сложных привностятся радикально более эффективные сущности
Дима
Нельзя
Дима
Ты не можешь описать в ооп функциональную зависимость
Дима
Потому что ты исходишь от объектов, и описывая типы глядишь тоже на них, что не даст тебе описать реальность, если она выражается не объектом а отношением, связью между понятиями
Oleg
Очевидно нужно понять что такое связь
Oleg
И тогда станет понятно почему нельзя
Oleg
Потому что пока можно
Дима
Дима
Ты сначала начинаешь пользоваться инструментарием, а интуитивное понимание приходит позже
Oleg
Связь это некоторое значение что описывает отношение одного объекта к другому. Почему это отношение нельзя записать в объект? А если действительно нельзя, то почему нельзя вынести в объект, который будет заниматься сравнениями?
Дима
В голове просто изначально нет нужных ассоциаций для сурово обобщённых явлений, в попытке их представить, жизненный опыт подсказывает уверенное ничего
Дима
Oleg
Приведи пример связи на примере мандаринов
Oleg
В твоем понимании
Oleg
Той самой что нельзя на объект наложить
Oleg
И компот из мандаринов можно исчислят - количеством затраченных мандаринов, объемом компота, объемом сухой массы, объемом чистой воды, объемом минеральных примесей
Oleg
И тд
Дима
Oleg
Пример хорош
Дима
🌚
Oleg
Но дело в том что это взаимодействие
Oleg
Взаимодействие объектов
Дима
Да
Oleg
Соответственно это процесс уже жизни самих объектов
Дима
Функция из роддома до кладбища
Oleg
Дело в том что это не нужно записывать логикой
Oleg
Это то самое время - входят данные, начинается взаимодействие, выходят данные
Дима
Вот для того, чтобы описывать не только объекты, но и их взаимодействие — и нужен фп
Oleg
Торг с продавщицей - есть определенные значения спроса и предожения у двух объектов, обмен сообщениями для достижения консенсуса
Дима
Взаимодействия сами по себе могут быть подвержены изменению
Oleg
А, так это
Oleg
Описывается взаимодействие
Oleg
Интерфейсы - по сути и есть описание взаимодействий
Дима
Нет
Oleg
Соответственно про изменения - так параметры меняются в процессе работы программы, меняются и передаваемые сообщения
Oleg
Генерятся на основе входных данных
Oleg
Я понял тебя
Oleg
В ООП это просто не нужно потому что это рантайм
Дима
Представь себе, что на ходу меняется сам способ передачи алгоритмов
Oleg
В ФП это описывается потому что времени там нет и соответственно процессы надо описать ведь они не произойдут если их не описать
Oleg
Это нормально
Дима
Прокачка умения торговаться на рынке
Oleg
Стейты же
Oleg
Сбор фидбека, подгонка нужных параметров для достижения идеального
Дима
У тебя нет никаких параметров, типы абстрактны
Oleg
В ООП просто оно само собой разумеется в рантайме
Oleg
То есть не нужно описывать процесс чтобы он мог происходить
Oleg
Не нужно устанавливать правила явно ибо они задаются не явно интерфейсами
Дима
Ну ты попробуй выразить то
Oleg
Более того могут быть протоколы, да, но для этого могут быть посредники
Дима
Я тебе гарантирую, ты слегка удивишься
Oleg
Так не нужно выражать, вот в чем дело
Oleg
Оно уже выражается само
Дима
Ты просто сейчас говоришь про то про что я уже прошёл, и поверь мне, я довольно долго не мог смириться с мыслью, что я не смогу это выразить
Oleg
Дело в том что я могу 😄
Дима
Ну ты попробуй
Oleg
Так я описал
Oleg
Рантайм
Дима
Не не не, рантайма в данный момент не существует, это просто типизация исходных данных
Oleg
Так вот в том и дело что там где есть мутабельность и обмен сообщениями есть понятие времени, а значит процесс сам себя описывает возможностью вариантов
Oleg
Ладно, на сегодня точно всё, но думаю мы ещё вернемся к этому как-нибудь 😄
Евгений
Ребят, привет. банально, изучаю javascript, для практики пишу игру-кликер. Вопрос: расчеты количества нажатий мышки, другие расчеты мы делаем через javascript(клиент) или надо на сервере делать, что бы не могли перехватить и поставить свои значения?
Александр
Евгений
Тогда вопрос по другому, как понять, что можно выполнять на клиенте а что лучше делать на сервере? Как мне объяснили основные расчеты должны на сервере выполняться и хранится там же, что бы пользователь не мог считать значение и поставить свое.
Андрей
Евгений
да