Ruby基础
- Ruby基础
- 变量
- 类变量
- 实例变量
- 普通变量
- 全局变量
- 类方法
- 字符串
- 不变的字符串:symbol
- 字符串插值
- 数组:可以存储多种数据类型
- 判断
- 支持三元表达式
- Ruby简写
- Module:类似于接口或者抽象类吧
- Mixed in
- 元编程类似于Java中的反射吧
Ruby基础
Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发。因为Perl发音与6月诞生石pearl(珍珠)相同,因此Ruby以7月诞生石ruby(红宝石)命名。
是一门对程序员友好的编程语言
1.以#为单行注释
2.多行注释以=begin开头,以=end结尾
3.命名规则为:数字不能开头,但可以用= 和?结尾。类名每个单词首字母都大写,方法名和变量名全部小写中间用_线连接
变量
类变量
静态变量,使用@@作为变量的前缀,@@color,直接在类中定义
实例变量
属性,@color,作用域仅在instance之内没在Rails中大量使用
普通变量
作用域仅在某个方法内
全局变量
$开头
class Apple
@@from="china"
def color= color
@color = color
end
def color
return @color
end
def get_from
@@form
end
def set_from from
@@from =from
end
end
类方法
ClassName.function_name
class Apple
def Apple.name
"apple"
end
end
#Apple.name
#==> apple
字符串
string_line = "单行字符串"
mulitiple_line = %Q{
多行
字符串
}
不变的字符串:symbol
:name #以:开头
字符串插值
最好所有的地方使用字符串插值避免使用+号连接
“#{string_line}”
数组:可以存储多种数据类型
Hash:key/value
#任何情况下都生效的语法
jim = {
:name => "Jim",
:age => "20"
}
#1.9之后的语法
jim = {
name:"jim",
age:20
}
#也可以动态创建
jim = {}
jim[:name] = "jim"
jim[:age] = 20
判断
if a==1
xxx
elsif a==2
xxx
else
#case 分支 能增强可读性
case a
when 1 then xxxx
when 2 then xxxx
when 3,4,5 then xxxx
else puts "xxxx"
end
支持三元表达式
循环:for,each (前者是关键字,后者是普通方法)
[1,2,3].each{ |e|
puts e
}
#等同于
for e in [1,2,3]
puts e
end
#for 和 each 都可以做循环,但是高手都用each
#因为for后面的变量是全局变量会保存在for之外
loop和while
loop do
#do things
break if <condition>
end
begin
#do things
end while <condition>
Ruby简写
1.方法调用时最外层括号可以省略
2.每个函数最后一行代码默认会return,不需要显式写出return
3.hash最外面的{}在大多数情况下可以省略,当hash做为最后一个参数时可以省略
Apple.create :name =>'apple',:color => 'red'
#等同
Apple.create name:'apple',color: 'red'
4.调用block
Apple.all.map { |apple| apple.name}
#等同于
Apple.all.map(&:name)
Module:类似于接口或者抽象类吧
不能被new
可以被include
module中的self.xx方法可以被直接调用
module中的普通方法,需要被某个class include之后,由对应的class调用
Mixed in
一种代码重用方式,比继承和接口实现更加优秀的代码重用,非常直观
model Tool
def show_tips
"hi"
end
end
class Apple
include Tool
end
puts Apple.show_tips
==> hi
元编程类似于Java中的反射吧
每个语言都多少有些动态改变代码逻辑的能力,但是ruby的元编程能力是最强的,用起来也是最得心应手的
def say_hi_to_jim
"hi,jim"
end
def say_hi_to_han_mei_mei
"hi,han_mei_mei"
end
def say_hi_to_li_lei
"hi,li lei"
end
#元编程写法
["jim","li_lei","han_mei_mei"].each do |name|
define_method "say_hello_to#{name}" do
puts "hi,#{name}"
end
end