iOS 程序員的 Ruby 初體驗

海賊王極惡世代

在技術浪潮不斷更新發(fā)展的時代下,身為程序員的我們不斷的在學習新技術找岖,不斷的更新自己的技能,不斷的和伙伴們一起成長兴革,夢想著有天能航行到技術的頂端蜜唾。就像海賊王里最惡世代們一樣,只有不斷的挑戰(zhàn)擎勘,不斷的成長抱團打倒 BOSS颖榜,才可能到達終點得到 ONE PIECE 煤裙。

前言

一開始自己去學習 Ruby 只是想了解 Podfile 里寫的東西到底是什么噪漾,到后面對 Cocoapod 和 fastlane 源碼和原理的好奇,再到想通過學習到的東西改善自己的工作流欣硼。

本篇文章記錄了自己從小白到 Ruby 簡單入門的旅程分别。

Ruby 學習

做為一個Ruby小白,沒人教耘斩,啥都不懂該如何去學習這樣一門新的語言。
沒有別的坞笙,只能靠自己程序員的大腦和折騰荚虚。

對于新的編程語言我需要去了解他的語法,所以找到這幾個網(wǎng)址:

  1. ruby基礎教程(中文第四版)
  2. Ruby | 菜鳥教程
  3. Ruby China社區(qū)

對于 Ruby 語法剛接觸有幾個地方有較深的映像:

  1. 完全面向?qū)ο螅喝魏螙|西都是對象梯澜,沒有基礎類型渴析。平時我們使用的1,2咆疗,3母债,4,5毡们,6在Ruby都是 ‘Fixnum’ 類的實例對象,有著屬于自己的方法登颓。

    1.to_s   // 將 1 轉(zhuǎn)為字符串
    
  2. 方法調(diào)用可以省略括號青责,比如:

        puts("hello, world")
    

    也可以這樣

        puts "hello, world"
    
  3. 代碼塊之間不是用{}來表示代碼塊的范圍 而是 end 來表示塊的結(jié)尾取具。比如定義一個方法 OC 的做法是:

     - (void) method {
        這里是方法實現(xiàn)代碼
     }
    

    而在 Ruby 里:

    def method 
        這里是方法實現(xiàn)代碼
    end
    
  4. 可以用換行替換 “ ; ”暇检,即代碼中可以省略 “ ; ”婉称。

    在 OC 中:

     - (void) method {
        第一行代碼;
        第二行代碼;
     }
    

    Ruby中:

    def method 
        第一行代碼
        第二行代碼
    end
    
  5. 每行代碼都有返回值。

    我們在 irb 中輸入下面代碼(irb內(nèi)置在shell的ruby解釋器)王暗。

    irb(main):001:0> puts 'hello, world'
    hello, world
    => nil
    

    puts 'hello, world'意為打印'hello, world'字符串俗壹。所以我們得到的第一個輸出為正常方法執(zhí)行的效果,打印出'hello, world'字符串绷雏。而第二行

    => nil
    

    則是意味著該行代碼的放回值為nil。

    如果我們的代碼是給一個變量坤检,那這行代碼的返回值將是變量的值期吓,如下:

    irb(main):002:0> a = 1
    => 1
    
  6. 一個有返回值的方法中如果沒有return,則最后一行代碼的返回值就是該方法的返回值箭跳。如:

    def method 
        a = 1
    end
    

    該方法的返回值為 1 悬襟。

實踐

學習任何編程語言最快的方式就是上手敲拯刁。
在了解Ruby大致的語法后,便需要開始尋找工具來進行 Coding 實戰(zhàn)割捅。最后基于工具的學習時間成本先挑選了 irb 和 Sublime Text

irb

全名 “interactive ruby” 帚桩,一個命令行工具,也可以看作是Ruby的解釋器莫瞬。
MacOs下系統(tǒng)自帶,打開終端輸入:

irb

即可啟動疼邀。啟動后就可以輸入Ruby代碼的,注意每輸入一行代碼获询,irb都會給你返回該行代碼的返回值拐袜,如剛剛出示的代碼log

irb(main):001:0> puts 'hello, world'
hello, world
=> nil

Sublime Text

