2013-04-13 4 views
1

В Ruby пустая строка "" является правдивой относительно условных обозначений. И я вижу, что многие люди борются с этим фактом. Ruby on Rails blank? - одна из попыток решить эту проблему. С другой стороны, это не сразу становится очевидным, когда такая спецификация становится удобной. Существует ли какой-либо прецедент, когда этот факт становится удобным, или будет теоретическая проблема, если бы это было иначе?Что хорошего, если пустая строка правдивая?

+1

Есть ли какой-либо прецедент, когда обработка '' '' 'как фальшивки становится удобной? Я считаю это гораздо более удивительным. – meagar

+2

Любое место, где люди рассматривали бы использование 'blank?', Было бы прецедентом. Много. – sawa

+0

Я думаю, что этот вопрос слишком широк, чтобы получить разумный ответ. Вы спрашиваете, почему было принято решение о создании языка. Я могу предоставить вам действительный прецедент, где это станет удобным, а также тем, где это не так. – Shoe

ответ

7

Я думаю, что придумал ответ. Наверное, это теоретическая причина и эффективность. Рисование линии между разными экземплярами одного класса теоретически сложнее, чем рисование линии между классами, и для этого потребуется больше вычислений. Если "" были falesy, тогда внутренняя Ruby должна была бы проверять длину строки каждый раз, когда в состоянии есть строка. Вместо этого, если истинность можно судить только классом, что случается так, то это будет намного более эффективно. Возможно, это также причина, по которой false и true не подпадают под один класс Boolean, но принадлежат к независимым классам соответственно.

Другая возможность состоит в том, что есть только один экземпляры false и nil, поэтому имеет дела с этим внутренне в Ruby, потребуется только проверить указатель/идентификатор объекта, а строки изменчивы, и требуют больше сложности, чтобы проверить пустоту ,

4

Уменьшение количества вещей, которые считаются falsey - это хорошо. Это упрощает язык, упрощает логические правила, упрощает запоминание и применение и тем самым уменьшает количество ошибок.

Просто смотреть на беспорядок PHP в: false, 0, 0.0, '0', '', null и array() все falsey, который продолжает удивлять многих людей каждый день.

Если вы хотите протестировать пустую строку, проверьте пустую строку. Вы должны знать, содержит ли ваша переменная строку или логическое значение и может быть соответствующим образом протестирована.

+0

Ваша точка зрения, что чем меньше, тем лучше, имеет смысл, но все еще звучит немного слабо. Можете ли вы рассказать о том, что делает его удивительным в PHP? – sawa

+2

Ну, особенно ' '0'' (0 как строка) является довольно спорным. Это не * пустая строка, но она считается «ложной». Это кажется довольно произвольным. Тогда почему бы не «ложь» (строка «false»)? Потому что это * непустая строка *. Таким образом, правило - это * непустые строки, кроме '' 0'', являются ложными *. Это намного сложнее объяснить и сохранить для newbs, чем 'false', а' nil' - 'false', period. В PHP вы должны действительно думать о таких вещах, как * может ли эта функция, возможно, возвращать пустой массив и действительно ли я хочу, чтобы это означало «false»? * Или * может вводиться здесь «0», и если это будет «false» '? * – deceze

+0

Но дело здесь не в' 'false'' или' '0''. Речь идет о '' ''. – sawa

2

Я думаю, что Ruby был прост, и значения FEWER, которые являются ложными, упрощают прояснение программ: «Только два объекта имеют логическое значение false, это сам объект false и объект nil».

Компромисс в том, что вам, возможно, придется написать .blank?. С другой стороны, сколько полей имеет минимальную длину? Не много. Если вы все равно проверяете .size > 1, то «пустая строка, являющаяся правдивой», не полезна.

Каждый язык выбирает «парадигму». Например, в SQL логические операции фактически имеют 3 значения (true, false, null). В Perl и C значение 0 неверно. Heck, на некоторых языках строка «false» неверна.

+0

Ваш ответ слишком абстрактный. Если меньше, тем лучше, то почему существует не только один, но два фальшивых элемента? Почему два нормально, а не три? – sawa

Смежные вопросы