Предположим у нас некий ЯП, где унас имеется функция ASSERT(cond : Boolean), если cond = False, то она завершает программу выводя некое диагностическое сообщение (допустим номер строки исходника где оно приключилось.

Внимание вопрос -- когда следует использовать ASSERT а когда просто код возврата для диагностики ошибок?

Вот предположим функция:
## Код:
```
GetAt(c : Container, i : Index) : Element
```

возвращает элемент из некого контейнера. Вопрос -- ставить ли унутре нечто вроде:
ASSERT(InRange(c,i)), или же в случае если InRange вернет False, просто вернуть код ошибки, что мол INVALID_ARGUMENT ?