{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

为什么程序员不用空格用下划线代替?

邹立鹏邹立鹏 回答0 收藏1
收藏问题

10条回答

MobService

MobService

回答于2022-06-28 11:42

使用空格的话一个是看着不明显,还有就是会有冲突啊,代码为了规范易读,一般一行代码,每个变量,逻辑运算,中间都会用空格隔开,要是其他也都用空格,岂不是都冲突了,甚至直接错误。



评论0 赞同0
  •  加载中...
Neilyo

Neilyo

回答于2022-06-28 11:42

或许是我达不到你的高度,但我觉得你提的这是个锤子问题,空格替代下划线,谁替代空格?

原本的变量名: user_first_name = "zhou"

替代后变量名: user first name = "zhou"。

只要你能替代的牛逼,让美国人书写英文时摒弃之前的观念,让他们接受空格两边的单词是同一个单词。

评论0 赞同0
  •  加载中...
muddyway

muddyway

回答于2022-06-28 11:42

结论:程序员也想用空格,可是程序不允许。本文带你了解深层次原因。


前言

本文尝试从多种语言的规范角度,说明程序代码,或者命令行内为什么不提倡用空格


语言层面的规范

本段从各个语言的角度,说一下。


1 - C语言

C语言是上帝赐给人类的礼物。他有很明确的规范,最新的也就是 ANSI-C 标准。

在定义变量时,变量名可以是字母、数字和下划线的组合。但是也不是随便的组合,要注意以下几个命名规则:

  1. 变量名的开头必须是字母或下划线,不能是数字。

  2. 变量名中的字母是区分大小写的。

  3. 变量名绝对不可以是C语言关键字

  4. 变量名中不能有空格。

看到了吗,变量名只能在 a-z, A-Z, 0-9,_,之间选择,没有其他项。

第四条,因为上述限制,也绝对不允许出现“空格”


2 - Java语言

Java用途广泛,使用众多。

其命名规则(Naming rules)如下。

  1. 变量名称区分大小写

  2. 变量的名称可以是任何合法标识符

  3. 可以包含Unicode字母、数字和另外两个特殊字符,如下划线(_)和美元符号($)。

  4. 变量名的长度任意。

  5. 变量名以字母开头(也可以使用下划线,但一般不用)。

  6. 某些自动生成的变量可能包含“$”符号。

  7. 尽量避免使用“$”符号。

  8. 不允许使用空格

  9. 不允许使用特殊字符

  10. 不允许以数字开头

  11. 后续字符可以是字母、数字、$符号或下划线。

  12. 变量名不能是关键字或保留字

看到了吗,空格是不允许使用的


3 - Python语言

上面两种都是强类型语言,我们看看以python为代表的解释型脚本语言规范如何。

python命名规则如下:

  1. 变量名仅支持数字、字母和下划线。

  2. 变量名只能以字母,或下划线开头。

  3. 变量名不能以数字开头。

  4. 变量名区分大小写。

  5. 变量名内不允许有空格

  6. 不允许其他特殊字符。

  7. 变量名不能是关键字。

可以看到,python受C语言的影响痕迹很重,基本保持了C的命名规则。


4 - 比较新的语言GO

我们再拿go语言做比较,go是一门现代化的语言,融合了编译型和解释性语言的优秀设计理念,便于开发使用。

go语言的变量命名规则:

  1. 名称必须以字母开头,并且可以包含任意数量的其他字母和数字。

  2. 变量名不能以数字开头

  3. 变量名不能包含空格。

  4. 如果变量的名称以小写字母开头,则只能在当前包中访问该变量,这被视为未导出的变量。

  5. 如果变量的名称以大写字母开头,则可以从当前包之外的包访问该变量,该包被视为导出的变量。

  6. 如果一个名称由多个单词组成,则第一个单词之后的每个单词应按如下方式大写:empName、EmpAddress等。

  7. 变量名区分大小写(cAR、CaR和CAr是三个不同的变量)。

  8. 变量名不能是关键字

从上面的四种语言举例中,可以看到每种语言都明确写到“不允许变量名包含空格”。

因为无论是静态编译型语言,还是解释型语言,都是要将代码解析为机器码执行。空格、换行符、空行是没有意义的,会被编译器忽略。如果使用了带空格的变量,语法就会出错。


命令行

说完编程语言代码层面的内容,我们把目光转向命令行,主要介绍一下widnows平台和linux平台中,空格的特殊用途


1 - windows dos

widnows平台主要说一说dos指令,因为它是bat批处理文件的基础。

空格是位置分隔符,也就是命令行传入参数argvs用于区分位置参数的分隔符。

例如下面这个创建文件夹指令:

md path ofile

如果加上空格:

md path tofile

则会创建两个目录 path,和 tofile。这不是我们想要的结果。


2 - linux shell

linux命令行下,功能几乎是一样的,空格是默认的位置参数分隔符。

例如创建如下目录:

mkdir -pv a/b/c

如果加上空格:

mkdir -pv a/ b/c

结果也不是我们想要的。


结语

我们知道,空格在多数语言内,或者命令行内,是保留关键词,是“占位符”,“分隔符”

如果与系统命名冲突,造成程序不可控运行,这是非常危险的。


我是@程序员小助手,持续分享编程与程序员成长相关的内容,欢迎关注~~

评论0 赞同0
  •  加载中...
chaos_G

chaos_G

回答于2022-06-28 11:42

如果你按你说的,一个变量名以空格开头,或者以空格结尾,鬼知道啊。如果空格在名字中间,那鬼知道是一个变量还是两个

评论0 赞同0
  •  加载中...
Betta

Betta

回答于2022-06-28 11:42

语言中空格是关键词的分割符号,所以不能在类名或变量名 函数名等用空格,为了肉眼识别用驼峰或小划线

评论0 赞同0
  •  加载中...
objc94

objc94

回答于2022-06-28 11:42

为什么你说话不用呢,要用了替代啊?因为那个地方不能用啊,用了就是错误的

评论0 赞同0
  •  加载中...
trilever

trilever

回答于2022-06-28 11:42

一般情况下,空格是分隔符,下划线不是。

特殊情况下,空格需要转义,下划线不需要。

评论0 赞同0
  •  加载中...
silencezwm

silencezwm

回答于2022-06-28 11:42

程序中,带空格的文件名,空格要加转义字符——我看这个很不爽——所以程序员给文件命名很忌讳空格

评论0 赞同0
  •  加载中...
gnehc

gnehc

回答于2022-06-28 11:42

因为空格在默认我们(计算机)会认为是空白符,如 (tab符),一般都会做处理,用_链接字符则没歧义。

评论0 赞同0
  •  加载中...
Leck1e

Leck1e

回答于2022-06-28 11:42

一个空格跟两个空格可不是容易看出来的

评论0 赞同0
  •  加载中...

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<