Ключевое слово для статичных классов



Ситуация такая:
Есть 3 предложенных варианта как писать статичные классы:

  1. Вернуть sealed abstract class.
  • За: Так было раньше, и кроме того что так другие не делают - всё в порядке.
  • Против: @ibond считает что это криво.
  1. Сделать class class.
  • За: Просто провернуть.
  • Против: Выглядит криво + наверняка будут очень странные ошибки если написать class class class.
  1. Сделать static class.
  • За: Это самая человеческая запись, и именно так реализовано в современных языках.
  • Против: Надо вводить новое ключевое слово (static).





Опрос:

  • sealed abstract class
  • class class
  • static class

0 голосов



Если есть другие варианты - предлагайте, добавлю.
Если видите другие За и Против - тоже.

static для классов и static как синоним class для методов

3 лайка

Это отдельный вопрос, делать ли его синонимом для статичных полей, методов, свойств и т.п.

Или, возможно сделать, как с for. Там если переменную не объявлять - даёт предупреждение, “так не надо”. И тут давать предупреждение когда статичное поле или т.п. объявлено с class или static.

Но это всё же отдельный вопрос. И его не обязательно решать перед тем как разрешить снова делать статичные классы.

Ну так что? 86% за static, давайте, всё же, наконец добавите назад статичные классы…

1 лайк

а какой именно синоним? static procedure test; или procedure test; static?

2 лайка

Первый вариант выглядит красивее.

Не будет. Это просто грамматика.

Правда? А так:

type
  t1=class
    class procedure p1 := exit;
  end;

begin end.
type
  t1=class class
    procedure p1 := exit;
  end;

begin end.

Компилятору ведь нет дела до доп. пробелов и переносов строки. Поэтому эти 2 записи будут расцениваться одинаково, хотя значат разное.

И это только первое что приходит в голову, конфликтов будет больше наверняка.

1 лайк

Должен согласиться с @ibond. Ошибки не будет. Скорее всего в статических классах обяжут ко всем членам ставить class или static, как в C#. Там если класс объявлен как статический, то у всех членов поголовно должен стоять static. В Вашем случае, будет class class class. Но я ни в коем случае не говорю, что объявление class class для статики - хорошо. Большинство за static class и я в их числе.

static это тоже плохо. мешанина получится. есть еще один вариант: вообще не делать статических классов. это все украшательства.

либо сделать что-то вроде type Math = namespace class end;

Почему мешанина то? Хотя namespace class тоже интересная идея, но чем оно поможет?

Мешанина, потому что статические члены класса описываются с помощью class. делать какие-то синонимы ради static class плохая идея. а namespace class end избавит от конфликтов в class class и дублирующих конструкций static и class.

1 лайк

Я предлагаю static class и static method - а class method оставить лишь для совместимости и нигде не писать - скоро про него забудут. А код Delphi будет компилировтаься

4 лайка

А зачем, кстати, вы так держитесь за совместимость с Delphi? Если большая часть программ всё равно требует перевода, и с Delphi на паскаль мало кто желает переходить.

А почему тогда нельзя было сделать неймспейсы в таком виде? Они ведь по сути для того же предназначены?

Type My=namespace
End;
1 лайк

Тогда namespace станет классом. Со всеми вытекающими.

Как это? Приведу более обширный пример:

Type My = namespace

  Type A = Record
  End;

  Type B = Class
  End;

End;

Это не совсем так как .Net работает…

Type My = namespace

  var b:byte

  Type A = Class
  End;

End;

Вы когда нибудь видели в .Net переменные, которые идут сразу за пространством имён? Я вот нет. Такого типа переменные встречаются только в виде статичных полей классов.

В смысле?

Да я ж не про то. Я про настоящие неймспейсы. Не статические классы. А про переменную в неймспейсе ещё вопрос. Если CLR поддерживает такую конструкцию, то её можно реализовать.