v2-9765e9b4343a30b5fb43b3a227888221_720w.png

数据类型

  1. string
  2. number
  3. boolean
  4. array
  5. 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的语义明显拗口。

标签: none

添加新评论