继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Ruby 基础语法

334132462
关注TA
已关注
手记 1
粉丝 0
获赞 0


声明变量


ruby声明变量的方式像javascript一样 直接 变量名 = 值 即可 甚至比js更省事,连var 都不需要


name = "jack"
six = 6
arr = ['apple','banana']


从以上可以看出 ruby 也是赋值的时候 确定了变量类型 不需要声明类型 这种叫 “鸭子类型”


但声明变量时 有一些小小的规则
常量: 全大写字母  例:SYSTEM_TYPE=3.2
变量: 不考虑@,@@ $等符号的话,小写字母开头 单词间用_间隔 例如: age,@color,is_created
声明类或者Module: 首字母大写,驼峰命名方式 例子: Apple,Human
函数名: 小写字母开头, 可以用 问号 感叹号或者等号作为结尾 例如: name,created!,color=


数据类型
Number
String
Bool
Array
Hash


class的写法

面向对象语言,class毫无疑问都是最重要的,Ruby中的任何变量都是object
具体规范


  1. 首字母大写

  2. class开头 end结尾

  3. 文件名字和class名称一样 只是文件名全是小写 单词间隔用_


类在实例化的时候 会自动调用 initialize函数


类变量: @@name 作用域 所有的类实例都会共享这个变量
实例变量: @color 作用域 仅在实例自己可以使用
普通变量: 作用域仅在某个方法内
全局变量: $开头,可以在任意地方使用


class Apple
   def initialize
      @color  #初始化对象的时候 实例的变量
   end
   
   def color
      return @color # 类似实例变量的 getter方法
   end
   def color= color
     @color = color # 类似实例变量的 setter方法
   end
end

red_apple = Apple.new
red_apple.color = 'red'
puts red_apple.color

#ruby class的魔法写法
class Apple
   # 相当于把实例变量的声明 getter setter一句话全部搞定了
   attr_accessor 'color'
end


输出函数


puts "hello world!!"
p "hello world!!"


if 条件语句


a = 1 
if a ==1
    ...
elsif a ==2
    ...
else
    ...
end


case 分支语句


a = 1

case a
   when 1 then ....
   when 2 then ....
   when 3,4,5 then ....
   else .....
end


三元表达式  a==1?'one':'not one'


循环语句 for each


[1,2,3].each { |e| puts e}

for i in [1,2,3]
 puts i
end
puts i

# 两者几乎等价,但for声明的临时变量的作用域不仅局限在 for循环里,在外侧也可以使用 所以尽量使用 each


循环 while loop


# loop 循环
loop do 
   break if 条件
end


# while循环
begin

end while 条件

# 两者也几乎是等价的,只不过判断条件的地方不一样


ruby的一些魔法


  1. 方法调用的最外侧括号可以省略 例如: puts('hello world!') 等价 puts 'hello world!'

  2. 函数最后一行默认是有return的


def color
 @color 
end  
#等同于
def color
 return @colol
end


  1. hash 最外面的{}在大多数情况下可以省略


Apple.create :name=>'apple',:color=>'red'
# 等同于
Apple.create({:name=>'apple',:color=>'red'})
#等同于hash的另一种写法
Apple.create name:'apple',color:'red'


4.调用block


Apple.all.map { |apple| apple.name}
# 等同于
Apple.all.map(&:name)


Module


Module可以用来提炼各种方法,然后供给其他class来使用


  • 不能被new

  • 可以被include

  • module中的self.xx方法可以被直接调用

  • module中的普通方法,需要被某个class include之后,有对应的class调用


module Tool
  # 这个方法无法直接运行 必须被某个class include之后 有对应的class调用
   def show_tip
       "this is the tip"
   end
   # 这个方法可以直接通过Module的名字.来使用 如 Tool.say
   def self.say
      'Hi this is module self func'
   end
end

Tool.say


class Student
   include Tool
end

Student.new.shop_tip


元编程


['a','b','c'].each do | name |
    define_method "say_#{name}" do
        puts "hi , #{name}"
    end
end


每个语言都多少有些动态改变代码逻辑的能力,但ruby的元编程能力是最强的,用起来也最顺手。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP