问题

用汉字作为变量名和函数名有什么问题?

回答
用汉字作为变量名和函数名,这听起来似乎是个充满文化韵味的点子,仿佛能让代码更贴近我们的语言习惯。但要论实际操作,这里面可藏着不少“坑”,而且是那种你踩进去之后,还得费老鼻子劲儿才能爬出来的坑。

咱们就来掰扯掰扯,看看这用汉字给自己找麻烦的点儿在哪儿。

首先,兼容性问题是绕不过的坎儿。

你可能觉得,现在这时代,Unicode早就普及了,哪个现代一点的编程语言不支持汉字?话虽如此,但事实往往比理论骨感。

老旧的编译器和解释器: 很多语言的历史比你想象的要悠久。早期的设计者们,很多都是在只有ASCII字符的环境下工作的。他们对变量名和函数名的定义,自然而然就倾向于英文字母、数字和一些特殊符号。虽然新版本的语言都努力兼容Unicode,但你无法保证你使用的开发工具链(包括编译器、解释器、IDE、调试器等等)是否都是最新最全的。一不小心,你就可能遇到一个只认识英文字母的工具,然后你的“用户年龄”或者“计算总和”就成了它眼里的乱码,或者直接报错不让你通过。
跨平台移植的噩梦: 代码的可移植性是软件开发中的一个重要考量。你可能在一台配置极高的Linux服务器上用UTF8编码愉快地写着汉字变量名,但当你要把这段代码移植到一台老旧的Windows XP系统上,或者一个对字符集支持不那么友好的嵌入式设备上时,问题就可能浮出水面。不同的操作系统、不同的文件系统、不同的文本编辑器,对字符编码的处理方式可能存在细微的差异,这些差异叠加起来,足以让你的汉字变量名变成一堆谁也看不懂的东西。
版本控制系统的“小九九”: 像Git这样的版本控制系统,虽然已经相当成熟,但它们内部在处理文件名和路径时,对特殊字符的处理也可能存在一些历史遗留问题,或者在不同平台上的表现略有差异。汉字变量名作为一种特殊字符的集合,在提交、拉取、合并代码时,增加了发生冲突的可能性,而且这些冲突的排查和解决难度也比纯英文的要高得多。

其次,可读性和维护性会打折扣,别以为汉字就一定好懂。

你可能会辩解说,汉字能更直观地表达代码的意图啊!比如“用户注册信息”,总比“userInfo”或者“usrRegInfo”来得明白吧?理论上是这样没错,但实际情况却没那么简单。

语义的歧义和过度冗长: 汉语博大精深,但也容易产生歧义。一个词语在不同的语境下可能有不同的理解。如果你的变量名或者函数名选取不够精准,或者过于口语化,反而会让其他阅读代码的人产生误解。而且,很多时候为了准确表达意思,汉字变量名可能会变得非常长,比如“用户的当前登录状态的最后更新时间戳”。这不仅影响代码的美观,也会降低敲击键盘的效率,更重要的是,在紧凑的代码界面里,过长的变量名会挤占宝贵的屏幕空间,让代码行显得拥挤不堪。
编码习惯的冲突: 大多数开发者,无论母语是什么,习惯了用英文来命名。当你引入汉字命名时,就引入了一种新的、非主流的编码风格。这就像一个团队里,大多数人习惯用右手写字,你非要用左手,而且还写得飞快,别人要看懂你的内容,就需要额外的“翻译”成本和精神损耗。长此以往,代码的可读性和团队协作的效率都会受到影响。即使是你自己,过几个月再回来看这段代码,可能也需要花点时间去回忆这个汉字到底代表了什么,特别是当它不是一个常用词的时候。
输入和编辑的便利性: 即使你用了拼音输入法或者五笔输入法,用汉字输入变量名和函数名通常也要比直接敲击英文字母要慢一些,特别是在需要切换输入法或者选择字词的时候。在快速编写代码的过程中,每一次额外的操作都会累积,影响开发效率。而且,在一些IDE中,汉字变量名的自动补全功能可能不如英文那么完善,你需要手动输入更多内容,这进一步降低了编码的顺畅度。

