@proelixir

Страница 157 из 1045
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

Страница 157 из 1045