Ruby的优雅(C#版)
相比于C#,ruby显得灰常的优雅。
?
设计上的:
1 不需要引用必须依赖的包
C#的using System,在ruby的世界里是不存在的,没有必要反复强调这些规则。
?
2 非核心依赖包不需要重复引用
如果有2个类A和B,都依赖于C,C#必须在A和B中都声明引用C。若是ruby,只需要在A或者B中声明一次即可,当然也可以在类似main的入口声明,这样的话A和B都不用声明了。
?
3 完全面向对象
任何类型都是对象,很符合人的思维习惯。
数据类型转换
迭代
常用动作
?
?
4 自带了第三方包依赖管理工具
通常情况,任何一个项目都会依赖很多第三方的包。我们不可能把所有的包都复制到项目文件夹下,这样文件大小过大,也不好维护版本问题。Ruby提供了一个Gemfile的配置文件,只需要在里面写上依赖的包名+版本号,通过命令行运行bundle就可以自动去查找这些包了,如果本地没有就从网上下载。
?
?
?
语言规则:
1 变量不需要显示定义
例如声明一个字符串并赋值,s="123",不需要写成string s="123"。但是,未定义的变量直接使用是会报错的,这个就很智能了。
?
2?
?
?
?
语法上的:
1 调用方法不用加()
?
2 行末不用加;
?
3 获取字符串的第N个字符
s = "lby_string"
puts s[N]
不需要用charAt的方法,直接当成数组来用吧。
?
4 取第一个和最后一个元素
a=[1,2,3,4]
puts a.first
puts a.last
?
5 读取文件
f=File.open("test.txt")
f.each_line do |l|
? puts l
end
?
6 判断是否为空
t.nil?
C#可能会这样写: if(t==null){}
?
7 求长度
a=[1,2,3,4]
?
puts a.size
puts a.size()
?
puts a.length
puts a.length?()
?
puts a.count
puts a.count?()
可以随心所欲,不必知道长度是一个属性还是一个方法。
?
8 转行类型
把一个字符串转行成整型,C#这样写:Convert.ToInt32(s),ruby:s.to_i。
?
?