阅读更多

3顶
0踩

非技术

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

 

 英文出自:ITworld

  • 大小: 138.9 KB
来自: CSDN
3
0
评论 共 4 条 请登录后发表评论
4 楼 hoarhoar 2014-09-21 21:18
jackra 写道
mfkvfn 写道
Java的instanceOf也不好。即不是面向对象的用法,也不能接受变量作参数。

兄弟,instanceOf是个运算符,跟“=”“>”是一样的。这东西真不是一个函数。

Class对象的isinstance方法正是你想要的,这个可是能接收参数的。
3 楼 jackra 2014-09-20 16:08
mfkvfn 写道
Java的instanceOf也不好。即不是面向对象的用法,也不能接受变量作参数。

兄弟,instanceOf是个运算符,跟“=”“>”是一样的。这东西真不是一个函数。
2 楼 mfkvfn 2014-09-19 09:11
Java的instanceOf也不好。即不是面向对象的用法,也不能接受变量作参数。
1 楼 文仁126520 2014-09-18 17:19
不明觉厉

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 让程序员都费解的10大编程语言特性

    主要介绍了让程序员都费解的10大编程语言特性,本文罗列了如javascript、Ruby、Java等语言中让人费解的10个语言特性,需要的朋友可以参考下

  • 让程序员费解的几大语言特性,网友:程序员这么难,没有被逼疯吧?

    文中总结了10个经常被提及的“奇异”特性。 1. Javascript: +是一个连接符 问题描述:在JS中,+ 号用在数字间,可以用作常规加法;但如果遇上字符,又可作为字符连接符。例如:’1’+ 1的结果是11。 成因分析: ...

  • 程序员必知的10个C语言技巧

    这10个C语言技巧(C语言仍然是常见的选择)可以帮助设计师避免因基础性错误而导致某些缺陷的产生,并造成维护方面的困扰。为了成功的推出一个产品,软件开发过程本身需要经历无数的实践风险和障碍。任何工程师最不...

  • 一个高效程序员的45个习惯-文末送脑图

    一个重大的错误应该被当做一次学习而不是指责他人的机会,...如果你找到了解决办法,但代码还是令人费解,那么只能重构,让它可读性更强。如果你没有理解那段代码,就不要轻易否定和重写它们跟踪技术变化,你不需要精通

  • C# 程序员易犯的 10 个错误

    针对CLR的开发语言得益于如跨语言集成的性能,异常处理,安全性增强,组件交互的简化模型,调试和分析服务。对于今日的CLR来说,C#是定位到Windows桌面,移动设备或服务器环境中,在处理复杂,专

  • python里输入3.14*2会出现数据报错_Python程序员的30个常见错误

    导读:在这篇文章中,我将总结新老Python程序员常犯的一些错误,以帮助你们在自己的工作避免犯同样或类似错误。作者:Mark Lutz译者:伯乐在线 - 果果夫斯基来源:http://blog.jobbole.com/69834/在这篇文章中,我将...

  • 学 C 语言,最经典的书有这样几本

    选择C语言的理由 在过去40多年里,C语言已成为最重要、最流行的编程语言之一。它的成长归功于使用过的人都对它很...C是一门流行的语言,融合了计算机科学理论和实践的控制特性。C语言的设计理念让用户能轻松地完成自

  • Python程序员的24个常见错误

    在这篇文章中,我将总结新老Python程序员常犯的一些错误,以帮助你们在自己的工作避免犯同样或类似错误。 Python干净的设计,一旦你学会了Python,你就能自动的避开很多陷阱。Python在其各组件之间有着最小的互动,...

  • 高效程序员的45个习惯

    本文转载 《高效程序员的45个习惯》一书 目录 第1章 敏捷---高效软件开发之道 第2章 态度决定一切 1.做事 2.欲速则不达 3.对事不对人 4.排除万难,奋勇前进 第3章 学无止境 5.跟踪变化 6.对团队...

  • Java程序员不喜欢Golang的地方

    从我开始使用这种语言的第一天起,我就迅速爱上了它。它提供了令人难以置信的简单性,同时保持了出色的类型安全和快如闪电的编译。它的执行速度非常快,并发性是一流的(这是一种轻描淡写的说法),标准库有大量的...

  • JavaScript学习笔记--【黑马程序员】

    目录 一、编程语言 1.1 编程 1.2 计算机语言 1.3 编程语言 1.4 翻译器 1.5 编程语言和标记语言区别 总结 二、计算机基础 2.1 计算机组成 2.2.数据存储 2.3 数据存储单位 2.4 程序运行 三、HTML中的JavaScript 1....

  • (转)C# 程序员易犯的 10 个错误

    C#是针对微软公共语言运行库(CLR)的开发语言之一。针对CLR的开发语言得益于如跨语言集成的性能,异常处理,安全性增强,组件交互的简化模型,调试和分析服务。对于今日的CLR来说,C#是定位到Windows桌面,移动设备或...

  • 程序员的五种不同寻常的特质

    程序员身上有很多特质,用通俗点的话说,是“易黑体质”,但同时优秀程序员也有很多体质。因此,如果你认为自己缺少下面的某些品质,千万别往心里去。不是一时兴起才来探讨这些,其中的很多迹象来自于对其他程序猿的...

  • wheel-0.9.6-py27-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

  • 基于ssm布卡维纳红酒网页平台.zip

    基于ssm布卡维纳红酒网页平台.zip

  • 基于SSM的旅游管理系统.zip

    基于SSM的旅游管理系统.zip

  • 菜鸟驿站(诚毅小高层对面厂房内) 2.m4a

    菜鸟驿站(诚毅小高层对面厂房内) 2.m4a

  • tensorflow_ranking-0.4.0-py2.py3-none-any.whl

    算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

  • 物联网系统运维,NFS存储部署,NFS软件安装

    物联网系统运维,NFS存储部署,NFS软件安装:查询是否安装,配置好防火墙,以免默认的防火墙策略禁止正常的NFS共享服务。开启防火墙,在NFS服务器上建立用于NFS文件共享的目录,并设置足够的权限确保其他人也有写入权限。在NFS服务器上建立用于NFS文件共享的目录,并设置足够的权限确保其他人也有写入权限。启动和启用NFS服务程序。由于在使用NFS服务进行文件共享之前,需要使用RPC(Remote Procedure Call,远程过程调用)服务将NFS服务器的IP地址和端口号等信息发送给客户端。因此,在启动NFS服务之前,还需要顺带重启并启用rpcbind设置完毕 打开克隆机修改网卡后重启网卡并测试能否联网服务程序,并将这两个服务一并加入开机启动项中。查看服务器共享的文件数据在NFS客户端创建一个挂载目录。使用mount命令并结合-t参数,指定要挂载的文件系统的类型,并在命令后面写上服务器的IP地址、服务器上的共享目录以及要挂载到本地系统(即客户端)的目录。如果希望NFS文件共享服务能一直有效,则需要将其写入到fstab文件中:

Global site tag (gtag.js) - Google Analytics