目前为止,据我个人观察,从语法角度上讲,最被人诟病的一种语言应该是LISP语言了。打开这种语言的代码,一眼望去,满目全是括弧,一层套一层。 这种语言特征最大的问题是,它不符合人们通常的思维习惯。LISP语言的这个特点是个整体的语言现象,而任何一种语言其实也都有一些个别的很奇特的东西,其中有些会奇怪的让你摸不着头脑。有一个好事者在一个帖子上征集各种语言里不合常理的地方,结果收集到了320多条,问题最大最多的语言算是Javascript了,另外还有C,Java,Python,PHP等等。下面列出的是其中最有趣的几条。

1.在C语言里,数组可以这样索引取值:

 
  1. a[10]

这种写法相当常见。

然而,还有一种很少见的写法(绝对可用!)是这样的:

 
  1. 10[a]

这两种写法的效果是一样的。

2.在JavaScript里:

 
  1. '5' + 3 结果是 '53'

 
  1. '5' - 3 结果是 2

3.在JavaScript里,下面的语法结构 return

 
  1. {
  2. id : 1234,
  3. title : 'Tony the Pony'
  4. };

会提示语法错误:”缺少分号”。而下面的写法却能按你预想的结果运行:

 
  1. return {
  2. id : 1234,
  3. title : 'Tony the Pony'
  4. };

更让人郁闷的是下面的写法竟然可以(至少在谷歌浏览器里是这样的):

 
  1. return /*
  2. */{
  3. id : 1234,
  4. title : 'Tony the Pony'
  5. };

下面的例子也是同样的问题引起的,但不会报错,而你却得不到想要的结果:

 
  1. return 2 + 2;

4.JavaScript的等式对照表:

 
  1. ''        ==   '0'           // false
  2. 0         ==   ''            // true
  3. 0         ==   '0'           // true
  4. false     ==   'false'       // false
  5. false     ==   '0'           // true
  6. false     ==   undefined     // false
  7. false     ==   null          // false
  8. null      ==   undefined     // true
  9. " \t\r\n" ==   0             // true

5.Java里有趣的自动打包(auto boxing)和IntegerCache: Integer foo = 1000;

Integer bar = 1000;

 
  1. foo = bar; // true
  2. foo == bar; // false

//然而,如果 foo 和 bar 的值介于 127 和 -128 之间,

//情况会发生变化:

 
  1. Integer foo = 42;
  2. Integer bar = 42;
  3. foo = bar; // true
  4. foo == bar; // true

