进入Ruby的世界——基础篇

本文主要内容

  • Ruby语法的生存工具箱[1]

  • Ruby基础编程指引:程序编写、保存、运行和错误检查

  • Ruby安装指南

  • Ruby的扩展机制

  • Ruby中易用的命令行工具,包括交互式Ruby解释器(irb)

本书的内容是Ruby基础,而本章是基础中的基石。本章的目标是让读者在开始学习Ruby之前掌握足够的知识和技巧。

接下来读者将看到Ruby的基本语法和技术,以及Ruby的运行机制:如何写一个程序,怎样使用Ruby运行程序,以及如何把一个程序分写到多个文件中。此外,读者还将学习到一些开关(switch)[2]的用法,即它们如何改变Ruby解释器(名为ruby的程序,用于执行用Ruby语言写的程序文件)的作用,也会学习使用一些重要的辅助工具,让读者的Ruby程序员生涯更加轻松和高效。

本章将Ruby领域的观点分为以下3个基本层次。

  • 语言核心:设计原则、语法、语义。
  • Ruby支持的扩展(extension)和类库(library),以及用户自己添加到扩展中的工具。
  • Ruby自带的命令行工具,用于运行解释器和其他一些重要工具。

这3个部分在一个系统中环环相扣,因此在本书中它们的内容会相互贯穿,不过在本章中会尽量分开讨论。尽管如此,这3个部分的内容都会贯穿在书的每一章中。

{Ruby,ruby,还是RUBY?!!!} 

Ruby是一门编程语言。我们会谈论“学习Ruby”,还会问一些问题,比如“你知道Ruby吗?”ruby是指一个计算机程序,特指Ruby的解释器,它可以读取并运行程序。可以看到这个命名方式在一些文章中出现,如“你用ruby运行我的文件,但什么也没发生。”,或者“ruby可执行文件的完全路径是什么?”最后是RUBY,准确来说,没有这样的写法。Ruby不是一个缩略语词汇,所有字母都大写的拼写方式向来都是错的。人们在对待Perl语言的时候也出现过同样的错误,或许是因为他们看到了如BASIC和COBOL这样的拼写方式,但Ruby不同。一般用“Ruby”来表示编程语言,用“ruby”来表示Ruby的解释器。

第1章不是只为服务于其他章节而存在的,它也有自己存在的价值:学习真正的Ruby技术和这门语言设计中的要点。其目标是为了引导和启发读者,但即使如此,学习过程还是会深入Ruby语言的一些关键层面。

1.1 Ruby语言基础知识

本节的目标是让读者开始接触Ruby。这里采用广度优先的方法:大致围绕语法学习、代码编写、程序运行这样一个循环过程展开。

说到这里,读者需要在自己的电脑上安装好Ruby。书中的例子都使用Ruby 2.1.0[3]编写。还需要准备一个文本编辑器(任何偏好的编辑器都可以,也可以用纯文本编辑器,但文字处理软件不行)和一个存放Ruby程序文件的目录(亦称文件夹)。可以命名目录为rubycode或者rubysamples,无论什么名字都可以,只要能够区别于其他工作区并方便地找到练习程序文件即可。

{交互式Ruby控制台程序(irb)是最好的朋友!!}

随Ruby发布的irb实用工具,是一个Ruby命令行工具,irb使用的广泛程度高于Ruby解释器本身。启动irb之后,键入Ruby代码,它将执行代码并输出结果值。

在命令行中键入irb,然后输入在文中所见的示例代码。例如:

{:–}..\1.tif{20%}

打开irb会话意味着可以随时测试任意数量的Ruby代码段。大多数Ruby程序员都发现irb是不可缺少的,而且本章中的一些示例也是使用irb运行的。

读者将看到下面irb的示例使用了命令行选项,它的输出结果更易于阅读。

..\2.tif{40%}

