Ruby简明入门与增进

着重说明,推荐学习Elixir语言,很爱学,期待它将函数式编程带入主流开发。这个文档以后不再更新了。2016-11-29

Ruby语言简明入门与增长

作者:chenge

联系方式:

  • 邮件:chenge3k at qq.com
  • chenge微博谈

目录

第一章 简介

仲节 初级:类与目标

第三章 块

第四章 模块

第五章节 中级:单元测试

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


内容简介

靶读者:

  • 第一编程者
  • 第一学习Ruby的程序员

Ruby是副为新家的,即使是没写了程序的食指来效仿,我深信初级部分同样龙便能够模仿完。

以救助您念又自在来,我尽可能挑选了简易的情节。

透过浏览目录,就明白自己选择了有的呀内容。初级我选择了三组一起四只概念,本书定位初学,所以备受高等就是附带介绍一下,选择了介绍单元测试和DSL。这些内容,特别是中低档部分,是自家因我的进修经验,认为对初学者比较主要的中坚之始末,不是说别的Array、Hash等非紧要,只是为明确和快捷学习,做了选。

产生矣是基础后,遇到不了解的,查阅下参考书就足以了。

我会不期地修订,增加自己当不错的素材。

怎么写这个有些开

我期望用最好精简之法介绍Ruby的要点。

本身自是程序员,05年左右接触Ruby,我是圈镐头书入门的,对Ruby的印象是,但要么当不得要领,觉得有点复杂。又过了几年,读了几乎据参考书才似乎知道了有些。

类的书一般都事关诸多细节,反而被中心不明晰,初家往往不得要领,学习负担重。如果一致开始读到本书这样的牵线,我道是出帮带的。

本这只是是入门书,修行要扣押您自己了。

上学计划

提议你分点儿步,初级体验一天,中级1-6独月。

  1. 先念新初级部分,感性认识跟扶植兴趣,参考时间一致龙。
  2. 生趣味继续的话语学中,可自选书籍或参考下面的被英文电子版,参考时间1-6单月。

  3. Ruby in 100
    Minutes(有目录,简明扼要,介绍了11单常因此概念,包括小另类的Symbol类型,:hello)
    100分钟之红宝石(有道翻译的中文版,翻译效果不错)

  4. 20分钟体验
    Ruby

实验

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

网上尝试

太简便的,codepad网站直接运行,代码复制过去,选择ruby.

另一样种植多少复杂的方,去实验楼网站,linux环境下运作看结果,可以当极端Terminal里运行:irb,就得和ruby对话了。

本机实验

linux和苹果及一般都装好了ruby,运行ruby -v可以扣押是否安装了。
倘若没有的话,请参考wiki自动安装Ruby。windows上吗充分易安装之。

可尝试这种现代的交互式自学方式。

  • 测算客Ruby交互式课程
  • codeacademy英文Ruby交互式课程

学学社区

http://exercism.io
大凡挺好之英文的交互编程社区。

本更改

变更:

2015-3-26:高级部分改用了DSL的事例,更实用呢重新易理解。

2015-1-26:改写单元测试,更便于掌握

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

读者举报

指望您勾勒下读的感受及改进意见。

<h1 id=’c2′>第二章节 初级:类和目标</h1>

Ruby的主干计划条件

接开启有趣的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 jin '

    #调用方法
    zhao.show_name
    qian.show_name

简短解释一下:

  • class是定义类Person,注意用小写
  • def定义了章程
  • @name是实例变量的写法
  • new是变化对象,两个new就生成了少单对象,会调用initialize这个构造方法,只能用此名字,name是参数
  • 末尾两句是调用方法show_name, puts的意思就是是亮平段子文字

一经您首先不好编程,也许你对这些术语还发头生,不要紧,多看几不善,慢慢便会熟悉起来了。

参考资料,初次看可以跳过,或者选择看感兴趣的片。

英文视频教程

Learn to program using Ruby

联手9组成部分,大约一个时。原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,[]是数组。块好看做独立的函数,与片前面的主意协同工作,就像二人转。

参考:

参考部分来源网上的有些素材,有些是英文的,难度大组成部分,初学可以跳过,等发出得还拘留

图片 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。另一个凡共享代码,例子中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好用底时段,其实应该感谢Matz的做事。

Kernel模块是骨干,很多重中之重之主意还在里边。推荐看《Ruby元编程》,书被有详细介绍。

引进书籍网站

入门

  • Ruby汉语官网

  • 《笨办法学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的起点,再见!

[吁我喝一样杯,手机支付宝]

图片 2

恳请自己喝一样盏,手机支付宝

联系方式:见目录前