Ruby简明入门与增进

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

今天和好用Angular写东西的早晚,下载了Angular-seed项目,发现需要用bower,之前也利用过,没有仔细打听,今天趁着询问及片。

Ruby语言简明入门与加强

作者:chenge

联系方式:

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

bower的官网地址: http://bower.io/

目录

第一章 简介

次节 初级:类和目标

第三章 块

第四章 模块

第五段 中级:单元测试

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


Bower是一个客户端技术的软件包管理器,它而用来搜索、安装和卸载如JavaScript、HTML、CSS之类的网络资源。它擅长前端的管教管理,通过其API展示了保证依赖型。使得项目不在系统级的依赖性,不同的应用程序间为不会见共享依赖,整个依赖树是扁的。

内容简介

对象读者:

  • 最先编程者
  • 老大学习Ruby的程序员

Ruby是顺应吃新家的,即使是尚未写了程序的食指来拟,我深信初级部分雷同上就是能够效仿了。

为救助你上再自在把,我竭尽选择了简要的情节。

通过浏览目录,就理解我选了有什么内容。初级我选了三组共四独概念,本书定位初学,所以中高等就是附带介绍一下,选择了介绍单元测试和DSL。这些情节,特别是下等部分,是自身根据自家之自学经验,认为对初学者比较根本之骨干的内容,不是说别的Array、Hash等无重大,只是为明确和快学习,做了摘。

生了这个基础后,遇到不懂得的,查阅下参考书就好了。

我会不定期地修订,增加自己觉着正确的材料。

怎以Bower?摘自segmentfault

  1. 节省时间。为什么而修Bower的第一单由,就是她会否卿节省寻找客户端的因关系之时日。每次自己需要安装jQuery的时段,我还待去jQuery网站下充斥包或使CDN版本。但是有了Bower,你只是待输入一个命,jquery就见面设置于地方电脑上,你无需要去记版本号之类的事物,你为堪透过Bower的info命令去查任意库的音信。

  2. 脱机工作。Bower会在用户主目录下创建一个.bower之文件夹,这个文件夹会下载所有的资源、并设置一个软件包使它们得以离线使用。如果你熟悉Java,Bower即是一个看似于今天流行的Maven构建系统的.m2库房。每次你生充斥任何资源库都以于安装于有限只公文夹着
    ——
    一个以的应用程序文件夹,另一个在用户主目录下的.bower文件夹。因此,下一样不好你用以此库房时,就见面因此十分用户主目录下.bower中之本子。

  3. 可生容易地见客户端的因关系。你可以创建一个称也bower.json的文件,在此文件里而可以指定所有客户端的凭关系,任何时刻你要弄清楚你正在以什么库,你得参考这文件。

  4. 让升级换得简单。假设有库底初本子发布了一个要的安全修补程序,为了设置新本子,你唯有待周转一个下令,bower会自动更新所有关于新本子的赖关系。

Bower依赖于NodeJS和npm。可以采用npm全局安装Bower,-g 操作表示全局。

npm install -g bower

得小心的是,Bower的周转,依赖让版本控制工具git,从github拉取以来信息。

下面的吩咐可以创新或卸载Bower。

npm update -g bower
npm uninstall -global bower

为什么写这个有点开

自家期望就此极端精简之点子介绍Ruby的中心。

我我是程序员,05年左右接触Ruby,我是看镐头书入门的,对Ruby的记忆是,但要么看不得要领,觉得小复杂。又过了几乎年,读了几乎准参考书才似乎知道了部分。

类的书写一般都关乎诸多细节,反而被中心不明晰,初家往往不得要领,学习负担又。如果一致开始念到本书这样的牵线,我道是发出救助的。

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

始发使用Bower

装完bower之后便得以具有的bower命令了。可以键入help 命令来查看bower可以做到那些操作,如下:

bower help

用法:

bower <command> [<args>] [<options>]

命令Commands:

    cache-clean       清除Bower的缓存,或清除指定包的缓存
    completion        Bower的Tab键自动完成
    help              显示Bower命令的辅助信息
    info              指定包的版本信息和描述
    init              交互式的创建bower.json文件
    install           安装一个本地的包
    link              包目录的符号连接
    list, ls          列出所有已安装的包
    lookup            根据包名查询包的URL
    register          注册一个包
    search            根据包名搜索一个包
    uninstall         删除一个包
    update            更新一个包

