每一种语言都有自己的独特性,或语法怪异,或函数不常见,或执行方式不规范。所以,不管你是新手还是老手,看着某个特征,都会一下子就醉了。这篇文章总结了10个经常提到的“奇异”特征。1.Javascript:+isaconnector问题描述:在JS中,+号用于数字之间,可以作为正则加法;但如果遇到字符,它也可以用作字符连接器。例如:'1'+1的结果是11。原因分析:根本原因在于JS是弱类型语言。比如Python也使用+号作为字符连接符,但是由于是强类型语言,一旦发现在整数上加上字符,就会提示这是一个错误操作。网友评价:“问题在于这是一个不可预测的强制静默转换,很容易被忽视。”匿名“JS应该处理这种情况的异常。”crgwbr“使用+连接字符是一场噩梦。”马特奥·里瓦2.Perl:modulemustreturnTRUEvalue问题描述:大多数情况下,Perl模块必须以1结尾;语句结束,否则,如果最后一条语句的返回值不为TRUE,系统会报错。原因分析:Perl模块包含初始代码和子程序。当加载模块文件时,Perl会返回TRUE来判断代码是否执行成功。即使没有初始代码,Perl仍然期望最终语句返回TRUE,否则会报错。网友评论:“这通常让我感到不安。”DrewHall“这是最没用的用法。”施文3。C/C++:三字母单词用法问题描述:比如系统看到了??!它将自动转换为|,请参阅??(会被转换成[。这样很容易造成意想不到的结果,而且会大大降低代码的可读性。原因分析:早期编程的时候,一些特殊字符,比如大括号,不能直接在键盘。因此,采用这种间接的方式。网友观点:“如果你像谷歌一样知识渊博,你一定不明白什么是??!?!!艾萨克”自1977年三字词诞生以来,C被遮蔽了。》MartinBeckett4.PHP:case-sensitiveprocessing问题描述:PHP的大小写处理比较混乱,有的地方区分,有的地方不区分。例如:变量名,常量名是区分的;函数名,方法名,类名是原因分析:很可能是PHP从CGI脚本集到成熟的编程语言发展过程中出现的人为产物网友观点:“这就是PHP程序员习惯用下划线进行函数命名的原因而不是驼峰命名。."paperstreet7"在PHP中,一切皆有可能!《grzechooo5.Ruby:0asatruevalue问题描述:在Ruby中,0值等同于TRUE值,这对于有C和Python基础的程序员来说是噩梦。原因分析:只有布尔值FALSE和nil是等价的为FALSE,其余等同于TRUE。0和1、2、3等将一视同仁。网友评论:“这简直是把人逼疯了,虽然初衷是好的。“克里斯·卢茨”0==真!我的C语言脑袋快崩溃了!》kenny6.Python:按空格个数分层划分问题描述:与使用关键字或标点符号不同,PY使用缩进级别进行分层划分,以明确每行代码的位置。空格数不正确(或空格数不一致换位字符)可能会导致程序报错原因分析:PY作者的本意是让代码更具可读性,减少不必要的输入,希望程序员自己负责维护代码的清晰度网友们的看法:“从内心深处,这是我远离PY的根本原因。“wazoox”如果我们真的需要一个类似的执行机制,我们是不是太懒了!《JorisMeys7.C:数组索引工作方式等同于指针问题描述:在C中,a[i]和i[a]是可以互换的,两种写法都能得到相同的结果。原因分析:在C中,对于内存块,数组和指针没有区别,也就是说:a[i]=*(a+i)=*(i+a)=i[a]。网友的看法:“在C语言混淆码竞赛,这个不值钱。“混淆”我认为这只是暴露了C语言的核心,指针和更直接地处理内存。》MichaelNeale8.Perl's:Predefinedvariables问题描述:Perl有很长的特殊变量列表,名字也很复杂(虽然有相应的长英文单词)。因此,除非你是资深的Perl开发者,否则它反复阅读Perl文档是常有的事原因分析:这些变量的含义不同,例如:进程ID($$)、错误信息($@)、正则表达式匹配($^R)。网友们的看法:“很郁闷!“MatrixFrog”可能是精益开发人员的福音。“niXar”变量的问题是它们不能用谷歌搜索!》malvim9.JavaScript:Automaticsemicoloninsertion问题描述:JS使用分号作为语句的结尾,会自己插入,即使代码断了。因此,经常会导致错误。原因分析:初衷自动化是为了带来方便,尤其是对新手来说。网友的看法:“如果我们在设计语言的特性时,总是把用户当成傻瓜,那么就会出现问题。“RobVanDam”自动分号插入是JS中最令人头疼的问题之一。《fennec10.Java:autoboxingandIntegercaching问题描述:Java会自动将基本类型数据转换为对象(autoboxing),例如将int转换为Integer对象。同时,默认情况下,缓存Integer对象的值为——128到127。这种情况下使用==比较两个相同值的Integer对象时会出现问题(-128和127内为TRUE,其余为FALSE)原因分析:Autoboxing机制减少了代码量input,Integercache提高了处理速度网友评价:“还好我只是一个C#程序员。“Will”这不是一个错误,而是给了我们使用原始类型(例如:布尔值)进行数字处理的理由。“拉维瓦劳
