说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

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

HTML文档下载 WORD文档下载 PDF文档下载
每种语言都有自己的独到之处,或奇特的语法,或不常见的函数,或非标准的执行方式。因此,不论新丁还是老手,看着某个特性会突然醉了。本文总结了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使用分号作为语句结束的标志,并且会自行插入,即使是代码断行的情况。因此会常常导致错误的出现。

成因分析:

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

网友们的看法:

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

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

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

问题描述:

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

成因分析:

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

网友们的看法:

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

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

英文出自:ITworld

《近匠》酷传:解除App发布和监控痛苦 有道heX正式开源:用HTML5和NodeJS开发桌面应用 在3D空间创作:英大学生发明增强现实设计产品 2014年3月浏览器份额:Chrome终超Firefox 成市场第二大浏览器 2014年3月操作系统份额:Windows 7大涨,Windows XP仍未跌破27%大关 路透社:iPhone 6仅有4.7寸版本,将于5月量产,5.5寸遭冷冻 高端实战技术培训:OpenStack企业应用之路 据统计,Oracle已击败IBM跃居软件行业第二 【技术博客推荐】2014年值得关注的10个开源项目 Intel在深圳建立智能设备创新中心 将投入1亿美元 免费获得价值1200元Unity2014顶级盛会门票! IBM公布Softlayer中国业务落地时间表 推荐30款最佳的数据可视化工具 数据库迁移测试:选白盒还是黑盒? 东软发布首款英特尔架构企业级移动终端解决方案 英特尔与腾讯创立游戏创新实验室 推进RealSense技术 《近匠》系列沙龙之探寻绝密武器:移动跨平台开发 iOS走向开放:苹果新推iAd Workbench广告服务 腾讯薛伟:快速模型更新在精准广告推荐中的应用 微软Build2014第一天要点精华汇总(组图) Windows 8.1 Update 1五大改变:任务栏回归,增强鼠标支持(图) 【十大院士】怀进鹏:全球的计算模式可能重新形成 微软Build2014第一天应了解的15件事 TypeScript1.0发布,完美支持Visual Studio系列产品 欲与Android展开价格战,微软宣布在移动设备上免费开放Windows 2014深圳英特尔信息技术峰会次日要点汇总 4月4日:微软39周岁,生日快乐! 正式进军硬件市场 Atlassian发布可穿戴设备Bitband 云计算时代IT专业人员需具备的10项技能 【走近院士】李德毅:大数据是连接虚拟和现实世界的桥梁 微软Build2014大会第二天干货总结 Microsoft Azure拥抱Puppet、Chef、MongoDB... 打印vb窗体 有什么办法(产品)实现局域网内 IP 同 MAC 绑定,未经绑定关系建立的机器无法实现通信? 谁能给个关于递归的例子? 个人版的SQL SERVER 2000能提供多少连接阿? 网络GIS开发者联盟诚邀软件界精英,共创伟业 dlink网卡不能FTP? 快过年了,打算给父母还有爷爷奶奶买点东西,大家有什么好的建议? asp.net项目启动运行出错,详细信息如下: 怎样判断数据读取完毕? 求ERP的电子书、资料 如何才能做到c/s结构应用程序(pb开发的mis)访问数据库不安装oracle客户端??谢谢 高分请教做服务器,win2000server ???win2000系统,Epson 1600系列打印机,如何找到"自定义纸张"..谢谢 控件区别? 通过一组checkbox来控制按钮是否为disabled 如何通过SQL语句获取我的ORACLE版本号。 在线等,谢谢了…… 应该开个图书交流的版,大家就不必去买那么贵的新书了 ADOTable与ADOquery同步更新问题?? 给你看一张照片,这两人是谁 市面上的delphi的好书怎么这么少呀?哪位ggjj推荐一本好的delphi书籍!! 关于组件和控件的问题。 兄弟们,分数线出来啦!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! rows菜单update properties下 identity column 列表框作何解? 一个过滤问题 我的系统分析员成绩出来了,气死我了。39,39,55 感觉她作我的GF不错(附照片) 关于excel控件的使用中的第一步 请问哪位有显示CAD文件的组件 用SQL SERVER 2000把数据结构同数据导出到Oracle8i 时 只能够导出结构,why? 忍痛转让 小木可来接分! 各位,在pb里能够用java的类和函数么? 为什么FrameworkSDK里的例子都不能运行? 建议增加《无线应用》板块,包括SMS 函数定义为static有什么作用? 关于postgre,help~~~~~ 怎么在vb的datareport中,显示图片呀!很急,帮忙 谢谢! 邮件问题!控件的用法! 有谁用VC做过面向对象数据库ObjectStore的开发,想交流一下 为什么装了ADSL后经常性死机呢!谢谢 如何打印vb窗体 请大家帮忙看看我的CPU到底是什么烂货!!!谢谢了! 菜鸟急问:如何导入导出DB2整个数据库的结构及数据??立刻结分!! 今天终于考完了最难的一门“机电系统设计” 高兴 && 散粉 应该开个图书交流的版,大家就不必去买那么贵的新书了 关于WebApplication的简单问题!! 有关Delphi中的面向对象程序设计方法 新美国主机到位,经安全运行3周无任何问题,开始销售。 50分买一个C++ Builder 6.0的注册号!!! HELP 温州女大学生月经期飙歌致声带充血猴子喂避孕药 繁殖迅猛甚至已有第五代薄熙来案周四公审 贪污受贿罪状累累(杭州8岁孩子光腚大闹科技馆 称穿衣服河南7警景区裸泳 公安官博作出回应(图文:台州村民种出罕见140斤冬瓜王海宁4名青年戴着耳机没听见呼喊被潮水韩国变性艺人河莉秀杭州遭车祸 随后带临安高中生冒充警察查车 有证表扬没证女儿以患有精神病为由诉母亲贷款合同无杭州男子因玻璃门太干净撞破头 状告商律师买奥巴马图书发现和奥巴马无关 怒三位小伙抢劫忙排练 路遇民警当场露怯杭州水果店招牌掉落 砸断女店员锁骨(舞厅服务生爱上坐台小姐 爱叫人生死相杭州地下车库因大雨进水 仓库蔬菜漂了浦江14岁少年拿着玩具枪抢劫被抓浙江大学4名同年同月同日生男生分同一霸王合同系违法 高桥三家商家受罚户口和亲情的抉择令黑户家庭左右为难浦江男子冒充警察强奸少女 还抢走其3新疆博湖县社区热心居民捐衣物献爱心托里县举行主题成人礼曁民族团结手拉手玛纳斯县真心实意倾听民声 求真务实低新疆托里县四举措加强教育注重“育人”玛纳斯县北五岔镇村级计生药具管理工作和布克赛尔县查和特乡抗灾自救工作全面新疆精河县多举并措促就业托里县纪检委实行党的群众路线教育实践新疆呼图壁县二十里店镇践行焦裕禄精神伊宁市五一小长假旅游收入增长12.1云南干旱致7州市119.97万人受灾舞韵流转中的痴情和守望云南彝良35家煤矿全部停产整顿昆明交警微信平台开通 指尖上对话群众甘肃岷县地震灾区千名干部“上山下乡”多地欲为楼市限购“松绑” 专家称仅靠中国广西向越南移交一名毒贩中国驻哈大使:“亚信”未来或成全亚洲第二届北京 上海市民划船器挑战赛6月山西五台山举行千僧斋法会庆祝佛主圣诞扬州政府转职能放弃“奶酪” 创机会让
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