选项:
    –no-color 关闭彩色输出(适合Bower的保有命令)

还可以运用命令’bower help
<command>’来查看Bower指定命令的详细信息。

攻计划

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

  1. 预先上新初级部分,感性认识以及塑造兴趣,参考时间一致上。
  2. 产生趣味继续的话语学中,可自选书籍或参考下面的面临英文电子版,参考时间1-6只月。

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

  4. 20分钟体验
    Ruby

确保之设置

 Bower是一个软件包管理器,所以若可以应用程序中之所以它来设置新的软件包。举例来拘禁一下来安使Bower安装JQuery,在您想如果装该包的地方创造一个新的文本夹,键入如下命令:

bower install jquery

上述命令就以后,你见面当您刚刚创建的目下看到一个bower_components的文书夹,其中目录如下:

tree bower_components/
bower_components/
└── jquery
    ├── README.md
    ├── bower.json
    ├── component.json
    ├── composer.json
    ├── jquery-migrate.js
    ├── jquery-migrate.min.js
    ├── jquery.js
    ├── jquery.min.js
    ├── jquery.min.map
    └── package.json

1 directory, 10 files

Bower会使用库的讳,去当线索引中追寻该库底网址。某些情况下,如果一个仓房很新(或者您切莫思量行使默认网址),可能得我们手动指定该仓库的网址。

bower install git://github.com/documentcloud/backbone.git
bower install http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.0.0/backbone-min.js
bower install ./some/path/relative/to/this/directory/backbone.js

面的指令说明,指定的网址可以是github地址、http网址、本地文件。

默认情况下,会设置该库的风靡版本,但是呢足以手动指定版本号。

bower install jquery-ui#1.10.1

地方的指令指定安装jquery-ui的1.10.1版。

只要某库依赖另一个仓库,安装时默认将所依靠的仓库一起安装。比如,jquery-ui依赖jquery,安装时见面连jquery一起安装。

装后的库默认存放在项目之bower_components子目录,如果只要指定其他职务,可在.bowerrc文件的directory属性设置。

实验

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

网上尝试

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

外一样栽小复杂的道,去实验楼网站,linux环境下运行看结果,可以于巅峰Terminal里运行:irb,就可跟ruby对话了。

本机实验

linux和苹果上相似还安好了ruby,运行ruby -v可以拘留是不是安装了。
假如没的话,请参见wiki自行安装Ruby。windows上吗非常容易安装之。

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

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

包的利用

当今就算得在应用程序中采用jQuery包了,在jQuery里创建一个略的html5文本:

<!doctype html>
<html>
<head>
    <title>Learning Bower</title>
</head>
<body>

<button>Animate Me!!</button>
<div style="background:red;height:100px;width:100px;position:absolute;">
</div>

<script type="text/javascript" src="bower_components/jquery/jquery.min.js"></script>
<script type="text/javascript">

    $(document).ready(function(){
        $("button").click(function(){
            $("div").animate({left:'250px'});
        });
    });
</script>
</body>
</html>

恰好而你所观看底,你刚刚引用jquery.min.js文件,现阶段做到。

念社区

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

持有保险之列表

假若你想寻找来有安装在应用程序中的承保,可以采取list命令:

bower list
bower check-new     Checking for new versions of the project dependencies..
blog /Users/shekhargulati/day1/blog
└── jquery#2.0.3 extraneous

本子更改

变更:

2015-3-26:高级部分改用了DSL的事例,更实用吧还易于了解。

2015-1-26:改写单元测试,更爱懂

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

保险之查找

设你想在你的应用程序中应用twitter的bootstrap框架,但若莫确定包之名字,这时你得运用search 命令:

bower search bootstrap
Search results:

    bootstrap git://github.com/twbs/bootstrap.git
    angular-bootstrap git://github.com/angular-ui/bootstrap-bower.git
    sass-bootstrap git://github.com/jlong/sass-twitter-bootstrap.git

读者反映

期待你写下看之感触与改良意见。

