IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

编程语言中的 true 和 false

qingbo.blog 2010-06-20 23:46:55 累计浏览 2,491 次
本机暂存

我注意到 web.py 0.33 版本的一个问题,使用它的 Textbox 时,如果初始化给它一个值是 \"0\":

web.form.Textbox(\'foo\', value=0)

那么它 render 出来的代码是:

没有 value 属性,但显然这不是我想要的。看它的源文件 form.py 里的 render 函数的相关代码,是这样判断要不要 value 属性的:

if self.value:
    attrs[\'value\'] = self.value

web.py 0.34 修复了这个问题,改成了这样(完整代码):

if self.value is not None:
    attrs[\'value\'] = self.value

各种编程语言对于其它类型变量向布尔值的转换都有自己的一套规则。

C 语言中除 0 之外的所有值都相当于 true. 判断相等的语句如 if (my_var == 5) ... 假如不小心少写了一个等号,那就跟 if (5) 等价了,条件永远为真。有些 C 程序员喜欢把判断相等的语句写成 if (5 == my_var) ... 这样来避免粗心导致的错误,我个人不喜欢这种风格。

Java 强制所有的条件都使用严格的布尔类型,不用考虑整数 0 会被当作 true 还是 false. 因为写出语句 if (0) {...} 的话,编译阶段就会报错。

Ruby 中 nil 会被当作 false,整数 0 被当作 true. 空字符串如果作为条件,ruby 解释器会给出一个警告,但是它会被当作 true.

Python 中很复杂,除以下情况被认为是 false 外,均被认为是 true ( 摘自python 文档):

  • None
  • False
  • zero of any numeric type, for example, 0, 0L, 0.0, 0j.
  • any empty sequence, for example, \'\', (), [].
  • any empty mapping, for example, {}.
  • instances of user-defined classes, if the class defines a __nonzero__() or __len__() method, when that method returns the integer zero or bool value False.

是不是很乱?0 和空字符串在 Ruby 中被当作 true 处理,但是在 Python 中它们都是 False!

还是那句话,某些闲得太无聊的大学老师喜欢拿这种题来考学生。但是我认为,不要为了记忆而记忆。假如你经常用某种语言,那么它的 true/false 你自然很了解。假如你不怎么用或者因为在多种语言中穿梭而搞乱,那就在迷惑的时候 Google 一下,不会花多少时间的!

同分类推荐文章

  1. 科技爱好者周刊(第 401 期):如何赚到10亿美元 (2026-06-26 08:05:38)
  2. 如何做决策 - 从 Go 的一个 issue 说起 (2026-06-26 08:00:00)
  3. Seven Player:Windows上播放115网盘视频的增强工具 (2026-06-09 00:06:47)

查看更多 开发者 文章 →

建议继续学习

  1. 为什么会有这么的编程语言 (累计阅读 3,451)
  2. Java注解全面解析 (累计阅读 2,858)
  3. 编程珠玑番外篇-G. 程序员心底的小声音 (累计阅读 2,278)
  4. 我对“语言之争”的看法:别随便拉我入场 (累计阅读 2,015)
  5. 趣题:这些词有什么共同点? (累计阅读 1,631)