Ruby 语法入门
您想开始使用 Ruby on Rails,但对 Ruby 一点经验都没有?或者,几个月没有用 Ruby 编写代码后,您需要复习一下?
这篇文章为你提供了 Ruby最小可行语法这样你就可以开始了。
红宝石
Ruby 是一种动态面向对象编程语言(在 Ruby 中一切都是对象)。它由 Yukihiro Matsumoto 在 90 年代中期创建。当 Ruby on Rails 开始成为构建 Web 应用程序的热门语言时,它的受欢迎程度呈指数级增长。
Ruby 的重点是生产力和程序员的乐趣。换句话说,它专注于减少麻烦。
安装 Ruby
如果你使用的是 Mac 或 Linux,那么很有可能你已经安装了某个版本的 Ruby。不过,它可能不是最新版本,在撰写本文时是 v2.2.3。
要安装最新版本,最常见的方式是使用RVM (Ruby 版本管理器)。
下面介绍如何从终端安装 RVM,然后从终端安装 Ruby 和 Rails:
$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
$ \curl -sSL https://get.rvm.io | bash -s stable --ryby --rails
运行一些代码
在计算机上安装 Ruby 后,您可以轻松地开始使用 irb(交互式 Ruby)并运行一些代码。只需在终端中输入 irb,您就会得到一个提示符,类似于 irb(main):001:0>,然后您就可以从那里运行一些 Ruby 代码。
关于语法的一般说明
Ruby 中每行末尾没有分号,每个新表达式都单独一行。您可以使用行末的 \ 字符将长表达式延续到多行。缩进不是强制性的,但为了提高可读性和可维护性,通常使用 2 个空格的缩进。
Ruby 文件的扩展名是 .rb,下面介绍如何在 Ruby 中在屏幕上打印一些内容:
puts "Hello, Alligator!"
或者,使用 print 命令,它与 puts 的不同之处在于它不会在输出中添加新行:
print "Hello, Alligator!"
保留关键字
以下是 Ruby 中不能用作标识符的关键字:
BEGIN
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,END
alias
and
begin
break
case
class
def
defined
do
else
elsif
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
标识符和变量名称
标识符和变量区分大小写,可以包含字母、十进制数字或 _ 字符。它们不能以数字开头。以大写字母开头的标识符是常量。
评论
使用 # 进行注释。大多数情况下 # 也用于多行注释:
# This is a comment
# Comment on
# multiple
# lines
也可以像这样创建多行注释:
=begin
Comment on
multiple
lines
=end
数据类型
字符串
在 Ruby 中字符串也是对象,您可以执行以下操作:
"Alligator".size
输出内容如下:
=> 9
Ruby 中有很多可用于字符串的有用方法。以下是一些非常有用的方法,其中大多数都是不言自明的:
capitalize
,,,,,,,,,,,,,,,,,,,,,,,,,chars
chomp
chop
chr
count
delete
empty?
end_width?
eql?
include?
index
replace
reverse
slice
strip
swapcase
注意以 ? 结尾的方法。在 Ruby 中,当方法返回 true 或 false 时,通常以问号结尾方法名称。
整数
我们不会在这里介绍每种 Ruby 数据类型,但整数是另一个很好的例子,它显示了 Ruby 中所有内容都是对象。例如,您可以像这样调用整数方法:
666.odd?
这将返回 false,因为 666 是一个偶数。
数组
与许多其他语言一样,Ruby 中的数组是对象的索引集合。不同类型的对象可以用于同一个数组中。索引从零开始,这意味着数组中的第一个对象位于位置 0。如果您要查找数组中的第三个对象,则将使用索引 2。
以下是声明数组的两种有效方法:
my_array = ["Something", "very", "boring"]
# And this is equivalent:
my_array = Array.new(["Something", "very", "boring"])
数组还有一些非常有用的方法,下面列举一些:
any?
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,collect
compact
concat
count
delete
drop
each
empty?
eql?
first
include?
index
last
length
pop
push
reverse
shift
shuffle
slice
sort
unshift
哈希
哈希表类似于字典。哈希表内的所有对象均不会被编入索引,而是与一个可以是任意类型对象的唯一键相关联:
accused = { "who" => "You", "with_what" => "club" }
使用符号作为哈希键是一种常见的做法:
accused = { :who => "You", :with_what => "club" }
如果仅使用符号作为键,则可以使用以下简洁的语法:
accused = { who: "You", with_what: "club" }
再次强调,哈希有许多有用的方法,下面列举其中的几种:
any?
,,,,,,,,,,,,,,,,,,,,,,,,,,,,clear
compare_by_identity
default
delete
each
each_key
each_pair
each_value
empty?
eql?
fetch
has_key?
has_value?
include?
invert
keep_if
length
shift
size
符号
Ruby 中的符号有点奇怪。它们以 : 字符开头,在 Ruby 或 Rails 项目中经常出现。它们类似于字符串,但不可变。它们在首次创建后,在程序执行过程中无法更改。这使得它们访问和处理速度更快,从而使符号非常适合用作哈希中的键。
条件语句
如果…否则如果…否则
Ruby 提供了一些有趣的方法来构造条件语句。以下是传统的 if 语句:
sammy = "the shark"
if sammy.length > 10
puts "Not quite"
elseif sammy.length === 9
puts "I think we have a winner"
else
puts "Getting cold"
end
注意这里的关键字 elsif,不是 elseif 或 else if,而是 elsif!使用简单的 if 语句,您可以将它们构造在一行中,如下所示:
puts "Yes" if sammy.length === 9
除非语句
您可以使用 except 语句应用反向逻辑:
letters = ["A", "l", "l"]
unless letters[1] === "l"
puts "This won't print"
end
在上面的例子中,条件主体不会执行,因为条件计算结果为真。unless 语句通常比使用如果不逻辑上,它们更接近自然语言。
这是另一个示例,使用单行语法:
puts "Ok" unless letters.length > 3
案例陈述
构造条件语句的另一种方法是使用 case 语句。它们有助于处理非常复杂的 if 语句:
moon_to_earth = 238900
case
when moon_to_earth < 200000
puts "Not quite back home"
when moon_to_earth < 250000
puts "Went too far"
when moon_to_earth === 238900
puts "Spot on!"
else
puts "Off the track again"
end
或者,你可以用要求值的变量作为 case 语句的开头。请注意,这里可以使用各种语句来求值:
moon_to_earth = 238900
case moon_to_earth
when 1..200000
puts "Not quite back home"
when String
puts "We're looking for an integer"
when 238900
puts "Spot on!"
else
puts "Off the track again"
end