TL; DR: Именованные параметры являются необязательными в результате осознанного выбора дизайна. Кроме поддержки официального языка, есть ли способ обеспечить (и сообщить) требуемые именованные аргументы?
Я считаю чрезвычайно полезным использовать именованные параметры при определении класса. Взять, к примеру, Ability
в MMORPG:
class Ability {
final name;
final effectDuration;
final recast; // wait time until next use
// ...
}
effectDuration
и recast
содержат информацию одного и того же типа (т.е. длительность времени) и, вероятно, представлены одним и тем же типом данных. Легко перепутать, какой номер идет куда. Тем не менее, они оба являются информацией, необходимой для правильности объекта, поэтому они не могут отсутствовать во время создания экземпляра.
Я мог бы просто сломать программу с помощью try-catch, чтобы обеспечить выполнение требований этих параметров, но это не похоже на удовольствие для тех, кто использует класс и не имеет представления (если не читать документы и не понимать интуитивно, что делает класс) что они необходимы.
Есть ли способ обеспечить соблюдение требования определенных именованных параметров, одновременно информируя вызывающего абонента об этом требовании и/или помогая ему правильно его использовать?