全都是大写字母.ANDROID_SYSTEM = 'android'
如果不算@, @@, $的话,是小写字母开头.下划线拼接.例如: color
, age
, is_created
首字母大写,骆驼表达法: Apple
, Human
小写字母开头. 可以以问号? 或者等号结尾,例如: name
, created?
, color=
作为面向对象语言, class毫无疑问是最重要的. Ruby中的任何变量都是 object. (不像java, int 是基本数据类型, Integer才是 class.)
具体的写法:
- 名字首字母大写
- class 开头, end 结尾.
- 文件名字与class名称一样.只是改为: 下划线 + 小写.
class Apple
# 这个方法就是在 Apple.new 时自动调用的方法
def initialize
# instance variable, 实例变量
@color
end
# getter 方法
def color
return @color
end
# setter 方法
def color= color
@color = color
end
# private 下面的方法都是私有方法
private
def i_am_private
end
end
red_apple = Apple.new
red_apple.color = 'red'
puts "red_apple.color: #{red_apple.color}"
我们来运行这个文件:
$ ruby apple.rb
# => "red_apple.color: red"
上面的例子是java/c风格的. ruby的熟手一般这么写:
class Apple
# 这一句,自动声明了 @color, getter,setter
attr_accessor 'color'
end
变量
类变量: class variable, 例如: @@name, 作用域:所有的多个instance 会共享这个变量. 用的很少.
实例变量 instance variable, 例如: @color, 作用域仅在instance之内
普通变量: local variable, 例如: age = 20, 作用域仅在 某个方法内.
全局变量: global variable, 例如:$name = "Jim", 作用域在全局. 用的更少.
下面是一个例子:
class Apple
@@from = 'China'
def color = color
@color = color
end
def color
return @color
end
def get_from
@@from
end
def set_from from
@@from = from
end
end
red_one = Apple.new
red_one.color = 'red'
puts red_one.color
# => 'red'
red_one.set_from 'Japan'
puts red_one.get_from
# => 'Japan'
green_one = Apple.new
green_one.color = 'green'
puts green_one.color
# => 'green'
puts green_one.get_from
# => 'Japan'
方法:类方法(class method)与实例方法(instance method)
用法上, 看这个例子:
class Apple
# 类方法
def Apple.name
'apple'
end
# 实例方法
def color
'red'
end
end
Apple.new.color
# => red
Apple.name
# => apple
Symbol: 不变的字符串
前面的apple.rb例子中, 正常的应该写成:
class Apple
attr_accessor :color
end
这个 :color 是什么呢? 就是Symbol. 它是不会变化的字符串.
内容永远不变. 等同于一个常量.
特别适合做hash 的key.
大量被用到.
:name 等同于: "name".to_symbol
字符串插值
在Ruby中,我们最好所有的地方都用字符串插值(interpolition) ,避免使用 + 方式. 原因是:对于不同的数据类型,用+号时,系统会报错.
使用字符串插值时,记得用双引号.
puts "hi, #{name}!"
# => hi, jim
你也可以把它写成:
puts "hi, "+ name
# => hi, jim
如果用加号,一些时候就会报错:
a = 1
puts "a is: " + a
# => 报错
puts "a is: #{a}"
# => a is: 1
hash: 同一个hash 的三种写法
任何情况下都生效的语法: =>
jim = {
:name => 'Jim',
:age => 20
}
Ruby 1.9之后产生的语法:更加简洁.
jim = {
name: 'Jim',
age: 20
}
也可以写成:
jim = {}
jim[:name] = 'Jim'
jim[:age] = 20
但是, symbol 与 string , 是不同的key, 例如:
a = {:name => 'jim', 'name'=> 'hi'}
a[:name] #=> 'jim'
a['name'] #=> 'hi'
条件语句
if else end
是最常见的
a = 1
if a == 1
puts "a is 1"
elsif a == 2
puts "a is 2"
else
puts "a is not in [1,2]"
end
case when end 分支语句
a = 1
case a
when 1 then puts "a is 1"
when 2 then puts "a is 2"
when 3,4,5 then puts "a is in [3,4,5]"
else puts "a is not in [1,2,3,4,5]"
end
三元表达式
a = 1
puts a == 1 ? 'one' : 'not one'
# => one
循环:for, each, loop, while
使用原则: 哪个可读性强就用哪个
for, each (前者是关键字,后者是普通方法)
[1,2,3].each { e
puts e
}
# 等同于下方:
for e in [1,2,3]
puts e
end
for 与 each 都可以做循环,但是高手都用each.
区别在于:for 是关键字, each是方法. for 后面的变量,是全局变量,不仅仅存在于for .. end 这个作用域之内.
for i in [1,2,3]
puts i
end
puts i # => 3
loop与while是几乎一样的.
loop do
# your code
break if <condition>
end
begin
# your code
end while <condition>
但是ruby的作者推荐使用loop. 因为可读性更强. 下面是一个例子
a = [2,1,0,-1,-2]
loop do
current_element = a.pop
puts current_element
break if current_element < 0
end
# => 2
# => 1
# => 0
热门评论
写ruby像我写的伪代码(☆_☆)
不是很习惯,习惯了括号包裹着
写的真不错,比那个learn code hard好,那个简直太啰嗦,一个字符串的东西可以讲好几章,看的也是服。。。