Здравствуйте, e.thrash, Вы писали:
ET>Часто в методе надо проверять есть ли что-то в массиве. ET>Есть ли смысл писать length <= 0 когда массив пустой?
Предположим, что length это честный метод получения длины.
Если он возвращает беззнаковое, то любой достаточно современный компилятор будет считать, что это то же самое, что != 0, и свободно может заменить одну проверку на другую. Чаще всего так и делается, потому что в CISC (и примкнувших к нему ARM и Sparc) команда test дешевле cmp с нулевой константой. В RISC (чистой линии, без флагов условий), аналогично, slt и sltu с пустым регистром одинаковы.
Если length знаковое (как в Java или Fortran, где беззнаковых целых нет), непонятно, может ли быть возврат отрицательного значения и что с этим делать. В принципе, это означает, что среда исполнения разрушена и лучше бы вылететь сразу (полностью, или на уровень восстановления после тяжёлого сбоя). Соответственно, надо ставить такую проверку, чтобы её последствия при <0 были минимально разрушительны для данных, но максимально — для контекста исполнения.
Если язык типа Javascript или Python, где переопределить можно всё, то — если это переопределение тут недопустимо, то см. вариант 2, а если допустимо, то надо смотреть, что такая длина значит. Может, где-то это значит "не смог получить длину, при том, что X это объект-прокси", а, может, это сигнал читать массив в обратном порядке
Здравствуйте, e.thrash, Вы писали:
ET>Часто в методе надо проверять есть ли что-то в массиве. ET>Есть ли смысл писать length <= 0 когда массив пустой?
Смысла нет. Если пишут length == 0, читателю понятно, что проверяют на пустоту. А если length <= 0, сразу будут мысли, это что за такое, это когда length может быть меньше нуля? А лучше действительно isEmpty если есть такой метод.
У меня как-то возникал схожий вопрос о проверке на верхнюю границу: for(size_t i = 0; i != count; i++) или for(size_t i = 0; i < count; i++)?
Для итераторов (С++) используют только (1), а для целочисленных что предпочтительнее?
Здравствуйте, flаt, Вы писали:
F>У меня как-то возникал схожий вопрос о проверке на верхнюю границу: for(size_t i = 0; i != count; i++) или for(size_t i = 0; i < count; i++)? F>Для итераторов (С++) используют только (1), а для целочисленных что предпочтительнее?
Что хочешь. Мне кажется, что < лучше отражает смысл.
ЗЫ. А еще инкремент может отличаться от 1
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.