
Yusup
23.10.2016
20:23:59
в эликсире нет программирования по контракту через бехевиоры
в интерфейсах в других языках есть две стороны
первая использует интерфейс, навязывая контракт
вторая реализует

Google

Yusup
23.10.2016
20:24:59
в эликсире нет первой стороны
хочешь реализуй, хочешь нет

Dmitry
23.10.2016
20:25:33
Вот я и говорю, что ты думаешь в расках ООП
А Эликсир - не ООП

Yusup
23.10.2016
20:26:12
хаскель ооп?
там есть тайпклассы

Dmitry
23.10.2016
20:26:17
Хаскель нет

Yusup
23.10.2016
20:26:24
== интерфейсы
давай поговорим в терминах хаскеля
я думаю ооп?
я говорю о контрактном программировании

Dmitry
23.10.2016
20:26:51
Давай

Yusup
23.10.2016
20:26:53
а не об ооп

Google

Dmitry
23.10.2016
20:27:13
Если typeclass == interface

Yusup
23.10.2016
20:27:24
хосе приделал бехавиор на два модуля

Dmitry
23.10.2016
20:27:26
то почему interface == typeclass?

Yusup
23.10.2016
20:27:33
и назвал это контрактом
вот я хожу думаю почему так
interface == typeclass по той же причине что interface == behavior
потому что так все считают

Dmitry
23.10.2016
20:28:32
бихевиор это интерфейс по определённым причинам

Yusup
23.10.2016
20:28:39
я говорю что typeclass != interface, typeclass != behavior, interface != behavior

Dmitry
23.10.2016
20:28:41
и он не обязан быть тайпклассом

Yusup
23.10.2016
20:28:45
как раз protocol == typeclass

Dmitry
23.10.2016
20:29:25
Протокол определяется на данных
А бехэвиор - ни функциях
Просто в ООП данные и методы связаны в один объект
Поэтому все путают и тупят

Yusup
23.10.2016
20:32:43
как используют протоколы?
извиняюсь
не тот вопрос
как используют бехевиоры?
определяется бехавиор

Google

Yusup
23.10.2016
20:33:25
потом говорим, что мы реализуем бехавиор определенным модулем
зачем нам это делать?
с какой целью мы реализуем бехевиор?
зачем нам нужно чтобы компилятор чекал наши функции?

Dmitry
23.10.2016
20:34:25
Если изменится бехэвиор, то ты получишь ошибку

Yusup
23.10.2016
20:34:34
ок
интерфейсы тоже юзают для этого
но в основном для контрактов
поэтому бехевиоры только отчасти интерфейсы

Dmitry
23.10.2016
20:36:11
Когда ты передаёшь объект - ты можешь прочекать его тип
Поэтому с протоколами всё работает
Это данные

Yusup
23.10.2016
20:36:51
с протоколами все ясно

Dmitry
23.10.2016
20:36:55
А бехэвиор определяется на нэймспейсе
Ты передаёшь название модуля
Это не данные
Не обхект

Yusup
23.10.2016
20:37:15
да

Dmitry
23.10.2016
20:37:20
Как можно прочекать его тип?

Yusup
23.10.2016
20:37:27
ну хз

Google

Yusup
23.10.2016
20:37:37
я вот и спрашиваю, делают так или нет
я спрашиваю, можно ли в контракты через бехевиоры
оказывается нельзя
всем спасибо

Dmitry
23.10.2016
20:38:55
Так а что тебе мешает это делать? То, что компилятор скомпилирует код?

Yusup
23.10.2016
20:39:23
делать что?

Dmitry
23.10.2016
20:39:26
А если ты в Яве будешь тип передавать - ты ж тоже только во время исполнения сможешь его проверить
Что тебе мешает задать бехэвиор
И пользоваться им

Admin
ERROR: S client not available

Dmitry
23.10.2016
20:39:58
Как контрактом

Yusup
23.10.2016
20:40:10
потому что контракт надо навязывать
как навязать модулю реализовать бехевиор?

Dmitry
23.10.2016
20:40:46
Никак

Yusup
23.10.2016
20:41:17
зачем тогда их использовать как контракт?
это же ничего не даст

Dmitry
23.10.2016
20:41:43
Потому что ты сам можешь это отследить раз, во вторых они определяют интерфейс
В третих никто behaviour в чистом виде не использует

Yusup
23.10.2016
20:42:08
в смысле глазами отследить?

Dmitry
23.10.2016
20:42:34
Так а когда ты пишешь if(i = 0; i<= 10; i++) вместо i<10

Google

Dmitry
23.10.2016
20:42:44
Тебе же не падает ошибка компиляции
Если ты можешь генерировать имя модуля на лету - то как это можно отслеживать в компиляторе?

Yusup
23.10.2016
20:43:57
то есть в эликсире не программируют от интерфейса модуля, так?
от "абстрактного"

Dmitry
23.10.2016
20:44:38
Тут нет наследования

Yusup
23.10.2016
20:44:39
то есть если мы в модуле с кучей логики рендерим маркдаун, то мы всегда будем делать Specific.Markdown.Renderer.render
я не про наследование
а про программирование от интерфейса
от абстрактного API

Dmitry
23.10.2016
20:45:32
либо так либо require
то есть если мы в модуле с кучей логики рендерим маркдаун, то мы всегда будем делать Specific.Markdown.Renderer.render
Этот модуль
Но на самом деле в нормальном коде есть макрос __using__

Yusup
23.10.2016
20:46:06
а через requrie как?

Dmitry
23.10.2016
20:46:29
Вот почитай
https://habrahabr.ru/post/312442/

Yusup
23.10.2016
20:46:36
спс

Dmitry
23.10.2016
20:46:55
А насчёт ודןמע
using
https://github.com/Virviil/agala/tree/master/lib/handler
2 файла, один из которых "абстрактный"
Если в модуле написал
elixir
use Agala.Handler