解释在Java源代码里你很快能翻出下面的内容:

 
  1. /**
  2. * Returns a Integer instance representing the specified
  3. * int value.
  4. * If a new Integer instance is not required, this method
  5. * should generally be used in preference to the constructor
  6. * {@link #Integer(int)}, as this method is likely to yield
  7. * significantly better space and time performance by caching
  8. * frequently requested values.
  9. *
  10. * @param i an int value.
  11. * @return a Integer instance representing i.
  12. * @since 1.5
  13. */
  14. public static Integer valueOf(int i) {
  15. if (i >= -128 && i

注意; IntegerCache.high 的值,如果你不设置它,缺省是 127。

自动打包(auto boxing)过程中发生的事情是:除非显式的创建:比如 foo = new Integer(42) ,否则 foo 和 bar 都是从缓存中取出的整数,当比较值时,它们会返回 true。正确的比较Integer的方式是使用 .equals 。

6.在Java里:

 
  1. try {
  2. return true;
  3. } finally {
  4. return false;
  5. }

在Python和JavaScript也可以这样写。这样写的结果是什么?当作一个保留的问题考考大家吧。

7.C++的模板可以做很多奇怪的事情,最好的例证是 “多维模拟排版”,你可以用模板来计算“画出的”形状。下面是一段计算一个3×3矩形的有效的C++代码:

 
  1. #include"analogliterals.hpp"
  2. using namespace analog_literals::symbols;
  3. unsigned int c = ( o-----o
  4. | !
  5. ! !
  6. ! !
  7. o-----o ).area;

这还有一个3D立方体的例子:

 
  1. assert( ( o-------------o
  2. |L \
  3. | L \
  4. | L \
  5. | o-------------o
  6. | ! !
  7. ! ! !
  8. o | !
  9. L | !
  10. L | !
  11. L| !
  12. o-------------o ).volume == ( o-------------o
  13. | !
  14. ! !
  15. ! !
  16. o-------------o ).area * int(I-------------I) );

8.PHP处理数字字符

 
  1. "01a4" != "001a4"

如果两个字符串来的字符数不相等,它们不可能相等。前面的零非常重要,因为他们是字符而不是数字。

 
  1. "01e4" == "001e4"

PHP不太喜欢字符,它会寻找任何的借口来把你提供的值当作数字。把这些十六进制的字符串稍微做些改动,PHP马上认为它们不再是字符,而是数字。 它们是按科学计数法写的数字(PHP并不在意你是否用了引号),它们是相等的,因为对于数字来说,前面的零是可以忽略的。更强化这个事实的例子是,你会发 现PHP认为 “01e4″ == “10000″ 是正确的,因为作为数字,它们的值是相当的。这是一个被特别提醒的语言特征,原因就是它不太合理。

9.在一些没有保留字、关键字的语言里,例如PL/I, 你可以写出这样有趣而且合法的代码语句:

 
  1. IF IF THEN THEN = ELSE ELSE ELSE = THEN

(IF, THEN, ELSE 都是变量名),或

 
  1. IF IF THEN THEN ELSE ELSE

(IF 是变量,THEN 和 ELSE 都是函数)

10.JavaScript里八进制的转换:

 
  1. parseInt('06') // 6
  2. parseInt('07') // 7
  3. parseInt('08') // 0
  4. parseInt('09') // 0
  5. parseInt('10') // 10

11.在C语言里,你可以把 do/while 语句和 switch 交织在一起,下面就是一个使用这种方法的内存拷贝的例子:

 
  1. void duff_memcpy( char* to, char* from, size_t count ) {
  2. size_t n = (count+7)/8;
  3. switch( count%8 ) {
  4. case 0: do{ *to++ = *from++;
  5. case 7: *to++ = *from++;
  6. case 6: *to++ = *from++;
  7. case 5: *to++ = *from++;
  8. case 4: *to++ = *from++;
  9. case 3: *to++ = *from++;
  10. case 2: *to++ = *from++;
  11. case 1: *to++ = *from++;
  12. }while(--n>0);
  13. }
  14. }

12.在Python中:

 
  1. >>> x=5 >>> 1>> 1

13.在Java中:

 
  1. int[] numbers() { return null; }

可以被写成:

 
  1. int numbers() [] {
  2. return null;
  3. }

如果你觉得还没看够,请到这里,还有更多。

最奇特的编程语言特征相关推荐

  1. python需要的开发特点_Python编程语言特征

    Python编程语言特征 1.Python语法优雅,程序编码简单易读. 2.Python易上手,通过简单的操作就能让你写的程序运行.Python非常适合用来做原型开发或其他专门的编码任务,同时又不用为 ...

  2. python语言的特点支持中文_Python编程语言特征

    详细内容 Python编程语言特征 1.Python语法优雅,程序编码简单易读. 2.Python易上手,通过简单的操作就能让你写的程序运行.Python非常适合用来做原型开发或其他专门的编码任务,同 ...

  3. 最奇特的编程语言的特征

    目前为止,据我个人观察,从语法角度上讲,最被人诟病的一种语言应该是 LISP 语言了.打开这种语言的代码,一眼望去,满目全是括弧,一层套一层.这种语言特征最大的问题是,它不符合人们通常的思维习惯.LI ...

  4. 一种奇特的DEDE隐藏后门办法

    ? 15:24 / 28 一种奇特的DEDE隐藏后门办法 单位某站用的dedecms,今天被某黑阔getshell了,提交到了wooyun. 为了还原黑阔入侵的手法,用鬼哥的getshell测试居然没 ...

  5. 外刊IT网站经典计算机开发,评论,总结文章汇总共享

    全部文章 ·        2013年十二月 (19) ·        25: 辞掉你的工作,去开发一个应用:我的创业故事 (5) ·        24: 你是一个努力工作的程序员吗?还是一个懒惰 ...

  6. Facebook 开源 Skip,面向对象+函数式编程语言

    开发四年只会写业务代码,分布式高并发都不会还做程序员?   近日,Facebook 开源了全新语言 Skip,这是 Facebook 内部开发的一个实验性质编程语言,Facebook 表示,Skip ...

  7. HttpWatch工具简介及使用技巧

    joan 私は张で QQ:774199038 HttpWatch工具简介及使用技巧(转载) 一 概述: HttpWatch强大的网页数据分析工具.集成在Internet Explorer工具栏.包括网 ...

  8. python封装enclosure

    封装enclosure 封装是指隐藏类的实现细节,让使用者不关心这些细节 封装的目的是让使用者能过尽可能少的方法或属性操作对象 python的封装是模拟的封装 私有属性和方法: python类中以双下 ...

  9. 我们并非生活在“虚幻世界”宇宙或是三维空间

    2019独角兽企业重金招聘Python工程师标准>>> 北京时间10月18日消息,据国外媒体报道,当人们谈到量子力学时,有许多我们无法解释的离奇现象,例如:量子力学叠加.量子隧穿(q ...

最新文章

  1. hive连接mysql的配置_Dbeaver连接Hive和Mysql的配置
  2. Windows Phone 7 MVVM模式通讯方式之实现Command
  3. SpringMVC框架介绍
  4. 20、HTML <textarea>标签(文本域)
  5. oracle 表结构语句,oracle查询表结构语句
  6. C++STL中swap函数操作与内存地址改变的简析
  7. 如何在anaconda环境下安装tensorflow/pytorch/keras等
  8. My SQL 学习笔记二
  9. 借助xxl-sso实现SSO
  10. (转)MyBatis框架的学习(二)——MyBatis架构与入门
  11. 自定义Excel中的快捷键(Alt +1)
  12. 论文笔记_S2D.54_2020-TIP_用于精确深度估计的无监督多视图约束卷积网络
  13. 手机12306买卧铺下铺技巧_购买火车票下铺实用技巧
  14. bartender连接oracle,设置BarTender打印用的数据库连接
  15. 第三章 硅谷宠儿 Friendster (一)
  16. java工厂模式应用场景_详解Java设计模式之《简单工厂模式》
  17. 【卸载双系统中的linux系统】删除引导
  18. java实现Blowfish算法加密解密
  19. 计数器+按钮控制数码管显示
  20. HTML5 validity api,html5 form-Validity验证函数

热门文章

  1. 字符数组没赋值时显示屯屯屯屯屯屯屯屯屯的原因
  2. 转 ORACLE CASE WHEN 及 SELECT CASE WHEN的用法
  3. 手机不支持SD卡扩展
  4. 如果解除计算机密码,如何强制解除电脑开机密码win7教程
  5. R语言layout () 函数
  6. 七 不同快门速度的不同照片
  7. Digia全面收购诺基亚Qt业务
  8. java sql update 语句_java – SQL如何使用一个SQL语句更新表行
  9. 远程监控服务器图片,基于WEB服务器实现监控系统的视频图像显示
  10. linux服务器查看历史,linux如何查看历史命令