Hendrik Mans是德国汉堡市的一名程序员,他从事iOS开发已有很长一段时间了,起初他一直使用Objective-C语言进行编程而忽视了RubyMotion。从前他认为 RubyMotion只是个介于Ruby和Objective-C之间的交叉编译器,但后来他发现自己完全错了,现在Hendrik已彻底改变了自己的想法。
RubyMotion
关于Ruby语言
Hendrik以前不仅从未用过 Ruby,还没少嘲笑过它。而现在Hendrik却认为,Ruby绝对是一种有着清晰漂亮语法的编程语言。Ruby是一种让你灵活机动的编程语言。
有时我们可能会对某种语言嗤之以鼻,然后说:“我绝不会在这种语言上浪费时间。”但Ruby一定不会让你这么说。Ruby强大的元编程特性能够帮助建立 领域专用语言(DSL);Ruby精炼的语法能帮助我们有效解决一些特定问题和处理许多复杂问题的细节。
Ruby语言具有强大的反射机制与元编程功能
更重要的是,Java、PHP、Perl以及Objective-C都不具备的,而Ruby具备的特征是:Ruby有一群追求完美的铁杆粉丝。Ruby程序员们选择Ruby,意味着他们不仅仅选择了一种编程语言,还选择了一种生活方式。Ruby粉丝们所追求的是一种极简的、精致的编程体验。
RubyMotion的优势
RubyMotion是完全由Ruby语言编译的二进制实现,它基于iOS构建并直接与iOS API封装,开发者可以访问所有公开的iOS API,也可以使用第三方的Objective-C库和Gems。RubyMotion能够让Rails开发者编程时感到得心应手。
Rake是RubyMotion的创建和执行工具,它的程序是在 REPL环境下执行的。应用程序可在iOS模拟器上运行,RubyMotion提供一个交互式的Shell用来即时编码和调试,能够方便地实现交互式检查和修改。
Hendrik对于RubyMotion是这样评价的:在iOS开发方面,RubyMotion的核心思想是用优美的Ruby语言代替丑陋的Objective-C语言。
RubyMotion为Ruby程序员(尤其是那些因Objective-C和Cocoa Touch犯难的Ruby程序员)提供了一个iOS开发的入口。尽管RubyMotion诞生还不到一年的时间,但它为使用Ruby语言进行高效开发提供了很大便利。
RubyMotion的劣势
1. 不提供免费版本。许多开发者不愿尝试RubyMotion多半是因为它不免费,尽管199美金的价格物有所值,但是开发者们往往需要先体验产品,再考虑付费购买。如果未来RubyMotion能够提供免费或试用版本,将会吸引更多的开发者前来参与。
2. 缺少Ruby高手。正因为RubyMotion比较年轻,所以RubyMotion社区( RubyMotion community)缺少Ruby编程高手,社区中许多开发者的作品都比较简单,比较初级。
3. 不能彻底摆脱Xcode。使用RubyMotion还是需要Xcode提供的SDK、模拟器以及数字签名功能,只不过不需要全程使用Xcode,尤其是在撰写代码的时候。
正确看待RubyMotion
在一些苹果开发社区中,我们时不时会看到一些污蔑RubyMotion的言论。如果你经常浏览HackerNews上对于RubyMotion的讨论,你会很容易发现人们对RubyMotion不加遮掩的蔑视。
RubyMotion创始人Laurent Sansonetti
Rails也好,RubyMotion也好,都是前辈们呕心沥血的作品,是从知识、代码、编程技巧等多个层面的经验总结,他们的目的无非是帮助大家用更精炼的代码进行编程,使得程序开发更为简便。所以对于新兴的编程语言、工具,大家大可不必投以藐视的态度,这也是对前辈们劳动成果的一种尊重。
总结
去年8月, RubyMotion创始人Laurent Sansonetti在接受CSDN记者采访时说:“为什么开发者应该使用RubyMotion?俩字:简单。如果你会Ruby,知道Rake,知道一些常用命令,接下来只需了解一下iOS的API,就可以着手开发iOS应用了。”
那些经验丰富的、充满智慧的程序员们发明了各种编程语言和开发工具,我们只是在他们的基础之上编写应用,这让我们轻而易举地就站在了巨人的肩膀上,何乐而不为呢?
诚然,RubyMotion和Objective-C都各有利弊,我们需要做的不是过度偏激地评价,而是选择一种最适合自己的编程语言罢了。(编译/杨依帆 责编/张宁)
[附]RubyMotion的学习资源:
例子代码:
using this:
@form = Formotion::Form.new({
sections: [{
title: "Register",
rows: [{
title: "Email",
key: :email,
placeholder: "me@mail.com",
type: :email,
auto_correction: :no,
auto_capitalization: :none
}, {
title: "Password",
key: :password,
placeholder: "required",
type: :string,
secure: true
}, {
title: "Password",
subtitle: "Confirmation",
key: :confirm,
placeholder: "required",
type: :string,
secure: true
}, {
title: "Remember?",
key: :remember,
type: :switch,
}]
}, {
title: "Account Type",
key: :account_type,
select_one: true,
rows: [{
title: "Free",
key: :free,
type: :check,
}, {
title: "Basic",
value: true,
key: :basic,
type: :check,
}, {
title: "Pro",
key: :pro,
type: :check,
}]
}, {
rows: [{
title: "Sign Up",
type: :submit,
}]
}]
})
@form_controller = Formotion::FormController.alloc.initWithForm(@form)
@window.rootViewController = @form_controller
1. Clay Allsopp的 RubyMotion Tutorial。
2. DSL程序范例: sugarcube和 BubbleWrap
3. 建立UIKit视图的DSL : SimpleView
4. 生成iOS表单视图的DSL: Formotion
5. 打包核心数据的DSL: MotionData
6. rubymotion-wrappers.com中拥有更多的RubyMotion DSL。
相关阅读:
用Ruby开发iOS本地应用的最佳实现:RubyMotion
RubyMotion之父:Ruby是目前替代Objective-C的最佳iOS开发语言
文章来源:
Sloblog-Adventures in RubyMotion, Part 2