首页 后端开发 PHP问题 令程序员费解的10个语言特性

令程序员费解的10个语言特性

Nov 25, 2016 am 09:59 AM

 每种语言都有自己的独到之处,或奇特的语法,或不常见的函数,或非标准的执行方式。因此,不论新丁还是老手,看着某个特性会突然醉了。文中总结了10个经常被提及的“奇异”特性。

    1. Javascript: + 是一个连接符

  问题描述:在JS中,+ 号用在数字间,可以用作常规加法;但如果遇上字符,又可作为字符连接符。例如:’1’+ 1的结果是11。

  成因分析:

  根本性原因是JS属于弱类型语言。比方说Python,同样地使用+ 号作为字符连接符,但由于它是强类型语言,一旦发现一个字符与一个整数进行相加,它会提示这是个错误操作。

  网友们的看法:

  “问题在于这是个无法预料的强制性静默转换,很容易就忽略了。”匿名

  “JS应该就该情况作异常抛出处理。” crgwbr

  “用+来进行字符连接简直是个噩梦。” Matteo Riva

  2. Perl:模块必须返回TRUE值

  问题描述:绝大多数情况下,Perl模块在结束时候,都必须以1;语句来结尾,否则,如果最后一条语句的返回值不是TRUE,系统就会报错了。

  成因分析:

  Perl模块中包含了初始代码和子程序。当模块文件被载入时,Perl会根据是否返回TRUE来判断代码是否成功执行。即使没有初始代码,Perl仍然期望最后的语句需返回TRUE,否则会报错。

  网友们的看法:

  “这个通常让我有不安的感觉。” Drew Hall

  “这是最无实用价值的用法了。”Schwern

  3. C/C++:三字母词用法

  问题描述:

  举例来说,系统看到??!会把它自动转为|,看到??(会转为[。这很容会引起造成意想不到的结果,并且会大大降低代码的可读性。

  成因分析:

  早期进行编程时,键盘上还不能直接打出某些特殊字符,例如大括号。因此用了这种间接的方法。

  网友们的看法:

  “博学如谷歌,也一定看不懂什么是??!??!” Isaac

  “自1977年有了三字母词,C就变得晦涩难懂了。”Martin Beckett

  4. PHP:大小写敏感处理

  问题描述:

  PHP对大小写处理比较混乱,有些地方区分,有些地方不区分。例如:变量名,常量名区分;函数名,方法名,类名不区分。

  成因分析:

  很可能是PHP从CGI脚本集发展成成熟编程语言过程中出现的人工产品。

  网友们的看法:

  “这是为什么PHP程序员习惯用下划线进行函数命名,而不是采取驼峰命名法的原因。”paperstreet7

  “在PHP中,一切皆有可能!”Grzechooo

  5. Ruby:0作为真值

  问题描述:

  在Ruby中,0值等同于TRUE值。这对有C,Python基础的程序员来说不可不谓是一场噩梦。

  成因分析:

  只有布尔值FALSE和nil等价于FALSE,其余的都等同于TRUE。0与1,2,3等都会被相同对待。

  网友们的看法:

  “这简直是让人抓狂,虽然初衷是善意的。” Chris Lutz

  “0==true!我这个C语言脑袋都快崩溃了!”Kenny

  6. Python:以空格数进行层次划分

  问题描述:

  不同于采用关键字或标点符,PY中采用缩进层级来进行层次划分,以明确每一行代码的位置。不正确的空格数(或空格和换位符数不一致)都可能造成程序报错。

  成因分析:

  PY作者的意图是希望代码更为可读,减少不必要的输入,并希望程序员本身应该承担起维护代码清晰度的责任。

  网友们的看法:

  “由衷地说,这是使我对PY敬而远之的根本原因。”wazoox

  “如果我们真的需要类似的强制机制,我们是不是真的太懒了!”Joris Meys

  7. C:数组索引工作模式等同于指针

  问题描述:

  在C中,a[i]和i[a]是可以互换的,两个写法都能得出一样的结果。

  成因分析:

  在C中,对内存块而言,数组与指针是无差别的,就是说:

  a[i] = *(a + i) = *(i + a) = i[a]。

  网友们的看法:

  “在C语言混乱代码比赛中,这毫无价值可言。”Confusion

  “我想这正正揭露了C语言的核心,指针和更直接地与内存打交道。”Michael Neale

  8. Perl’s:预定义变量

  问题描述:

  Perl有一份很长很长的特殊变量列表,里面的名字都是十分繁杂的(尽管有对应的长英文单词)。因此,除非是Perl资深开发人员,否则反复翻阅Perl文档是常有的事。

  成因分析:

  这些变量都有不同的含义,例如:进程ID($$),错误信息($@),正则表达式匹配($^R)。

  网友们的看法:

  “十分令人懊恼!”MatrixFrog

  “对精简型开发者可能是福音。”niXar

  “这些变量的问题是:无法通过谷歌查找得到!” malvim

  9. JavaScript:自动分号插入

  问题描述:

  JS使用分号作为语句结束的标志,并且会自行插入,即使是代码断行的情况。因此会常常导致错误的出现。

  成因分析:

  自动化的本意是为了带来便利,特别是对新手来说。

  网友们的看法:

  “如果我们设计语言的特性时,老把用户看成是傻瓜,那是会出问题的。”Rob Van Dam

  “自动分号插入是JS最让人头疼的地方之一。” fennec

  10. Java:自动装箱(autoboxing)与Integer缓存

  问题描述:

  Java会自动把基础类型数据转为对象(自动装箱),例如把int转为一个Integer对象。同时默认地,缓存Integer对象的取值为-128到127。这样的话,在使用==来比较两个相同取值Integer对象时会出现问题(在-128和127之内是TRUE,其余的是FALSE)

  成因分析:

  自动装箱机制减少了代码输入量,同时Integer缓存提升了处理速度。

  网友们的看法:

  “还好我只是一名C#程序员。” Will

  “这不算什么错误,反而给了我们一个使用原始类型(如:booleans)进行数字处理的理由。”RaviWallau


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

AI程序员哪家强?探索Devin、通义灵码和SWE-agent的潜力 AI程序员哪家强?探索Devin、通义灵码和SWE-agent的潜力 Apr 07, 2024 am 09:10 AM

2022年3月3日,距世界首个AI程序员Devin诞生不足一个月,普林斯顿大学的NLP团队开发了一个开源AI程序员SWE-agent。它利用GPT-4模型在GitHub存储库中自动解决问题。SWE-agent在SWE-bench测试集上的表现与Devin相似,平均耗时93秒,解决了12.29%的问题。SWE-agent通过与专用终端交互,可以打开、搜索文件内容,使用自动语法检查、编辑特定行,以及编写和执行测试。(注:以上内容为原内容微调,但保留了原文中的关键信息,未超过指定字数限制。)SWE-A

揭秘C语言的吸引力: 发掘程序员的潜质 揭秘C语言的吸引力: 发掘程序员的潜质 Feb 24, 2024 pm 11:21 PM

学习C语言的魅力:解锁程序员的潜力随着科技的不断发展,计算机编程已经成为了一个备受关注的领域。在众多编程语言中,C语言一直以来都备受程序员的喜爱。它的简单、高效以及广泛应用的特点,使得学习C语言成为了许多人进入编程领域的第一步。本文将讨论学习C语言的魅力,以及如何通过学习C语言来解锁程序员的潜力。首先,学习C语言的魅力在于其简洁性。相比其他编程语言而言,C语

520程序员专属浪漫表白方式!无法拒绝! 520程序员专属浪漫表白方式!无法拒绝! May 19, 2022 pm 03:07 PM

520将至,年度虐汪大戏他又双叒叕来啦!想看看最理性的代码和最浪漫的告白究竟能碰撞出怎样的火花?下面带你逐一领略最全最完整的告白代码,看看程序员们的浪漫是否能够掳获各位心目中女神的芳心呢?

2023过年,又限制放烟花?程序猿有办法! 2023过年,又限制放烟花?程序猿有办法! Jan 20, 2023 pm 02:57 PM

本篇文章给大家介绍如何用前端代码实现一个烟花绽放的绚烂效果,其实主要就是用前端三剑客来实现,也就是HTML+CSS+JS,下面一起来看一下,作者会解说相应的代码,希望对需要的朋友有所帮助。

接私活挣钱!2023程序员接单平台大全! 接私活挣钱!2023程序员接单平台大全! Jan 09, 2023 am 09:50 AM

上周我们做了一次关于《2023PHP创业》的公益直播,很多同学咨询具体有哪些接单平台,下面php中文网整理了22个还算靠谱的平台,以供参考!

程序员是做什么的 程序员是做什么的 Aug 03, 2019 pm 01:40 PM

程序员的工作职责:1、负责软件项目的详细设计、编码和内部测试的组织实施;2、协助项目经理和相关人员同客户进行沟通,保持良好的客户关系;3、参与需求调研、项目可行性分析、技术可行性分析和需求分析;4、熟悉并熟练掌握交付软件部开发的软件项目的相关软件技术;5、负责向项目经理及时反馈软件开发中的情况;6、参与软件开发和维护过程中重大技术问题的解决;7、负责相关技术文档的拟订等等。

浅析怎么下载安装VSCode历史版本 浅析怎么下载安装VSCode历史版本 Apr 17, 2023 pm 07:18 PM

VSCode历史版本的下载安装 VSCode安装 下载 安装 参考资料 VSCode安装 Windows版本:Windows10 VSCode版本:VScode1.65.0(64位User版本) 本文

2022年最佳的Windows 11终端仿真器列表:Top 15款推荐 2022年最佳的Windows 11终端仿真器列表:Top 15款推荐 Apr 24, 2023 pm 04:31 PM

终端仿真器允许您模仿标准计算机终端的功能。有了它,您可以执行数据传输并远程访问另一台计算机。当与Windows11等高级操作系统结合使用时,这些工具的创造性可能性是无穷无尽的。但是,有很多第三方终端仿真器可用。因此,很难选择合适的。但是,正如我们对必备的Windows11应用所做的那样,我们选择了您可以使用的最佳终端并提高您的工作效率。我们如何选择最好的Windows11终端模拟器?在选择此列表中的工具之前,我们的专家团队首先测试了它们与Windows11的兼容性。我们还检查了他们

See all articles