博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ruby语言简明入门与提高
阅读量:6216 次
发布时间:2019-06-21

本文共 4635 字,大约阅读时间需要 15 分钟。

rails请参考我写的简明Ruby系列:

作者:chenge

联系方式:

  • 邮件:chenge3k at qq.com

分割线

第一章 简介

内容简介

目标读者:

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

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

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

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

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

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

为什么写这个小书

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

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

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

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

学习计划

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

  1. 先学习初初级部分,感性认识和培养兴趣,参考时间一天。
  2. 有兴趣继续的话学中级,可自选书籍或者参考下面的中英文电子版,参考时间1-6个月。
  • (有目录,简明扼要,介绍了11个常用概念,包括有些另类的Symbol类型,:hello)

(有道翻译的中文版,翻译效果不错)

实验

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

网上实验

最简单的,, 或者去,代码复制过去,选择ruby.

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

本机实验

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

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

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

学习社区

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

版本变更

变更:

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

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

分割线

第三章 块

块是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---》依赖对象

主要包括测试对象和依赖对象。

  • incoming测试状态。
  • outgoing分command和query,command就是有输出,query没有输出。

    • outgoing command测试行为,用mock模拟对象。
    • outgoing query不用测试。
#引用minitest gem,可以自己安装: gem install minitestrequire "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  endend # < 是继承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  endend

简单解释下例子:

Calc是被测试的功能代码,TestCalc是测试代码,测试的目的是验证功能代码是否正确。

两个测试方法,其中test_add比较简单。

第二个test_add2用到了mock模拟对象,稍微复杂一些。除了验证基本的计算外,还验证了是否执行了log操作。

操作如下

先运行一次,正确的话会显示两个点:‘..’。

可以故意把Calc改错,比如改为a-b, 或者把那个log代码注释掉,再运行看是否能测试出来。

练习题

  • 写一个减法功能和测试
  • 写一个带有日志功能的减法和测试
  • 自己构思一个小的功能和测试
参考:
可以作为学习的参考。

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

分割线

第六章 高级:元编程和DSL

DSL是特定领域语言,rails里有很多例子,rake, rspec, migration等等。下面这个例子演示了原理,主要用了method_missing。学完后,再看那些rails代码就比较亲切了。

当然本书主要还是入门书,更多的请参考《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 => #
1.9.3-p545 :019 > {}.method :reduce => #

method方法可以实现。

文档

如果找明确的方法,可以用ri,方便快捷。

ri String.sub

不过这种方式似乎不好用。有一个专门的dash软件,很好用。似乎是只支持mac。

对象模型

各种对象语言的原理是类似的,但是内部实现模型是不一样的。Ruby用起来简单,内部很复杂的。

当你感觉Ruby好用的时候,其实应该感谢Matz的工作。

Kernel模块是核心,很多重要的方法都在里面。推荐看《Ruby元编程》,书中有详细介绍。

推荐书籍网站

入门

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

提高

  • 《Eloquent Ruby》
  • 《松本行弘的程序世界》(教主作品,粉丝必读)
  • 《Ruby元编程》
  • 《面向对象设计实践指南:Ruby语言描述》

路线图

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

books

带有链接的图:

原图:

告别:

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

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

请我喝一杯,手机支付宝

联系方式:见目录部分

转载地址:http://pnlja.baihongyu.com/

你可能感兴趣的文章
TortoiseGit 软件安装过程截图及配置
查看>>
来自一个程序员的反思
查看>>
为什么我们应该使用 pnpm(译)
查看>>
图片服务器------FastDFS
查看>>
springboot--如何优雅的使用mybatis
查看>>
以太坊智能合约学习笔记(一)
查看>>
一篇文章带你了解js作用域
查看>>
说说分布式事务(五)
查看>>
JSDuck实战
查看>>
ikbc G87&104 双子座 使用说明书
查看>>
[译+] Laravel GraphQL ReadMe 文档
查看>>
如何利用Docker构建基于DevOps的全自动CI
查看>>
27 岁学编程是不是太晚了
查看>>
express框架学习写简单api
查看>>
微信小程序[第九篇] -- 下拉刷新和上拉加载
查看>>
小程序开发总结(二)
查看>>
vue2.0学习笔记(第四讲)(生命周期函数、vue实例的简单方法、自定义指令)...
查看>>
Substring with Concatenation of All Words
查看>>
python进阶笔记【2】 --- 一个奇怪的 __future__ 库
查看>>
MVC学习笔记
查看>>