Ruby语言简明入门与提高

rails请参考我写的简明Ruby系列:rails简明实用入门指南

本书其他版本:

作者:chenge

联系方式:

* 邮件:chenge3k at qq.com

* chenge微博谈

第一章 简介

内容简介

目标读者:

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

Ruby是适合于初学者的,即使是从未写过程序的人来学,我相信初级部分一天就能学完。

为了帮助你学习更轻松些,我尽量选择了简单的内容。

通过浏览目录,就知道我选择了一些什么内容。初级我选择了三组共四个概念,本书定位初学,所以中高级只是附带介绍一下,选择了介绍单元测试和DSL。这些内容,特别是初级部分,是我根据我的自学经验,认为对初学者比较重要的核心的内容,不是说别的Array、Hash等不重要,只是为了简明和快速学习,做了取舍。

有了这个基础后,遇到不懂的,查阅下参考书就可以了。

我会不定期地修订,增加我认为不错的材料。

为什么写这个小书

我希望用最简洁的方式介绍Ruby的要点。

我本身是程序员,05年左右接触Ruby,我是看镐头书入门的,对Ruby的印象不错,但还是觉得不得要领,觉得有些复杂。又过了几年,读了几本参考书才似乎理解了一些。

类似的书一般都涉及很多细节,反而让主干不清晰,初学者往往不得要领,学习负担重。如果一开始读到本书这样的介绍,我认为是有帮助的。

当然这只是入门书,修行要看你自己了。

学习计划

建议你分两步,初级体验一天,中级1-6个月。

  1. 先学习初初级部分,感性认识和培养兴趣,参考时间一天。
  2. 有兴趣继续的话学中级,可自选书籍或者参考下面的中英文电子版,参考时间1-6个月。

实验

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

网上实验

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

另一种稍微复杂的方式,去实验楼网站,linux环境下运行看结果,可以在终端Terminal里运行:irb,就可以与ruby对话了。

http://simplecloud.qiniudn.com/944bd3db7397a0b714af6a4cb0558a0d’ width=800 />

本机实验

linux和苹果上一般都安装好了ruby,运行ruby -v可以看是否安装了。

如果没有的话,请参考wiki自行安装Ruby。windows上也很容易安装的。

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

学习社区

http://exercism.io

是很好的英文的互动编程社区。

版本变更

变更:

2015-3-26:高级部分改用了DSL的例子,更实用也更容易理解。

2015-1-26:改写单元测试,更容易理解

2015-1-23:增加了“面试准备系列”

读者反馈

希望你写下阅读的感受和改进意见。

第二章 初级:类和对象

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 wei ‘

    #调用方法
    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有字幕,视频听不懂问题也不大,看演示过程就可以了,还可以练习英语,一举两得。

结束语:类和对象是最基本的。

第三章 块

块是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,[]是数组。块可以看成独立的函数,与块前面的方法协同工作,就像二人转。

参考:

参考部分来自网上的一些资料,有些是英文的,难度大一些,初学可以跳过,等有需要再看

http://mixandgo.com/uploads/blog_image/image/20/mastering_ruby_blocks.jpg’ width=800 />

5分钟block(英文)

结束语:块无处不在,两种形式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的代码。

参考:

看懂这个视频(英文版)相当于学会了一半的 Ruby

结束语:模块是组织代码的基本方式。

第五章 中级:单元测试

开始本章学习。

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

关系示意图如下

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

参考:

面试准备系列(英文版)

可以作为学习的参考。

结束语:单元测试是质量的保证。

第六章 高级:元编程和DSL

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>

本实例英文原文

附录 学习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元编程》,书中有详细介绍。

推荐书籍网站

入门

  • Ruby中文官网
  • 《笨办法学Ruby》

提高

  • 《Eloquent Ruby》
  • 《Ruby元编程》
  • 《面向对象设计实践指南:Ruby语言描述》

路线图

  • 本书属于中间区域,入门书籍。

带有链接的图:https://www.learneroo.com/modules/61/nodes/337

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

告别:

希望这本小书成为你学习Ruby的起点,再见!

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

联系方式:见目录部分

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-28 19:14:43

Ruby语言简明入门与提高的相关文章

Ruby(面向对象程序设计的脚本语言)入门

Ruby是一种为简单快捷的面向对象编程(面向对象程序设计)而创的脚本语言. 简介 Ruby 是开源的,在Web上免费提供,但需要一个许可证. Ruby 是一种通用的.解释的编程语言. Ruby 是一种真正的面向对象编程语言. Ruby 是一种类似于 Python 和 Perl 的服务器端脚本语言. Ruby 可以用来编写通用网关接口(CGI)脚本. Ruby 可以被嵌入到超文本标记语言(HTML). Ruby 语法简单,这使得新的开发人员能够快速轻松地学习 Ruby. Ruby 与 C++ 和