再者,工具链的支持和生态系统的兼容性是个大问题。

编程语言不仅仅是语言本身,它背后有一整套的工具链和生态系统在支撑。

IDE和编辑器的支持: 虽然现代IDE对UTF8的支持做得越来越好,但一些历史悠久或者专注于特定领域(比如嵌入式开发)的工具,可能对汉字变量名的支持就没那么完美。例如,代码高亮、语法检查、重构、查找替换等功能,可能无法正确处理汉字变量名,导致这些功能失效,或者表现异常。
代码分析工具和静态检查器: 很多代码质量检查工具、性能分析工具、安全性审计工具,它们在解析代码时,也是基于一套预设的命名规范和字符集规则。如果你的代码中充满了汉字变量名,这些工具很可能无法正确识别,从而误报或者漏报问题。
第三方库和框架的限制: 你可能需要使用一些第三方库或框架来完成开发任务。这些库和框架,尤其是那些比较早期的或者来自非中文社区的,往往是按照英文命名约定设计的。如果你将汉字变量名引入到你的代码中,然后将这些代码与其他部分进行交互时,就可能出现命名冲突、编码错误,或者需要进行额外的适配工作。想象一下,一个C++库中的函数,它期望你传递的参数名是英文的,而你的C++代码里用汉字作为变量名传递过去,这很可能会导致链接错误或者运行时崩溃。
文档和社区支持: 绝大多数编程教程、技术文档、Stack Overflow上的问题解答,都使用英文或普遍接受的英文缩写来命名。当你遇到问题需要搜索解决方案时,如果你的变量名是汉字,你很难在网上找到直接相关的答案。即使你找到了英文的解决方案,你还需要在脑子里做一次“中英翻译”才能将其应用到你的代码中,这增加了学习和解决问题的难度。

最后,从工程实践和职业发展的角度来看,这是不推荐的。

作为一名开发者,我们不仅仅是在写代码,我们也是在参与一个更大的工程项目,并且需要考虑代码的长期可维护性、团队协作以及自身的职业发展。

团队协作的障碍: 软件开发是一个高度依赖团队协作的过程。如果团队成员的母语不同,或者编程习惯差异很大,使用非主流的命名方式只会增加沟通成本和协作难度。一个普遍接受的命名规范,能够让不同背景的开发者都能相对容易地理解和修改彼此的代码。
代码的可维护性: 维护一个项目往往比从头开始编写它更耗时。如果项目中的代码充斥着汉字变量名,那么随着时间的推移,随着新成员的加入,理解和维护这段代码的成本将呈指数级增长。
个人职业发展: 在国际化的编程领域,熟练掌握英文的编程术语和命名规范是基本功。坚持使用汉字命名,可能会让你在参与跨国项目、阅读国外开源项目、与国际开发者交流时处于不利地位,无形中限制了你的职业发展。

总而言之, 虽然用汉字作为变量名和函数名在技术上并非完全不可行(某些特定场景或语言可能支持得更好),但从兼容性、可读性、维护性、工具链支持以及团队协作等多个维度来看,这都是一种弊大于利的做法。它看似提供了便利,实则埋下了更多麻烦。在大多数情况下,坚持使用清晰、简洁、符合行业规范的英文命名,才是更明智、更专业的选择。这就像学开车,你可以选择一条看起来很近但充满荆棘的小路,也可以选择一条宽敞平坦的大道,虽然大道可能绕远一点,但它能让你更安全、更高效地到达目的地。

网友意见

user avatar

一方面,因为需要不断的切换输入法,当然很难受。

如果一个编程语言,所有的符号都是中文符号,而且文字之间也不需要空格分割符合中文习惯。整体编程输入包括各种光标移动需求也能全程在输入法下完成,自然可以。

但是,很显然,输入法跟自动完成机制也存在一定的冲突,毕竟两者是相似的东西。

