zoukankan      html  css  js  c++  java
  • 这些没有可读性的代码,却又体现出程序员对语言的高度理解力

    对于一个程序来说,最重要的自然是“正确性”。在保证了程序运行以及输出结果的正确性之后,我们还会对程序提出其他的要求,比如容错性,可移植性,高效性(运行速度快,使用空间小)等等。

    而为了能够更好地进行维护修改、传播分享、阅读学习,我们还会希望写出来的代码具有“可读性”。也正是为了“可读性”,程序里有了那么多的注释,有代码缩进,语法高亮,甚至还有代码规范。

    在编程的学习过程中,我也被反复强调要写出来可以让人类阅读的代码,而不仅仅是机器能看懂。我也被反复提醒,如果没有注释和文档,过不了几个月我再回头看一定看不懂以前自己都写了些什么东西,干嘛这么写(事实也是如此)。而及时是写注释,也要注意《五种应该避免的代码注释》。

    不过就是有那么一些人,他们不愿意跟从常理,写出的代码完全超出正常程序员的理解能力范围。

    国际模糊C代码大赛

    The International Obfuscated C Code Contest历年会评比出那些最难以阅读的C程序,但是这些程序却又是可执行的,甚至是十分有用的应用。

    最新一届比赛的获胜者,是一个叫akari.c的代码,如果看到它的代码,我想你会说:这是在作画还是在写程序呢。

    我只能欣赏画作,实在无力看出代码的含义,可能只能看看hint来知晓个用途了。

    复制代码
                                           /*
                                          +
                                         +
                                        +
                                        +
                                        [         >i>n[t
                                         */   #include<stdio.h>
                            /*2w0,1m2,]_<n+a m+o>r>i>=>(['0n1'0)1;
                         */int/**/main(int/**/n,char**m){FILE*p,*q;int        A,k,a,r,i/*
                       #uinndcelfu_dset<rsitcdti_oa.nhs>i/_*/;char*d="P%"   "d\n%d\40%d"/**/
                     "\n%d\n\00wb+",b[1024],y[]="yuriyurarararayuruyuri*daijiken**akkari~n**"
              "/y*u*k/riin<ty(uyr)g,aur,arr[a1r2a82*y2*/u*r{uyu}riOcyurhiyua**rrar+*arayra*="
           "yuruyurwiyuriyurara'rariayuruyuriyuriyu>rarararayuruy9uriyu3riyurar_aBrMaPrOaWy^?"
          "*]/f]`;hvroai<dp/f*i*s/<ii(f)a{tpguat<cahfaurh(+uf)a;f}vivn+tf/g*`*w/jmaa+i`ni("/**
         */"i+k[>+b+i>++b++>l[rb";int/**/u;for(i=0;i<101;i++)y[i*2]^="~hktrvg~dmG*eoa+%squ#l2"
         ":(wn\"1l))v?wM353{/Y;lgcGp`vedllwudvOK`cct~[|ju {stkjalor(stwvne\"gt\"yogYURUYURI"[
         i]^y[i*2+1]^4;/*!*/p=(n>1&&(m[1][0]-'-'||m[1][1]  !='\0'))?fopen(m[1],y+298):stdin;
          /*y/riynrt~(^w^)],]c+h+a+r+*+*[n>)+{>f+o<r<(-m]    =<2<5<64;}-]-(m+;yry[rm*])/[*
           */q=(n<3||!(m[2][0]-'-'||m[2][1]))?stdout /*]{     }[*/:fopen(m[2],d+14);if(!p||/*
           "]<<*-]>y++>u>>+r >+u+++y>--u---r>++i+++"  <)<      ;[>-m-.>a-.-i.++n.>[(w)*/!q/**/)
        return+printf("Can "  "not\x20open\40%s\40"    ""       "for\40%sing\n",m[!p?1:2],!p?/*
      o=82]5<<+(+3+1+&.(+  m  +-+1.)<)<|<|.6>4>-+(>    m-        &-1.9-2-)-|-|.28>-w-?-m.:>([28+
     */"read":"writ");for  (   a=k=u= 0;y[u];  u=2    +u){y[k++   ]=y[u];}if((a=fread(b,1,1024/*
    ,mY/R*Y"R*/,p/*U*/)/*          R*/ )>/*U{  */   2&& b/*Y*/[0]/*U*/=='P' &&4==/*"y*r/y)r\}
    */sscanf(b,d,&k,& A,&           i,  &r)&&        !   (k-6&&k -5)&&r==255){u=A;if(n>3){/*
    ]&<1<6<?<m.-+1>3> +:+ .1>3+++     .   -m-)      -;.u+=++.1<0< <; f<o<r<(.;<([m(=)/8*/
    u++;i++;}fprintf   (q,    d,k,           u      >>1,i>>1,r);u  = k-5?8:4;k=3;}else
      /*]>*/{(u)=/*{   p> >u  >t>-]s                >++(.yryr*/+(    n+14>17)?8/4:8*5/
         4;}for(r=i=0  ;  ;){u*=6;u+=                (n>3?1:0);if    (y[u]&01)fputc(/*
          <g-e<t.c>h.a r  -(-).)8+<1.                 >;+i.(<)<     <)+{+i.f>([180*/1*
          (r),q);if(y[u   ]&16)k=A;if                               (y[u]&2)k--;if(i/*
          ("^w^NAMORI; {   I*/==a/*"                               )*/){/**/i=a=(u)*11
           &255;if(1&&0>=     (a=                                 fread(b,1,1024,p))&&
            ")]i>(w)-;} {                                         /i-f-(-m--M1-0.)<{"
             [ 8]==59/* */                                       )break;i=0;}r=b[i++]
                ;u+=(/**>>                                     *..</<<<)<[[;]**/+8&*
                (y+u))?(10-              r?4:2):(y[u]         &4)?(k?2:4):2;u=y[u/*
                 49;7i\(w)/;}             y}ru\=*ri[        ,mc]o;n}trientuu ren (
                 */]-(int)'`';}             fclose(          p);k= +fclose( q);
                  /*] <*.na/m*o{ri{                       d;^w^;}  }^_^}}
                   "   */   return  k-                -1+   /*\'   '-`*/
                         (   -/*}/   */0x01        );       {;{    }}
                                ;           /*^w^*/        ;}
    复制代码

    这位作者的作品还不止这一件,你可以到他的网站上慢慢欣赏。

    C++标准库代码

    C++的标准库是十分常用和实用的工具,特别是里面容器(stl container)执行效率又高,功能简洁又方便,模板实现支持类型又广。

    但是每当不小心step in标准库的模板时,心里就是阵阵悸动。各种模板套模板,一层调一层的,比Inception还要深入。

    复制代码
      template<typename _Tp, typename _Alloc>
        typename vector<_Tp, _Alloc>::iterator
        vector<_Tp, _Alloc>::
        insert(iterator __position, const value_type& __x)
        {
          const size_type __n = __position - begin();
          if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage
          && __position == end())
        {
          this->_M_impl.construct(this->_M_impl._M_finish, __x);
          ++this->_M_impl._M_finish;
        }
          else
            _M_insert_aux(__position, __x);
          return iterator(this->_M_impl._M_start + __n);
        }
    复制代码

    JavaScript

    受到网络传输的限制,为了更好的应用资源让页面呈现得更快。网站开发人员总是会将JavaScript等文件进行压缩,去掉空格去掉空格,定义最简短的变量名。于是乎,很多时候打开一个js文件一看:尽然只有一行代码,但拖动水平滚动条,却怎么也找不到那结尾在哪里。

    当前web开发中很流行的jQuery就是这个典型的例子。

    想从Production版本里看出jQuery是怎么实现的,恐怕眼睛和脑袋都伤不起呢。

    其他

    酷壳coolshell上还有很多好玩的程序,也是叫人看得抓狂却又不惊叹厉害。

    比如《6个变态的C语言Hello World程序》,《如何加密/混乱C源代码》等等。

    写出这些代码的人绝对不是那些2B程序员。他们是牛逼程序员,或者套用流行的说法他们是“文艺程序员”。因为,他们更懂程序是什么,他们掌握程序的规范,他们深知程序的心。

    不过这种艺术不是每个程序员都能学会的,所以我们还是好好做个普通程序员,认真追求正确性,高效性和可读性吧。

  • 相关阅读:
    ActionBar 值 addTab 的小提示
    Android Studio Gradle project refresh failed No such property classpath for class
    Android Studio 初始新建项目时 build gradle project 超级慢的原因
    ActionBar之style出现Cannot resolve symbol 'Theme' 错误
    Android之ActionBar、Tabs、Fragment、ViewPager实现标签页切换并缓存页面
    Linux使用rsync客户端与服务端同步目录进行备份
    Linux服务器导入导出SVN项目
    CentOS6.3配置SVN之subversion1.7.7
    Linux增加swap分区大小
    CentOS6.2编译gcc失败,kernel-headers错误
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2476615.html
Copyright © 2011-2022 走看看