Sublime Text 是一套很好跨平臺的文字編輯器,如果想要編寫很長的 Ruby 代碼在 irb 不是很方便尝哆,所以選擇了它甜攀。( Sublime Text 維基百科

閱讀源碼

通過一段時間的實踐理解,大致對 Ruby 有初步的認識印衔,可以嘗試閱讀 fastlane, cocoapod 源碼來對它們進行理解了 ( fastlane源碼姥敛,CocoaPods源碼 )。

通過源碼的閱讀對他們大致總結(jié)為:通過 Ruby 來調(diào)用終端命令与帆。

這里尤其是fastlane墨榄,讀 fastlane 的很多的工具集 ( actions ) 的源碼你會發(fā)現(xiàn)里面基本是提供了各種 shell 命令的合集。如 action : pod_lib_lint源碼中可看到:

command << "pod lib lint"

if params[:verbose]
command << "--verbose"
end

if params[:sources]
sources = params[:sources].join(",")
command << "--sources='#{sources}'"
end

if params[:allow_warnings]
command << "--allow-warnings"
end

源碼中可以看到里面提供了我們平時在 Shell 中主動輸入的一些命令阵翎。

所以如果你想做一個 fastlane 的 action之剧,其實很簡單,里面多數(shù)都是往command 數(shù)組中插入命令背稼,你只要注意遵從 fastlane 對你們的要求格式進行提交你的 action 代碼審核就行蟹肘。

另外我們在使用 fastlane 進行打包的時候俯树,能清楚的看到其答應出所使用的 xcodebuild 的命令贰盗。

其實這些也可以通過 Shell 腳本來實現(xiàn),那為什么 fastlane童太,Cocoapods 是用 Ruby 來實現(xiàn)的书释,筆者猜想可能是因為 fastlane,Cocoapods 本身就是基于 Ruby 開發(fā)中的工具 rake 和 bundle 思想而開發(fā)出來的吧爆惧。

繼續(xù)實踐

程序員就是要折騰自己,既然大致原理是通過 Ruby 執(zhí)行 Shell 命令芍耘,那他們能寫很多工具來幫助程序員開發(fā)熄阻,我自己能寫一個嗎? 不求寫出來的高大上坝初,但求學到的東西能實踐應用钾军,寫出來的東西能方便自己。

于是就有了這個項目 pod_updater拗小,這個項目意在幫助自己擺脫每次提交自己的私有 pod 庫時樱哼,總是要在終端輸入一堆 git 命令然后在 push 到 podspec 倉庫等一系繁瑣的操作。

開始實踐

首先感覺 irb 不夠用了勾栗,不能對代碼進行調(diào)試盏筐,而 Sublime Text 只是個編輯器砸讳,于是又找到了 RubyMine 界牡。

RubyMine 是一個用于 Ruby 開發(fā)的 IDE漾抬,可見資料

  1. 有了 IDE 還不夠挽荠,有時我們需要使用些成熟的三方庫平绩,所以我們需要了解這些 Gem,bundle跃赚,Gemfile.

    Gem:Ruby 應用程式或程式庫性湿。可以理解為Framework肤频。
    bundle: 是管理宵荒、解決 gem 之間相依性的工具,它會根據(jù) Gemfile 裡頭的設定自動下載和安裝 gem 骇扇,而且?guī)湍憬鉀Q相依問題〖痰停可以理解他為iOS開發(fā)中的Cocoapod稍走。
    Gemfile:理解為podfile即可,用于描述程序的相關庫安裝與依賴關系粱胜。
    更多資料

  2. Ruby 執(zhí)行shell 命令
    Ruby執(zhí)行 shell 命令方式有很多種狐树,可見資料 ,而我選擇是的 IO.popen 方法涯曲。

    $ irb
    IO.popen("date") { |f| puts f.gets }
    Wed Jul  4 22:02:31 CST 2012
    => nil
    
  3. 接著就是各種資料查找和折騰,最后模仿 fastlane 和 CocoaPods 將自己的工具做成 gem 的形式拨黔,于是我的第一個 RubyGem pod_updater 誕生了绰沥,使用效果如下:

    這是pod_updater 終端使用.gif

總結(jié)

對于一門新語言徽曲,下手實踐才是真道理。

對于自己疟位,學習語言最大的動力莫過于他能幫助自己更好的生活和工作。

今天是 2018 除夕绍撞,祝各位程序員同胞新年快樂得院,過年多吃肉??。

學習資料

  1. ruby基礎教程(中文第四版)
  2. Ruby | 菜鳥教程
  3. Ruby China社區(qū)
  4. 簡單筆記一下 RubyGem, Gem, RVM, Gemfile, bundler
  5. Mastering ruby blocks in less than 5 minutes
  6. 在 Ruby 中執(zhí)行 Shell 命令的 6 種方法
  7. 如何開發(fā)一個自己的 Gem
  8. How to Use OptionParser: Ruby's Powerful Parsing Tool
  9. iOS 工程自動化 - Ruby 入門到輔助腳本編寫
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蜕径,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梦染,老刑警劉巖朴皆,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遂铡,死亡現(xiàn)場離奇詭異,居然都是意外死亡扒接,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門砍艾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巍举,“玉大人凝垛,你說我怎么就攤上這事√糠郑” “怎么了剑肯?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長呀忧。 經(jīng)常有香客問我溃睹,道長,這世上最難降的妖魔是什么泞辐? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任竞滓,我火速辦了婚禮,結(jié)果婚禮上汽烦,老公的妹妹穿的比我還像新娘莉御。我一直安慰自己,他們只是感情好礁叔,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布琅关。 她就那樣靜靜地躺著讥蔽,像睡著了一般画机。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上响禽,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天芋类,我揣著相機與錄音界阁,去河邊找鬼。 笑死泡躯,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的咕别。 我是一名探鬼主播重付,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼确垫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了删掀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎款票,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卡乾,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡缚够,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了古话。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锁施。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖膊毁,靈堂內(nèi)的尸體忽然破棺而出基跑,到底是詐尸還是另有隱情描焰,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布篱竭,位于F島的核電站步绸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吕喘。R本人自食惡果不足惜刑桑,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闻察。 院中可真熱鬧琢锋,春花似錦、人聲如沸吴超。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仆潮。三九已至,卻和暖如春拾并,著一層夾襖步出監(jiān)牢的瞬間鹏浅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工之碗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留季希,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓博敬,卻偏偏與公主長得像峰尝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子武学,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容