担保之信息

假若你想看有关特定的保的音信,可以使用info 命令来查该包的具有消息:

bower info bootstrap
bower bootstrap#*           not-cached git://github.com/twbs/bootstrap.git#*
bower bootstrap#*              resolve git://github.com/twbs/bootstrap.git#*
bower bootstrap#*             download https://github.com/twbs/bootstrap/archive/v3.0.0.tar.gz
bower bootstrap#*              extract archive.tar.gz
bower bootstrap#*             resolved git://github.com/twbs/bootstrap.git#3.0.0

{
  name: 'bootstrap',
  version: '3.0.0',
  main: [
    './dist/js/bootstrap.js',
    './dist/css/bootstrap.css'
  ],
  ignore: [
    '**/.*'
  ],
  dependencies: {
    jquery: '>= 1.9.0'
  },
  homepage: 'https://github.com/twbs/bootstrap'
}

Available versions:
  - 3.0.0
  - 3.0.0-rc1
  - 3.0.0-rc.2
  - 2.3.2
 .....

假定你想获取单个包的音信,也得以用info 命令:

bower info bootstrap#3.0.0
bower bootstrap#3.0.0           cached git://github.com/twbs/bootstrap.git#3.0.0
bower bootstrap#3.0.0         validate 3.0.0 against git://github.com/twbs/bootstrap.git#3.0.0

{
  name: 'bootstrap',
  version: '3.0.0',
  main: [
    './dist/js/bootstrap.js',
    './dist/css/bootstrap.css'
  ],
  ignore: [
    '**/.*'
  ],
  dependencies: {
    jquery: '>= 1.9.0'
  },
  homepage: 'https://github.com/twbs/bootstrap'
}

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

包之卸载

推载包得运用uninstall 命令:

bower info bootstrap#3.0.0
bower bootstrap#3.0.0           cached git://github.com/twbs/bootstrap.git#3.0.0
bower bootstrap#3.0.0         validate 3.0.0 against git://github.com/twbs/bootstrap.git#3.0.0

{
  name: 'bootstrap',
  version: '3.0.0',
  main: [
    './dist/js/bootstrap.js',
    './dist/css/bootstrap.css'
  ],
  ignore: [
    '**/.*'
  ],
  dependencies: {
    jquery: '>= 1.9.0'
  },
  homepage: 'https://github.com/twbs/bootstrap'
}

Ruby的骨干计划原则

迎开启有趣之Ruby之同!

Ruby语言的撰稿人Matz在《代码的美》一题中描述了他的宏图思想,就是简、保守、简单、灵活性,以及平衡性等五分外口径。

    puts 'hello world'

事例中那么一行代码,可以说明简洁、保守(puts继承自C语言)和精炼。灵活性与平衡性需要以重复杂的代码中得回味至。

担保的卸载

推卸载包可应用uninstall 命令:

bower uninstall jquery

恍如及对象

分类是相符人之琢磨的。比如人类,每个人尽管是全人类的一个实例,约定都翻成靶子。

    #注释:定义类
    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有字幕,视频听不懂得问题吧不坏,看演示过程即可了,还可以练英语,一举两得。

结语:类与目标是无比基本的。

布文件.bowerrc

品种根本目录下(也可以在用户的主目录下)的.bowerrc文件是Bower的配置文件,它大约像下这样。

{
  "directory" : "components",
  "json"      : "bower.json",
  "endpoint"  : "https://Bower.herokuapp.com",
  "searchpath"  : "",
  "shorthand_resolver" : ""
}

里的性能含义如下。

  • directory:存放库文件的子目录名。
  • json:描述各个库房的json文件称。
  • endpoint:在眉目引的网址,用来查找各种库。
  • searchpath:一个勤组,储存备选之当眉目引网址。如果有库在endpoint中寻找不至,则连续搜寻该属性指定的网址,通常用于放置某些不公开的仓库。
  • shorthand_resolver:定义各个库房名称简写形式。

<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和{}

bower.json文件的下

bower.json文件的应用可叫包的设置更易于,你可以于应用程序的一干二净目录下创办一个称也“bower.json”的公文,并定义其的负关系。使用bower init 命令来创造bower.json文件:

