​下划线是什么样子的(下划线是什么东东)

下划线是什么样子的(下划线是什么东东)

说明:减号,中划线,dash,在本文中等同;下划线,underscore,等同。“连接符”,泛指连接单词的符号(故意没使用“连字符”/hyphen,因为连字符通常就是中划线/减号)。

下划线在上

直观的差别

视觉上,减号更平衡。而下划线的存在感更低,在http链接中甚至可能被淹没,和空格很难区分。 在输入上,下划线需要多按一下 Shift 键,所以减号在便利性上加0.1分。

下划线在超链接中可读性差

深入的差别

以下划线连接的字符串双击就会全部选中(注),而减号连接的字符串要全选需要用鼠标。所以下划线连接更便利,这是一些同学选择使用下划线的一个理由。

这个差别已经接近下划线和减号的本质差别了,那就是它们在“分词”上的差别。在计算机世界里,下划线的连接通常作为一个“单词”,而减号的连接不是。

注:其实并不是所有软件中都这样。随便试了一个版本的Word, 就不是这样(后面图中有)。

分词的差别

这里的“单词”不是英语的单词(word),计算机世界里我们通常说标识符(identifier)。在标识符里,下划线的地位和26个字母基本无差别,比数字的地位还高一点,因为数字通常不能做首字母。

在主流的正则表达式里,用来表示“单词”的字符,即w是这样的:[A-Za-z0-9_],也就是大小写字母,数字和下划线。注意,它不包含减号(这里的减号是用来表示范围的)。

所以,在计算机世界里,大家对于"word"所包含的字符的约定基本是一致的:包含下划线,但不包含减号。

基于这个分词原则,除了刚才的双击行为的差别,还会产生很多的差别。

排版的差别

排版的差别主要体现在自动换行时。减号会作为换行时截断的边界,而下划线通常不会。

Word中分词/换行的差别

有些考虑不周的软件,在面对超长的“下划线单词”时,由于不分隔还会造成“溢出”(超出了预期的界面区域)。

Jenkins中下划线超长溢出(上下对比)

搜索的差别

如果你的公司做了一款产品,型号叫作 mycompany_myproduct,假如文档全程都用这个代号,极端点,没有提到mycompany或myproduct这两个单词,那么,对于某些搜索引擎,通过myproduct或mycompany将搜索不到这个页面。

如果型号为mycompany-myproduct,通过mycompany和myproduct,则都是可以搜到的。在做SEO时,更需要考虑这种差异。

据说对于,两者的差异比较小;而对于Google,用减号连接则更有优势。毕竟多数人会倾向用 myproduct 的关键字进行搜索。

深入的逻辑

从形式和逻辑组合上,共有4种符号用来区分隔断。

形式上断开,逻辑上断开:这是全隔断,没有争议地用空格; 形式上连接,逻辑上断开:姑且称“弱连接”,通常用减号; 形式上连接,逻辑上连接:姑且称“强连接”,通常用下划线; 形式上断开,逻辑上连接:这是反人类,容易造成错误。如果要算,中文全角空格勉强可以算一个。但这不是它的本意,它只是一些坑的来源。

所以,真正有意义的组合是前3个。我们可以选择其它符号来表达这3种意思,但从外观及传统上,空格,减号,下划线,这3个符号是比较好的选择。

为什么要用下划线?

最初,我们要用下划线,是因为减号用来表示减法了。my-var 表示变量 my 减去 var;如果一个变量含有多个英语单词,为了区分它们,而你又不想用骆驼命名法MyVar,就要用下划线的my_var。大多数编程语言里都这是这样。

这种对标识符的要求会泛化,比如 Python 里 package 的名字里只能用下划线而不能用减号,从而导致作为模块的文件名不能用减号(但作为一般的不被引用的程序文件还是可以用减号的)。

这种泛化进一步蔓延到了C/C++世界里,比如Google prefer的C++文件名是下划线(尽管可以用减号)。

这种泛化最后可能会蔓延到所有需要连接单词的场景上。毕竟人们更容易接受单一的规则。

可以不用下划线的编程世界

但这不是绝对的。

LISP类语言

在能明确区分操作符和连接符的语法里,标识符就可以包含减号了,比如LISP,操作符是前置的,元素以空格或括号分隔,这样标识符就可以随意包含减号了。

