🦄 2024 独立开发者训练营,一起创业!查看介绍 / 立即报名(剩余8个优惠名额) →

博客

Day 9:Ruby 集合与容器对象

数组(array),散列(hash)。array 里的项目有顺序,你可以用索引号得到对应的项目。hash 里的项目是成对的,一对里有个 key 还有个对应的 value。得到项目的 value 可以使用项目的 key 。

任何的 Ruby 对象都可以作为 hash 的 key 或者 value ,不过注意 key 在 hash 里一定是唯一的。hash 在其它的语言上也叫 dictionaries 或者 associative arrays  。

array 与 hash 很像。在某种意义上 array 就是 hash,只不过它的 key 是连续的整数。hash 有某种意义上也是 array,只不过索引可以是任何东西。

做个实验:

array = ["ruby", "diamond", "emerald"]
hash = { 0 => "ruby", 1 => "diamond", 2 => "emerald" }
puts array[0] # ruby
puts hash[0] # ruby

再做个实验:

Day 8:Ruby 字符串,符号,数字,日期

2016年9月11日 下午6:46 **

字符串

String 与 Symbol 这两个类提供了表示文字与处理文字的功能。这两个类之间很不同。

字符串表示

一个字符串一般用一组引号包装:

"这就是一个字符串"

单引号也行:

'我也是个字符串'

使用字符插值的时候得用双引号:

puts "二加二等于 #{2 + 2}"
puts '二加二等于 #{2 + 2}'

输出的内容是:

二加二等于 4
二加二等于 #{2 + 2}

单引与双引在 escape 时的区别:

Day 7:Ruby 内置类

2016年9月10日 下午4:17 ***

Ruby 的字面构造器

Ruby 大部分的内置类可以使用 new 来实例化:

str = String.new
arr = Array.new

有些类不能使用 new 来实例化,比如 Integer 类。有些内置类可以使用字面构造器,就是不需要使用 new ,可以使用一种特别的形式来创建类的实例。

时间跟踪

跟朋友吹牛:“我经常工作到凌晨两三点”,忽悠客户:“这个项目花了我三个月的时间”。经常工作到凌晨说明的只是你比较喜欢在晚上工作。做项目花了三个月时间,如果我是客户,我会想,你是每天两小时,持续了三个月,还是每天八小时持续了三个月。你是怎么知道自己到底在某件事情上花了多长时间?不能胡诌,要用一个简单的科学的方法,就是用你的手表掐算时间,当然更好的方法是使用时间跟踪的软件。

我也是最近才使用了时间跟踪,因为我想记录未来 30 天的工作与学习的过程,看一下到底花了多久学会一门语言跟框架。Toggl 是我用的跟踪软件,跨平台,简单易用。在框框里输入你想干的事,给事情选择个对应的项目,也可以打上几个标签,就可以开始跟踪了,在你的手机,电脑上都可以看到跟踪的状态。

我觉得时间跟踪可以作为一种工作与学习的方法。使用这种方法以后,我很少出现脑袋要分裂的状态,以前如果我经常在两三件事情上来回切换,过一阵脑袋就像是要裂开一样,疲惫,无法再继续学习或工作。

时间跟踪要求你,先做一个简短的计划,这个任务计划应该在秒级单位时间完成。然后把你要做的事情交给跟踪软件,开始你的任务,这个过程有点像是一种强制手段,迫使你不能干其它的事情。停下任务,就停止跟踪时间,稍后可以继续这个任务。

Day 6:Ruby 控制流

2016年9月8日  下午7:12 ***

之前我们见过方法的调用,它会让程序从调用方法的地方跳到方法的定义主体那里。程序并不是按直线运行的,执行的顺序会受到一些规则还有一些被称为控制流的程序设计结构的影响。

Ruby 的控制流有下面这些:

  • 条件执行(Conditional execution)— 根据表达式的真实性执行。
  • 循环(Looping)— 一块儿重复执行的代码。
  • 迭代(Iteration)— 调用方法的时候给它提供一块儿代码,方法在它执行的时候可以多次调用这块代码。
  • 异常(Exceptions)— 处理异常情况。

按条件执行代码

Ruby 提供了一些基于条件控制程序流的方法。有两大类,if 还有 case 。

if 跟它的朋友们

if 用起来像这样:

if condition
  # condition 如果是 true 就执行这里的代码
end

if 可以嵌套使用:

Day 5:self,作用域,可见性

2016年9月7日 下午5:37 ***

有些东西在任何时间任何地方表示的意思是不变的,比如整数,你看到的就是它表示的东西。关键词也一样,你不能使用 def,class 这些关键词作为变量名,所以当你看到它们的时候,你可以很容易知道它们是做什么的。不过还有很多东西的意思取决于它们所处的情境,也就是它们在不同的时间不同的地方的意思可能是会有变化的。

self 表示的是当前或者默认的对象,在程序运行的时候每次它都会表示一个特定的对象。永远都只会有一个 self ,但是它表示的东西是会变的。

作用域(scope)的规则决定了变量的可见性。你要知道所在的地方受哪个作用域的影响,这样你才能明白哪些变量表示的是什么,不致于把它们跟在其它的作用域的同名变量混淆。

