代码样式的另类风格!开眼

18-10-15 banq
                   

有许多优秀,整洁的代码风格指南。这些标准包括缩进,空格,行长度,命名约定等。一些著名的例子是:

流行风格也有很多信息,历史,工具等。是否受够了他们?让我们来看看一些鲜为人知的候选方案!

Bournegol

让我们从最著名的替代代码风格开始吧!Bournegol是Steven Bourne在sh源代码中使用的C编码风格。它使C看起来更像Algol,有些人认为它具有更好的语法。以下是

main.c:

 /* command loop */
  LOOP  tdystak(0);
    stakchk(); /* may reduce sbrk */
    exitset();
    IF (flags&prompt) ANDF standin->fstak==0 ANDF !eof
    THEN  IF mailnod.namval
          ANDF stat(mailnod.namval,&statb)>=0 ANDF statb.st_size
          ANDF (statb.st_mtime != mailtime)
          ANDF mailtime
      THEN  prs(mailmsg)
      FI
      mailtime=statb.st_mtime;
      prs(ps1nod.namval); alarm(TIMEOUT); flags |= waiting;
    FI

    trapnote=0; peekc=readc();
    IF eof
    THEN  return;
    FI
    alarm(0); flags &= ~waiting;
    execute(cmd(NL,MTFLG),0);
    eof |= (flags&oneflg);
  POOL
<p>

看起来没有大括号!这是一个非常好的例子,说明了如何使用C预处理器来看似修改C的语法。所有sh源文件都可以在这里找到 。

对于任何希望在自己的代码中使用此代码样式的人来说,其实现的宏代码在mac.h中。提取如下:

#define LOCAL  static
#define PROC  extern
#define TYPE  typedef
#define STRUCT  TYPE struct
#define UNION  TYPE union
#define REG  register

#define IF  if(
#define THEN  ){
#define ELSE  } else {
#define ELIF  } else if (
#define FI  ;}

<p>
关于Bournegol的其他帖子,请看 这里 和

诗歌

代码可以是一种艺术形式。虽然函数通常放在代码中的形式之前,但是打破趋势并产生本身很美的源代码并没有什么坏处。

形式最简单,代码诗可以是具有对齐的代码,用于产生类似诗歌的效果。例如@mraleph的这条推文:

格式化代码的新创新方式:编程是一门艺术,每个节目都是一首诗。pic.twitter.com/Sf2MsnQlOM

另一个应用于我的项目(c-calculator)中心对齐的例子:

// splits the expression into tokens (a makeshift linked list structure)
         // returns a pointer to the list, or NULL if tokenizing failed
      linked_list * tokenize(char exp[], const double * const last_answer,
                         const double * const memory) {

                               // setup variables
                 linked_list * tokens_head = new_linked_list();
                bool first = true; // true while at first token
                         token previous = {NOTHING, 0};
                        token temp_token = {NOTHING, 0};

                 // insert a token if there was a last answer,
                    //  and the first thing is an operator.
                           if (last_answer != NULL) {
                               switch (exp[0]) {
                                   case '-':
                                   case '+':
                                   case '*':
                                   case '/':
                                   case '^':
                                   case '#':
                           temp_token.type = LITERAL;
                        temp_token.value = *last_answer;
                 previous = add_token(tokens_head, temp_token);
                                 first = false;
                                     break;
                                       }
                                       }

<p>
相当令人愉悦!好消息是这种风格也容易在Vim中自动应用。假设你遵守标准的80字符行限制,可以简单地运行
:%center 40 就能
格式化整个文件啦。

诗歌代码造型并不止于此!人们可以融入更多的诗意元素来制作真正的艺术作品。 code-poetry.com包含一些杰作。

斐波那契缩进

缩进缩进一直是热门话题。标签或空格?两个,四个,甚至八个空格?让我们添加一个新选项!欢迎来到Fibonacci缩进数量。

@RichardWestenra在推特上宣传斐波那契缩进风格:

摘录
就个人而言,就个人而言,我更喜欢按照Fibbonaci序列增加的缩进空格:pic.twitter.com/x5lPd4M5Mk

当代码深度嵌套时,这种风格特别好,产生一个很好的曲线效果。甚至还有一个用于自动享受斐波那契缩进乐趣的vim插件!下面是来自存储库的截屏,显示了它的整洁程度。

大括号 - > Python风格

 Python有一个干净的语法,没有所有那些凌乱的分号和大括号。如果您的眼球无法处理所有额外的标点符号,这种代码风格适合您。这里介绍一种很简单的风格:只需在语法结束行之前添加空格,直到它们超过允许的最大行长度。来源是来自reddit的帖子,这表明,即使Java可以合适的款式看起来很漂亮。

下面一个具有这种风格的一些Rust代码的快速示例。Rust是一种语法繁重的语言,很明显,代码现在更清晰,更易于阅读。也就是说,如果忽略超过80个字符行长度限制的所有内容...;)

 

fn run() -> io::Result<()>                                                      {
    let mut args = env::args()                                                  ;

    let _procname = args.next()                                                 ;

    let ifname: String = match args.next()                                      {
        Some(arg) => match arg.as_ref()                                         {
            "--help" | "-h"                                                     =>{
                help()                                                          ;
                return Ok(())                                                   ;}
            s                                                                   =>
              s.to_owned()                                                      ,},
        None                                                                    =>{
            ".".to_owned()                                                      }};

    let ft = fs::metadata(&ifname)?.file_type()                                 ;

    if ft.is_dir()                                                              {
        process_dir(ifname)                                                     }
    else                                                                        {
        process_file(ifname)                                                    }}

<p>
混淆Obsfucation

我想这可以合法地称为风格。有趣的是,它可能是迄今为止使用最广泛的代码风格。大量生产性Javascript代码被缩小,代码变得彻底混淆了。当然,这种至简风格确实不适合由人类直接编辑。除非你进入逆向工程。在国际混淆C代码竞赛等竞赛中,竞争对手也使用了它作为一种风格,阴谋?例如,您能猜出这段代码的作用吗?

char O,o[];main(l){for(;~l;O||puts(o))O=(O[o]=~(l=getchar())?4<(4^l>>5)?l:46:0)?-~O&printf("%02x ",l)*5:!O;}
<p>

这获得了IOCCC 2018年度最佳单线奖。(来源)其他参赛作品非常棒,值得一试,特别是如果你是C程序员。

结论

约束有助于提供创造力。严肃地说,这些风格是在编程语言语法和语义的约束下构建的真正创造性作品的绝佳例子。结果可能是有用的,漂亮的,有趣的,或彻头彻尾的恐怖。

 

                   

1