当前位置: 首页 > 科技观察

iOS程序员Ruby初体验

时间:2023-03-12 00:12:03 科技观察

海贼王邪恶的一代在技术不断更新发展的时代,作为程序员的我们不断学习新技术,不断更新技能,不断与伙伴们一起成长,梦想扬帆远航有一天达到技术的顶峰。就像海贼王中最差的几代人一样,只有不断挑战,共同成长打败BOSS,才能走到最后,拿到海贼王。前言刚开始自学Ruby的时候,只想看懂Podfile里面写的是什么。后来对Cocoapod和fastlane的源码和原理很好奇,然后想通过所学来完善自己的工作流程。这篇文章记录了我从一个新手到简单入门Ruby的历程。Ruby学习作为一个Ruby新手,没有人教,不知道怎么学这么一门新的语言。没办法,只能靠自己程序员的脑筋和折腾了。对于一门新的编程语言,我需要了解它的语法,所以我找到了这些网站:RubyBasicTutorial(Chinese4thEdition)Ruby|新手教程Ruby中国社区在几个地方对Ruby语法新手印象深刻:1.完全面向对象:一切都是对象,没有底层类型。我们平时使用的1、2、3、4、5、6都是Ruby中'Fixnum'类的实例对象,有自己的方法。1.to_s//将1转换为字符串2.方法调用可以省略括号,例如:puts("hello,world")也可以是puts"hello,world"3.代码块不用{}表示代码块的范围是end以指示块的结尾。比如定义一个方法OC的方式是:-(void)method{这里是方法实现代码}而在Ruby中:defmethod这里是方法实现代码end4。你可以替换“;”带换行符,即可以省略“;”在代码中。在OC中:-(void)method{***代码行;第二行代码;}在Ruby中:defmethod***代码行,第二行代码end5。每行代码都有一个返回值。我们在irb(irb在shell中内置的ruby解释器)中输入如下代码。irb(main):001:0>puts'hello,world'hello,world=>nilputs'hello,world'表示打印字符串'hello,world'。所以我们得到的第一个输出是正常方法执行的效果,打印出字符串'hello,world'。第二行=>nil表示这行代码的返回值为nil。如果我们的代码是针对变量的,那么这行代码的返回值就是变量的值,如下:irb(main):002:0>a=1=>16。如果有返回值的方法中没有return,最后一行代码的返回值就是该方法的返回值。例如:defmethoda=1end该方法的返回值为1。通过实践学习任何编程语言的最快方法就是入门。在了解了Ruby的一般语法之后,您需要开始寻找用于编码实践的工具。***基于工具类的学习时间成本,我首先选择了irb和SublimeTextirb。全称“interactiveruby??”是一个命令行工具,也可以看作是一个Ruby解释器。系统自带MacOs,打开终端输入:irb启动。启动后,就可以输入Ruby代码了。注意,每输入一行代码,irb都会返回给你该行代码的返回值,比如刚才展示的代码logirb(main):001:0>puts'hello,world'hello,world=>nilSublimeTextSublimeText是一款非常优秀的跨平台文本编辑器。如果要写长的Ruby代码,在irb中不是很方便,所以选择了它。(SublimeTextWikipedia)看完源码,经过一段时间的实践了解,对Ruby有了一个大概的了解。你可以尝试阅读fastlane、cocoapod源码来理解它们(fastlanesourcecode,CocoaPodssourcecode)。通过源码的阅读,大致可以概括为:通过Ruby调用终端命令。这尤其是快车道。阅读很多fastlane工具集(actions)的源码,你会发现它基本上提供了各种shell命令的集合。例如在action的源代码中:pod_lib_lint,可以看到:",")command<<"--sources='#{sources}'"endifparams[:allow_warnings]command<<"--allow-warnings"end在源码中可以看到它提供了一些我们需要的命令平时主动进入Shell。所以如果你想做一个fastlane的动作,其实很简单。大部分是往命令数组中插入命令。你只需要注意按照fastlane要求的格式提交你的actioncodereview即可。另外,当我们使用fastlane进行打包时,我们可以清楚的看到它承诺使用的xcodebuild命令。其实这些也可以通过Shell脚本来实现,那么为什么fastlane和Cocoapods要用Ruby来实现,笔者猜测可能是因为fastlane和Cocoapods本身就是基于Ruby开发中rake和bundle的思想开发的。继续练程序员就是在折腾自己。由于一般原理是通过Ruby来执行Shell命令,所以他们可以写出很多工具来帮助程序员开发。我可以自己写一个吗?东西可以应用到实践中,写出来的东西可以方便自己。于是就有了这个项目pod_updater,旨在帮助你摆脱每次提交自己的私有pod库时在终端输入一堆git命令然后推送到podspec仓库等一系列繁琐的操作。开始实践的时候觉得irb不足以调试代码,而SublimeText只是一个编辑器,于是又找到了RubyMine。RubyMine是用于Ruby开发的IDE,请参阅文档。1.有IDE是不够的,有时候我们需要用到一些成熟的第三方库,所以我们需要了解这些Gem、bundle、Gemfile。Gem:Ruby应用程序或程序库。可以理解为Framework。bundle:是管理和解决gem间依赖关系的工具。它会根据Gemfile中的设置自动下载并安装gems,帮你解决依赖问题。他在为iOS开发Cocoapod是可以理解的。Gemfile:可以理解为podfile,用来描述程序的相关库安装和依赖。2、Ruby执行shell命令Ruby执行shell命令的方式有很多种,看资料,我选择的是IO.popen方式。$irbIO.popen(“日期”){|f|putsf.gets}WedJul422:02:31CST2012=>nil3。然后就是各种资料的查找和折腾,***模仿fastlane和CocoaPods把自己的工具做成gems的形式,于是我的第一个RubyGempod_updater就诞生了,效果如下:这是pod_updater终端使用.gif总结对于一门新的语言,真理在于实践。对我自己来说,学习一门语言最好的动力就是它可以帮助我更好地生活和工作。