В моем понимании условных выражений во всем программировании, будь то оператор if, цикл while и т. Д., Конкретное утверждение проверяется как истинное или ложное.
Вот как я обычно использую условные операторы, но я часто сталкиваюсь с чужим кодом, содержащим странные условные операторы, в которых, кажется, нет конкретной оценки, а просто обычная переменная. Например:
someType aVariable = someValue;
If (aVariable)
{
//do this
}
Что будет оцениваться как истинное или ложное в этом случае? Очевидно, что если aVariable представляет логическое значение, это было бы просто, но обычно явное значение вообще не является логическим и часто содержит NULL. Еще раз, я вижу это почти на каждом языке, на который я смотрел, поэтому я предполагаю, что это не зависит от языка.
РЕДАКТИРОВАТЬ 1: поскольку мне сообщили, что это может зависеть от языка, я добавлю, что я очень часто вижу это в C#, и рассматриваемая переменная может быть либо ссылочным типом, либо тип значения.
EDIT 2: все очень хорошие ответы, которые я резюмировал ниже:
(a) зависит от языка, может ли конкретная переменная, отличная от логической, быть оценена как логическая (b) во многих случаях, если язык поддерживает такую оценку, любая ненулевая, непустая или ненулевая value обычно оценивается как TRUE (целые числа C/C++) (c) для языков, которые не поддерживают такое неявное вычисление, в определение класса необходимо добавить приведение к bool, например (C#)
ifбудет оцениваться какtrue, если:aVariableсодержит логическое значение true, строку любой длины, массив с любыми непустыми элементами, объект с любыми непустыми элементами или число, отличное от нуля. ЕслиaVariableсодержитfalse, строку без длины, число 0, пустой массив, пустой объект илиnull, оператор if будет оцениваться какfalse. Это также верно в javascript. - person random_user_name   schedule 18.06.2014aVariableне являетсяboolили не имеет неявного преобразования вbool. - person Lee   schedule 18.06.2014boolв своем базовом классеObject. Я добавил ответ. - person Lee   schedule 18.06.2014