如何编写Ruby控制台程序(一)
如何编写Ruby控制台程序(一)
这是来自O’Reilly Network的一篇关于如何如何使用Ruby及ActiveRecord编写控制台程序的教程,文章通过一个例子程序EarGTD演示了编写控制台程序需要注意的方方面面(文件布局,数据库连接等等),作者是Gregory Brown,你可以在这里找到原文 。
抛弃Rails
如果你一开始就是通过Rails来学习Ruby,那么你很可能会发现,你需要学习的东西实在是太多了,这是因为Rails虽然只是一个框架,但它和Ruby的结合非常紧密,因此,你有可能会搞不清楚,到底那些东西是属于Ruby,而那些又属于Rails。
这在某种程度上是好事情,因为这降低了你的学习曲线,你在学习Rails的同时也学到了Ruby。但是如果你认为你的任务并不适合用浏览器来表现,也不适合MVC架构,那么你可能想抛弃Rails,试试纯Ruby编程,事实上,这并不复杂。
抛开Rails单独使用Ruby的另外一个理由就是,这并不意外着你与Rails老死不相往来,事实上,由于Rails框架本身就是由许多模块组装而成的,因此你可以在你的Ruby程序中单独使用Rails的任何一个组件(比如ActiveRecord)。
在这篇指南中,我们将通过一个例子程序EarGTD(可以在这里下载源码,但需要sqlite支持)来演示如果构建一个基于Ruby和ActiveRecord的控制台程序,下面让我们先来看看EarGTD能为我们做些什么?
EarGTD
我相信许多程序员都很喜欢David Allen’s的Getting Things Done (GTD)方法(至少应该听过吧,如果没听过,建议先看看这个链接指向的wikipedia页面,现在解封了),我一般将它看作是一个“巨大的ToDo列 表”,GTD的好处在于所有的任务都可以在某个点得到收敛,因此你可以很简单的计算出在某个时间点上有那些因素在影响你的进度。
EarGTD实现了GTD方法的一个最小集合,它允许你通过两种方式来组织你的任务:项目或者是上下文。
项目由一组相互关联的任务组成,任务的范围相当宽泛,它可以是编码相关的任务,也可以是类似“清理垃圾桶”这样的任务。
上下文则是一组过滤器,它可以让你迅速的决定在某个时间可以做哪些事情,有些事情不需要这样的过滤器,但有些则是必需的,比如如果你想要”修理草坪“(任务),那么你必须首先在“家里”(上下文)才行。
GTD是一个很庞大的话题,但是鉴于我们这篇文章讲述的是Ruby编程,因此我不想太深入这个话题,如果你感兴趣的话,可以自己找资料深入了解。
EarGTD实现了一个非常简单的命令行界面,可以让你通过项目或者是上下文的方式来管理任务,但也仅限于此,因为我们只是想通过它来演示如果构造一个纯Ruby的控制台程序。
下面让我们先通过几个例子来了解一下它是如何工作的吧:
$ earGTD @
Looks like you have nothing to do.
$ earGTD + "递交计费模块代码 <网不通> [工作]"
$ earGTD + "支持银行卡缴费 <网不通> [工作]"
$ earGTD + "打电话给老张 [工作]"
$ earGTD + "洗衣服 <清洁> [家里]"
$ earGTD + "打扫屋子 <清洁> [家里]"
$ earGTD + "电视机换位置 [家里]"
$ earGTD + "慢跑5千米"
$ earGTD @
1. 递交计费模块代码 <网不通> [工作]
2. 支持银行卡缴费 <网不通> [工作]
3. 打电话给老张 [工作]
4. 洗衣服 <清洁> [家里]
5. 打扫屋子 <清洁> [家里]
6. 电视机换位置 [家里]
7. 慢跑5千米
$ earGTD @c 工作
1. 递交计费模块代码 <网不通> [工作]
2. 支持银行卡缴费 <网不通> [工作]
3. 打电话给老张 [工作]
$ earGTD @p 清洁
4. 洗衣服 <清洁> [家里]
5. 打扫屋子 <清洁> [家里]
$ earGTD - 5
$ earGTD @p 清洁
4. 洗衣服 <清洁> [家里]
$ earGTD @
1. 递交计费模块代码 <网不通> [工作]
2. 支持银行卡缴费 <网不通> [工作]
3. 打电话给老张 [工作]
4. 洗衣服 <清洁> [家里]
6. 电视机换位置 [家里]
7. 慢跑5千米
从上面的例子你应该已经可以看出earGTD是如何工作的了,还是有些用处的,不是吗?
从下一讲开始,我们将学习如何使用Ruby来构造这样一个控制台程序,这将会涉及到如何与ActiveRecord交互(不依赖Rails),控制台及文件IO,代码的模块化组织等等内容。
http://www.letrails.cn/page/14/
http://www.letrails.cn/archives/19/
http://www.letrails.cn/archives/18/
http://www.letrails.cn/archives/16/
摘自 www.letrails.cn
出处: http://www.cnblogs.com/todototry/
关注语言: python、javascript(node.js)、objective-C、java、R、C++
兴趣点: 互联网、大数据技术、大数据IO瓶颈、col-oriented DB、Key-Value DB、数据挖掘、模式识别、deep learning、开发与成本管理
产品:
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。