Ruby简明入门和进步

重在表达,推荐学习埃利xir语言,很简单学习,期待它把函数式编程带入主流开发。这些文档将来不再更新了。二〇一六-11-29

Ruby语言简明入门与升高

作者:chenge

联系格局:

目录

第一章 简介

第②章 初级:类和目标

第三章 块

第四章 模块

第伍章 中级:单元测试

<h1 id=’c1′>第一章 简介</h1>


内容简介

目的读者:

  • 初次编程者
  • 第①学习Ruby的程序员

Ruby是吻合于初学者的,即使是没有写进程序的人来学,小编相信初级部分一天就能学完。

为了救助你学习更轻松些,笔者尽量选用了简便的故事情节。

因此浏览目录,就通晓自家选拔了一部分怎么样内容。初级我选拔了三组共七个概念,本书定位初学,所以中高等只是附带介绍一下,采取了介绍单元测试和DSL。这一个内容,尤其是中低档部分,是自家依照作者的自学经验,认为对初学者相比主要的为主的始末,不是说其他Array、Hash等不紧要,只是为了显然和迅速学习,做了选取。

有了这些基础后,境遇不懂的,查阅下参考书就足以了。

小编会不定期地修订,增添本身觉得正确的材质。

为啥写这些小书

自家期望用最精简的主意介绍Ruby的要义。

自身自家是程序员,05年左右接触Ruby,小编是看镐头书入门的,对Ruby的影象不错,但要么觉得隔靴抓痒,觉得有个别复杂。又过了几年,读了几本参考书才就像知道了部分。

好像的书一般都关涉众多细节,反而让大旨不明晰,初学者往往没有抓住主题,学习负担重。如若一初阶读到本书这样的牵线,小编觉着是有帮衬的。

本来那只是入门书,修行要看您本人了。

读书布署

指出您分两步,初级体验一天,中级1-7个月。

  1. 先读书初初级部分,感性认识和培育兴趣,参考时间一天。
  2. 有趣味继续的话学中级,可自选书籍仍旧参考下边的中国和英国文电子版,参考时间1-3个月。

实验

可以网上尝试,或许本机实验。

网上尝试

最简便易行的,codepad网站直接运转,代码复制过去,选取ruby.

另一种多少复杂的章程,去实验楼网站,linux环境下运作看结果,可以在顶峰Terminal里运维:irb,就足以与ruby对话了。

本机实验

linux和苹果上一般都设置好了ruby,运维ruby -v可以看是还是不是安装了。
比方没有的话,请参考wiki电动安装Ruby。windows上也很简单安装的。

可以品味那种现代的交互式自学格局。

上学社区

http://exercism.io
是很好的英文的并行编程社区。

本子更改

变更:

2016-3-26:高级部分改用了DSL的例证,更实用也更易于了解。

二〇一六-1-26:改写单元测试,更便于了然

2014-1-23:增加了“面试准备多重”

读者反映

愿意您写下阅读的感想和革新意见。

<h1 id=’c2′>第叁章 初级:类和指标</h1>

Ruby的核心布置原则

欢迎开启有趣的Ruby之旅!

Ruby语言的撰稿人马茨在《代码之美》一书中讲述了她的安顿性思想,就是简单、保守、简单、灵活性,以及平衡性等五大原则。

    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 jin '

    #调用方法
    zhao.show_name
    qian.show_name

简单易行解释一下:

  • class是定义类Person,注意用小写
  • def定义了艺术
  • @name是实例变量的写法
  • new是转变对象,多个new就生成了三个对象,会调用initialize那几个构造方法,只好用这么些名字,name是参数
  • 最后两句是调用方法show_name, puts的情趣就是显得一段文字

即使你首先次编程,只怕你对那么些术语还某个素不相识,不要紧,多看一次,逐步就会熟练起来了。

参考资料,初次阅读可以跳过,大概选看感兴趣的有的。

英文录制教程

Learn to program using Ruby

共9有些,大概2个小时。原youtube网址

本身搬运了多少个部分到百度,百度云盘
Part 1- Getting
started

Part 8-
Blocks

Part 9- Classes and
Objects

youtube有字幕,摄像听不懂难题也不大,看演示进度就足以了,还足以训练德语,一箭双雕。

结语:类和目的是最核心的。

<h1 id=’c3′>第三章 块</h1>

块是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,[]是数组。块可以当做独立的函数,与块前边的办法协同工作,就像是黄龙戏。

参考:

参照部分来源网上的一部分材质,有个别是英文的,难度大一些,初学可以跳过,等有亟待再看

C语言 1

5分钟block(英文)

截止语:块无处不在,三种样式do和{}

<h1 id=’c4′>第四章 模块</h1>

模块也是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。另3个是共享代码,例子中Person和Desk共享Show的代码。

参考:

看懂那一个视频(英文版)相当于学会了二分之一的
Ruby