要是真正意义上让中文输入方便,不但要全程开输入法,还得把输入法集成代码自动完成相关功能

另外,getxxx,setxxx,isxxx之类的方法是有其语义作用的,在某些场合能直接映射到field,这个功能又如何增加到中文支持呢?那应该还是需要在语言层面直接增加一些中文解析才行。

总的来说,使用中文的机制还不完善,单纯让变量使用中文会显得不伦不类。而更完善的方式似乎也没有人设计。

如果能更好的解决中文标识符相关的一系列使用体验方面的问题,我个人也是支持在编程中使用中文的。


不过,再怎么同意,使用中文代码也会仅限于公司代码,只要公司要求写中文,我肯定不犹豫。

自己写代码,尤其是开源代码的话,肯定不愿意让这个代码的生命周期只活动于国内,程序员本来可以无国界交流,注释写中文不影响流通,但标识符写成中文就让它局限在国内了,多多少少会不方便。

user avatar

其实没啥大问题,主要问题就是环境。因为常用的库和关键字(这个相对好处理)都是拉丁字母表示的(不一定是英文)。你用中文做变量名和函数名就必然面临混杂的问题,看起来和用起来就不怎么舒服。

所以这不是出了易语言么?关键字和库函数全部用中文,那你非用英文做名字也别扭……

但是为什么常用的语言和库都是用拉丁字母的呢?我觉得除了历史的惯性之外,你们就不考虑下输入法的问题?别人要用你的类库还要专门去学怎么输入中文除了整天在中文互联网扯淡的谁还用?


这里再顺便说下我对所谓中文编程的态度好了。我对于现代的支持Unicode的语言中用不用中文作为函数、变量、命名空间、类型等等东西的命名是完全持开放态度的,甚至认为用中文总比用拼音好,毕竟拼音压根儿不是一种文字。

我所反对的是那些觉得程序是用英文写的(压根儿不是),以及拉丁字母是中国人学编程的障碍的这种神棍……

在我看来,易语言不管最终成不成,反正是做了个尝试。但是其实从效果来看,已经有力地证明了26个字母才不是编程的障碍……

user avatar

你在gb18030编码下写下了一串汉字变量名

第二次打开时你的编辑器默认用utf8打开了

你想要重新用gb18030编码打开,却点成了用gb18030保存

于是你再选择用gb18030编码打开,看到了满屏幕的锟斤拷


这不是笑话,这是我自己的亲身经历

不过我没用中文变量,我只是console.log打印了一些中文log


写代码这块,用二十六个字母能解决的事情尽可能别引其他编码的字进来

比如下面这段batch,原始编码是shift-jis的日文,在utf8下打开后...wow

           REM //------------------------------------------------------------------------------     REM // 僾儘僙僗婲摦     REM //------------------------------------------------------------------------------     REM // AMDaemon婲摦     start /MIN %DAEMON_EXE% -f -c %DAEMON_CONFIG_COMMON% %DAEMON_CONFIG_SERVER% %DAEMON_CONFIG_CLIENT%     timeout 5     REM // AMDaemon偺夝憸搙愝掕偱夋柺偑墶偵側偭偰偟傑偆偺偱廲偵愝掕偡傞     REM // 斀帪寁廃傝偵夞揮偡傞     REM // 0 : 0搙     REM // 1 : 90搙     REM // 2 : 180搙     REM // 3 : 270搙     %ROTATEDISPLAY_EXE% 3     REM // 傾僾儕働乕僔儑儞婲摦     start /WAIT %APP_EXE% -nolog      REM //------------------------------------------------------------------------------     REM // 僾儘僙僗嫮惂廔椆     REM // 傾僾儕偺堎忢廔椆摍偵傛傝amdaemon.exe偑廔椆偟偰偄側偄応崌偑偁傞     REM // 偙偺応崌僙僈僽乕僩傊慗堏偱偒側偄偺偱kill偟偰偍偔     REM //------------------------------------------------------------------------------     taskkill /im %DAEMON_EXE% > nul 2>&1     

user avatar