知道当前是在哪个作用域,了解 self 表示的对象是谁,这样你才能明白到底发生了什么,才可以快速的分析遇到的问题。

下午 5:54 ***

self

下午6:07 ***

使用关键词 self 可以得到当前对象。在程序运行中,有且只有一个 self 。成为 self 有一些特权,一会儿我们会看到。永远都只会有一个当前对象或者叫 self 。是谁在哪里会成为 self 是有一些规则的。

Day 4:Ruby 模块

2016年9月7日 上午10:18 ***

介绍一种跟类相似的构造:模块(module)。在设计程序的时候,我们会把大的组件分割成小块,你可以混合与匹配对象的行为。

跟类差不多,模块也捆绑方法与常量。不一样的是,模块没有实例。你可以把拥有特定功能的模块放到类或某个特定的对象里使用。

Class 这个类是 Module 类的一个子类,也就是所有的 class 对象应该也是一个 module 对象。

上午10:26 ***

创建与使用模块

上午10:26 ***

module MyFirstModule
  def say_hello
  puts 'hello'
  end
end

我们创建了类以后可以去创建这个类的实例,实例可以执行类里面的实例方法。不过模块是没有实例的,模块可以混合(mixed in,mix-in,mixin)到类里面,用的方法是 include 还有 prepend 。这样类的实例就可以使用在模块里面定义的实例方法了。

使用一下上面定义的那个模块:

Day 3:Ruby 组织对象用的类

类与实例

2016年9月5日 下午7:35 ***

一个类里面会定义一些方法,类存在的理由就是要被实例化,也就是去创建一个类的实例得到一个对象。一个实例化的动作,像这样:

obj = Object.new

Object 是 Ruby 内置的一个类,在类上使用点形式,就是 Object 与 new 之间的那个点。你就是发送了一个信息给类。类会对这个信息做出响应,就像对象可以响应信息一样。类也是对象。new 方法是一个构造器,也就是类里面的可以加工与返回新实例的方法。

使用 class 关键词可以去定义类,类的名字用的是常量,使用大写字母开头。常量可以存储信息,常量的值是可以改变的,但是你不能为常量去分配一个新的值,这样 Ruby 会警告你。最好的方法是避免为已经有值的常量分配新的值。

来创建一个 Ticket 类,它里面有一个简单的方法:

class Ticket
  def event
    'can not really be specified yet...'
  end
end

现在可以创建一个新的 ticket 对象,然后问一下它的 event:

Day 2:Ruby 对象

大部分 Ruby 程序,它们的设计,逻辑,动作,都是围绕着对象进行的。写一个 Ruby 程序,主要的工作就是去创建对象,然后给它们能力,让它们可以去执行动作。

Ruby 是 OOP 语言,就是面向对象的语言,你执行的计算,数据处理,输入与输出这些动作,都是通过创建对象,然后让这个对象去执行指定的动作来完成的。对象(object)在现实世界里,就是一个东西。一个苹果是一个对象,一张桌子也是一个对象。

每个对象是一个特定的类的实例(instance),对象的行为大部分是在它们所属的那个类上面定义的方法(method)决定的。
当你想干点什么的时候,比如计算,输出,数据比较,你就是让一个对象去做。比如你想问 a 是否等于 b ,你要问的是 a 是不是认为它自己等于 b 。如果你想知道一个学生是不是上了某个老师的课,你可以问这个学生,“你是不是这个老师的学生”。

写 Ruby 程序,大部分工作就是创建对象,让每个对象都扮演个角色,每个对象可以执行跟这个角色相关的动作。

单元测试:用 JavaScript 语言演示一下单元测试是什么

test,testing,unit test,测试,单元测试,这些词总是出现在我眼前,下意识地觉得它没那么重要,也会认为它很难搞,所以我总是把它忽略掉。可它们仍然会不断的出现在各种场合,因为陌生,所以见到它难免有些尴尬。终于,我忍不住想认识一下它。原来它很简单,也很重要。

我说的测试,指的是程序设计里的单元测试,一听到单元这两个字儿我就有点懵,因为我会把它跟计算机联系到一块儿,但其实如果把 “单元” 放到现实世界,就非常容易理解,一栋楼分成几个单元,一本书里的内容分成了几个单元。单元测试就是测试程序里的一小部分,比如,有一个单元测试,可以测试一个类里面的某个方法。测试的到底是哪个部分,是你自己决定的。

单元测试里的 “测试”,测试的就是你做的一些断言(assert)。你在测试里可以说明一下你做的断言,比如我的程序在什么情况下,做什么事情的时候,应该怎么样。比如调用 cart 这个类里的 subtotal 这个方法的时候,如果给它的单价是 10 块钱,数量是 3 个,那么这个方法应该返回 30 。这就是我在某个测试里做的断言,如果我做的断言是真的,那这个测试就会通过,如果是假的,就是哪里出了点问题。

微信好友

用微信扫描二维码,
加我好友。

微信公众号

用微信扫描二维码,
订阅宁皓网公众号。

240746680

用 QQ 扫描二维码,
加入宁皓网 QQ 群。

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点