1. 程式人生 > >做iOS開發我為什麼棄用Objective-C而選擇RubyMotion?

做iOS開發我為什麼棄用Objective-C而選擇RubyMotion?

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開發者程式設計時感到得心應手。

Hendrik Mans

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: "[email protected]",
      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

3. 建立UIKit檢視的DSL : SimpleView

4. 生成iOS表單檢視的DSL: Formotion

相關閱讀:

文章來源:

相關推薦

iOS開發為什麼Objective-C選擇RubyMotion

Hendrik Mans是德國漢堡市的一名程式設計師,他從事iOS開發已有很長一段時間了,起初他一直使用Objective-C語言進行程式設計而忽視了RubyMotion。從前他認為 RubyMotion只是個介於Ruby和Objective-C之間的交叉編譯器,但後來他

ios面向切面AOP(上) Objective-c版本

建立一個UIViewcontroller的category </pre><pre name="code" class="objc">#import "UIViewController+AOP.h" #import <objc/runtime.h> @imple

[iOS] for each loop in objective c for accessing NSMutable dictionary

如何瀏覽所有NSMutableDictionary 裡的內容? NSMutableDictionary *xyz=[[NSMutableDictionary alloc] init]; 解答: for (NSString* key in xyz) { id value = [xyz objectF

IOS基礎:深入理解Objective-c中@class的含義

objective-c中,當一個類使用到另一個類時,並且在類的標頭檔案中需要建立被引用的指標時, 如下面程式碼:  A.h檔案 #import "B.h"   @interface A : NSObject {        B *b;    }    @end

IOS開發基礎篇之──Object-C 實踐Queue容器

原貼地址:http://blog.csdn.net/cloudhsu/article/details/6589313Object-C同樣沒有提供Queue容器,因此我也自己實踐了一個#import <Foundation/Foundation.h>@interfa

初級篇-iOS開發你需要知道的

寫在前面的話: 此blog為自己鞭策自己用,大概會從程式設計零基礎一直寫到開發一個iOS的完整專案吧,也來湊熱鬧記錄記錄自己的程式設計之路。Whatever,若有人看到此blog,恰好此blog中的內容對你有用,那就是美事一件了。 自己不是什麼大牛,但總有人沒有我牛,也總有

objective-c 實現常用演算法(冒泡、選擇、快速、插入)

原文網址:http://www.360doc.com/content/14/0508/15/11029609_375813213.shtml 研究了下用oc實現常用的演算法,參考了一些資料後自己用程式碼檢驗了下,以下程式碼均測試可用。其中arr引數是一個可變陣列,其中存

ios 開發的好的第三方框架。。。。

第三方控制元件類: 1、提示框MBProgressHUD: 是一款非常強大的、提供多種樣式的提示框。使用起來簡單、方便。可以在GitHub上檢視具體的使用方法。 2、無限迴圈、自動圖片輪播器 SDCycleScrollView 3、DKNightVersion是一個支

iOS面試題系列之Objective-C相關

1、簡述你專案中常用的設計模式。它們有什麼優缺點? 常用的設計模式有:代理、觀察者、單例。 (1)單例:它是用來限制一個類只能建立一個物件。這個物件中的屬性可以儲存全域性共享的資料。所有的類都能訪問、設定此單例中的屬性資料。 優點:是它只會建立一個物件容易

opencv在ios上的簡單實現[objective-c&c++]

網上找過很多資料,不是缺少庫的引用就是缺少備註表述 所以自己實現一下並記錄下來 // // ViewController.m // h // // Created by Friderick

IOS開發時間格式轉換之──C語言中time_t資料型別轉為NSString型別

既然time_t實際上是長整型,到未來的某一天,從一個時間點(一般是1970年1月1日0時0分0秒)到那時的秒數(即日曆時間)超出了長整形所能表示的數的範圍怎麼辦?對time_t資料型別的值來說,它所表示的時間不能晚於2038年1月18日19時14分07秒。為了能夠表示更久遠的時間,一些編譯器廠商引入了64位

iOS沉思錄】深思Objective-C中的property屬性

OC中的屬性 屬性(Property)是Objective-C語言的其中一個特性,它把類物件中的資料變數及其讀寫方法統一封裝起來,是對傳統C++中要重複為每個變數定義讀寫方法的一種封裝優化,OC將這些變數封裝為屬性變數,系統可自動生成getter和se

IOS開發筆記12-Object-C中的物件與記憶體

前言 Object-C的記憶體管理機制與java那種全自動的垃圾回收機制是不同的,它本質上還是c語言的手動管理方式,只不過稍微加了一些自動方法。 指標和指標的值 以下程式宣告一個指向NSDate例項的變數: #import <Found

iOS開發——ActionSheet的使用與彈出選擇對話方塊

     在我們的iOS開發中,常會見到如下介面的需求:。【使用ActionSheet實現】(1)實現程式碼如下:#import "ViewController.h" @interface ViewController ()<UIActionSheetDelegate

iOS開發 之字型型別的設定與選擇

宣告:    文章轉自新浪博主:Apple_ 小熊貓    原文地址:http://blog.sina.com.cn/s/blog_b22973cf0101auqv.html。轉載時請附帶宣告。 ios中的字型:     字型是圖形使用者介面顯示文字的基礎。Co

iOS開發核心語言Objective C —— 面向對象思維、setter和getter方法及點語法

才幹 各路 alt .net 行為 變量的作用域 fadein 格式 讀取 本分享是面向有意向從事iOS開發的夥伴們。或者已經從事了iOS的開發人員。假設您對iOS開發有極高的興趣,能夠與我一起探討iOS開發。一起學習,共同進步。假設您是零基礎,建議您先

大神幫下這個題要C語言不要C++

2.0 大神 b2c 17.1 smd baidu html ++ quest http://baobao.baidu.com/question/9aba706e437305e0b1c98c73af45448e.html?18/Uf=sMDs http://baobao.

iOS Objective-C與Swift開發過程的詳細比較

前段時間,本人同時開發了兩個專案,一個用的OC,一個用的Swift。在使用中對兩種語言進行一次梳理與比較。 基礎檔案 OC Swift OC程式裡,一個類會有兩個檔案,.h和.m。.h可以寫屬性、方

為什麼堅持Go語言Web應用開發框架?

點選上方“CSDN”,選擇“置頂公眾號”關鍵時刻,第一時間送達!【CSDN編者按】很多情況下,企

iOS開發應該選擇Objective-C還是Swift

iOS開發需要知道Objective-C 當Apple釋出了Swift之後,我聽見人們都說:“趕快,我現在可以成為一個不用學習Objective-C的iOS開發者了。”在這裡我有三個建議想給這些人們。 1.如果你想成為一個iOS開發者,你仍然需要學習Objective-