(let ((my-var 300) (your-var 100))
(print (- my-var your-var)))

上面的和下面的代码,结果都是200。"var-300", "var-100", 甚至"300-300", "1-100"都只是标识符而已,不会被当作减法表达式。只有列表里的第一个元素是减号才表示减法操作。

(let ((var-300 300) (var-100 100))
(print (- var-300 var-100)))
(let ((300-300 300) (1-100 100))
(print (- 300-300 1-100)))

HTML世界

在XSL中,大量使用带减号的关键字,比如for-each, value-of, copy-of。同样,你自己的标识符当然也可以包含减号,比如下面代码中的my-header。

TitleArtist

CSS中也是这样。

.banner {
  border: solid black 1px;
  box-shadow: 1px 2px;
  background-color: yellow;
  text-align: center;
  box-sizing: border-box;
  width: calc(100% - 80px);
}

它有专用的关键字用来引用变量的值(var),和做表达式计算(calc),所以它可以肆无忌惮地用减号开头的标识符。

.foo {
  --widthA: 100px;
  --widthB: calc(var(--widthA) / 2);
  --widthC: calc(var(--widthB) / 2);
  width: var(--widthC);
}

一种感觉,在HTML的世界里,似乎很抵触用下划线。HTML/CSS/XML/XSL的关键字里,似乎都是用减号而不是用下划线。

思考:语言只是一种约定吗?

小时候,一些读错的多音字,现在已经变成了正确的。因为大多数人都按照“错误”的在读,比如呆板,曝光,等等。

毕竟,语言的功用是交流,大多数人都能理解才是重要的,既然绝大多数人都认为它应该那么念,“将错就错”也没什么不好。而且,原来的那种“正确”的读音也没有反映出更多或更正确的本质。

我就职的上一家公司,到处都是下划线,比如在Linux内核代码里,如果看到下划线命名的文件,那基本上就是我们公司增加的。换了一家公司后,这种现象有过之而无不及,几乎凡是需要连接单词的地方,都是用下划线。

作为一个中老年码农,我应该高兴,这说明码农已经开始占领世界了。

那么,纠结用下划线还是减号,是不是像纠结生僻的多音字,或茴字有几种写法,变得不合时宜?我是否应该随大流?

但据我有限的观察,在英语的技术世界里,仍然是有区分地使用两者,并没有无脑用下划线。

另外一点坚持就是逻辑上我们需要这两种符号:一种表示强连接,一种表示弱连接(如前所述)。两者并不完全是替代关系。

结语及倡议

下划线和减号都可用于连接字符串,这时它们的本质差别在于:分词逻辑的不同。

下划线通常用于表示“强连接”:形式上是连接的,逻辑上也是一个整体,在机器世界里通常会作为一个"word"; 减号通常用于表示“弱连接”:形式上是连接的,逻辑上是分隔的,通常会被机器作为多个"word"; 两种连接符并存的字符串里,我们通常认为下划线具有更高的的“优先级”。

在国内软件领域,个人观察,下划线有被滥用的迹象。但在英文世界里,在代码以外,基本仍然遵循英文书写的习惯,使用减号作为连接符。

所以我倡议:如非不得已,尽量使用减号作为连接符。

概括地说,目标是给机器(比如编译器)看的领域,比如源代码和某些语言的文件名,使用下划线;目标是给人看的领域,比如UI,技术文章,遵循英文书写习惯,使用减号。这样具有最好的兼容性。

使用减号的连接

作为个人,入乡随俗,在某个特定的技术领域、特定的团体,以局部的规则和约定为优先。但另一方面,作为规范的制定者,要考虑“真正的主流”及其内在逻辑,不要轻易将规则扩大化。

相关推荐

​披头散发的意思(摇头晃脑是什么意思)

164

披头散发的意思(摇头晃脑是什么意思) 成语解释 1、恩将仇报——忘恩负义,用仇恨报答恩惠。 2、气急败坏——上气不接下气,形容十分慌张或者恼怒。 3、无能为力——用不上力量...

​正月是一月还是二月(正月是一月还是二月啊)

153

