本文目录导读:

  1. 最早的雏形:BCPL的“SWITCHON”
  2. 发扬光大:Dennis Ritchie与C语言
  3. 其他语言中的独立演化
  4. 所以,到底算谁发明的?

在编程的世界里,

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年的贝尔实验室致敬。

    揭秘,Switch编程语句到底是谁发明的?-switch游戏下载社区