写点什么

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

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

关注

评论

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

Prometheus 查询操作符(一) 二进制操作符

耳东@Erdong

Prometheus 10月月更

鉴释人物丨专访解决方案负责人卜祥敏:直击业务痛点,赋能客户高效业务逻辑

鉴释

解决方案 业务逻辑 静态代码分析

区块链是数字治理的平台

CECBC

Android Studio IDE 插件开发

字节跳动终端技术

android 字节跳动 客户端开发 火山引擎

趣讲快速排序的两种方法

Regan Yue

快速排序 10月月更

GK架构2 模6作业

Ping

【Flutter 专题】26 易忽略的【小而巧】的技术点汇总 (四)

阿策小和尚

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

Source Map在前端监控中的应用和实践

爱奇艺技术产品团队

大前端

人物访谈|扎根社区的工程师,月影的前端人生

字节跳动终端技术

字节跳动 大前端

【设计模式】第五篇 - 工厂方法模式

Brave

设计模式 工厂方法模式 10月月更

在线数字转大写金额工具

入门小站

工具

IPFS矿机分币系统开发模板(现成)

Leetcode 题目解析:230. 二叉搜索树中第K小的元素

程序员架构进阶

算法 LeetCode Top K问题 10月月更

019云原生之Kubernetes主要功能

穿过生命散发芬芳

云原生 10月月更

面试必备!2021金九银十阿里最新Java面试手册(全彩版)出炉

Java 程序员 架构 面试

多媒体应用设计师软考备考日记(一)

Changing Lin

10月月更

APISIX 成为 Apache 项目两周年!

API7.ai 技术团队

开源社区 API网关 Apache APISIX

使用 Apache APISIX 进行集中式身份认证及进阶玩法

API7.ai 技术团队

开源 身份认证 API网关 Apache APISIX

那些值得称赞的 python 小亮点,断言,with 语句,格式化字符串,听我道来

梦想橡皮擦

10月月更

Android SDK设计规范与心得

轻口味

android sdk 10月月更

你真的会使用数据库的索引吗?

华为云开发者联盟

索引 查询 聚集索引

项目开发中 9 个实用的JavaScript函数

devpoint

JavaScript 函数式 随机数 10月月更

智慧城市的成人礼:城市智能体带来的变革与机遇

脑极体

Vue进阶(幺肆贰):elementUI 中 el-switch、el-radio 使用注意事项

No Silver Bullet

Vue 10月月更

模块(六)如何设计业务的微服务架构?

我是一只小小鸟

linux之crontab使用技巧

入门小站

Linux

as-if-serial &happens-before详解

Fox666

happens-before JMM as-if-serial

【架构实战营】模块九作业

Abner S.

#架构实战营

爱奇艺ZoomAI获CCF科学技术奖科技进步杰出奖,技术创新焕新老片,助力经典传承

爱奇艺技术产品团队

“对比Excel”系列再添新成员,手把手教你用Python实现报表自动化!

博文视点Broadview

Go Switch - Go 中使用 Switch 的六种方式

baiyutang

golang 10月月更

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