
Dmitry
23.10.2016
19:08:16
А в яве если ты напишешь public interface а внутри определишь методы - скомпилируется ?

Yusup
23.10.2016
19:27:22
в Java 8 да
а скале да
в хаскеле да

Google

Yusup
23.10.2016
19:27:55
в еликсир протоколах да

Rumata
23.10.2016
19:28:35
элексир в приколах

Can
23.10.2016
19:28:43
Совсем не разбираюсь в behaviourах, но имхо логика в том, что есть некий модуль, которому можно подсунуть другой модуль, как в Logger подсунуть backend. И Logger должен требовать, чтобы бэкэнд реализовывал behaviour. А у тебя вроде в другом порядке написано

Yusup
23.10.2016
19:29:11
как он будет требовать?
мы тут выше обсуждали что непонятно можно ли в спеках просить бехавиор

Can
23.10.2016
19:30:36
а протокол можно?
или протокол к данным ток

Yusup
23.10.2016
19:32:02
протокол к данным
я не знаю как в спеке это описывать
но наверное можно
вообще описывать в спеке бехавиор это как-то странно
бехавиор это ж модуль

Can
23.10.2016
19:33:26
вот пример из оф доки

Google

Can
23.10.2016
19:33:37
ты в бехавиоуре только спеки указываешь

Yusup
23.10.2016
19:35:34
ну да
просто я думал, вдруг еще кейз есьт
в общем такое

Dmitry
23.10.2016
19:41:02
Ты можешь описать функцию и в behaviour
Но это будет как обычный модуль
И вообще фишка эликсира в том, что тут нету никаких контейнеров в плане инкапсуляции
Твой defmodule задаёт только namespace для функции
И больше ничего
А ты думаешь как в ООП
Этот метод там кому то принадлежит
Тут такого нету
Твой код это по сути:
callback Adder.add(integer, integer) :: integer
fn Adder.add2(a) do
add(a, 2)
end
fn Adder.add3(a) do
add(a, 3)
end
А вот такое
defmodule Foo do
@bar [1,2,3]
end
Вообще нигде не хранится
А во время компиляции заменяет везде @bar на [1,2,3]
Как только это поймёшь - сразу не будет таких затупов с модулями
Ах, да. Ещё поэтому в одном модуле может быть и хендлеры, и колбэки и генсервер и супервизор сразу
Потому что на самом деле это не модуль, а namespace

Yusup
23.10.2016
20:04:55
затупы происходят из-за того что behaviour обычно сравнивают с интерфейсами. вот ты тоже выше спросил, можно ли в джаве интерфейс с реализацией объявить.

Google

Yusup
23.10.2016
20:06:55
плюс протоколы - там как раз таки поддерживается такая вещь как "абстрактные" функции и функции с реализацией
я не спорить хочу, а пытаюсь осознать концепцию языка и для чего была введена та или иная конструкция.

Dmitry
23.10.2016
20:07:36
Потому что смысл не меняется - это тот же интерфейс

Yusup
23.10.2016
20:07:43
в целом много прикольных вещей но иногда выскакивают
вот такое
элексир в приколах

Dmitry
23.10.2016
20:08:31
Просто он другой из-за эрланг
Потому что там нету классов
И объектов
А ты в коде как бы все накрутил, но такое бы даже в ООП не сработало, поэтому я и сказал про ява
Ты можешь задать метод в абстрактном классе - да
Но не в интерфейсе

Taras ?
23.10.2016
20:09:43
вот и хорошо что нет этой всякой мутности)

Dmitry
23.10.2016
20:10:10
Вот тут про ява
Ты можешь задать метод в абстрактном классе - да
Но не в интерфейсе

Yusup
23.10.2016
20:11:26
странно что ты считаешь, что я классами думаю
я прежде всего с хаскелем/скалой сравниваю
и опять же
в той же Java 8 есть интерфейсы с реализацией, в скале трейты а в хаскеле тайпклассы

Google

Dmitry
23.10.2016
20:12:09

Yusup
23.10.2016
20:12:16
лол
под "вообще" ты имеешь в виду "воообще 100% 100500%"?

Dmitry
23.10.2016
20:13:00
Она функциональна на уровне современных мультипарадигменных языков
Типа раста с его паттерн матчингом
Или C# с его линком
Я не знаю ява 8, но думаю что она уже очень близка к скале по "функциональности"

Yusup
23.10.2016
20:14:35
это все демагогия

Admin
ERROR: S client not available

Yusup
23.10.2016
20:14:52
я привел конкретный пример
какая разница ооп не ооп
мы говорим про интерфейсы
интерфейсы, трейты, тайпклассы
бехавиоры

Dmitry
23.10.2016
20:15:23
Behaviour - это интерфейс чистой воды

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

Google

Yusup
23.10.2016
20:16:35
и у нас дак тайпинг
протоколы - тут да

Dmitry
23.10.2016
20:16:45
По сути ты думаешь что передаёт в функцию объект определённого класса, поддерживающего интерфейс

Yusup
23.10.2016
20:16:46
это больше похоже
кстати протоколы больше похожи на тайпклассы в hs

Dmitry
23.10.2016
20:17:00
Поэтому я и считаю что ты думаешь в ООП

Yusup
23.10.2016
20:17:07
да не думаю я так
по крайней мере я
у меня в голове пример из статьи хосе

Dmitry
23.10.2016
20:17:32
Что такое интерфейс вообще?

Yusup
23.10.2016
20:17:46
где он через аттрибут модуля @twitter_api юзает модуль
ты с чего вообще взял что интерфейсы - это ооп?

Dmitry
23.10.2016
20:19:54
https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81
Вот определение "Интерфейс"
А вот определение Интерфейс ООП
https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)
И вот скажи, какой из этоих интерфейсов ты имеешь в виду?
Если ты говоришь, что это не интерфейс а спека - значит ты говоришь про интерфейс в ооп
Потоому что в глобальном смысле интерфейс это и есть спека

Yusup
23.10.2016
20:23:24
посмотри определение в ООП