Модули vs namespace's

Не должно, но имеет, к сожалению. Выслушаем @ibond, он уже здесь.

Можно. Явные пространства имен можно разносить по файлам, ради чего это и затевалось, чтобы хоть как-то смягчить ограничения паскалевской модели с тысячью классов в одном файле…

3 лайка

Для библиотек это особенно актуально. Сейчас надо писать все в одном файле с library, чтобы они попали в dll…

3 лайка

Можете привести пример кода, который бы объединял два класса (в двух различных файлах) одного пространства имён?

1 лайк

Поддерживаю. Если можно, не убирайте их.

10 сообщений перенесены в тему Болталка PascalABC.NET

Да, согласен. Я тоже сторонник явных повторно открываемых namespaces. Просто написали, что они имеют ту же структуру, что и модуль - с initialization, finalization, а это как-то не очень.

Я бы делал namespaces как в C#. В любом месте файла можно объявить несколько namespaces

3 лайка

Да, те, кто поддерживал эту идею, предлагали сделать именно так.

С теоретической точки зрения как Вам такой вариант:

namespace A;
begin
  type
    TClass1 = class
    end;
end;

namespace A.B;
begin
  type
    TClass2 = class(TClass1)
    end;
end;

begin
  var (x, y) := (new A.TClass1(), new A.B.TClass2());
end.

?

Это всё в одном файле? В принципе, идея хорошая, но я бы сделал так:

Namespace a // без Begin!
  Namespace b // Явно поместить его в a
  End;
End;

Да, в одном.

В C# не принято вкладывать непосредственно одно пространство имён в другое, зависимость одного пространства имён от другого принято подчеркивать в его именовании (через точку). Вполне разумное решение - что будет, если пространства имён бесконечно вкладывать (непосредственно) друг в друга? Длинные отступы - вот что. А кому это надо?

На ду! Их можно вкладывать, а через точку они пишутся, если разнесены по файлам и нет возможности сделать вложение.

Как Вы это себе представляете?

Очень просто:

namespace A;
  namespace B;
    namespace C;
    end;
  end;
end;

. Разве удобно (в плане отступов)? Я бы делал так:

namespace A;
end;

namespace A.B;
end;

namespace A.B.C;
end;

. На мой взгляд, лучше - вложенность минимизирована. Вложенность в плане отступов.

И что Вас смущает?

Кому как. Мне бы понравилось. В C# так делают. Ваш вариант - для случая, если неймспейсы в разных файлах.

Но кто-то разве запретил его использовать и в одном?

Тут то же самое, что и в классах. Раньше в классе нельзя было описывать тела методов. “отступов” не было, а геморрой был.

Лично я предпочитаю описывать вне классов тела методов. Так как при прочтении класса сразу видно что в нём есть. А реализацию можно посмотреть ниже. :slight_smile: Но тут вопрос вкуса.

Но, все же, если говорить о том, как все же в кладывать одно пространство имён в другое - я бы выбрал свой вариант, так как это в некотором смысле стандартизирует код: независимо от того в разных файлах или одном описываются пространства имён их стиль вкладывания одного в другое будет единым.

Да, но вот копаться среди методов снизу - не лучшая затея. Особенно, если классов несколько и присутствуют методы класса Program. Именно поэтому ввели сокращённый синтаксис модулей, а в C# о таком делении и не слышали. Я считаю, надо сделать как с классами. Можно и так и так.