《Ruby语言入门教程v1.0》学习笔记-01
《Ruby语言入门教程v1.0》
编著:张开川
邮箱:kaichuan_zhang@126.com
想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一个简单的ppt做讲解,可能是因为我们需要使用到的并不多吧,不过既然要用,而且反正没谈恋爱的人最多的就是时间了,就好好看看这个吧。现在学习的这个教程。。说实话我也忘了是从哪儿捞来的了,不过既然ruby语言基本没什么出书的,就直接用这个吧。除了这个以外,还辅助这个网站来学习(http://www.yiibai.com/html/ruby/),好吧我承认,这个也是我今天才找到的,没有验证过好坏,万一不好用的话,嗯哼,以后再删了呗~
2013.9.3
第一章 概述
“从语义方面来看,人类语言的单词量非常大,要以万计,常用单词也有几千;计算机编程语言的基本单词只有几十个,我们称之为关键字。”从文中的这一句来看,似乎编程易乎其易,我却实在不敢大意啊。
感觉,概述里面除了对ruby特性的描述以外,对于ruby其他的分析介绍并不多,不过第一部分的“编程语言的发展简史”挺有意思的,所谓第一代编程语言“0,1”,第二代编程语言“汇编语言”是使“程序员之间能够很容易地交流”,第三代编程语言在于“容易编写,容易阅读,容易交流,而且可以与CPU、操作系统无关”,第四代编程语言,在于“你只要告诉它你要什么,无须告诉它怎么做,它就能把答案给你”。当然,这里的ruby是属于第三代编程语言的。
作者解释说“Ruby 吸取了 perl 的正则表达式, python 的简单性可读性,smalltalk 的纯面向对象语法和单继承,LISP 的无穷嵌套的语法,Java的线程…”,以此来说明ruby的特性,但我不得不说,我都不认识啊!!!!!!!!好吧,在“1.4 Ruby的特性”这一部分,以前看到所谓特性、优缺点,只想着背下来背下来啊,现在则开始思考了,所谓特性也是根据它本身的功能所总结出来的,那么,原理是什么呢?╭(╯^╰)╮你以为你告诉我它叫张三我就真记得真认识它是张三啦!
ps:感慨,其实一门语言也不过是名码农创造出来的,平时的我们却把这些想的高高在上难乎其难,不过是自己的躲懒而已。
第二章 安装ruby
Ruby语言的集成开发环境: 目前我用的ruby s 1.8.7 不过没有找到所说的1.8.5上有的代码编辑工具SciTE,去哪儿找啊???
而且第三个小程序我还没完成啊 !我一定要知道这是为什么!!!(已解决,2013-09-17)
copy con hello.rb (c:\ruby下)
print “hello world”
print “ 3*7=”,3*7
^Z
ruby hello.rb
小mark:
ruby –v 检查ruby版本号
输入 ruby –e ‘print “hello,world” ’ ,
ruby 的意思:运行这个ruby语言程序;
-e 的意思:把后面的一行脚本作为一个ruby程序;
print 的意思:打印(动作);
hello,world 的意思:这是我们要输出的内容。
2013.9.16
第三章 语法快览
3.1 注释与分行
函数说明、类说明应该放置在 =begin 和 =end 之中。“=begin”一定要写在行首,也就是说,这一行的前六个字符是“=begin”,不允许有空格在这之前。
#从#开始到行尾是单行注释
=begin
中间部分可进行多行注释
=end
Ruby中用分号“;”来表示一个语句的结束。一行如果有多个语句,每个语句用分号隔开,而最后一个语句可以省略分号。
换行符表示一行结束。如果语句太长,可以用“\”连接下一行。
疑问:输入一下信息,表示新建了一个test1.rb的文件,但是输入完信息后,怎么结束输入???目前我只能关掉cmd窗口来终止信息的输入。(按Ctrl+Z出现“^Z”的符号,按回车,就成功保存了)
C:\Windows\System32>cd c:\ruby
c:\Ruby>copy con test1.rb
# test1.rb 从#开始到行尾是单行注释
puts 3/5;puts 3/5.0;puts "这里演示"\
"连行"
^Z
=begin
puts 6/5;puts 6/5.0
多行注释。实际上,这也是Ruby的内嵌文档(Rdoc)注释,可以用命令ri从源文件产生文档。
=end
这里是执行test1.rb的文件,查看程序运行结果
c:\Ruby>ruby test1.rb
0
0.6
这里演示连行
3.2 ruby中常用分隔符
符号 | 名称 | 用途 |
; | 分好 | 用来分隔一行中的多个语句 |
() | 圆括号 | 提高优先级;定义方法时容纳参数列 |
空格 | 分隔字符;在可省略()的地方,代替() | |
, | 逗号 | 隔开多个参数 |
. | 点 | 将对象与它的方法隔开 |
:: | 紧连的两个冒号 | 域作用符,将模块(类)与它的常量隔开 |
3.3 关键字
类型 | 名称 |
模块定义 | module |
类定义 | class |
方法定义 | def , undef |
检查类型 | defined? |
条件语句 | if , then , else , elsif ,case ,when ,unless |
循环语句 | for ,in ,while ,until ,next, break ,do ,redo ,retry ,yield |
逻辑判断 | not ,and ,or |
逻辑值和空值 | true ,false , nil |
异常处理 | rescue ,ensure |
对象引用 | super ,self |
块的起始 | begin/end |
嵌入模块 | BEGIN ,END (备注:BEGIN模块相当于C语言中的宏, END模块用来作一些收尾工作。有了require,include,应该取消BEGIN和END的语法定义。) |
文件相关 | __FILE__ , __LINE__ |
方法返回 | return |
别名 | alias |
3.4 运算符
优先级 | 能否重写 | 运算符 | 描述 |
最高 | Y | [] []= | 数组下标;数组元素赋值 |
Y | ** | 乘幂 | |
Y | ! ~ + - | 非;位非;一元加;负号 | |
Y | * / % | 乘;除;模 | |
Y | >> << | 右移,左移 | |
Y | & | 位与 | |
Y | ^ | | 位异或;位或 | |
Y | <= < > >= | 小于等于;小于;大于;大于等于 | |
Y | <=> == === =~ != !~ | 各种相等判断(!= 及 !~ 不能重写)(这两个不能一起,还是他们各自不能写两个?) | |
&& | 短路与 | ||
|| | 短路或 | ||
.. ... | 区间的开始点到结束点 | ||
?: | 三元条件运算符 | ||
= %= ~= /= -= += |= &= >>= <<= *= &&= ||= |**= |
各种赋值,例如:a=5;b+=3(意思是b=b+3) | ||
defined? | 检查类型 | ||
not | 逻辑非 | ||
or and | 逻辑或;逻辑与 | ||
if unless while until | 判断与循环 | ||
最低 | begin/end | 定义方法、类、模块的范围 |
3.5 标识名和变量的作用域
标识名的首字符用来帮助我们确定标识所指向内容的作用域。
Ruby的标志名区分大小写。
Ruby使用一个约定来帮助它区别一个名字的用法:
名字前面的第一个字符表明这个名字的用法。
局部变量、方法参数和方法名称应该用一个小写字母开头或者用一个下划线开头;
全局变量用美元符作为前缀 $;
实例变量用 @ 开头;
类变量用 @@ 开头;
类名、模块名和常量应该用大写字母开头。
词首字母后面可以是字母、数字和下划线的任意组合;@后面不可以直接跟数字。
3.6 类库
一门编程语言,A)关键字可以直接使用;
B)还有其它常用的应用程序,我们将它们放在一个专门的目录下,称为类库(许多类的仓库)。
如果当前程序要用到类库中某个程序已经定义好的类、方法,就应该使用 require 或者 include 将类库程序名包含在当前程序中。
C)从父类继承得到的方法可以直接使用。
ruby的I/O库很完善,这里介绍了几个输入输出的方法:
puts 把它的所有参数写出来,每一个参数结束都加入一个换行符,
print 也写出它的参数,不过没有换行。
printf 它按格式输出参数,不主动换行,换行可以用“\n”。
例:printf "Number: %4.3f, String: %s", 7.8, "hi!"
输出为“Number: 7.800, String: hi!”(表示printf用一个浮点数(总共允许4位,小数点后3位)和一个字符串来代替。)
但是我这里显示的是“Number: 7.800, String:hi!=> nil”又是一个问题,何解?
gets 它从你的程序的标准输入流中返回一行。一般用来从键盘或文件读入一行数据。
参考:http://blog.sina.com.cn/s/blog_5d2dc2e50100ha6a.html
3.7 数据类型
Ruby 数据类型有数字,字符串,数组,哈希表,区间,正则表达式。
数 字:整数型(1,0,75 ,1e3)。数字可以有前缀:0表示八进制, 0x表示十六进制, 0b表示二进制(0724,0x5AC4,0b11101)。
浮点型(2.4 ,7.0 ,0.99)。浮点型数据小数点后必须跟数字( 1.e3 不可以,1.1e3可以)。
字符串:是在‘ ’(单引号)、 “ ”(双引号)之间的代码。
数 组:数组的下标从0开始。Ruby的数组和其它语言不同,数组的每个元素可以是不同的类型:[ 2.4, 99,“thank you”,[ a, b ,c ] ,78 ]。
区 间:1..5 表示1,2,3,4,5 ;
1...5表示1,2,3,4 。
未对哈希表和正则表达式进行说明
3.8 赋值和条件运算符
这里就扯到之前说的运算符了啊,不得不说,这么多杂七杂八的运算符加在一起。。。真麻烦啊。。。。。。
列出部分吧啊
符号 | 结果 |
== (等于) |
比较两个对象的值是否相等 ,返回 true, flase |
eql? |
比较两个对象的值、类型是否相等,返回 true, flase |
equal? |
比较两个对象在内存中地址是否相同,返回 true, flase |
<=> |
比较两个对象的大小,大于、等于、小于 分别返回1,0,-1 |
=== |
右边的对象是否在左边区间之内,返回 true, flase |
=~(匹配) | 用来比较是否符合一个正则表达式,返回模式在字符串中被匹配到的位置,否则返回 nil |
!~ (不匹配) | 断言不符合一个正则表达式,返回 true, flase |
<= < > >= | 数值小于等于 小于 大于 大于等于 |
3.9 条件判断语句
判断条件是否相等用“==”,注意不要写成“=”。
一. 单行 if(如果)语句
1) if 条件 2)( 语句1;
then 语句1; 语句2 ;
语句2 ; 语句… )
语句… if 条件
end
Ruby里,nil 和 false 为假,其它都为真; puts "is true" if 5 #is true
str="false" ; puts "is true" if str #is true
二. 多行 if 语句
if 条件
语句1; 语句2 ; 语句…
elsif 条件
语句1; 语句2 ; 语句…
else
语句1; 语句2 ; 语句…
end
三. unless(除非) 条件语句:
unless与if完全相反,是在条件不成立的情况下执行语句
unless 条件
then 语句
end (这里是只,只有当条件不成立的时候,才能去执行语句)
四. case分支条件语句
case 对象 | case x
when 可能性1 。 when 1..2
语句1; 语句2 ; 语句… | print "x=",x,";在 1..2中"
when 可能性2 。 when 4..9, 0
语句1; 语句2 ; 语句… | print "x=",x,";在4..9,0中,或是0"
when 可能性… 。 else
语句1; 语句2 ; 语句… | print "x=",x,";其它可能"
else 。 end
语句1; 语句2 ; 语句… | 例子:x=3
end 。 结果:x=3;其它可能
P.S:在if、unless、case语句中,then可省略
在case表达式中,判断与when后指定的值是否一致可用”===”(3个等号)运算符表示。若”===”左边是数值或字符串,则意义与”==”一样;在正则表达式的场合下相当于”=~”,即匹配判定;在类的场合下,判断”===”右边的对象是否是类的实例
3.10 循环语句
一. while(当…) 循环
while 条件
语句1; 语句2 ; 语句…
end
二. 单行 while 循环
( 语句1; 语句2 ; 语句… ) while 条件
三. until(直到…) 循环
until 条件 = while not (条件),until是在条件不成立时才执行语句
a=1
until a >=10
print a," "
a=a+1
end #1 2 3 4 5 6 7 8 9
四. for…in 循环
for 变量 in 对象
语句1; 语句2 ; 语句…
end #当变量是属于对象的时候,执行语句
对象可以是数组,区间,集合…
五.break , next & redo & retry
在循环体内,如果遇到:
break ,跳出当层循环;
next ,忽略本次循环的剩余部分,开始下一次的循环;
redo ,重新开始循环,还是从这一次开始;(差点理解成从第一次循环开始啊,幸好把所有的例子都看了一遍,阿弥陀佛)
retry ,重头开始这个循环体(从第一个循环开始,ps:注意赋值的保存)。
六. times , upto , downto , each ,step
3.times { print "Hi!" } #Hi!Hi!Hi! 执行N次
1.upto(9) {|i| print i if i<7 } #123456 限定顺序为升序
9.downto(1){|i| print i if i<7 } #654321 限定顺序为倒序
(1..9).each {|i| print i if i<7} #123456 限定区间范围
0.step(11,3) {|i| print i } #0369 (这个不懂啊)
http://blog.sina.com.cn/s/blog_5d2dc2e50100ha6s.html
3.11 线程与异常
mark 暂时不学
《Ruby语言入门教程v1.0》学习笔记-01的更多相关文章
- 《Ruby语言入门教程v1.0》学习笔记-02
9.18 第四章 一切都是对象 这个章节的例子都举得很浅显易懂,而且作者的语言= =噗,委实生动有趣啊是~~ 4.1 两种思维方式 初期的编程思想是:以“如何做”为指导来编写代码.这时期的编程语言叫 ...
- 《Ruby语言入门教程v1.0》学习笔记-03
10.09 第七章 7.1 模块 Ruby标准包里的 Math 模块提供了许多方法,比如:求平方根 sqrt ,使用的时候要这么写:模块名.方法名(参数).如:Math.sqrt( a*5+b ) M ...
- mapreduce v1.0学习笔记
它是什么? 一个用于处理大数据开源的分布式计算框架,它由java实现,原生提供java编程交互接口,其它语言通过hadoop streaming方式和mapreduce框架交互. 可以做什么? 利用框 ...
- HDFS v1.0学习笔记
hdfs是一个用于存储大文件的分布式文件系统,是apache下的一个开源项目,使用java实现.它的设计目标是可以运行在廉价的设备上,运行在大多数的系统平台上,高可用,高容错,易于扩展. 适合场景 存 ...
- 《JavaScript语言入门教程》记录整理:运算符、语法和标准库
目录 运算符 算数运算符 比较运算符 布尔运算符 二进制位运算符 void和逗号运算符 运算顺序 语法 数据类型的转换 错误处理机制 编程风格 console对象和控制台 标准库 Object对象 属 ...
- 《JavaScript语言入门教程》记录整理:面向对象
目录 面向对象编程 实例对象与 new 命令 this关键字 对象的继承 Object对象的方法 严格模式(strict mode) 本系列基于阮一峰老师的<JavaScrip语言入门教程> ...
- RxJava2.0学习笔记2 2018年7月3日 周二
摘记: 1.map -- 转换 有些服务端的接口设计,会在返回的数据外层包裹一些额外信息,这些信息对于调试很有用,但本地显示是用不到的.使用 map() 可以把外层的格式剥掉,只留下本地会用到的核心 ...
- 《Angular4从入门到实战》学习笔记
<Angular4从入门到实战>学习笔记 腾讯课堂:米斯特吴 视频讲座 二〇一九年二月十三日星期三14时14分 What Is Angular?(简介) 前端最流行的主流JavaScrip ...
- Go语言入门教程(十)之函数
Hello 各位小伙伴大家好,我是小栈君,假期一眨眼就过去了.不知道大家玩的是否开心呢? 上次我们讲到了关于Go语言的流程控制,小栈君也希望小伙伴跟着小栈君一步一个脚印的敲一下代码,相互进步.本期我们 ...
随机推荐
- Python学习之四【变量】
变量:用于引用(绑定)对象的标识符 语法: >>变量名=对象 (数值,表达式等) 如计算圆的面积 PI=3.14 redius:12.3 area=PI*radius**2(**在pyth ...
- Java Math 类中的新功能--浮点数
Java™语言规范第 5 版向 java.lang.Math和 java.lang.StrictMath添加了 10 种新方法,Java 6 又添加了 10 种.这个共两部分的系列文章的 第 1 部分 ...
- ios中xib的使用介绍
ios中Xib的使用 ios中xib的使用 Nib files are the quintessential(典型的) resource type used to create iOS and Mac ...
- Linux下有线无线网络配置------命令模式
1. 列出启用网络设备的所有信息: ifconfig 2. 将网络设备设置为启用或者不启用 不启用设备eth0 ifconfig eth0 down 启用设备eth0: Will bring eth0 ...
- Java基础知识强化之集合框架笔记10:Collection集合使用的步骤
集合使用的步骤: (1)创建集合对象 (2)创建元素对象 (3)把元素添加到集合 (4)遍历集合: • 通过集合对象获取迭代器对象 • 通过迭代器对象的hasnext()方法判断是否有元素 ...
- javascript 实用函数
1.去除字符串空格 /*去左空格*/ function ltrim(s) { return s.replace(/^(\s*| *)/, ""); } /*去右空格*/ funct ...
- JavaScript ArrayBuffer浅析
时隔一年半,再次来到博客园.回首刚接触前端时所写的两篇随笔,无法直视啊~ --------------------------------------------------------------- ...
- 黑马程序员-hashtable
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列 ...
- big_table练习数据表
big_table练习数据表 create table big_table as select rownum id, a.* from all_objects a / alter table big_ ...
- uvalive 5760 Alice and Bob (组合游戏,dp)
题目链接: http://vjudge.net/problem/viewProblem.action?id=25636 对于>1的堆,必然会被其中一人全部合并. 然后就是二维dp,dp[非1堆的 ...