OpenAI Gym 入门与提高(一) Gym环境构建与最简单的RL agent

Openai gym是一个用于开发和比较RL算法的工具包,与其他的数值计算库兼容,如tensorflow或者theano库.现在主要支持的是python语言,以后将支持其他语言.gym文档在https://gym.openai.com/docs. Openai gym包含2部分: 1.gym开源库:包含一个测试问题集,每个问题成为环境(environment),可以用于自己的RL算法开发.这些环境有共享的接口,允许用户设计通用的算法.其包含了deep mind 使用的Atari游戏测试床. 2.

【答读者问】如何入门和提高嵌入式

内容简介 [答读者问]如何入门和提高嵌入式 嵌入式可以说是目前涵盖面最广,最火的职业 今天有位读者朋友给小编发邮件,小编立马回复了.然后觉得也许回复对大家也有用,就写出来看看.彼此学习: 你好,首先恭祝你踏入了编程这个奇妙的世界,会很有意思的,不过要注意锻炼身体. 总之一句话,学编程不要花钱,现在都是免费资源.如果花大钱去读培训班,就有点亏了(假如没有培养自学的能力,去了培训机构基本也是浪费).完全自学,也不需要花钱买什么资料,网上都是免费的基本. 1.嵌入式软件的话不一定需要学很多硬件知识的(

Swift语言高速入门

Swift语言高速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著   ISBN 978-7-121-24328-8 2014年10月出版 定价:59.00元 428页 16开 编辑推荐 本书内容翔实,实例丰富,同步新版官方API文档和语法 语法|词法|框架覆盖全面,实战案例|配套习题丰富 多位Swift专家联合推荐,不仅是Swift入门书籍,也可做案头工具书 作者携手Swift专家在线答疑,方式例如以下: 1.专属勘误

IOS开发语言Swift入门连载---可选链

IOS开发语言Swift入门连载-可选链 可选链(Optional Chaining) 是一种可以请求和调用属性.方法及下标脚本的过程,它的可选性体现于请求或调用的目标当前可能为空(nil ).如果可选的目标有值,那么调用就会成功:相反,如果选择的目标为空(nil ),则这种调用将返回空(nil ).多次请求或调用可以被链接在一起形成一个链,如果任何一个节点为空(nil )将导致整个链失效. 注意: 的可选链和 Objective-C 中的消息为空有些相像,但是 Swift 可以使用在任意类型中

Swift语言快速入门

Swift语言快速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著   ISBN 978-7-121-24328-8 2014年10月出版 定价:59.00元 428页 16开 编辑推荐 本书内容翔实,实例丰富,同步新版官方API文档和语法 语法|词法|框架覆盖全面,实战案例|配套习题丰富 多位Swift专家联合推荐,不仅是Swift入门书籍,也可做案头工具书 作者携手Swift专家在线答疑,方式如下: 1.专属勘误交流

有趣的机器学习:最简明入门指南

有趣的机器学习:最简明入门指南 首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他技术 - 导航条 - 首页 最新文章 IT 职场 前端 - JavaScript - HTML5 - CSS 后端 - Python - Java - C/C++ - PHP - .NET - Ruby - Go 移动端 - Android - iOS 数据库 运维 - Linux - UNIX 其他技术 - Git - 机器学习 - 算法 - 测试 - 信息安全 - Vim 伯乐在线 > 首页 >

2015 数学建模竞赛 入门与提高 读书笔记

<数学建模竞赛入门与提高> 第1章:数学建模概述 近半个多世纪以来,数学已经走进了各大领域,而与其他学科相结合形成交叉学科,首要的关键一步就是建立研究对象的数学模型,并加以计算求解,数学建模和计算机技术在知识经济时代的作用可谓是如虎添翼. 1.1  初入门径--认识数学模型与数学建模 数学建模就是用数学语言描述实际现象的过程,这里的实际现象包含具体的自然现象,也包含抽象的比如顾客对某种商品所取的价值倾向.这里的描述不但包括外在形态,内在机制的描述,也包括预测,试验和解释评价实际现象等内容. 数

第一课 C语言简明教程

1序言: 1与Java.C#等高级语言相比,C语言却非常简单,学习简单,使用也简单,但是也非常重要,到目前为止基本上操作系统的内核代码超过百分之九十使用C语言完成,因此学好C语言是学好计算机这门课程的基础,特别是进入系统编程尤为明显. 今天是本人复习C语言课程的第一课,主要重新记录一下C语言的基础知识,这节课涉及到C语言的结构.变量以及类型.输入输出.条件判断以及循环知识. 2知识点: 2.1 C语言的结构 2.1.1 通常情况下C语言程序是由: 1.相关的代码注释,使用/* ··· */可注释