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

令程序员费解的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

Cocos2d-x游戏《Monster Strike》终结《智龙迷城》霸榜神话 高通物联网技术解决方案:从汽车到智慧城市 Arduino携手Atmel 发布Arduino Zero开发板 以色列玫瑰:细数十位科技创新领域的女性佼佼者 8款最佳的开源在线学习CMS系统 在发布站点前,Web开发者需要关注哪些技术细节? TOCC、中航信、高德、北斗平台重磅专家登场 邀您共享ITS技术盛宴 腾讯大数据之TDW计算引擎解析——Shuffle AMD APU14 BEIJING技术创新大会精彩看点 这是云整合时代开始的节奏吗?Rackspace考虑退出 一周热点:如何使用15美元每月的机器实现百万文档检索 黑客获取数据信息的目的和进攻手段及应对之策 Surface Pro 3遭大曝光:799$起、四色可选、12寸屏幕 当软件遇上设计,浅谈敏捷UX VS.精益UX DIY“物联网”——自己动手处理传感器数据 AMD成首家X86+ARM双架构计算 欲寻新蓝海 锤子手机发布:Smartisan T1与其背后的开发团队 第六届中国云计算大会在北京隆重举行 替代笔记本的Surface Pro 3:800g、9.1mm,极致轻薄 PWorld2014:畅谈企业软件向“大平台”+“微应用”变革 微软公司全球资深副总裁张亚勤:云计算引领互联网物理化 亚马逊网络服务全球市场副总裁Ariel Kelman:亚马逊AWS云服务推动创新 终超苹果,谷歌成全球最有价值品牌 高通业务拓展总监沈周全:以软件为基础建立差异化优势 设计你所需要的,而不是你想要的 疯狂谷歌建广告天网:电冰箱、汽车仪表盘、恒温器、眼镜和手表 开发者眼中的编程语言…… 寻下一突破口?黑莓推Project Ion项目,正式进军物联网 无人驾驶汽车真的要来了:飞思卡尔研制视觉芯片 支持物联网开发! Qt发布5.3版与嵌入式企业版 5月23日:Java已经19岁啦! 这几天心里赌的慌,女友怎么能够这样! api中怎样初始时就最大化 小问题,在线等....好了就结分 怎么样检查这些端口是做什么的? 我读取数据集的时候,为什么会产生越界的异常? 如何通过超链接传值到下一页 谢谢 如何把当前时间组合成一个字符串? 请教大家一个问题: 请教大家一个问题: 本人给出配置表,请问路由器配置好之后,客户机网上邻居--》本地连接该怎么设置? 提问:页面如何顶边??? 难道嗳!!! 如何在几个窗体之间进行数据传递 请问:为什么编译无错,但生成。EXE文件时却有错,我是在卸载中文VC后安装英文版的 高手们,有一事不明! 郁闷~~ 调用VCDLL的参数传递问题 各位好心的大哥帮帮我,救救我~~~~~~我在线等待~~~~~~~~~ 六七十年代发生的几件很牛B的事情【转载】 求一存储过程写法 select ....union windows xp上oracle 816的数据库服务进程不能启动 image字段的处理? 今天我开始上班了 数据判断加分 关于注册用户问题 请教关于时间类型的问题 如何获取一个字符串中中文字符的个数?100分 如何用api获取cpu的processorId? 如何获取一个字符串中中文字符的个数?100分 神啊,救救我吧! 能把bcb6的程序转换成bcb5的吗? 如何获取服务器时间? 万分紧急,请大哥们帮小弟!!!!!!!!我在线等待高手相救 请教关于连接数据库的问题 如何把当前时间组合成一个字符串? 如何使SOAP客户端的web引用的url变成程序中设置(就是不写死了),又不需要重新编译客户端程序的! 我在运行某些程序的时候,为什么会出现office2000的安装进程,还要叫我放入off2000的安装盘??? 请问Oracle触发器里能执行Grant语句吗?? 关于DBGRID字段显示问题 连接时出现这样的提示,可能的问题在那里? 碰到一个几乎让我晕倒的问题!! 紧急提问:我的小型机死机了,怎么样关闭安全的关闭数据库,在重新启动小型机?在线... access有没有光盘路径的设置? 如何让DBGrid控件显示指定的数据 谁有photoshop7.0的注册码?在线等待,立即给分 如何在vfp中实现将表保存在硬盘上(用命令) 关于水晶报表的问题.很急.... 学unix下的c++编程看什么书好? 问个简单问题,在vb.net中无法新建web应用程序 求救.我做的一个网站,打开时会自动跳出一个别的网站.怎么办啊? 《桃花源记》中的“缘溪行”的“缘”字意思是:顺着,沿着与那后面的“林尽水源”是否矛盾?顺着溪流应该就是顺着溪水的流向嘛,那怎么会到了源头呢? 共有1428个球,每5个装1筒,装完后还有3个,一共装了多少筒怎么列方程 桃花源记中林尽水源的尽是什么意思? 《桃花源记》中“林尽水源”的“尽”是什么意思? 有乒乓球1428个,每5个装一筒,装后还剩3个,一共装了多少个? 公与之乘.战于长勺.意思 公与之乘战于长勺乘中之的作用 两岁的宝宝还不大会讲话,简单的词能说,句子就不会说,比如吃饭,就会说饭,拿碗就说碗,这是正常的吗 孩子已经三周岁半了 [只能叫爸爸 妈妈之类简单词]怎么办 与"毫不示弱"相关的词语 爱护校园,我们能做到什么?谁有相关文章? 广西一米粉店夫妇被枪击一死一伤 行凶第二季中国好声音总决赛短信中奖观众信巴西强盗入室抢漫画美国:电视仍占据儿童一半屏幕时间转基因食品争论 英法态度迥相异美一男子喝红牛饮料后死于心脏病 家人卢浮宫藏品首次来华公开展览 现地中海奥尔布赖特:中美关系发展至关键期应抓茶党加速美国政坛裂变 抓住政府软肋屡韩国9月经常项目收支连续20个月保持利比亚运钞车遭抢 劫匪抢走总计数千万如何分析涨跌停板的成交量【营销案例】会玩热点营销 卖房何必等试驾吉利新远景:高性价比居家之车找到了!请全公司喝健康下午茶的新方法【识局突发】昆山一化工厂爆炸,央视称雨雾天行车 开远光灯视线更差晒图有奖 | 100份超级番茄求认领揭秘娱乐圈中“一见钟情”的夫妻明星白露今至,这五种食物滋补正当时汽车另类毛病解决之道我率全军誓一死报国:明末猛将“卢阎王
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