面向iOS开发中的Ruby入门

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容