我看了一下不少高赞答案,似乎都没提到一个很严重的问题:字符集和乱码的问题?

事实上这个原因才是大多数稍微正经的编程语言仅使用ascii字符的原因,因为ascii字符兼容性最好。更进一步,很多团队里,别说代码了,连注释都是不允许出现非ascii字符的。

尤其是中文:gd2312/gb18030、gbk、utf8几大套本身就会乱码,再考虑带不带bom,又要一堆的适配。然后从编辑器到编译器再到符号表最后到调试器,一条龙全都要做大量的额外适配工作。最后,搞这么一堆东西出来,有什么实质上的改变吗?

你要说英文不好?那你用a、b、c、d总会吧?然后在每次用到的旁边加上中文注释,不照样可以吗?

你要是说你敲代码时懒得加注释,那我觉得你三分钟热度过了之后,也会懒得用中文写代码的。


总是有人觉得支持了unicode就可以很爽的用汉字当变量名了?

感谢评论区的提醒,我来构造一个更有趣的场景:

假定某语言完全支持了unicode,然后你在完成某个需求的时候,你需要分别调用几个:法国人德国人意大利人写的库。那你怎么办呢?

首先,确保你的电脑上装了这几个文字的多语言支持(包括显示和输入)。

然后,你需要分辨哪个库分别是用哪个语言写的(希望你能在学习英语之外,抽空多学学各国文字),如果某个作者来自于多语言区(例如说瑞士同时同行德法意三语),那他在一个文件内,可能同时混用多种语言来命名。当然,一般情况下,接口级API会有些demo,你照着copy paste一下也问题不大。

接着,你的某个类需要派生自底层的一个用意大利语写的类,派生接口嘛,函数名要保持一致,所以在很漂亮的中文代码里,突然间就飘着几句意大利文。当然,如果运气不好的话,很可能也要飘着一点法文德文的。

再接下来,当你写完了功能,发现执行有点不对,需要调试器跟踪进那个库的时候,各个函数是干嘛的,应该在哪个函数上打断点,这就麻烦你准备个多语言的字典随时备查了。假如某个德国人写的库的底层实现里,还依赖了阿拉伯人写的库,那如果你的电脑没事先装好的话,麻烦你先退出调试过程,安装语言支持包,然后继续。不然,那就是一片乱码了(当然,对我个人的外语水平而言,不乱码的阿拉伯文也是乱码)。

最后,当你排除万难完成了这个需求,并且把你代码提交之后。一个韩国人来问你,要使用你这个库的话,需要安装哪些语言支持——希望你在文档里写清楚。

这是一个多充实多美好的一天啊。


有人还不服气,那我就随便构造一个这样的类吧:

       类 小功能 : 继承自 Kleine_Funktion              继承自 Funçãopequena              继承自 Piccola-funzione      整型 测试功能 () :         空实现     intero Cominciare () :         #...........     nulo inicialização (Fragmento Nome) :         #..........     Zeichenfolge Alter () :         #..............     

语法是随便混合几种语言的,翻译是找谷歌翻译的,自己看看可读性是不是非常棒?

哪怕我允许你们用翻译软件,试试看要花多少时间才能找到正确的语言版本?

