美文网首页
面向iOS开发中的Ruby入门

面向iOS开发中的Ruby入门

作者: Gavin008 | 来源:发表于2019-08-20 01:26 被阅读0次

Ruby简介

Ruby是一门面向对象函数式编程脚本语言。Ruby是20世纪90年代由日本人日本人松本行弘开发,于1995年12月正式发布。命名是借鉴Perl以6月诞生石pearl(发音相同)命名方式,以7月诞生石ruby(红宝石)命名。宗旨是为了让程序员快乐地编码。

Ruby的设计原则

  • 简洁性
  • 扩展性
  • 稳定性

Ruby的特点

  • 动态语言
  • 弱类型
  • 面向对象
  • 函数式

Ruby的优点

  • 语法简单,遵守面向对象特征
  • 支持操作符重载
  • 支持迭代器
  • 支持闭包
  • 支持混入类(mixins)
  • 垃圾回收,开发人员不用关注内存管理
  • 跨平台,支持类UNIX,支持Dos,Windows, MacOS等平台
  • 适合快速开发,开发效率是Java的5倍

Hello world

在hello_world.rb文件写下如下代码、保存,注意一定要以rb做后缀。

puts "hello world"

然后,打开终端,cd到文件路径下,执行 ruby hello_world.rb 即可看到输出"hello world"。hello world程序体现了脚本语言的便利。

所有类型都是对象

Ruby里所有的类型都是对象,这点类似swift。

tmp = 3
puts tmp.class

输出:Integer

Numeric - 数值类型, Integer、Float, Double等父类

String - 字符串

str = "string"

Hash - 字典

hash = {:a => "a"}
puts hash[:a]

Array - 数组

array = ["a","b","c"]
puts array[0]

声明

class Test

end

类变量 && 类实例变量

@@name: 定义名为name的类变量。可以被继承,可以被子类继承,值是该类和所有子类共享。
@name: 定义名为name的类实例变量。不可以被继承,值是该类独占。
类变量和类实例变量都不能在类外面访问。

class TestA

    @@name = "A类变量"

    @name = "A类实例变量"



    def self.desc

        puts @@name

        puts @name

    end

end

class TestB < TestA

    @@name = "B类变量"

    @name = "B类实例变量"

end

输出:

B类变量

A类实例变量

B类变量

B类实例变量

属性

类似Objective里的@propert,可以在类外面访问,声明如下

class TestA

attr_accessor :name

end

对比property 有如下三种

  • attr_accessor: getter setter
  • attr_reader: getter
  • attr_writer: setter

类方法 && 实例方法

方法定义如下,写在类里就是实例方法。若在方法名前添加"self."即是类方法。

def {方法名}



end

完整Demo

class TestA
    @@class_name = "A类变量"
    @instance_name = "A类实例变量"

    attr_accessor :name
    attr_reader :gender

    def initialize(name)
        @instance_name = name
    end

    def self.desc
        puts "类描述:"
        puts @@class_name
        puts @instance_name
    end

    def desc
        puts "实例描述:"
        # puts gender
        puts @instance_name
    end

    def gender
        return "female"
    end

    def instance_name
        @instance_name
    end

    def + x
        puts desc
        puts x.desc
    end

end

class TestB < TestA
    @@class_name = "B类变量"
    @instance_name = "B类实例变量"
end

puts "==== 类变量和类实例变量 ===="
TestA.desc
TestB.desc
puts "==== 类实例变量 ===="
TestA.new("AA类实例变量").desc
TestB.new("BB类实例变量").desc

puts "==== 华丽分割线 ===="
TestA.desc
TestB.desc

puts "==== 类实例变量 ===="
puts TestA.new("AA类实例变量").instance_name

puts "==== 属性 ===="
test_a = TestA.new("AA类实例变量")
test_a.name = "zzh"
puts test_a.name

操作符重载

Ruby支持操作符重载,以下是重载"+"的例子

class A
    attr_accessor :value

    def value
        return 10
    end

    def + x
        return value + x.value
    end

end

puts A.new + A.new

输出:
20

迭代器

Hash && Array 迭代器

array.each do |v|
    puts v
end

hash.each do |key, value|
    # to_s 转成字符串
    puts key.to_s + ":" + value.to_s
end

闭包

yield关键字,后面可以带参数

def map(number)
  yield number
end

map(10) { |e| puts (e * e) }

输出:100

Proc是块对象

inc = Proc.new { |x| puts (x * x ) }
inc.call(10)

输出:100

混入类mixins

可以在class里注入module,class里就能共享module里的方法和属性

module Fly
    def fly
        puts "Can fly"
    end
end

class Bird
  include Fly
end

Bird.new.fly

输出:
Can fly

相关文章

网友评论

      本文标题:面向iOS开发中的Ruby入门

      本文链接:https://www.haomeiwen.com/subject/ojnysctx.html