Заметил, что в "родном" режиме (без всяких опций) необязательный параметр не инициализируется значением по умолчанию, это так, но вот если задан тип данных, то он сохраняется. Значит, задание типа данных для необязательных аргументов имеет смысл.
Sub
Foo(Optional bStatus As Boolean, Optional nIndex%, Optional nValue&)
If IsMissing(bStatus) Then bStatus = 2
Print TypeName(bStatus); "="; bStatus '<< displays: Boolean=True, not Integer=2
If IsMissing(nIndex) Then nIndex = True
Print TypeName(nIndex); "="; nIndex '<< displays: Integer=-1, not Boolean=True
If IsMissing(nValue) Then nValue = "string"
Print TypeName(nValue); "="; nValue '<< displays: Long=0, not String=string
End Sub
В VBA опциональные параметры, проверяемые функцией IsMissing(), должны иметь тип Variant. В StarBasic - любой.