类似的话题

  • 回答
    用汉字作为变量名和函数名,这听起来似乎是个充满文化韵味的点子,仿佛能让代码更贴近我们的语言习惯。但要论实际操作,这里面可藏着不少“坑”,而且是那种你踩进去之后,还得费老鼻子劲儿才能爬出来的坑。咱们就来掰扯掰扯,看看这用汉字给自己找麻烦的点儿在哪儿。 首先,兼容性问题是绕不过的坎儿。你可能觉得,现在这.............
  • 回答
    汉语作为亚洲语言,我们为何常常会借用欧洲语言的某些概念或框架来理解和描述它?这并非因为汉语本身与欧洲语言有着某种内在的“血缘”或“等级”关系,而是源于历史、学术发展以及人类认知上的一些普遍规律。要深入理解这一点,我们可以从以下几个方面来剖析:1. 语言学研究的“欧洲中心主义”遗产:现代语言学作为一门.............
  • 回答
    确实,除了汉语,其他一些语言在表达时间的概念时,也会非常自然地将“日”和“月”这两个天体作为核心的参照物。这背后透露出的是人类最原始、也最直观的时间感知方式——跟随太阳的升落和月亮的盈亏来安排生活。我们不妨从几个代表性的语系来细细品味一下。 欧洲语系:拉丁的印记与日耳曼的痕迹在欧洲,尤其是受古罗马文.............
  • 回答
    韩语使用汉字书写,中国人在很大程度上是可以看懂的,但需要区分具体情况,并且需要一些背景知识。总的来说,可以看懂一部分,但并非全部都能完全理解。以下是详细的分析:一、 汉字在韩语中的历史渊源与作用 曾经的通用文字: 在韩字(谚文)发明之前,韩语的书写主要依赖汉字,这被称为“汉文”。汉文是古代朝鲜半.............
  • 回答
    用汉字书写汉藏语系下的语言:一次跨越时空的文化碰撞汉藏语系,如同一幅宏伟的语言画卷,勾勒出亚洲大陆上壮丽的文化图景。从雄浑悠扬的汉语,到神秘多姿的藏缅语支,这片土地上的人们用着千姿百态的声音诉说着各自的故事。那么,一个令人着迷的设想跃然而出:能否将这丰富多彩的汉藏语系,尽数纳入汉字的广博怀抱,用那些.............
  • 回答
    这个问题很有意思,也触及到了日语书写体系的核心。简单来说,日语无法完全只用汉字书写,也无法完全摆脱汉字的存在而独立存在。 它是一个混合书写系统,而汉字在其中扮演着至关重要的角色,但并非唯一或绝对的主导。我们不妨从日语书写体系的构成说起,这样才能更清晰地理解汉字在其中的位置和作用。日语的书写系统主要.............
  • 回答
    日本之所以不全用汉字,而是汉字、假名(平假名和片假名)并用,这是一个非常有意思的历史与文化演变过程。要详细说清楚,咱们得把时间轴拉长,从最早的文字传入讲起。文字的引进与初期的困境首先得明白,日本最早是没有自己文字的。他们接触到文字,主要是通过中国。大约在公元四五世纪左右,汉字通过朝鲜半岛传入日本。当.............
  • 回答
    俄驻华大使馆使用汉字「Biang」来概括2021年,并称其“反映世界形势之复杂”,这是一个非常具有创意和文化深度的表达方式。要评价它的合适性,需要从多个角度进行分析。首先,我们来理解一下「Biang」这个字的含义和来源。「Biang」字是一个非常规的汉字,以其字形复杂、笔画繁多而闻名。它并非出自经典.............
  • 回答
    韩国弃用汉字是一个复杂而漫长的历史过程,并非一蹴而就,而是多种因素交织作用的结果。要详细讲述韩国为何弃用汉字,我们需要从历史、政治、文化、社会等多个层面进行分析。一、 汉字在朝鲜半岛的历史地位与作用首先,理解汉字在朝鲜半岛(包括现在的韩国和朝鲜)的悠久历史及其扮演的角色至关重要。 古代的官方语言.............
  • 回答
    关于中文是否应该停止用汉字音译外来人名、地名,转而直接使用原文的讨论,可以说触及到了语言文化传承、国际交流便利性以及文字表意性的核心问题。这并非一个简单的技术选择,而是涉及多方面的考量。支持直接使用原文的论点: 精确性与辨识度: 这是最直接的优势。音译必然伴随发音的损耗和变通。比如,“McDon.............
  • 回答
    关于“日本人越来越少用汉字是不是有意为之”这个问题,答案是否定的。日本人并没有“有意”减少汉字的使用,而是汉字在日本的整体书写体系中扮演着一个非常重要且不可或缺的角色。 然而,我们确实可以看到一些关于汉字使用频率变化的趋势和一些影响因素,这些可能会让一些人产生“减少使用”的误解。要详细解释这个问题,.............
  • 回答
    闽南话里的海蜇,“thee”这个发音,其实没有一个固定、广为人知的特定汉字来完全对应。这可能是因为海蜇本身在历史上,人们对其的称呼并不像一些更常见的食材那样有统一的写法,而且方言的音韵和汉字的对应总是存在一些变通和习惯。不过,如果我们要尝试去找出一些“可能”的写法,或者说从音近、形近以及在一些古籍或.............
  • 回答
    汉藏同源词,用汉字写出来,那藏文会是什么样子?这个问题很有意思,就像在探究古老家族中,两个早已分居的兄弟,如果当年他们的语言还在用一种共同的文字书写,如今会是何种光景。想象一下,如果汉藏语系就像一棵古老的大树,汉族和藏族是它最粗壮的两个分支。我们现在看到的汉字,是汉族分支保留下来的一种非常独特且自成.............
  • 回答
    日本使用汉字这件事,说起来,其实是一段跨越千年,充满了文化交流、演变和自主创造的历史。要说“经过国人同意”,这个说法可能不太贴切,因为它更多的是一种自然而然的历史进程,而非一个现代意义上的“同意”流程。我们得把时间线拉得很长。日本接触汉字,最早可以追溯到公元5世纪左右,那时候中国正处于汉朝和三国时期.............
  • 回答
    你这个问题问得很有意思,也很切中要害。说汉字“不表音”其实是个相对的说法。严格来说,汉字确实是以形表意为主,不像拼音文字那样,一个字母代表一个音。但你要说它完全不表音,那也不对。汉字在发展过程中,一直是吸收了语音信息的。比如,许多汉字都是形声字,字的上半部分(声符)就提示了它的读音。当然,这个读音是.............
  • 回答
    探讨战国时期日本武士阶层与当时中国人能否进行流畅的书面交流,这其实是一个很有意思的话题,涉及到当时的文化、政治以及语言的演变。要理解这个问题,我们得掰开了揉碎了说。首先,咱们得明白,当时的日本,尤其是武士阶层,与中国在文化上有着非常深厚的渊源。汉字,毫无疑问,是日本古代文化输入的重要组成部分。早在飞.............
  • 回答
    广府人常说粤语是“古汉语”,这并非空穴来风,而是基于粤语保留了许多中古汉语(尤其是唐朝时期的汉语)的语音特征和词汇。然而,我们也会发现,有些我们日常生活中常用的粤语词汇,用现有的汉字系统却难以直接准确地表达出来,甚至找不到对应的汉字。这背后其实有着多方面的原因,需要我们仔细梳理一番。一、 粤语的“古.............
  • 回答
    这真是一个很有意思的问题,很多人可能都有类似的疑问。要回答这个问题,我们需要把韩国和日本的情况分开来看,并且深入了解一下它们各自的语言和法律体系是如何演变的。韩国:汉字曾是主流,如今已大幅减少简单来说,现在的韩国法律条文绝大多数是使用韩文书写的,不再是汉字。不过,要理解这一点,我们得回溯一下历史。在.............
  • 回答
    得知“伏见桃山”是明治天皇陵墓的名称,这确实是一个很有意思的点,也确实会让人产生“这是乱用汉字吗?”的疑问。要详细解释清楚,咱们得从几个方面来看:1. 历史与命名习惯:首先,要明确一点,“伏见桃山”作为陵墓的名称,它并非凭空捏造,而是有着其历史渊源和命名逻辑的。 “伏见”:这是地名。在日本,许多.............
  • 回答
    这几个语言能否仅用汉字书写,是一个很有意思的问题,涉及语言的本质、文字系统的演变以及历史文化的影响。简单来说,答案是:不能,而且过去也从未真正做到过完全用汉字书写。下面我来详细地和您聊聊为什么,以及它们各自的汉字使用情况。 为什么不能完全用汉字书写?根本原因在于,汉字本身是一种表意文字,它记录的是词.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有