阅读更多

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桌面,移动设备或...

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

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

  • 小米15工程固件 可以用于修改参数 修复tee损坏 修复底层分区 会用的下载

    资源描述: 机型代码:dada 1-----工程固件可以用于修改参数 开启diag端口。可以用于修复tee损坏以及修复底层分区。 2-----此固件是完整官方。不是第三方打包。请知悉 3-----此固件可以解锁bl后fast模式刷写。也可以底层深刷。也可以编程器写入 4-----请会用此固件 了解工程固件常识以及会用的朋友下载。 5-----个别高版本深刷需要授权才可以刷入。需要自己会刷写。 6------资源有可复制性。下载后不支持退。请考虑清楚在下载哦 工程资源常识可以参考博文:https://blog.csdn.net/u011283906/article/details/141815378 了解基本

  • 牙买加太阳能电池板检测7-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar

    牙买加太阳能电池板检测7-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar牙买加太阳能电池板检测-V11 2023-02-09 7:47 PM ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解和搜索非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 对于最先进的计算机视觉培训笔记本,您可以与此数据集一起使用 该数据集包含1406张图像。 太阳能板以可可格式注释。 将以下预处理应用于每个图像: *调整大小为640x640(拉伸) 没有应用图像增强技术。

  • JSP设计班级学生管理系统论文(2024ic).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

  • 基于卷积神经网络的衣服识别系统详细文档+全部资料+优秀项目+源码.zip

    【资源说明】 基于卷积神经网络的衣服识别系统详细文档+全部资料+优秀项目+源码.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

  • 基于卷积神经网络的人脸识别项目详细文档+全部资料+优秀项目+源码.zip

    【资源说明】 基于卷积神经网络的人脸识别项目详细文档+全部资料+优秀项目+源码.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

  • 基于selenium与requests的暨南大学自动健康打卡程序资料齐全+详细文档+高分项目+源码.zip

    【资源说明】 基于selenium与requests的暨南大学自动健康打卡程序资料齐全+详细文档+高分项目+源码.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

Global site tag (gtag.js) - Google Analytics