我的Ruby心得笔记 (一):基础语法
数据类型
- string
- number
- boolean
- array
- hash
以上是常见的数据类型
命名规则
常量,全部是大写字母
VERSION = "v1"
普通变量,如果不算@,@@等,我们一般直接以小写字母表达就可以了
age = 12;
user_name = "seho";
class和module只需要首字母大写和驼峰表达即可
class Apple
方法名,小写字母开头,结束可以用=,?结尾
def show
end
def index=
end
class写法
在ruby中,ruby的任何变量,string,number等都是object
class Api
def show
@article = "hello";
color = "red";
render_ajax_success({ msg: "123", text: color, age: age, name: name })
end
def index
@article = "hello"
end
end
名字首字母大写;class开头,end结尾;文件名称和类名一样,只不过改成小写和_拼接
如果我们要声明一个成员变量在类中,我们有一个更简单的方法去声明,并且自动写好了get和set方法:
attr_accessor "color"
attr_accessor "age"
attr_accessor "name"
类中同样有一个initialize方法,在initialize中我们可以定义class被实例化之后做的事情
同样的,ruby也有私有和公有方法
private
def getName
end
private标注一个方法为私有,那么没有标注的就是公有方法,在class中,一般私有方法是在公有方法的下方
赋值
ruby不像java,赋值需要声明一个变量的类型,直接赋值即可
age = 13;
name = "seho";
插值表达式
在js中,我们可以使用+来拼接变量达到组合的目的,ruby同样也可以
age = "13"
name = "seho"
puts age + name;
但是如果两个不同类型的变量拼接就会报错,因为ruby不知道如何转换,这个时候就需要用到插值表达式了
age = 13
puts "name: #{age}"
各种变量
类变量
# 多个实例都会共享的变量
@@age = 123;
A.new.@@age; # 123
B.new.@@age; # 123
实例变量
# 作用域是class类中,在ruby中广泛使用
@name = “seho”;
普通变量
# 作用域是在方法内
name = "seho"
全局变量
# 全局都可以使用的变量,不常用
$version = "v1";
方法
类方法
class A
def A.show
@article = "hello";
end
end
实例方法
class A
def show
@article = "hello";
end
end
他们的调用方法不一样
A.show
A.new.show
symbol
js在es6也有这个数据类型,ruby也表示内容永远不变,一般用于表达hash的key,声明只需要前面加冒号就可以了。
:age = number;
# 声明一个hash,最需要用到symbol
time = {
:name: "seho"
}
数组
num = [1,2,3,4]
# 数据类型混合着来
test = ["1",2, "1", :name, {:name: "seho"}]
Hash
hash有3种写法
jim = {
:name => "jim",
:age => 20
}
# 1.9之后产生的新写法
jim = {
name: "hello",
age: 20
}
# 也可以写成
jim = {}
jim[:name] = "jim"
jim[age] = 20
hash的key,string和symbol不同,例如
jim = {
:name: 1,
name: 2
}
a[:name] #=> 1
a["name"] #=> 2
条件判断语句
# if else end是最常见的
a = 1;
if a == 1
puts "a is 1"
elseif a == 2
puts "a is 2"
else
puts "is not"
end
同样还有case分支语句
a = 1;
case a
when 1 then puts "a is 1"
when 3,4,5 then puts "a is [3,4,5]"
else puts "a is not in there"
end
三元表达式
a = 1
puts a == 1 ? "one" : "not one"
循环
# for
[1,2,3].each { |e|
puts e;
}
# 等同于下方
for e in [1,2,3]
puts e
end
for和each几乎一样,for是关键字,而each是数组的一个函数;高手都用each,因为ruby和js有相像之处,for中的e变量,是全局的,循环之外,仍然可以访问到它,而each可以说是局部变量;
# loop
loop do
# code
break if 表达式
end
# while
begin
# code
end while 表达式
更推荐使用loop,因为可读性更强,我不熟悉ruby,我都要使用loop是因为它能给我带来最直观的语义,而while的语义明显拗口。