bower init
[?] name: blog
[?] version: 0.0.1
[?] description:
[?] main file:
[?] keywords:
[?] authors: Shekhar Gulati <shekhargulati84@gmail.com>
[?] license: MIT
[?] homepage:
[?] set currently installed components as dependencies? Yes
[?] add commonly ignored files to ignore list? Yes
[?] would you like to mark this package as private which prevents it from being accidentally published to the registry? No

{
  name: 'blog',
  version: '0.0.1',
  authors: [
    'Shekhar Gulati <shekhargulati84@gmail.com>'
  ],
  license: 'MIT',
  ignore: [
    '**/.*',
    'node_modules',
    'bower_components',
    'test',
    'tests'
  ],
  dependencies: {
    jquery: '~2.0.3'
  }
}

[?] Looks good? Yes

 可以查阅该文件:

{
  "name": "blog",
  "version": "0.0.1",
  "authors": [
    "Shekhar Gulati <shekhargulati84@gmail.com>"
  ],
  "license": "MIT",
  "ignore": [
    "**/.*",
    "node_modules",
    "bower_components",
    "test",
    "tests"
  ],
  "dependencies": {
    "jquery": "~2.0.3"
  }
}

在意看,它既参加了jQuery依赖关系。

现在一旦为想就此twitter bootstrap,我们得以为此底的通令安装twitter
bootstrap并更新bower.json文件:

bower install bootstrap --save

她会活动安装新型版本的bootstrap并创新bower.json文件:

{
  "name": "blog",
  "version": "0.0.1",
  "authors": [
    "Shekhar Gulati <shekhargulati84@gmail.com>"
  ],
  "license": "MIT",
  "ignore": [
    "**/.*",
    "node_modules",
    "bower_components",
    "test",
    "tests"
  ],
  "dependencies": {
    "jquery": "~2.0.3",
    "bootstrap": "~3.0.0"
  }
}

来了bower.json文件后,就足以用bower install命令,一下子设置所有库。

bower install

冲bower.json文件,还可通往Bower的在头脑引提交你的库。

bower register <my-package-name> <git-endpoint>
// 比如
bower register jquery git://github.com/jquery/jquery

专注,如果你的仓库与现有的库重名,就见面提交失败,如果您的package-name是驼峰的,也会见登记失败。

报bower库的例子,我报了一个命名color的仓库,使用如下命令:

bower register color-namer https://github.com/CraryPrimitiveMan/ColorNamer

显示信息如下:

bower convert       Converted https://github.com/CraryPrimitiveMan/ColorNamer to git://github.com/CraryPrimitiveMan/ColorNamer.git
bower resolve       git://github.com/CraryPrimitiveMan/ColorNamer.git#*
bower download      https://github.com/CraryPrimitiveMan/ColorNamer/archive/0.0.1.tar.gz
bower progress      color-namer#* received 0.1MB
bower progress      color-namer#* received 0.1MB
bower progress      color-namer#* received 0.1MB
bower progress      color-namer#* received 0.2MB
bower progress      color-namer#* received 0.2MB
bower progress      color-namer#* received 0.2MB
bower progress      color-namer#* received 0.2MB
bower progress      color-namer#* received 0.3MB
bower extract       color-namer#* archive.tar.gz
bower resolved      git://github.com/CraryPrimitiveMan/ColorNamer.git#0.0.1
? Registering a package will make it installable via the registry (https://bower? Registering a package will make it installable via the registry (https://bower.herokuapp.com), continue?: Yes
bower register      git://github.com/CraryPrimitiveMan/ColorNamer.git

Package color-namer registered successfully!
All valid semver tags on git://github.com/CraryPrimitiveMan/ColorNamer.git will be available as versions.
To publish a new version, just release a valid semver tag.

Run bower info color-namer to list the available versions.

足就此如下命令查看注册的bower库的信

bower info color-namer
bower info color-namer#0.0.1

 

马上就算是今日之学,希望会叫你针对bower有个足够的摸底,最好可以团结尝尝一下。

 

大部内容选择自SegmentFault阮一峰博客

 

<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

要自喝一样盏,手机支付宝

联系方式:见目录前