should throw if out of range by default, optional orElse in get