Ruby初体验

题记:本文系读《七周七语言-理解多种编程范型》之笔记与随想。我只是快速的浏览这个语言及其特点,了解不同语言的功能特点,不同的编程范型,有助于更深入理解编程这项"事业"。

1)纯面向对象之语言。

举例。大部分面向对象语言中,数字4不是对象,而在Ruby中,4是对象,其类为Fixnum,它还有一系列方法。 4.methods可见。

 

2)条件语句简明化。

如: puts 'This appears to be true.' if  bShow

如: order.calculate_tax unless order.nil?

 

3)鸭子类型

“只要像鸭子一样走路,像鸭子一样叫,那么它就是鸭子。”

对于面向对象设计的清晰性来说,鸭子类型至关重要。在面向对象设计思想中,有这样一个重要原则: 对接口编码,不对实现编码。

如果利用鸭子类型,实现这一原则只需要极少的额外工作,轻松就能完成。

 

举例:对象若有push和pop方法 ,它就能当作栈来用,反之若没有则不能当作栈。

 

4)一些小知识点:

    a.处理字符串的一些方法名为xx!会修改原始串。如upcase 和 upcase!,这里的upcase!会修改原来的字符串。另外ruby中奇特的使用?!可作标识符

    b)区间: (1..10) => [ 1,2,3,4,5,6,7,8,9,10]

    c)[1].methods.include?('[]') 这样可检查某类中是否有此方法。

    d) %w(a  bc  de f)    <=> [ 'a', 'bc', 'de', 'f' ]   这样可省略输入不少的引号和逗号

 

 

5)代码块和yield

这种代码块形式: {/}                 do/end

举例: animals.each { |a| puts a }

 

代码块还可以作为一等参数(一等参数:代码块作为参数直接传递给函数,而无需包装在其他结构中的传递)

def pass_block(&block)

     call_block(&block)

end

 

def call_block(&block)

    block.call

end

 

pass_block  { puts 'Hello, block' }

上面的代码中的block.call 感觉略奇怪。

 

6)所有的类都继承自一个超类 Object

4.class.class.superclass.superclass

 

7)Ruby中的一些惯例和规则。

   类应以大写字母开头,并一般采用骆驼命名法,如CameCase

  实例变量(一个对象有一个值,好像就是类的成员变量)前必须加上@

  类变量(一个类有一个值,好像就是类中的静态成员变量)前必须加上@@

  实例变量和方法名以小写字母开头,并采用下划线命名法,如underscore_style

 常量采用全大写形式。如ALL_CAPS

 用于逻辑测试的函数和方法一般要加上问号。如if test?

 

8)多继承问题。

Jave采用接口解决这一问题,而Ruby采用的是模块。

 

Mixin:利用简明的单继承,先定义类的主要部分,然后用模块添加额外功能,这种编程风格,就称作mixin。有些语言带mixin的载体虽然未必称作模块,但基本前提是一致的:使用单一继承结合mixin的方式,尽可能合理地把各种行为打包到一起。

 

9)Ruby的枚举和比较。

类要可枚举,必须实现each方法。 类要可比较,必须实现<=>操作符。 (太空船操作符)

 

a=[ 5 , 3, 4, 1 ]

a.any? { |i| i > 4}              =>        true

a.all? { |i} i > 0 }               =>        true

 

 

10)元编程-(写能写程序的程序) 

 Rails核心的ActiveRecord框架就是用元编程实现了一门简便易用用的语言,以便编写连接数据库表的类。

 

 

11) method_missing

当Ruby找不到某个方法时,会调用一个特殊的调试方法显示诊断信息。就是method_missing.

一把利器,也可能用不好导致查问题困难?!

 

12)其它

当代码的语法变得更美观,阅读代码的读者也就不必在语法问题上大伤脑筋,从而能更好的理解代码本身表达的意思,这正是Ruby的威力所在。

Ruby的核心优势: 脚本, web开发(如Rails),开发周期短

Ruby的不足: 性能, 并发,类型安全

 

“面向对象编程有一个重大弱点:该编程模型成立的一切前提条件,都建立在一种思想(围绕状态包装一系列钎为)的基础上,但通常,状态是会发生改变的。

于是,程序中存在并发时,这种编程策略就会引发严重问题。”

 

后记:Ruby的语法糖很多,用起来感觉挺舒服。当然,如果记性不好,可能有点压力。相比于python来说,感觉它语法更灵活。Ruby的特点快速开发,写一些脚本什么的很有效率(不是指执行效率)。因为没有太多实战经验,目前只停留到以上粗浅的认识上。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值