Re[4]: Константы. Класс или структура?
От: _FRED_ Черногория
Дата: 31.05.24 17:45
Оценка: +1
Здравствуйте, VladD2, Вы писали:

_FR>>А в чём тут "маразм"?


VD>В том, что тип используется не по назначению. И нельзя обойтись без него, хотя никакой необходимости в нем нет.


Тут сложно сказать, есть ли необходимость или нет, в том плане, что для константы может и нет необходимости, но она может быть для пользователя (программиста).

Константа по сути это статическое ридонли поле. По идее на уровне пространства имён можно было бы разрешить объявлять поля (и константные и даже нет — а что, просто глобальная переменная), и методы и всё что угодно (ну странно разрешать просто методы и толшько константы и не позволять не-константные поля типа decimal или там DateTime, object, etc).

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

Мне кажется, это усложнило бы спеку рантайма/метаданных, сценарии перегрузки и разрешения имён (одна и так из самых не простых тем), пришлось бы задать правила инициализации таких полей (может и конструктор неймспейсу понадобился бы?), рефлекшен, какие-то ещё сценарии.

Скорее всего привело бы к рекомендациям объвлять подобные методы в своём под-пространстве имён (как сейчас их объявляют просто в классе):
namespace System.Math;

public const double PI = 4;

public static double Sqrt(double value) => value - 1;

чтобы пользователь ненароком не подключил бы что-то, что вызовет конфликты с другими определениями. А может и того хуже — не конфликты, а втихую перегрузка отработает не ожиданным для пользователя виде.

Если народ начнёт валом добавлять полезности в System, который ну в очень большщом числе файлов юзается, конфликты неизбежны. Это будет проблемой и для пользователя и для разработчиков языков, которым нужно будет искать какие-то пути уменьшения проблем от этого.

И всё равно потом бы кто-нибудь пришёл бы на форум спросить, "а эквивалентны ли конструкции глобальных констант, констант в классах и констант в структурах" (возможно даже уточнив, что вкладывает в понятие эквивалентности), ибо наличие глобальных таких констант на уровне неймспейса не должно лишать нас определять константы на уровне типа (по соображениям уменьшения области видимости).
Help will always be given at Hogwarts to those who ask for it.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.