QCon北京|3天沉浸式学习,跳出信息茧房。 了解详情
写点什么

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

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

关注

评论

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

主数据与主数据管理(数据治理)

KoLee

数据治理 数字化 主数据管理 主数据

安全稳定便捷! 融云赋能“轻云会议”满足政府在线会议需求

融云 RongCloud

云计算 音视频 通信 会议 视频云

在Vue中使用JSX,很easy的

华为云开发者联盟

JavaScript Vue Vue3 JSX 渲染函数

19. 删除链表的倒数第N个数(链表)

黄敏

架构实战营 - 模块五作业

en

#架构实战营

构建数字合作格局 赋能政企行业通信——首届WECC 2021即将召开

融云 RongCloud

音视频 IT, 通信 通信云 会议

涨薪60%,从美团干到阿里p7,这份Github上的面试笔记把所有Java知识都写出来了

Java 程序员 架构 面试 后端

Elasticsearch 快照相关(qbit)

qbit

Alibaba最新神作!耗时182天肝出来的1015页分布式全栈手册太香了

编程 程序员 IT 计算机 java

太绝了吧! 终于有人能把TCP/IP 协议讲的明明白白了

程序员 架构 面试 后端 java

架构实战营模块5课后作业

apple

【Flutter 专题】29 图解自定义底部状态栏 ACEBottomNavigationBar (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 10月月更

详解物联网Modbus通讯协议

华为云开发者联盟

物联网 通信 Modbus 通讯协议 TCP通信

Elasticsearch 分片速度、进度及故障排查(qbit)

qbit

elasticsearch shard

写给初学者,一文搞懂大数据学习、岗位、面试及简历

五分钟学大数据

大数据

016云原生之安全技术

穿过生命散发芬芳

云原生 10月月更

每个数据工程师都应该知道的 6 个 SQL 查询

云原生

sql 职业生涯 数据工程师

Vue进阶(幺叁陆):el-steps 实现页面内导航

No Silver Bullet

Vue 10月月更

WhatsApp 如何启用端到端加密备份数据

CatTalk

facebook 安全 端到端加密

DataOps(数据运维)指南 - 数据管理的新时代

码语者

DataOps

分布式缓存技术

黄敏

解读鸿蒙轻内核的监控器:异常钩子函数

华为云开发者联盟

鸿蒙 钩子函数 任务栈 OpenHarmony 异常钩子函数

元宇宙NFT区块链游戏系统开发

面试官提问:如何通过sql方式将数据库表行转列?

Java 数据库 sql 面试 后端

微博评论高性能高可用计算架构

刘琦Logan

字节、快手、阿里、腾讯这两年的广告推荐技术进展

博文视点Broadview

J2PaaS低代码平台的开源,将进一步助力企业数字化

J2PaaS低代码平台

低代码 低代码开发 低代码开发平台

【LeetCode】 山峰数组的顶部Java题解

Albert

算法 LeetCode 10月月更

2021Flexera云报告:企业积极拥抱多云,但云上成本仍然居高不下

行云管家

区块链 云计算 企业上云 上云

听首歌的时间,简单复习下 python 网络编程之 socket,美不美?滚雪球学python第4季14篇

梦想橡皮擦

10月月更

Android技术分享| 【自习室】自定义View代替通知动画(1)

anyRTC开发者

android 音视频 WebRTC 在线教育 移动开发

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