运行irb时加入此选项或者不加,就可以看到--simple-prompt选项的效果。正如所见,这个简单的提示符选项将使屏幕更简洁明了。默认的(非简单的)提示符显示了更多的信息,如在交互会话时的行号统计。但从众多的示例可以看出,简单的提示符已足够使用。

因为irb是一个用于运行Ruby语言的命令行工具,所以直到1.4.2节才会详细讨论它。如有需要,可以转到那一节去看一下,这是最直接的方式。

完成Ruby的安装,并创建好工作目录的,就继续学习Ruby吧,这样我们就能分享Ruby学习和探索中的见地。掌握Ruby的语法将会是一个良好的开端。

1.1.1 Ruby语法生存包

下面3个表总结了Ruby的一些特性,这对于理解本章的例子和开始体验Ruby语言大有益处。不必记住它们,只要看一下并在稍后用到的时候回查即可。

表1-1包含了Ruby的一些基本运算。表1-2中介绍了获取基础键盘输入、将输出发送到屏幕以及基本的条件语句。表1-3简要描述了Ruby的特殊对象和注释的语法。

表1-1 Ruby的基本运算

操  作 示  例 注  解
算术运算 2+3(加法)
2–3(减法)
2*3(乘法)
2/3(除法)
10.3 + 20.25
103 - 202.5
32.9 * 10
100.0 / 0.23
所有的运算都使用整型或浮点型。如例子中所示,混合使用整型和浮点型数值进行运算,其结果为浮点型



注意:需要使用0.23而不是.23
赋值 x=1
string = "Hello"
本操作将一个对象(右边)绑定到一个局部变量(左边)之上。与此同时,把对象看作是用变量表示的一个值
值比较 x == y 注意:使用两个等号(不同于赋值使用一个等号)
字符串到数值的转换 x = "100".to _ i
s = "100"
x = s.to _ i
为了算术运算的顺利执行,必须保证使用的是数字而不是字符构成的字符串。to_i用于执行字符串到整型的转换

表1-2 Ruby的基本I/O(输入/输出)方法和流控制

操  作 示  例 注  解
打印到屏幕 print "Hello" puts "Hello" x = "Hello" puts x x = "Hello" print x
 x = "Hello" px 如果字符串的行尾没有包含换行符,puts就会添加一个,但print不会 print会精确打印内容并让光标留在末尾(提示:在某些系统平台,在程序输出的末尾会自动换行) P会输出一个审查字符串,它通常会包含一些额外的输出信息