结语:模块是团队代码的基本办法。

<h1 id=’c5′>第伍章 中级:单元测试</h1>

起头本章学习。

补充说圣元下:假若你不是很有经验的话,看这几个单元测试例子会有困难。可以结合这一个例子和简介里提到的基础教程来上学。

涉及示意图如下

--incoming————》测试对象---outgoing---》依赖对象

主要总结测试对象和正视性对象。

  • incoming测试状态。

  • outgoing分command和query,command就是有出口,query没有出口。

    • outgoing command测试行为,用mock模拟目的。
    • outgoing query不用测试。

 #引用minitest gem,可以自己安装: gem install minitest
require "minitest/autorun"

class Calc
  def initialize(logger)
    @logger = logger
  end

  def add(a, b)
    result = a + b
    r = @logger.log "add #{a}, #{b}"
    result if r
  end
end

 # < 是继承
class TestCalc < MiniTest::Test
  def test_add
    mock_logger = MiniTest::Mock.new
    #mock return true
    mock_logger.expect(:log, true, ['add 2, 5'])
    calc = Calc.new(mock_logger)
    assert calc.add(2, 5) == 7
    mock_logger.verify
  end
end

参考:
面试准备多重(英文版)
可以当作读书的参考。

停止语:单元测试是质量的管教。

<h1 id=’c6′>第五章 高级:元编程和DSL</h1>

DSL是特定领域语言,rails里有不少事例,rake, rspec,
migration等等。上边那些事例演示了规律,紧要用了method_missing。学完后,再看那么些rails代码就相比较密切了。

理所当然本书主要照旧入门书,越来越多的请参见《Ruby元编程》那本书。

class FancyMarkup

  attr_accessor :indents, :html

  def initialize
    @indents = 0
    @html = ""
  end

  # Catch-all method to avoid creating methods
  # for each HTML element.
  def method_missing(m, *args, &block)
    tag(m, args, &block)
  end

  # The first method called when creating an
  # HTML document.
  def document(*args, &block)
    tag(:html, args, &block)
  end

  private

  # Create the HTML tag
  # @param (String|Symbol) HTML tag (ul, li, strong, etc...)
  # @param (Array) Can contain a String of text or a Hash of attributes
  # @param (Block) An optional block which will further nest HTML
  def tag(html_tag, args, &block)
    content = find_content(args)
    options = html_options(find_options(args))

    html << "\n#{indent}<#{html_tag}#{options}>#{content}"
    if block_given?
      @indents += 1
      instance_eval(&block)
      @indents -= 1
      html << "\n#{indent}"
    end
    html << "</#{html_tag}>"
  end

  # Searching the tag arguments, find the text/context element.
  def find_content(args)
    args.select{|arg| arg.is_a? String}.first || nil
  end

  # Searching the tag arguments, find the hash/attributes element
  def find_options(args)
    args.select{|arg| arg.is_a? Hash}.first || {}
  end

  # Indent output number of spaces
  def indent
    "  " * indents
  end

  # Build html options string from Hash
  def html_options(options)
    options.collect{|key, value|
      value = value.to_s.gsub('"', '\"')
      " #{key}=\"#{value}\""
    }.join("")
  end
end

output = FancyMarkup.new.document do
  body do
    div id: "container" do
      ul class: "pretty" do
        li "Item 1", class: :active
        li "Item 2"
      end
    end
  end
end
puts output

会收获那几个结果:

<html>
  <body>
    <div id="container">
      <ul class="pretty">
        <li class="active">Item 1</li>
        <li>Item 2</li>
      </ul>
    </div>
  </body>
</html>

本实例英文原稿

<h1 id=’tips’>附录 学习Ruby的局地小窍门</h1>

必备工具

irb

查祖先

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

目的模型

各类对象语言的原理是相仿的,不过里面贯彻模型是不均等的。Ruby用起来不难,内部很复杂的。

当您感觉Ruby好用的时候,其实应该多谢马茨的办事。

Kernel模块是着力,很多重要的点子都在其中。推荐看《Ruby元编程》,书中有详实介绍。

推荐书籍网站

入门

  • Ruby华语官网

  • C语言,《笨办文学Ruby》

提高

  • 《Eloquent Ruby》

  • 《Ruby元编程》

  • 《面向对象设计执行指南:Ruby语言描述》

路线图

  • 本书属于中间区域,入门书籍。
![](https://ruby-china-files.b0.upaiyun.com/photo/2015/79aa594a748c3f53008cabedf9388d1c.png)

饱含链接的图:https://www.learneroo.com/modules/61/nodes/337

原图:http://www.zappable.com/tag/chart/

告别:


仰望那本小书成为您读书Ruby的起源,再见!

[请自身喝一杯,手机支付宝]

C语言 2

请本身喝一杯,手机支付宝

联系方式:见目录前