为什么编程里习惯使用 i、j、k 等作为循环变量?
i 可能是 integer 的简写,或者是 int 的简写。有人说是 iterator 的简写,这个有点牵强。早期教材中的示例都是以 i、k、j 作为循环变量,后来这样使用成为了一种习惯。
但这种习惯是如何形成的呢?
在 1957 年诞生的 Fortran 编程语言中,有一个「I—N 规则」,规定以字母 I,J,K,L,M,N 六个字母开头的变量,如无另外说明均为整型变量,以其它字母开头的变量则为实型变量。实型变量在这里狭隘理解就是小数,包括指数形式的小数。
Fortran 更多是一种教学语言,后来诞生的 B 语言、C 语言都借鉴了 i、k、j 的命名规则,久而久之成为了习惯。
关于 I-N 规则,可以查看这里:https://micro.ustc.edu.cn/Fortran/ZJDing/Sec1-4.htm
Fortran 支持整型、字符型等类型。Fortran 诞生于 1957 年,比 C 语言早了 10 年,很难想象在远古编程语言中,竟然就有了对变量类型的支持。虽然对类型的支持并不是一开始就有的,但也基本发生在 Fortran 诞生之后的几年里。
JS、Python 这样的脚本语言没有变量类型,并不是它们低级,而是在它们的语言哲学里,没有类型更加简洁方便。
编程语言一向有两个发展方向,两种哲学:
- 一,力求简洁,代码编写效率高,脚本语言基本都是这样,例如 Python、JS;
- 二,力求高性能、安全与稳定,后端编译型语言基本都是如此、例如 Java、C++。
一般情况下,我们都会保持这种语言中哲学的纯粹,但有时候我发现我们开发者又很矛盾,例如 JS,它本来是弱类型的脚本语言,当我们在享受它简洁方便的语言特性时,又搞了一个 TypeScript 出来,希望它也像 Java 那样具有强类型的严谨。
就像一个姑娘,有时候希望她泼辣,有时候又希望她文静。
有一个语言,因为诞生的晚,吸收了众多现代语言的优点,既有强类型语言的优点,又有弱类型语言的优点,它就是 Go 语言。