写点什么

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:0011633
用户头像

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

关注

评论

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

ChatGPT也宕机了?如何预防DDOS攻击的发生

Finovy Cloud

黑客 网络安全 机房 DDoS 黑客攻击

程序员的护城河是什么 ?

易程

个体成长

什么是shell?

小魏写代码

1688订单详情接口使用指南:含代码实现获取订单信息

Noah

神经网络是如何工作的? | 京东云技术团队

京东科技开发者

人工智能 神经网络 AI

国泰航空开发基于&nbsp;MongoDB&nbsp;和&nbsp;Device Sync&nbsp;的机上移动应用

极客天地

TDengine 签约大唐水电院,助力水电时序数据高效写入存储查询

TDengine

tdengine 时序数据库

大模型元年压轴盛会定档12月28日,第十届WAVE SUMMIT即将启航

爱编程的喵喵

Go语言实现GoF设计模式:适配器模式

华为云开发者联盟

开发 华为云 GoF设计模式 华为云开发者联盟

测试用例设计方法六脉神剑——第三剑:倚天屠龙,正交试验冲锋 | 京东物流技术团队

京东科技开发者

测试 测试用例 正交试验

PAM案例——某大型医院

尚思卓越

数据库 运维 安全

大模型元年压轴盛会定档12月28日,第十届WAVE SUMMIT即将启航

herosunly

1688订单详情对接及实现方案

Noah

每日一题:LeetCode-98. 验证二叉搜索树

Geek_4z9ami

面试 算法 LeetCode 二叉树 DFS

2023 ACDU 中国行 · 西安站 | 数据库技术发展及实践

KaiwuDB

KaiwuDB ACDU 中国行

Guardrails for Amazon Bedrock 基于具体使用案例与负责任 AI 政策实现定制式安全保障(预览版)

亚马逊云科技 (Amazon Web Services)

人工智能 re:Invent 生成式人工智能 Amazon Bedrock Amazon CloudWatch

聊天记录年度报告一览无余:轻松多格式导出永久保存,深度智能分析

汀丶人工智能

人工智能 自然语言处理 深度学习 AIGC 报告生成

PWA 离线方案研究报告 | 京东云技术团队

京东科技开发者

前端 Web PWA

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