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

栏目: Python · 发布时间: 6年前

内容简介:有许多优秀,整洁的代码风格指南。这些标准包括缩进,空格,行长度,命名约定等。一些著名的例子是:流行风格也有很多信息,历史,工具等。是否受够了他们?让我们来看看一些鲜为人知的候选方案!

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

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

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

看起来没有大括号!这是一个非常好的例子,说明了如何使用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 ;}

关于Bournegol的其他帖子,请看  这里

诗歌

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

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

格式化代码的新创新方式:编程是一门艺术,每个节目都是一首诗。另一个应用于我的项目( 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;
}
}

相当令人愉悦!好消息是这种风格也容易在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) }}

混淆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;}

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

结论

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


以上所述就是小编给大家介绍的《代码样式的另类风格!开眼》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Pro HTML5 and CSS3 Design Patterns

Pro HTML5 and CSS3 Design Patterns

Michael Bowers / Apress / 2011-11-15 / GBP 35.50

Pro HTML5 and CSS3 Design Patterns is a reference book and a cookbook on how to style web pages using CSS3 and HTML5. It contains 350 ready--to--use patterns (CSS3 and HTML5 code snippets) that you ca......一起来看看 《Pro HTML5 and CSS3 Design Patterns》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换