[翻译]Ruby教程2——词法结构

Ruby 词法结构

计算机语言跟人类语言类似也有词法结构。一个Ruby程序的源代码由符号构成。符号标志是最基本的代码元素。在Ruby语言中我们有多种词法结构,如:注释、变量、字面量、空白符号、操作符、分隔符和关键字。


注释


注释是用于向人们阐明源代码。在Ruby中有两种注释的方法,单行注释和多行注释。单行注释以#字符开始;多行注释是放置在=bgin=end 等号标志之间。



#!/usr/bin/ruby


=begin



comments.rb

author Jan Bodnar

ZetCode 2011



=end


# prints message to the terminal

puts “Comments example”



这个例子同时展示的两种方法的注释。注释的内容将会被Ruby解释器忽略掉。



=begin
comments.rb
author Jan Bodnar
ZetCode 2011
=end


这是一个多行注释的例子,两个符号标志必须在行首。


空白符号


在源文件中Ruby的空白符号被用于分隔符号标志和结束语句。它也用于增强代码的可读性。


if true then

  puts “A message”

end


空白字符在一些时候是必须的。例如在if关键字和true关键字之间;或者在puts方法和实际的字符串之间。而有时它又是被禁止的,如它不能包含在变量标识符或者语言关键字中。


a=1

b = 2

c  =  3


这些在符号标志之间的空白字符对于Ruby解释器是无关紧要的。但是它于整个项目的风格统一非常重要。





#!/usr/bin/ruby


x = 5 + 3

puts x


x = 5

    + 3

puts x


x = 5 +

    3

puts x



换行是一种用于结束语句的空白字符形式。


x = 5 + 3


在第一种情况,我们有一条语句。它将相加求和的值赋给x变量。这个变量的值为8。


x = 5

     +3


现在第二种情况。第1条语句被换行符终止了,x变量的值是5。另一条语句+3,没有任何影响。


x = 5 +

     3


最后,第1条语句的换行符之前有一个+二元操作符,因此解释器期望另一个值,它将检查第二行。在这种情况它将这两种作为一条语句,因此x这是的值为8。


$ ./whitespace.rb

8

5

8


以上为输出结果。


变量


变量是一个保存了值的标识符。在编程时我们说我们给一个变量分配一个值。专业一点的说法是一个变量是对计算机中存储了值的内存的引用。在Ruby中一个变量可以保存字符串、数字或者多种对象。不同时间变量可以被分配不同的值。

在Ruby中变量名由字母数字和下划线组成,但是不能以数字开头。Ruby解释器可以很容易地区分原始的数字跟变量。变量名不能以大写字母开头,在Ruby中以大写字母开头的标识符会被认为是一个常量。



Value

value2

company_name



以上这些都是合法的变量名。



12Val

exx$

first-name



以上这些都不是合法的变量名。


变量名前可以加$@这两个特殊的字符,它们用于创建特殊作用域的变量。


变量名是大小写敏感的,这意味着pricepRice是两个不同的标识符。



#!/usr/bin/ruby

number = 10

numBER = 11


puts number, numBER



在这个脚本中我们给两个标识符分配了两个数字。numbernumBER是两个不同的变量。



$ ./case.rb

10

11



以上是这个脚本运行的输出结果。


常量


常量的值在程序运行过程中是不变的。在Ruby中一个标识符的首字母大写即为一个常量。编程时对于常量约定是所有字母全都大写。

与其他语言不同,Ruby不会强制要求常量的值始终不变。当我们给一个常量分配新的值时解释器只会提示一个警告。



#!/usr/bin/ruby

Name = “Robert”

AGE = 23

Name = “Juliet”



在上面的例子中我们创建了两个常量,其中一个被重新定义了。



Name = “Robert”

AGE = 23



创建两个常量。在Ruby中标识符的首字母大写即定义为常量。作为约定常量通常是所有字母都大写的。



Name = “Juliet”



我们重新定义了一个常量,这会引起一个警告。



$ ./constants.rb

./constants.rb:6: warning: already initialized constant Name



以上是这个例子运行的输出。


字面量


