七周七语言 - Ruby
强类型 + 动态类型
动态类型是指一个变量不需要生命类型,并且可以被动态的改变。而强类型是指当出现类型不支持的操作时,不会进行类型转换。这么看 JavaScript 是弱类型 + 动态类型
- 纯面向对象语言
- 除了
null
和false
其他都为true
- 鸭子类型
常用约定和规则
- 类应以大写字母开头,并且一般采用驼峰命名法
- 实例变量前必须加上
@
- 类变量前必须加上
@@
- 实例变量和方法名以小写字母开头,并采用下划线命名法,如
underscore_style
- 常量采用全大写形式,如
ALL_CAPS
- 用于逻辑测试的函数和方法一般要加上问号,如
if test?
attr
关键字可用来定义实例变量和访问变量的同名方法attr_accessor
定义实例变量、访问方法和设置方法
实际上,
attr
也可以定义设置方法,只需将true
作为第二个参数传入即可,如attr:childern true
元编程
MetaProgramming - 写能写程序的程序
习题
- 分别找到用代码块和不用代码块读取文件的方法,用代码块有什么好处?
# 不用代码块读取文件aFile = File.new('./fuckoff.txt', 'a+')if aFile content = aFile.sysread(20) puts contentend
# 使用代码块读取文件File.open('./fuckoff.txt', 'a+') { |f| puts f.sysread(20) }
- 如何把散列表转换成数组?数组能转成散列表吗?
- 有一个数组,包含 16 个数字。仅用
each
方法打印数组中的内容,一次打印 4 个数字。然后,用可枚举模块的each_slice
方法重做一遍。
// 使用 eachresults = [](1..16).each do |num| results.push(num) if results.count == 4 p results results.clear endend
// 使用 each_slice(1..16).each_slice(4) { |num| p num }
分析
优势
- 优秀的脚本语言。可出色的完成编写胶水代码、爬虫、自动化测试。
- web 开发。借助 Rails 成为 web 开发领域的宠儿。
- 市场投放时间。开发效率极高,适合创业公司快速迭代。例如 Twitter 就是 Rails 起家,量级上来后用 Scala 重写。
劣势
- 性能。Ruby 改善程序员的体验,而不是优化语言的性能。
- 并发和面向对象编程。
- 类型安全。好消息是 Ruby 3 要支持静态类型了。