获取键盘单行输入 gets string = gets 直接将输入的一行赋值给变量(第二个例子中的变量string
条件语句执行 if x == y  puts "Yes!" else  puts "No!" end 条件语句总是以单词end结束(更多细参见第6章)

表1-3 Ruby的特殊对象和注释

操  作 示  例 注  解
特殊值对象 true false nil 对象truefalse通常用于返回条件表达式的值。对象nil是“nonobject”的一种,表明值或者结果的缺失。false和nil使得条件表达式失败,所有的其他对象(包括true,当然也包括0和空字符串)使得其成功(更多细节参见  第7章)
默认对象 self 关键字self引用默认对象。self是一个依赖于运行时上下文,由不同对象扮演的角色。没有指定调用者的方法,调用的时候会默认为被self调用(更多细节参见第5章)
代码中的注释 # 一个注释x = 1 # 一个注释 注释部分,会被编译器忽略

以上摘要表中已经包含了许多Ruby的基础和语法。读者需要能够辨认出Ruby标识符(identifier)的几种不同写法,尤其是对Ruby中的对象和方法调用有一个感性认识。我们稍后将会谈论这些内容。

1.1.2 多种多样的Ruby标识符

Ruby的标识符类型很少,一眼就能辨认和区分它们。标识符体系如下。

  • 变量(variable):
    • 局部变量(local variable);
    • 实例变量(instance variable);
    • 类变量(class variable);
    • 全局变量(global variable)。
  • 常量(constant);
  • 关键字(keyword);
  • 方法名(method name)。

这是一个很小的体系,很容易掌握,这一节将讨论它们。记住本节的目标是学习辨认不同的标识符。本书后面将学习如何使用和使用它们的时机。这只是标识符知识的第一课。

1.变量

局部变量以小写字母或者下划线开头,包含字母、下划线或数字。xstringabcstart_valuefirstName都是有效的局部变量命名方式。然而,值得注意的是,在组合多个单词以命名局部变量时,Ruby的约定是使用下划线作为命名规范,而不使用驼峰命名法,如使用first_name而不使用firstName

实例变量为独立的对象存储信息,它通常以一个单独的符号(@)开头,后面的字符使用与局部变量相同的命名规则,如@age@last_name。尽管局部变量不能以大写字母开头,但是实例变量可以在@符号之后的第一个位置使用大写字母(但不能使用数字)。但是通常来说,@符号之后还是使用小写字母。

类变量在每一个类层级上存储信息(同样,现在也不用担心它的语义)。它与实例变量使用相同的命名规则,只有一点不同,它以两个@符号(@@)开头,如@@running_total

全局变量可以通过它的美元引导符号($)辨认出来,如$population。跟在$符号之后的语句不使用局部变量的命名规则。有一些全局变量名为$:$1$/,还有$stdin$LOAD_PATH。但只要以$符号开头,它就是一个全局变量。这些非字母的标识符是预定义的,因此不必担心其中的标点符号是否合法。

表1-4总结了Ruby变量的命令规范。

表1-4 总结Ruby变量命名规范

变 量 类 型 Ruby规范 非 规 范
局部变量 first _ name FirstName 、 _ firstName 、 __ firstName 、 name1
实例变量 @first _ name @First _ name 、 @firstName 、 @name1
类变量 @@first _ name @@First _ name 、 @@firstName 、 @@name1
全局变量 $FIRST</code> _ <code>NAME</code> | <code>$first _ name 、 $firstName 、 $name1
2.常量

常量使用大写字母开头。AStringFirstNameSTDIN都是有效的常量命名。在Ruby命名规范中,如遇到命名多词组合的常量时,可以使用驼峰命名法(FirstName)也可以使用下划线分隔且所有字母大写(FIRST_NAME)的方式。

3.关键字

Ruby拥有很多的关键字,它们是预定义的保留词,与特定编程任务和上下文关联。关键字包括def(用于方法定义)、class(用于类定义)、if(条件执行)和FILE(当前被执行文件的名称)。关键字大约有40个,通常是简短的、单一词汇(与下划线组合多单词方式相反)的标识符。

4.方法名

Ruby中的方法命名遵从与局部变量相同的规则和约定(除了以?!=结尾的符号,其重要作用稍后会讲述)。这是一种设计理念:方法并不因其自身作为方法而被人关注,而是简单地作为提供值的表达式融入到程序的结构中。在一些上下文中,很难一眼就区分出一个表达式是一个局部变量还是一个方法名,这一切源自设计,是有意为之。

讲完方法,现在已经有了一张Ruby标识符的“路线图”,让我们谈一下编程语言的语义,尤其是对象及其方法的重要作用。

1.1.3 方法调用、消息和Ruby对象

Ruby把所有的数据结构和值都看做对象,从整数和字符串这样简单的标量(原子的)值,到数组(array)这样的复杂的数据结构一概如此。每个对象都能响应一组特定的消息,对象能够接收的每个消息直接对应一个方法——有名称的、可以被有执行能力的对象触发的可执行例程。

对象也可以用字面量构造器表示,如字符串用双引号,或者已绑定值的变量。消息通过特殊的点运算符(.)送达:点右边的消息被发送到点左边的对象上。(另外,有许多特殊的给对象发送消息的方式,但是点是最常用和基础的方式。)参见表1-1中的示例:

..\1.tif{25%}

点(.)意味着消息to_i被发送给字符串对象"100"。字符串对象"100"作为消息的接收者被调用。也可以说是方法to_i被字符串对象"100"调用。方法调用的结果是生成整数100&#x

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值