字面量(literal)是按原文本内容所表示的特殊类型的值。字面量类型包括布尔型、整型、浮点型、字符串、字符和日期。专业的说一个字面量在编译时会分配一个值,该值在运行时会分配给对应的变量。



age = 29

nationality = “Hungarian”



这里我们分配了两个字面量变量。数字29和字符串“Hungarian”都是字面量。


#!/usr/bin/ruby

require ‘date’

sng = true
name = “James”
job = nil
weight = 68.5
born = Date.parse(“November 12, 1986”)

puts “His name is #{name}”

if sng == true
puts “He is single”
else
puts “He is in a relationship”
end

puts “His job is #{job}”
puts “He weighs #{weight} kilograms”
puts “He was born in #{born}”

在上面这个例子中,我们使用了多个字面量。布尔字面量的值可能为true或者falseJames是一个字符串字面量,nil表示一个不存在的值,68.5是一个浮点数,最后November 12,1986是一个日期。



$ ./literals.rb

His name is James

He is single

His job is

He weighs 68.5 kilograms

He was born in 1986-11-12



以上为literals.rb脚本的输出结果。


代码块


Ruby语句通常是放在代码块中。一个代码块可以被{}符号或者doend关键字分隔。


#!/usr/bin/ruby

puts [2, -1, -4, 0].delete_if { |x| x < 0 }

[1, 2, 3].each do |e|
puts e
end

这个例子中我们展示了两个代码块。


Ruby代码的控制流通常是使用if关键字。这个关键字k跟随着一个代码块,在这种情况下代码块被thenend关键字分隔,then关键字是可选的。


#!/usr/bin/ruby

if true then
puts “Ruby language”
puts “Ruby script”
end

在上面这个例子中,我们展示了一个简单的代码块。它有两条语句。这个代码块被thenend关键字分隔。then关键字可以省略。


符号


符号$@是特殊字符用于表示变量的作用域,$表示全局变量,@表示实例变量,@@表示类变量。



$car_name = “Peugeot”

@sea_name = “Black sea”

@@species = “Cat”



这些符号总是位于变量标识符的开头。


操作符


操作符是一个用于对值执行一个动作的符号。


!    +    -    ~        **    /    %
<< >> & | ^
== === != <=> >= >
< <= = %= /= -=
+=
= *= .. … not
and or ?: && ||

以上是在Ruby中所有有效的操作符,我们将在之后的教程中介绍它们。


分隔符


分隔符是一个或多个用于在纯文本或者其他数据流中指定分隔独立区域范围的字符序列。


(       )       [       ]       {       }
, ; ‘ “ | |

#!/usr/bin/ruby

name = “Jane”
occupation = ‘Student’
numbers = [ 2, 3, 5, 3, 6, 2 ]

puts name; puts occupation
puts numbers[2]
numbers.each { |i| puts i }
puts ( 2 + 3 ) 5

在上面这个例子中我们展示多种Ruby分隔符的用法。



name = “Jane”

occupation = ‘Student’



在Ruby中单引号和双引号被用于分隔字符串。



numbers = [ 2, 3, 5, 3, 6, 2 ]



中括号用于指定数组的范围。逗号用于分隔数组项。



puts name; puts occupation



在Ruby中分号用于分隔两条语句。



puts numbers[2]



分隔符可用于不同的环境中,这里中括号用于访问数组。



numbers.each { |i| puts i }



大括号用于定义代码块。管道用于定义在每次循环中被当前数组项所填充的元素。



puts ( 2 + 3 ) * 5



括号用于改变一个表达式的求值。


关键字


关键字是在Ruby语言中被保留的字。关键字用于在计算机程序中展示特定的任务。例如:在终端中打印一个值,执行重复的任务或者展示逻辑操作。程序员不能使用关键字作为普通的变量。


alias    and      BEGIN      begin    break    case
class def defined? do else elsif
END end ensure false for if
in module next nil not or
redo rescue retry return self super
then true undef unless until when
while yield

这些是Ruby的关键列表。


以上就是Ruby的词法结构了。




原文地址: http://zetcode.com/lang/rubytutorial/lexis/

翻译:龙昌 admin@longchangjin.cn

完整教程:https://github.com/wusuopu/Ruby-tutorial