`

【外刊IT评论网】最奇特的编程语言特征

 
阅读更多

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

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

    这种写法相当常见。

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

    10[a] 

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

  2. 在JavaScript里:
     '5' + 3 结果是 '53' 

     '5' - 3 结果是 2 
  3. 在JavaScript里,下面的语法结构
    return
    {
        id : 1234,
        title : 'Tony the Pony'
    };

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

    return {
        id : 1234,
        title : 'Tony the Pony'
    };

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

    return /*
    */{
        id : 1234,
        title : 'Tony the Pony'
    };

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

    return
        2 + 2;
  4. JavaScript的等式对照表:
    ''        ==   '0'           // false
    0         ==   ''            // true
    0         ==   '0'           // true
    false     ==   'false'       // false
    false     ==   '0'           // true
    false     ==   undefined     // false
    false     ==   null          // false
    null      ==   undefined     // true
    " \t\r\n" ==   0             // true
  5. Java里有趣的自动打包(auto boxing)和IntegerCache:
    Integer foo = 1000;
    Integer bar = 1000;
    
    foo = bar; // true
    foo == bar; // false
    
    //然而,如果 foo 和 bar 的值介于 127 和 -128 之间,
    //情况会发生变化:
    
    Integer foo = 42;
    Integer bar = 42;
    
    foo = bar; // true
    foo == bar; // true

    解释

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

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

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

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

  6. 在Java里:
    try {
        return true;
    } finally {
        return false;
    }

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

  7. C++的模板可以做很多奇怪的事情,最好的例证是 “多维模拟排版”,你可以用模板来计算“画出的”形状。下面是一段计算一个3×3矩形的有效的C++代码:
    #include"analogliterals.hpp"
    using namespace analog_literals::symbols;
    
              unsigned int c = ( o-----o
                                 |     !
                                 !     !
                                 !     !
                                 o-----o ).area;

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

      assert( ( o-------------o
                |L             \
                | L             \
                |  L             \
                |   o-------------o
                |   !             !
                !   !             !
                o   |             !
                 L  |             !
                  L |             !
                   L|             !
                    o-------------o ).volume == ( o-------------o
                                                  |             !
                                                  !             !
                                                  !             !
                                                  o-------------o ).area * int(I-------------I) );
  8. PHP处理数字字符
    "01a4" != "001a4"

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

    "01e4" == "001e4"

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

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

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

    IF IF THEN THEN ELSE ELSE

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

  10. JavaScript里八进制的转换:
    parseInt('06') // 6
    parseInt('07') // 7
    parseInt('08') // 0
    parseInt('09') // 0
    parseInt('10') // 10
  11. 在C语言里,你可以把 do/while 语句和 switch 交织在一起,下面就是一个使用这种方法的内存拷贝的例子:
    void duff_memcpy( char* to, char* from, size_t count ) {
        size_t n = (count+7)/8;
        switch( count%8 ) {
        case 0: do{ *to++ = *from++;
        case 7:     *to++ = *from++;
        case 6:     *to++ = *from++;
        case 5:     *to++ = *from++;
        case 4:     *to++ = *from++;
        case 3:     *to++ = *from++;
        case 2:     *to++ = *from++;
        case 1:     *to++ = *from++;
                }while(--n>0);
        }
    }
  12. 在Python中:
    >>> x=5
    >>> 1>> 1
  13. 在Java中:
    int[] numbers() {
      return null;
    }

    可以被写成:

    int numbers() [] {
      return null;
    }

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

http://www.aqee.net/strangest-language-feature/

分享到:
评论

相关推荐

    高中英语外刊阅读语篇精选配套习题答案.doc

    在全球化的今天,英语作为国际通用语言,其重要性不言而喻。高中阶段,作为学生英语学习的关键时期,英语阅读能力的提升更是重中之重。为了帮助学生们有效提高这一能力,本文档《高中英语外刊阅读语篇精选配套习题...

    大学英语外报外刊阅读课件

    外报外刊阅读教学是大学英语教学的重要组成部分,它让学习者有机会接触到最真实、最时效的语言材料。这些材料通常包括国际新闻报道、科技发展新动态、社会现象的深度剖析、以及文化差异的比较研究等多方面内容。通过...

    撰写外刊论文的心得体会.doc

    撰写外刊论文是一项严谨且富有挑战性的任务,尤其对于科研工作者来说,能够在外刊上发表论文是学术成就的重要体现。本文将从5C原则出发,结合撰写论文的Introduction和Methods部分,详细阐述撰写外刊论文的心得体会...

    外刊经贸知识选读词汇.doc

    外刊经贸知识选读词汇.doc

    外刊经贸知识选读lesson.ppt

    外刊经贸知识选读lesson.ppt

    2020-12-11外刊

    在2020年末的某一天,数字医疗这一概念被外刊以“the dawn of digital medicine”为题广泛报道,标志着它作为一种新兴力量在医疗行业中的崛起。从外刊的内容来看,全球正在经历一场以新冠疫情影响为催化剂的医疗革命...

    大学《外刊经贸知识选读》试题.docx

    大学《外刊经贸知识选读》试题.docx

    撰写外刊论文的心得体会.zip

    在IT行业中,撰写外刊论文是一项重要的工作,它不仅能提升个人的专业素养,还能为整个行业贡献新的知识和见解。尤其对于JAVA开发者来说,通过在知名期刊发表论文,可以展示自己在编程、算法优化、系统设计等方面的...

    外刊投稿时用英语与编辑信件交流的葵花宝典

    ### 外刊投稿时用英语与编辑信件交流的关键知识点 #### 一、Cover Letter(投稿信)实用指南 **1. 什么是Cover Letter?** - **定义**:Cover Letter,即投稿信,是在向学术期刊投稿时伴随研究论文一起提交的一封...

    22领学班考研题源外刊精读03.pdf

    - 文档中的“22领学班考研题源外刊精读”表明,IT在教育领域的重要性。数字教材和在线学习平台可以提供丰富的学习资源和互动练习,提高学习效率。 10. 文档管理与阅读习惯: - IT工具可以帮助人们更好地管理和...

    22考研题源外刊精读07.pdf

    根据提供的文件内容,我们可以提炼出以下知识点: 1. 关于痴呆(Dementia)的知识点: - 痴呆是一种精神障碍,随着年龄增长风险增加。 - 记忆力减退、困难并非全是痴呆的症状,与年龄相关的记忆丧失和痴呆症状有...

    外刊经贸知识选读真题试题及答案解析.docx

    这些题目涵盖了多个英语语法和词汇知识点,主要针对经贸领域的学习者。...以上是根据题目内容解析出的英语语法和词汇知识点,这些都是经贸知识选读中常见的语言点,对于提升英语阅读理解能力和职业考试准备非常有帮助。

    22考研题源外刊精读01笔记.pdf

    从提供的文件内容来看,这是一份关于考研英语阅读技巧的笔记,主要围绕如何精读外刊文章,以及对其中一些词汇和句型的解析。本知识点梳理将涵盖阅读技巧、词汇详解、逻辑结构分析、考研阅读策略等方面。 首先,文件...

    获取100多种英文外刊 & 20多种中文杂志持续快速更新的方法!!!

    获取100多种英文外刊 & 20多种中文杂志持续快速更新的方法!!!

    一个令人惊异的利用纯CSS 3D动画特效功能制作的展示

    一个令人惊异的利用纯CSS 3D动画特效功能制作的展示页面 外刊IT评论网 impress.js_files

    外刊看世界-优选词表.exe

    外刊看世界-优选词表.exe

    外刊论文撰写的五个基本要求.doc

    3. 简洁性(Concision):避免冗长和重复,用最简洁的语言表达复杂的思想。每个段落、句子甚至词语都应精炼且有其存在的必要性。 4. 完整性(Completion):论文需要包含所有必要的部分,如Introduction、Methods、...

    撰写外刊论文的心得体会(4).doc

    在科研写作的世界中,撰写外刊论文是一个展现研究者专业能力与深度的重要平台,而其中的“Discussion”环节,更是研究成果得以升华的转折点。作为科研工作者,我深刻理解这一环节的重要性,并在实践过程中积累了一些...

    外刊经贸知识选读全部课文翻译.doc

    外刊经贸知识选读全部课文翻译.doc

Global site tag (gtag.js) - Google Analytics