LL
Все пишут языки, упрощают свою жизнь, увеличивая количество вещей, которые нужно выучить
Size: a a a
LL
AB
LL
phoenix
. Вот какие макросы там сложные? Ну вот какой потратил на понимание больше 10 секунд? Роутер?Ecto.Query
. Да, там есть свои тонкости, но это нормальный подход со встроенным экранированием, унификацией mysql
и postgresql
запросов, не макросы а чистые данныеEcto.Schema
вообще не требует никакой умственной нагрузки. Писать вместоschema "mytable" do
field :name, :string, size: 10
field :password, :string
end
@schema [Не сильно лучше и вообще никак не упрощает понимание
{:name, :string, [size: 10]},
{:password, :string, []}
]
Ecto.create_schema("mytable", @schema)
LL
Elixir
вспоминают Ecto.Query
или какие-нибудь вообще странные и непонятные перегруженные вещи, но совсем не вспоминают об alias
, import
или use
, без которых они до сих пор копипастят 4 коллбека в генсервере вместо лаконичного use GenServer
AB
AB
E.S.__using__
. зачем в коде глобальные переменные?..LL
E.S.__using__
. зачем в коде глобальные переменные?..__before_compile__
, наверное, чтобы постфактум нагенерить структуру и функцийAB
__before_compile__
, наверное, чтобы постфактум нагенерить структуру и функцийLL
__using__
Во втором случае ты смотришь в функцию, которая генерит схемуLL
Ecto.Schema.schema
schema
делаетAB
LL
defoverridable handle_cast: 2
и потом заимплементить свой и внутри вызвать super()
AB
__using__
Во втором случае ты смотришь в функцию, которая генерит схемуAB
AB
defoverridable handle_cast: 2
и потом заимплементить свой и внутри вызвать super()
DS
AB
LL
AB
LL