metaclass: (дзедline)
[personal profile] metaclass
http://avva.livejournal.com/2581700.html
Все, что было полезного в ООП, унесли в другие парадигмы (если оно раньше еще оттуда не было заимствовано), остальное решили закопать :)

Date: 2013-03-13 11:10 am (UTC)
From: [identity profile] xeno-by.livejournal.com
Почитайте ссылку все-таки. Юзер из примера не предназначен для инстанциации извне по своему имени (поэтому я и написал, что тип != класс), а служит для описания контракта модуля.
(deleted comment)

Date: 2013-03-13 11:14 am (UTC)
From: [identity profile] xeno-by.livejournal.com
Получается, мы пришли к консенсусу, что есть разные виды вложенности типов, некоторые из которых не приводят к аду?
(deleted comment)

Date: 2013-03-13 12:35 pm (UTC)
From: [identity profile] xeno-by.livejournal.com
Контракт в том примере публично виден.

Но "извне" это растяжимое понятие. В Скале есть способ собирать большие модули из небольших кусочков. При этом каждый из кусочков, несмотря на то, что определен отдельно от других (возможно, даже в другом пакете), логически находится в одной песочнице вместе со своими зависимостями (называется cake pattern). Как следствие, для значительной части кода ада вложенности не существует. Т.е. будет не class Foo { Bar.baz }, а class Foo { self: Bar => baz }.

Вы спросите, чем же это отличается от обычных неймспейсов и не-вложенных классов. Тем, что модули в Скале в отличие от пакетов в Джаве являются первоклассными сущностями, т.е. их можно передавать в методы, у них есть контракты, ими можно параметризировать код.
(deleted comment)

Date: 2013-03-13 01:02 pm (UTC)
From: [identity profile] xeno-by.livejournal.com
Считается. Потому, что self-type или extends пишутся один раз, а квалификаторы не пишутся много раз.
(deleted comment)

Date: 2013-03-13 01:12 pm (UTC)
From: [identity profile] xeno-by.livejournal.com
Более полный пример:
object Module extends Part1 with Part2 with Part3
trait Part1 { self: Module => ... }
trait Part2 { self: Module => ... }
trait Part3 { self: Module => object NestedModule { ... } }


Все определения из PartX можно использовать в любом PartY без квалификатора. Чтобы использовать определения из NestedModule, нужно или юзать квалификатор, или написать import NestedModule._.
(deleted comment)

Date: 2013-03-13 01:21 pm (UTC)
From: [identity profile] xeno-by.livejournal.com
Как скажете. Наверное, я не очень хорошо объяснил, но у меня, к сожалению, на более развернутый рассказ нет времени.

Одно хочу сказать - лично я после перехода с сишарпа на скалу стал писать гораздо меньше импортов.
(deleted comment)

Date: 2013-03-13 01:48 pm (UTC)
From: [identity profile] xeno-by.livejournal.com
Согласен. Я бы рад помочь, на это как раз и нет времени.

Мне кажется, "жутко" тут получается потому, что незнакомо.
Edited Date: 2013-03-13 01:48 pm (UTC)
(deleted comment)

Date: 2013-03-13 01:54 pm (UTC)
From: [identity profile] xeno-by.livejournal.com
А где в том примере декларативщина? Или вы про Скалу вообще?
(deleted comment)

Date: 2013-03-13 02:01 pm (UTC)
From: [identity profile] xeno-by.livejournal.com
Скала любая.

Date: 2013-03-13 01:55 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Слушай, а вот оные объекты, собранные из частей - это ж получается типа синглетонов - т.е. анонимный класс и один его экземпляр?

Date: 2013-03-13 02:03 pm (UTC)
From: [identity profile] xeno-by.livejournal.com
Ну да, они так и реализованы. Но мне лично проще думать о них как о first-class неймспейсах - какая-то именованная штука, внутри которой есть другие штуки.

Date: 2013-03-13 02:07 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Но формально такой объект можно использовать как хранилище какого-нибудь состояния? Например, в качестве кэша над коннектом к БД.

Date: 2013-03-13 02:10 pm (UTC)
From: [identity profile] xeno-by.livejournal.com
Да. В модулях могут быть не только определения методов и вложенных классов и модулей, но и стейт.

Date: 2013-03-14 01:52 am (UTC)
From: [identity profile] jdevelop.livejournal.com
ребе, выложите наконец свой код на гитхаб, и будем смотреть

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 22nd, 2025 04:42 am
Powered by Dreamwidth Studios