正月是一月还是二月(正月是一月还是二月啊) 以下翻译内容来源于中国核心语汇 中文农历 英语Lunar Calendar 法语Calendrier chinois 俄语Лунный календарь 西班牙语Calendario lunar 葡萄牙语...

​鲥鱼(鲥鱼的正宗做法)

​鲥鱼(鲥鱼的正宗做法)

199

鲥鱼(鲥鱼的正宗做法) 鲥鱼怎么读 鲥鱼是什么鱼 鲥鱼 读音: shí yú 鲥鱼为溯河产卵的洄游性鱼类,因每年定时初夏时候入江,其他时间不出现,因此得名。产于中国长江下游,以...

​山东三本院校(山东专升本院校排名)

​山东三本院校(山东专升本院校排名)

97

山东三本院校(山东专升本院校排名) 山东省的三本大学有哪些 山东省的三本大学主要是山东大学,山东师范大学下属的独立学院,不过独立学院今年开始转设,二本三本合并了。 山...

​中国好声音杨坤组冠军(杨坤参加中国好声音)

​中国好声音杨坤组冠军(杨坤参加中国好声音)

67

中国好声音杨坤组冠军(杨坤参加中国好声音) 第三季中国好声音杨坤组冠军是谁?杨坤组四进一的是谁 杨坤组四进一名单: 杨坤组4进2: 第一轮:余枫《无所谓》 VS 李文琦汉《是什...

​老鼠爱大米歌词(童话歌词)

​老鼠爱大米歌词(童话歌词)

182

老鼠爱大米歌词(童话歌词) 老鼠爱大米的歌词 《老鼠爱大米》(又名《这样爱你》)是由杨臣刚作词,作曲并演唱的一首歌曲,收录于2004年发行的专辑《老鼠爱大米》中,由飞乐唱...

​回族的风俗习惯图片(回族传统风俗)

​回族的风俗习惯图片(回族传统风俗)

101

回族的风俗习惯图片(回族传统风俗) 请问回族有那些礼节? 1、回族的见面礼节,双方见面时不论职务高低,不分贫富贵贱,都要互道“色俩目”。 “色俩目”为阿拉伯语的音译,意...

​成人艺术天空(天空艺术成人美术培训)

​成人艺术天空(天空艺术成人美术培训)

168

成人艺术天空(天空艺术成人美术培训) 杭州天空画室怎么样 好。 1、口碑好。杭州天空画室是杭州天空艺术培训有限公司旗下的艺术培训机构,口碑很好。 2、教学质量。杭州天空画...

​每况愈下(每况愈下和江河日下的区别)

​每况愈下(每况愈下和江河日下的区别)

56

每况愈下(每况愈下和江河日下的区别) 每况愈下的意思及典故故事 每况愈下的读音 1、每况愈下,汉语成语,拼音是měi kuàng yù xià,意思是指越往下越明显,表示情况越来越坏。...

​信息时代的特点(信息时代的特点不包括 )

​信息时代的特点(信息时代的特点不包括 )

185

信息时代的特点(信息时代的特点不包括 ) 什么是信息时代? 信息时代是指:新科技革命以电子信息业的突破与迅猛发展为标志,主要包括信息技术、生物工程技术、新材料技术、海...

​ppt怎么换模板(怎么修改ppt模板文字)

​ppt怎么换模板(怎么修改ppt模板文字)

139

ppt怎么换模板(怎么修改ppt模板文字) 你有没有这样的困惑,做出了一篇超棒的内容,但阅读和传播量却少的可怜? 让我们来看看这几篇文章: 《烧纸钱的由来》、《Under Armour的营销策...

​爨的笔顺(爨懿曦怎么读)

55

爨的笔顺(爨懿曦怎么读) 导读 如今网络时代,大家不是敲键盘就是用触屏手机。生活中常常提笔忘字,更不用说规范笔顺了。 有时孩子问起字自己却不会写时,别提有多尴尬了,小编...

​辽阔无垠的近义词(辽阔无垠的近义词和反义词)

73

辽阔无垠的近义词(辽阔无垠的近义词和反义词) 和反义词,是小学语文必会的一项重要内容。昨天有朋友在后台问,妞爸专门花了两个多小时收集了,都是小学常用的、常考的,给各位...