阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

HAML:简洁高效就是美

  • 2007-05-18
  • 本文字数:1363 字

    阅读完需:约 4 分钟

Dan Grigsby 在他对Haml 精采绝伦的介绍中,对 Greenspun 第十编程法则改头换面,炮制了 Grigsby 第一法则:

“任何足够复杂的 rhtml partial 里面都包含了一个特别的非正式定义并充满 Bug 且实现了一半的 Haml。”

那么 Haml 到底是什么?Haml 的作者 Hampton Catlin 如是说:

“Haml 是对传统 XHTML 的生成方式的一种反叛。它既不是纯粹的代码,也不是一种文本处理语言。它是与众不同的,是一种在我看来最为自然的 XHTML 构造方式。”

此外, Haml 的网站上说:“Haml 让你撇开臃肿丑陋的模板,将它们以优雅整洁的代码代替。”下面我们先来简单看看到底丑陋的模板会是什么样子,而优雅整洁的代码又是如何:

下面是一个“丑陋模板”的范例:

<div id="profile"><br></br> <div class="left column"><br></br> <div id="date"><%= print_date %></div><br></br> </div><br></br> <div class="right column"><br></br> <div id="email"><%= current_user.email %></div><br></br> <div id="bio"><%= h current_user.bio %></div><br></br> </div><br></br></div>你可以看见,这只是标准的 HTML/ERb 的代码片断。对于你来说,这可能不会那么刺激审美神经。然而,正如 Grigsby 在他的文章中巧妙地解释到的,不仅仅里面会存在许多重复,而且也会出现很多不必要的字符。Hampton 认为,标识语言应该是赏心悦目的,而且不是所有能赏心悦目的东西都很好,他认为能优雅到让你开发速度更快,这才是最好的。因此,从这点出发,输出同样结果的代码片段子 Haml 看起来应该是这样的:

#profile<br></br> .left.column<br></br> #date= print_date<br></br> #address= current_user.address<br></br> .right.column<br></br> #email= current_user.email<br></br> #bio= h(current_user.bio)这看起来可能会有点奇怪,不过你不得不承认的是,这代码瘦下来好多。值得注意的是,代码中大量使用了空格来消除 HTML 的闭合标签,并使用 CSS 风格的语法来描述 div 的 id 和 class,而且消除了难看的<%= %>标签。如果你比较一下两个版本字符数的大小,你会发现范例中 Haml 版本的字符数是 HTML 版本的 64%。这就意味着你可以少输入 36% 的字符、少读 36% 的字符。归根到底就是少了 36% 的碍眼的东西。Antoine de Saint-Exupery 对 Haml 给于了高度评价:“在没有什么可以去除,而不是什么都加不进去的时候,十全十美的目标就达到了。”

从大家对 Haml 的反应来看,评价褒贬不一。有不少 Ruby 狂热分子会把它和 Python 相提并论,因为它大量使用了空格缩进。然而,Hampton 一行 Python 代码都没有写过,他只是觉得空格可以在文档中可以表示结构。他认为 Haml 更像 YAML 而不是 Python,因为它更专注于文档的结构和数据的配置。

新的视点总是有自己一席之地的,DHH 也同意说:“我不能肯定这符合我的口味,但我非常欣赏从另一个角度思考问题的意愿。”社区同样也表示支持态度,因为关于 Haml 的活动和讨论也很是热烈。Hampton 拿着不断发展的社区开起玩笑说:

“在 Haml 的论坛上面晃我感觉总是很奇怪,我感觉我是在读大家对一门技术写的情书。;)”

Hampton 认为,你只需要花 20 分钟就会喜欢上 Haml 的简洁。不过,Grigsby 不同意这个观点,他认为 2 分钟足矣。

要了解更多关于 Haml 的信息,请看 Grigsby 的介绍 Haml 网站

查看英文原文: HAML: The Beauty of Efficiency

2007-05-18 03:0011074
用户头像

发布了 117 篇内容, 共 14.8 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

娱乐至穷

北柯

学习 互联网 娱乐 抖音

微服务

石刻掌纹

只加两行代码,为什么用了整整两天时间?

程序员生活志

编程 bug

week10 学习总结

任小龙

Kubernetes 网络通讯模型解析

ninetyhe

将设计模式应用到日常的curd中-模板方法和装饰器

LSJ

Java 设计 设计模式 装饰器 模板方法

第十周作业

晨光

软件规模扩张与其组织粒度的进化

superman

中台 微服务 服务化改造

RushPlayer“一键下马”系列之-JavPlayer

flow

华章科技好书5折优惠,满99再减10元

华章IT

Python AI 数字化转型 Java 25 周年 计算机科学丛书

什么是死锁?如何解决死锁?

奈学教育

信息管理软件需求分析阶段的实践经验及论述(2010年)

朱又生

项目管理 产品经理 需求分析 用户需求调研

架构师训练营第10周

大丁💸💵💴💶🚀🐟

如何通过electron构建桌面跨平台音视频应用

ZEGO即构

音视频 Electron RTC

django-admin和manage.py用法

BigYoung

Python django django-admin manage.py

Oracle常用命令

阡陌r

即大数据后-贵阳能否成为区块链的机遇之城?

CECBC

区块链 大数据 贵阳

央行清算总中心与三家银行签署区块链福费廷交易平台合作协议

CECBC

区块链技术 人民银行

Flink 支持的重启策略有哪些

古月木易

flink

Flink 支持的重启策略有哪些

奈学教育

flink

中国计算机软件开发合同纠纷分析报告(2019-1)

朱又生

大数据 项目管理 计算机软件开发合同纠纷 风险管理

SpreadJS 纯前端表格控件应用案例:医疗行业智能报表系统

葡萄城技术团队

架构师训练营第十周作业

一剑

35岁腾讯员工被裁员感叹:北京一套房,存款700多万,失业好焦虑

程序员生活志

程序员

anyRTC 4.0 以心铸造,以梦相承

anyRTC开发者

anyRTC 4.0 官网升级

快速学习秘诀:费曼学习法

池建强

学习

中国计算机软件开发合同纠纷分析报告(2019-3)

朱又生

大数据 项目管理 计算机软件开发合同纠纷 风险管理

低/零代码的认知误区有哪些?

代码制造者

编程语言 低代码 零代码 信息化 开发应用

中国计算机软件开发合同纠纷分析报告(2019-2)

朱又生

大数据 项目管理 计算机软件开发合同纠纷 风险管理

SpreadJS 纯前端表格控件应用案例:生产采购管理软件

葡萄城技术团队

第十周总结

晨光

HAML:简洁高效就是美_Ruby_Sam Aaron_InfoQ精选文章