您的位置:首页 > 编程语言 > Ruby

[2014年学习计划之RoR系列] 第二步 - 熟悉Ruby语言 (1/n)

2014-01-06 16:55 274 查看
完成第一步之后,打算开始花两周时间,学习Ruby语言。

在网上找了两本教程,先看第一本《Programming Ruby 2nd》这书有个小标题叫做“The Pragmatic Programmers' Guide”。

希望真如它说的实用,不是花哨的大忽悠,

 这里就记录一下学习笔记了。

运行Ruby

安装了Ruby之后,我在Windows Command里边直接敲了'ruby',满心期望会有一个类似Python那样的交互环境,结果不是。看了书才知道

这是一个一次性的输入 - 用户输入结束后按Ctrl + D,ruby就会解释用户的输入。这个不是那么好用,于是换irb,以前用过一个Python的PREL跟irb很相似。

简单明了,这里也不多说了。

RDoc 和 ri

RDoc就是ruby的文档,跟JavaDoc类似,不用赘述。ri我试了一下,发现跟书上写的不太一样,是因为我用的ruby版本比较新吗?这个问题不重要,先放一边了。

函数的定义和调用

def say_goodnight(name)
result = "Good night, " + name
return result
end

# Time for bed...
puts say_goodnight("JohnBoy")
puts say_goodnight("MaryEllen")

这个没什么好说的。begin/end风格的,不需要像Python那样严格对待缩进。

Ruby中的命名约定 - 以首字母区分

局部变量,方法的参数和方法名以小写字母开始;

全局变量是以美元符号($)开始的(有点想念php了);

实例变量用一个"@"符号开始;

类变量用两个"@"符号开始,也就是@@;

类名,模块名和常量以大写字母开始;

注意@之后不可以是数字;

实例变量如果包含多个单词,单词之间用下划线“_”连接;

如果类名包含多个单词,每个单词首字母大写,例如HomeController

数组和哈希 (hashes,或者叫字典)



很高兴看到ruby的数组也是zero-based。书中顺带着提了一下 nil 说是跟其他语言中的null不一样,这个以后再来细究吧。

如果是创建字符串数组,有一个捷径如下图所示:



ruby中的哈希,如下图所示。

inst_section = {
'cello' => 'string',
'clarinet' => 'woodwind',
'drum' => 'percussion',
'oboe' => 'woodwind',
'trumpet' => 'brass',
'violin' => 'string'
}

inst_section['oboe']          ->       "woodwind"
inst_section['cello']           ->       "string"
inst_section['bassoon']   ->        nil

注意如果某一个key不存在,哈希就返回nil。这是ruby哈希的缺省行为,下面的例子将缺省值改为0。

histogram = Hash.new(0)
histogram['key1']       -> 0
histogram['key1'] = histogram['key1'] + 1
histogram['key1']       -> 1

控制结构(Control Structures)

if/else/elsif 和 while,直接看例子吧

if count > 10
puts "Try again"
elsif tries == 3
puts "You lose"
else
puts "Enter a number"
end

while weight < 100 and num_pallets <= 30
pallet = next_pallet()
weight += pallet.weight
num_pallets += 1
end

while line = gets

puts line.downcase

end

statement modifiers (怎么翻译好听呢?) 是ruby中的一种捷径(个人觉得成为语法糖更合适)。如果if/while的条件表达式很简单的时候可以用下面例子的写法,

能够简化/美化代码。

if radiation > 3000

    puts "Danger, Will Robinson"
end

puts "Danger, Will Robinson" if radiation > 3000

square = 2
while square < 1000
    square = square*square
end

square = 2
square = square*square while square < 1000


-------------------------------------------------- 2014-01-06 ------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: