在编程教学、伪代码演示或示例代码中,除了经典的 foo、bar,还有很多常用、含义相对中性的变量名可用。
一、经典延续型(Unix / 黑客文化)
这些和 foo / bar 同属一个“家族”,常见于手册和教材:
| 变量名 | 常见用途 |
|---|---|
| baz | 第三个示例变量(foo → bar → baz) |
| qux | 第四个示例变量 |
| quux | 再往后继续编号 |
| corge | 同上 |
| grault | 同上 |
| garply | 同上 |
示例:
|
|
二、占位 / 无意义型(强调“这不重要”)
适合用来说明“这里只是个占位符”:
| 变量名 | 含义/来源 |
|---|---|
| spam | Monty Python 梗,《Meaning of Life》里的 spam |
| eggs | 同上 |
| ham | 同上 |
| blah | 口语“blah blah” |
| stuff | “东西” |
| thing / things | “某物” |
| dummy | “哑变量”,只占位不用 |
| temp / tmp | 临时变量 |
| placeholder | 直白说明是占位 |
| example / sample | 示例数据 |
示例:
|
|
三、数学 / 算法风格
适合讲算法、数据结构、循环:
| 变量名 | 典型含义 |
|---|---|
| x, y, z | 坐标、未知数 |
| i, j, k | 循环索引 |
| n, m | 规模、数量 |
| a, b, c | 系数、参数 |
| idx | index 缩写 |
| count | 计数 |
| sum | 求和 |
| avg | 平均值 |
| min, max | 最小/最大值 |
示例:
|
|
四、面向对象 / 业务无关型
适合讲类、方法、接口设计:
| 变量名 | 说明 |
|---|---|
| obj | 某个对象 |
| item | 集合中的元素 |
| value | 值 |
| key | 字典键 |
| result | 结果 |
| data | 数据 |
| input / output | 输入 / 输出 |
| user | 用户 |
| id | 标识 |
| name | 名称 |
| status | 状态 |
示例:
|
|
五、趣味 / 故事型(活跃课堂气氛)
适合做 demo、活跃气氛:
| 变量名 | 场景 |
|---|---|
| alice, bob | 密码学、通信双方 |
| charlie | 第三方 |
| eve | 窃听者(eavesdropper) |
| frodo, sam | 《魔戒》 |
| luke, leia | 《星球大战》 |
| apple, banana | 水果示例 |
| cat, dog | 动物示例 |
| red, blue | 颜色 |
| left, right | 左右 |
示例(讲排序或交换):
|
|
六、按教学场景的选用建议
| 教学目的 | 推荐命名 |
|---|---|
| 讲语法、作用域 | foo, bar, baz |
| 讲算法、循环 | i, j, n, sum |
| 讲面向对象 | obj, user, item |
| 讲占位/无意义 | spam, dummy, temp |
| 活跃气氛 | alice, bob, apple, banana |
这是一个非常棒的问题,因为这些名字并非官方标准,而是计算机文化长期演化的产物。了解它们的来源,不仅能帮你更好地使用它们,还能在教学中增加很多有趣的“背景故事”。
七、命名来源
7.1、核心来源:FUBAR 与 MIT 黑客文化(Foo / Bar / Baz)
这是最重要的一条线,也是 foo 和 bar 成为“默认示例变量”的原因。
1. 军事俚语:FUBAR
- 全称:Fouled Up Beyond All Recognition(或更粗俗的版本:Fcked Up Beyond All Recognition)。
- 含义:形容事情彻底搞砸了,乱七八糟。
- 演变:在二战期间及之后,士兵和工程师常用这个词。后来在 1960-70 年代,MIT 人工智能实验室(MIT AI Lab) 的黑客们开始将其缩短、变形,创造了 FOO。
- BAR:则是对 FOO 的一种对仗补充,没有特别深的含义,主要是为了押韵和形成“foo bar”这个固定搭配。
2. 早期文档与 RFC
- 1970 年代的 TMRC(Tech Model Railroad Club) 手册中大量使用了 Foo。
- 1980 年代的 RFC(互联网请求评议草案) 文档中,经常用
foo.example.com作为域名示例,进一步巩固了其地位。
3. 序列的形成
- 为了演示多个变量,人们自然延伸出了序列:
- foo (1st)
- bar (2nd)
- baz (3rd)
- qux (4th)
- ...(后面的 corge, grault 等来自 1980 年代的游戏 Adventure,被《The Jargon File》收录后流行起来)。
7.2、Python 社区:Monty Python(Spam / Eggs / Ham)
如果你教的是 Python,这绝对是最佳的背景知识。
- 来源:英国喜剧团体 Monty Python(巨蟒剧团)。
- 典故:Python 之父 Guido van Rossum 是该剧团的超级粉丝。他在发明 Python 时,特意将剧中的梗融入语言设计(比如“spam”指代无用的邮件,“eggs”作为占位符)。
- 著名桥段:在《Monty Python's Flying Circus》的一集里,一家餐厅的菜单上所有的菜都包含 Spam(午餐肉罐头),服务员不断重复这个词,直到淹没所有对话。
- 教学用法:在 Python 教程中,
spam,eggs,ham经常被用作函数参数或返回值,暗示“这只是个占位符,内容不重要”。
7.3、算法与数学传统(i / j / k / n)
这部分最严肃,源自数学界。
- i, j, k:源自数学物理中的 虚数单位($i^2 = -1$)和张量分析中的下标约定。数学家习惯用 $i$ 表示第一个索引,$j$ 第二个,$k$ 第三个。
- n, m:源自拉丁语 numerus(数字),用来表示数量或维度。
- x, y, z:笛卡尔坐标系的传统。
- 教学意义:当学生看到
i,他们潜意识里会知道“这是用来循环的”;看到n,就知道“这是大小”。
7.4、密码学与网络安全(Alice / Bob / Eve)
当你讲到加密、HTTPS 或网络安全时,这套命名几乎是行业标准。
- 来源:1978 年的一篇关于公钥密码学的论文中,作者 Ronald Rivest(RSA 算法的 R)为了形象化描述通信过程,引入了虚构人物。
- 角色设定:
- Alice:通常想给 Bob 发消息的人(A 开头,排在字母表前面)。
- Bob:接收消息的人。
- Eve:窃听者(Eavesdropper)。
- Mallory:恶意攻击者(Malicious)。
- 教学用法:
alice.send(bob, message)比user1.send(user2, data)更有画面感。
7.5、流行文化与通用俚语(Blah / Dummy / Temp)
这些词来源于英语日常口语,用于降低认知负荷。
- Dummy:在工程领域(不仅是软件),dummy 常指“模拟件”或“假件”(例如汽车碰撞测试中的 Dummy 假人)。
- Temp / Tmp:Temporary(临时)的标准缩写,源自文件系统(如
/tmp目录)。 - Blah:拟声词,模仿无聊或含糊不清的声音(“blah blah blah”),表示内容不重要。
- Thing / Stuff:英语中最通用的名词,用来指代“我不知道该怎么称呼它,但它就是那个东西”。
7.6、为什么会有这么多不同的体系?
总结一下,你可以这样告诉学生:
| 命名体系 | 起源 | 适用场景 |
|---|---|---|
| foo / bar / baz | 黑客文化与军事俚语 | 通用、底层、系统级示例 |
| spam / eggs | Monty Python 喜剧 | Python 特有、初学者友好 |
| i / n / x | 数学与物理 | 算法、循环、计算 |
| alice / bob | 密码学论文 | 网络、安全、通信 |
| apple / banana | 儿童编程/直观教学 | 面向青少年或完全零基础 |