@proelixir

Страница 156 из 1045
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
посмотри определение в ООП

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