本文目录导读:
在编程的世界里,
switch语句几乎是每个学习C、Java、JavaScript等语言的开发者最早接触的分支结构之一,它简洁、高效,常被用来替代冗长的
if-else链,当你敲下
switch关键字时,是否想过一个问题:这个改变无数程序员写码习惯的语句,到底是谁发明的?
关键字时,是否想过一个问题:这个改变无数程序员写码习惯的语句,到底是谁发明的?
答案并非简单的一个人名,而是一段跨越数十年的编程语言演化史。
最早的雏形:BCPL的“SWITCHON”
时间回溯到1967年,剑桥大学的Martin Richards在开发BCPL(Basic Combined Programming Language)时,首次引入了
SWITCHON语句,BCPL是C语言的前身之一,它的语法非常原始,但已经包含了类似现代
switch的结构:
的结构:
SWITCHON expr INTO:CASE 1: ...
CASE 2: ...
DEFAULT: ...
这个设计在当时极具前瞻性——它允许程序员根据一个整型表达式的值,跳转到不同的代码块,Martin Richards也因此被公认为switch结构最早的发明者。
发扬光大:Dennis Ritchie与C语言
虽然BCPL有了雏形,但真正让
switch响彻编程界的,是Dennis Ritchie,1972年,Ritchie在贝尔实验室设计C语言时,吸收并改进了BCPL的
SWITCHON,将其命名为
switch,并加入了一系列关键特性:
,并加入了一系列关键特性:
break机制:防止“穿透”(fall-through),让每个case独立。
- 机制:防止“穿透”(fall-through),让每个case独立。
default分支:处理未匹配的情况。
- 分支:处理未匹配的情况。
- 更灵活的常量表达式:支持字符常量、枚举等。
Ritchie在《C程序设计语言》(K&R)中这样描述switch:“它是从BCPL中借用来的,但做了重大修改。” 正是C语言的广泛流行,让
switch成为几乎所有现代编程语言(Java、C++、C#、JavaScript、PHP等)的标准配备。
成为几乎所有现代编程语言(Java、C++、C#、JavaScript、PHP等)的标准配备。
其他语言中的独立演化
值得注意的是,并非所有语言都直接继承自C,Niklaus Wirth在1970年设计的Pascal中,有类似的
case语句,语法略有不同,但思想一致,而更早的ALGOL 60(1960年)中也有
switch声明,但它是用于标号数组的静态跳转,并非现代意义上的分支结构,因此通常不被认为是直接起源。
声明,但它是用于标号数组的静态跳转,并非现代意义上的分支结构,因此通常不被认为是直接起源。
到底算谁发明的?
- 概念发明者:Martin Richards(BCPL的
SWITCHON,1967年)
- ,1967年)
- 现代形式的奠定者:Dennis Ritchie(C语言的
switch,1972年)
- ,1972年)
- 独立再发明者:Niklaus Wirth(Pascal的
case,1970年)
- ,1970年)
如果非要回答“谁发明了switch编程”,更为公允的说法是:Martin Richards发明了switch的种子,而Dennis Ritchie让它长成了森林,今天你写下的每个
switch,骨子里都流淌着这两位先驱的智慧。
,骨子里都流淌着这两位先驱的智慧。
下次当你用
switch优雅地处理多分支时,不妨在心里默默向1967年的剑桥和1972年的贝尔实验室致敬。
优雅地处理多分支时,不妨在心里默默向1967年的剑桥和1972年的贝尔实验室致敬。

