写点什么

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

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

关注

评论

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

AISWare AntDB 亚信科技数据库产品特性解读——平滑弹性扩展 (二)

亚信AntDB数据库

1000道阿里巴巴初级~高级Java工程师面试题(含答案,2021最新华为Java校招面试题

Java 程序员 后端

1047 行 MySQL 详细学习笔记(值得学习与收藏),java基础面试题及答案整理

Java 程序员 后端

律所CRM软件,适用于律师事务所的系统

低代码小观

CRM 管理系统 事务管理 律所 CRM系统

Springboot Keycloak集成

消失的子弹

springboot keycloak

CODING —— 云原生时代的研发工具领跑者

CODING DevOps

云原生 Orbit 研发工具 Compass 战略升级

(项目实战)如何结合k8s和pipeline的流水线,并通过k8s接口完成镜像升级

Java 程序员 后端

一张图彻底搞懂Spring循环依赖

Tom弹架构

Java 架构 Spring Framework

说出来你可能不信,华为技术官珍藏版:SpringBoot全优笔记,限时开源了

Java 程序员 架构 后端 springboot

科大讯飞1024,我在现场

搬砖人

1024我在现场

10年Java开发经验,超过500人面试阿里的同学,总结出这108道面试题

Java 程序员 后端

130道BATJM真题及解析:集合+Spring,华为社招java面试题

Java 程序员 后端

WebRTC(66 - 96)Release Notes

webrtc developer

WebRTC

爱奇艺iOS稳定性测试实践

爱奇艺技术产品团队

ios 测试 稳定性

月度发布 | 极狐GitLab14.4版本:禅道集成、预设动态安全扫描DAST和集成错误跟踪功能等新功能上线!

极狐GitLab

fastposter 2.1.1 发布 电商级海报生成器

物有本末

Java Python 海报 fastposter 海报生成器

沃丰科技一体化平台 AI驱动数字与产业深度融合

海比研究院

1000页神仙文档,连阿里P8面试官都说太详细了,面面俱到!搞懂这些直接P6+

Java 程序员 后端

10个知识点让你读懂Spring MVC容器,mysql主从复制原理

Java 程序员 后端

数智商业创新的强大力量,用友BIP如何构筑产业互联网?

海比研究院

JSON必知必会【PDF+视频教程】

FunTester

json 教程 视频 接口测试 FunTester

2021终拿下阿里(P7岗)主动分享:5000字面经总结

编程 程序员 程序人生

保姆级教程,从概念到实践帮你快速上手 Apache APISIX Ingress

API7.ai 技术团队

云原生 k8s Apache APISIX ingress

程序员:平安Java岗面试耗尽了我毕生所学,想了想,还是去字节吧

Java 编程 程序员

微软黑客马拉松@您,低代码风云再赛!

微软商业应用

低代码 Power Platform 黑客马拉松 黑客松

国密解决方案专场推介会 四城联动 圆满落幕

腾讯安全云鼎实验室

解决方案 国密

渗透测试之破解详细演示

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

谈一谈麦语言程序化模型编写

Regan Yue

量化交易 麦语言 10月月更

北鲲云超算平台借助GPU实现仿真加速

北鲲云

百分点科技大数据技术团队:基于多Spark任务的ClickHouse数据同步方案实践

百分点科技技术团队

10W字解析 SpringBoot技术内幕文档,实战+原理齐飞,java技术上难以解决的问题

Java 程序员 后端

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