length == 0 vs length <= 0
От: e.thrash  
Дата: 02.12.16 06:21
Оценка: :)
Часто в методе надо проверять есть ли что-то в массиве.
Есть ли смысл писать length <= 0 когда массив пустой?
Re: length == 0 vs length <= 0
От: TK Лес кывт.рф
Дата: 02.12.16 07:14
Оценка:
Здравствуйте, e.thrash, Вы писали:

ET>Часто в методе надо проверять есть ли что-то в массиве.

ET>Есть ли смысл писать length <= 0 когда массив пустой?

Зависит от языка. Может оно только прикидывается массивом, а передали какой-то { length: -1 }
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: length == 0 vs length <= 0
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 02.12.16 07:40
Оценка: 2 (1)
Здравствуйте, e.thrash, Вы писали:

ET>Часто в методе надо проверять есть ли что-то в массиве.

ET>Есть ли смысл писать length <= 0 когда массив пустой?

Предположим, что length это честный метод получения длины.
Если он возвращает беззнаковое, то любой достаточно современный компилятор будет считать, что это то же самое, что != 0, и свободно может заменить одну проверку на другую. Чаще всего так и делается, потому что в CISC (и примкнувших к нему ARM и Sparc) команда test дешевле cmp с нулевой константой. В RISC (чистой линии, без флагов условий), аналогично, slt и sltu с пустым регистром одинаковы.

Если length знаковое (как в Java или Fortran, где беззнаковых целых нет), непонятно, может ли быть возврат отрицательного значения и что с этим делать. В принципе, это означает, что среда исполнения разрушена и лучше бы вылететь сразу (полностью, или на уровень восстановления после тяжёлого сбоя). Соответственно, надо ставить такую проверку, чтобы её последствия при <0 были минимально разрушительны для данных, но максимально — для контекста исполнения.

Если язык типа Javascript или Python, где переопределить можно всё, то — если это переопределение тут недопустимо, то см. вариант 2, а если допустимо, то надо смотреть, что такая длина значит. Может, где-то это значит "не смог получить длину, при том, что X это объект-прокси", а, может, это сигнал читать массив в обратном порядке
The God is real, unless declared integer.
Re: is_empty()
От: VTT http://vtt.to
Дата: 02.12.16 07:44
Оценка: +1
is_empty()
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Re: length == 0 vs length <= 0
От: vsb Казахстан  
Дата: 02.12.16 08:21
Оценка: +3
Здравствуйте, e.thrash, Вы писали:

ET>Часто в методе надо проверять есть ли что-то в массиве.

ET>Есть ли смысл писать length <= 0 когда массив пустой?

Смысла нет. Если пишут length == 0, читателю понятно, что проверяют на пустоту. А если length <= 0, сразу будут мысли, это что за такое, это когда length может быть меньше нуля? А лучше действительно isEmpty если есть такой метод.
Re: length == 0 vs length <= 0
От: flаt  
Дата: 02.12.16 10:09
Оценка:
Здравствуйте, e.thrash, Вы писали:

У меня как-то возникал схожий вопрос о проверке на верхнюю границу: for(size_t i = 0; i != count; i++) или for(size_t i = 0; i < count; i++)?
Для итераторов (С++) используют только (1), а для целочисленных что предпочтительнее?
Re[2]: length == 0 vs length <= 0
От: Ops Россия  
Дата: 04.12.16 14:43
Оценка: +1
Здравствуйте, flаt, Вы писали:

F>У меня как-то возникал схожий вопрос о проверке на верхнюю границу: for(size_t i = 0; i != count; i++) или for(size_t i = 0; i < count; i++)?

F>Для итераторов (С++) используют только (1), а для целочисленных что предпочтительнее?

Что хочешь. Мне кажется, что < лучше отражает смысл.
ЗЫ. А еще инкремент может отличаться от 1
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Отредактировано 04.12.2016 20:13 ути-пути . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.