rails请参考我写的简明Ruby系列:rails简明实用入门指南html
做者:chengenode
联系方式:linux
目标读者:程序员
Ruby是适合于初学者的,即便是从未写过程序的人来学,我相信初级部分一天就能学完。web
为了帮助你学习更轻松些,我尽可能选择了简单的内容。面试
经过浏览目录,就知道我选择了一些什么内容。初级我选择了三组共四个概念,本书定位初学,因此中高级只是附带介绍一下,选择了介绍单元测试和DSL。这些内容,特别是初级部分,是我根据个人自学经验,认为对初学者比较重要的核心的内容,不是说别的Array、Hash等不重要,只是为了简明和快速学习,作了取舍。编程
有了这个基础后,遇到不懂的,查阅下参考书就能够了。segmentfault
我会不按期地修订,增长我认为不错的材料。windows
我但愿用最简洁的方式介绍Ruby的要点。数组
我自己是程序员,05年左右接触Ruby,我是看镐头书入门的,对Ruby的印象不错,但仍是以为不得要领,以为有些复杂。又过了几年,读了几本参考书才彷佛理解了一些。
相似的书通常都涉及不少细节,反而让主干不清晰,初学者每每不得要领,学习负担重。若是一开始读到本书这样的介绍,我认为是有帮助的。
固然这只是入门书,修行要看你本身了。
建议你分两步,初级体验一天,中级1-6个月。
100分钟的红宝石(有道翻译的中文版,翻译效果不错)
能够网上实验,或者本机实验。
网上实验
最简单的,jser在线运行, 或者去codepad网站直接运行,代码复制过去,选择ruby.
另外一种稍微复杂的方式,去实验楼网站,linux环境下运行看结果,能够在终端Terminal里运行:irb,就能够与ruby对话了。
本机实验
linux和苹果上通常都安装好了ruby,运行ruby -v能够看是否安装了。
若是没有的话,请参考wiki自行安装Ruby。windows上也很容易安装的。
能够尝试这种现代的交互式自学方式。
http://exercism.io
是很好的英文的互动编程社区。
变动:
2015-3-26:高级部分改用了DSL的例子,更实用也更容易理解。
2015-1-26:改写单元测试,更容易理解
2015-1-23:增长了“面试准备系列”
但愿你写下阅读的感觉和改进意见。
欢迎开启有趣的Ruby之旅!
Ruby语言的做者Matz在《代码之美》一书中讲述了他的设计思想,就是简洁、保守、简单、灵活性,以及平衡性等五大原则。
puts 'hello world'
例子中那一行代码,能够说明简洁、保守(puts继承自C语言)和简单。灵活性和平衡性须要在更复杂的代码中能够体会到。
分类是符合人的思惟的。好比人类,每一个人就是人类的一个实例,约定都翻译成对象。
#注释:定义类 class Person def initialize(name) @name = name end #定义方法 def show_name puts @name end end #建立对象 zhao = Person.new 'zhao yun ' qian = Person.new 'qian wei ' #调用方法 zhao.show_name qian.show_name
简单解释一下:
若是你第一次编程,也许你对这些术语还有些陌生,没关系,多看几回,慢慢就会熟悉起来了。
参考资料,初次阅读能够跳过,或者选看感兴趣的部分。
英文视频:Learn to program using Ruby
共9部分,大约一个小时。原youtube网址
我搬运了三个部分到百度,百度云盘
Part 1- Getting startedyoutube有字幕,视频听不懂问题也不大,看演示过程就能够了,还能够练习英语,一箭双雕。
结束语:类和对象是最基本的。
块是ruby的特点。
3.times do puts 'hello world' end 3.times { puts 'one line hi' } people = ['zhao', 'qian'] people.each do |x| puts x end
以上就是两种块的写法,第一个是无参数,单行的话用括号。后一个带参数x,[]是数组。块能够当作独立的函数,与块前面的方法协同工做,就像二人转。
参考:参考部分来自网上的一些资料,有些是英文的,难度大一些,初学能够跳过,等有须要再看
结束语:块无处不在,两种形式do和{}
模块也是Ruby的特点。
module Show def show_msg puts self.class end Pi = 3.14 end class Person include Show end class Desk include Show end Pi = 2 puts Show::Pi #注释:3.14 Person.new.show_msg #Person Desk.new.show_msg #Desk
主要有两个做用,一个是做为命名空间,避免名字冲突,好比例子中的Pi。另外一个是共享代码,例子中Person和Desk共享Show的代码。
参考:
结束语:模块是组织代码的基本方式。
开始本章学习。
补充说明一下:若是你不是颇有经验的话,看这个单元测试例子会有困难。能够结合这个例子和简介里提到的基础教程来学习。
关系示意图以下
--incoming————》测试对象---outgoing---》依赖对象
主要包括测试对象和依赖对象。
outgoing分command和query,command就是有输出,query没有输出。
#引用minitest gem,能够本身安装: gem install minitest require "minitest/autorun" class Calc def initialize(logger=nil) @logger = logger end def add(a, b) a + b end def add2(a, b) @logger.log "add2 #{a}, #{b}" a + b end end # < 是继承 class TestCalc < MiniTest::Test def test_add calc = Calc.new assert calc.add(2, 5) == 7 end def test_add2 mock_logger = MiniTest::Mock.new mock_logger.expect(:log, nil, ['add2 2, 5']) calc = Calc.new(mock_logger) assert calc.add2(2, 5) == 7 mock_logger.verify end end
简单解释下例子:
Calc是被测试的功能代码,TestCalc是测试代码,测试的目的是验证功能代码是否正确。
两个测试方法,其中test_add比较简单。
第二个test_add2用到了mock模拟对象,稍微复杂一些。除了验证基本的计算外,还验证了是否执行了log操做。
先运行一次,正确的话会显示两个点:‘..’。
能够故意把Calc改错,好比改成a-b, 或者把那个log代码注释掉,再运行看是否能测试出来。
参考:
面试准备系列(英文版)
能够做为学习的参考。
DSL是特定领域语言,rails里有不少例子,rake, rspec, migration等等。下面这个例子演示了原理,主要用了method_missing。学完后,再看那些rails代码就比较亲切了。
实例参考这篇英文博客
Metaprogramming in Ruby: Part 1
Metaprogramming in Ruby: Part 2
《Ruby 元编程》读书笔记
固然本书主要仍是入门书,更多的请参考《Ruby元编程》这本书。
irb是自带的.
pry更好用一些,能够这样:
ls Object
像目录操做同样。
sublime和开源的atom都不错。
SublimeCodeIntel插件能够提供Ruby代码提示。
1.9.3-p545 :023 > String.ancestors => [String, Comparable, Object, Kernel, BasicObject]
String的前面有四个上级
Ruby的方法很是多,以致于不得不用grep了。
1.9.3-p545 :049 > [].methods.grep /^me/ => [:member?, :methods, :method]
1.9.3-p545 :018 > {}.method :select => #<Method: Hash#select> 1.9.3-p545 :019 > {}.method :reduce => #<Method: Hash(Enumerable)#reduce>
method方法能够实现。
若是找明确的方法,能够用ri,方便快捷。
ri String.sub
不过这种方式彷佛很差用。有一个专门的dash软件,很好用。彷佛是只支持mac。
各类对象语言的原理是相似的,可是内部实现模型是不同的。Ruby用起来简单,内部很复杂的。
当你感受Ruby好用的时候,其实应该感谢Matz的工做。
Kernel模块是核心,不少重要的方法都在里面。推荐看《Ruby元编程》,书中有详细介绍。
入门
提升
路线图
带有连接的图:https://www.learneroo.com/mod...
原图:http://www.zappable.com/tag/c...
但愿这本小书成为你学习Ruby的起点,再见!
[请我喝一杯,手机支付宝]
联系方式:见目录部分