UPD (из моего комментария): Конечно, не рекомендуется выбирать какое-то магическое число для обозначения отсутствия значения, если только вы не можете быть полностью уверены, что это магическое число не появится в результате некоторых арифметика (что в целом верно). Таким образом, лучший подход здесь - это использовать более широкий тип, чем int
(например, Number
), или передать некоторый флаг (Boolean
значение) для функции, а также int
, чтобы указать фактическое отсутствие значения. Выбор должен зависеть от того, хотите ли вы подчеркнуть важность того факта, что переданное значение является интегральным.
Если вы чувствуете себя комфортно с расширением типа аргумента, тогда вы должны использовать NaN
и сделать это:
function setMyValue (myVar : Number = NaN) : void
{
if ( isNaN(myVar) )
{
/* Generate a value for myVar */
}
else
{
/* Use the supplied value for myVar */
}
}
Это и технически более точно, и более стабильно. Это также позволит вам строго печатать во время компиляции и не вызовет странных ошибок, как в случае использования Object
.
Обратите внимание, что это не будет работать с int
, как предполагает один из ответов. int
имеет только числовые значения, а NaN
будет приведен к 0. Вам нужно будет использовать Number
тип.
Если вы беспокоитесь о производительности - не беспокойтесь. Использование Number
вместо int
или uint
- это нормально.
UPD: Если вы хотите явно пометить, что аргумент должен быть целым, просто используйте дополнительный флаг и точный тип - это будет намного понятнее.
function setMyValue (isIntValueSupplied : Boolean = false, intValue : int = 0) : void
{
if ( isIntValueSupplied )
{
/* Generate or use a default value of intValue */
}
else
{
/* Use the supplied value for intValue */
}
}
Другой вариант - определить свой собственный тип с дополнительным значением, например, MaybeInt
, который содержит целочисленное значение и флаг (был ли он фактически инициализирован или нет). Таким образом, вы бы четко указали, что значение должно быть целым или без значения . Однако такой подход может быть немного громоздким.