10大编程语言特性

   每种语言都有自己的独到之处,或奇特的语法,或不常见的函数,或非标准的执行方式。因此,不论新丁还是老手,看着某个特性会突然醉了。文中总结了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

时间: 2024-12-22 09:55:03

10大编程语言特性的相关文章

让程序员都费解的10大编程语言特性_其它综合

每种语言都有自己的独到之处,或奇特的语法,或不常见的函数,或非标准的执行方式.因此,不论新丁还是老手,看着某个特性会突然醉了.文中总结了10个经常被提及的"奇异"特性. 1. Javascript: + 是一个连接符 问题描述: 在JS中,+ 号用在数字间,可以用作常规加法:但如果遇上字符,又可作为字符连接符.例如:'1'+ 1的结果是11. 成因分析: 根本性原因是JS属于弱类型语言.比方说Python,同样地使用+ 号作为字符连接符,但由于它是强类型语言,一旦发现一个字符与一个整数

Win7系统隐蔽的10大安全特性

都说Win7好,用户们可以举出一堆的理由来,界面爽.操作人性化.开着UAC不装杀毒就安全的裸奔.没Vista那么多兼容性方面的破事-- 除了可用性,我想咱们这个时代要求的Windows还必须是安全的,仅仅依靠杀毒软件是远远不够的,必须从根上保证系统的安全,而这个根,就是操作系统. 单纯从操作系统安全性上来说,XP就应该被淘汰的,随便一个用户就有着类似在Windows7下的管理员权限,做事没有任何限制. 好了,下面我们来看下Windows7的10大安全特性,别说,你可能还真不是完全都了解. 1.K

Oracle Database 18c 的10大新特性一览

在 2017 Oracle OpenWorld大会上,关于 Oracle 18c 的一系列新特性已经被披露出来,借助分散在各个会场的公开分享主题和内容.OOW提供的PPT下载,我们和大家抢鲜分享一下 18c 中极具吸引力的新特性. 注意:标题里提到的10仅为约数,文章中提到的新特性不仅10个,分列也只是为了阅读便利,这些特性可能随着版本发布发生改变,仅供参考. 1.自治数据库 - Autonomous Database 首先,从最高级别上,Oracle 18c 将是一个『自治数据库 - Auto

Win8.1正式版10大新特性

Windows 8.1预览版的出现印证了微软高层的这番表态.那么,这个失而复得的"开始"能让老用户满意么?Windows 8.1的开始按钮长什么样? Windows 8.1的开始按钮:点击后进入Metro界面 与Win7不同,Windows 8.1的开始按钮会进入Metro风格的开始界面. 据消息人士透露,Windows 8.1开始按钮的外观有点像Windows 8 Charms条中的"开始图标",点击开始按钮,系统会进入Metro风格的开始界面.不过,Window

GitHub公布10大热门编程语言:Java好猛

美国代码管理服务GitHub周三公布了该平台上最热门的10大编程语言,以及自2008年GitHub成立以来,热门编程语言的变化趋势. GitHub基于Git的分布式版本控制和代码管理功能,而Git是一款命令行工具.GitHub提供了基于网页的图形化界面,并对桌面端和移动端进行了整合. 尽管并不能准确反映当前市面上最热门的编程语言,但由于GitHub正越来越受欢迎,因此这在一定程度上可以体现出编程语言近几年的发展趋势. 以下为GitHub上当前最热门的10大语言: 1.Javascript 2.J

Windows7系统隐蔽十大安全特性

  Windows7很多朋友从一年前就开始"玩"了,说Win7好,他们可以举出一堆的理由来,界面爽.操作人性化.开着UAC不装杀毒就安全的裸奔.没Vista那么多兼容性方面的破事-- 除了可用性,我想咱们这个时代要求的Windows还必须是安全的,仅仅依靠杀毒软件是远远不够的,必须从根上保证系统的安全,而这个根,就是操作系统. 单纯从操作系统安全性上来说,XP就应该被淘汰的,随便一个用户就有着类似在Windows7下的管理员权限,做事没有任何限制. 好了,下面我们来看下Windows7

苹果 iOS 10 中应当借鉴的十大 Android 特性

据9to5Mac网站报道,即使售价180美元(约合人民币1158元)的第三代MotoG智能手机,尽管比最低端的iOS设备--199美元(约合人民币1281元)的iPodtouch还便宜,其相机也足以与苹果旗舰机型iPhone6s媲美.与 苹果的宣传不同的是,Android设备并非一无是处,大品牌100-200美元(约合人民币644-1287元)的Android设备的总体价值高于苹 果售价不足200美元的设备.谷歌过去数年缩小了Android与iOS在总体用户体验方面的差距,增添和优化了部分特性.

机器人行业,10大流行编程语言对比

这是一个许多新入行的机器人专家在他们职业生涯中至少会问一次的问题.不幸的是,这也是一个没有简单答案的问题.在本文中,我们将会审视在机器人学中最流行的10种编程语言,深入探讨它们各自的优缺点以及使用和弃用它们的原因. 这实际上是个很有道理的问题--毕竟,如果你从不付诸实践,那为什么要花大量的时间和精力去学习一种新的编程语言呢?如果作为一名机器人学新人,你当然会想学习一种确实对你的职业生涯很有用的编程语言. 为什么"这个取决于..."是个毫无用处的回答 不幸的是,如果你去问一屋子的机器人学

盘点 Oracle 11g 中新特性带来的10大性能影响

盘点 Oracle 11g 中新特性带来的10大性能影响 原创 2017-08-02 盖国强 数据和云 Oracle的任何一个新版本,总是会带来大量引人瞩目的新特性,但是往往在这些新特性引入之初,首先引起的是一些麻烦,因为对于新技术的不了解.因为对于旧环境的不适应,从Oracle产品到技术服务运维,总是要走过一个磨合的长期过程. 请注意:我们并不推荐大家盲目的关闭和摒弃Oracle的新特性,我们建议大家在遇到问题时,做出适合自己的调整. 就此盘点一下 Oracle 11g 中,那些新特性带来的新