`
JackyCheng2007
  • 浏览: 250129 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ruby 入门学习笔记

    博客分类:
  • RoR
阅读更多
引用
Ruby is designed to make programmers happy.

Ruby的设计理念就是让开发者用的舒心。先看看Ruby有什么特别之处,感如此自信。
在学习概念之前,得先准备一个环境,好是我能亲身体验。安装环境似乎不是那么容易,简单起见不如用ruby提供的在线解释器:http://tryruby.org/

Ruby Is Object-Oriented - 面向对象
Java说自己是Everything is Object,万事皆对象。Ruby说Everyvalue is Object,每个值都是对象,哪怕是一个数字1,一个布尔变量true,甚至一个空值nil,都是对象。似乎更进一步。
>> 2.class                                                              
=> Fixnum                                                               
>> 0.0.class                                                            
=> Float                                                                
>> true.class                                                           
=> TrueClass                                                            
>> false.class                                                          
=> FalseClass                                                           
>> nil.class                                                            
=> NilClass  

上面都是对一些值调用了class方法的执行结果。方法?怎么没有括号?对,省略了,对ruby而言,括号是可选的,尤其是对于无参方法的调用。这真不错,少打两个字符,特别是括号比一般的字符还难打,省力,给力。不过,这里有个问题,不带括号,你怎么知道不是访问的属性?这也是ruby有意而为之的。OO里面不是有封装原则吗?建议不要直接访问对象的属性,而是通过方法来访问,就像POJO。ruby干脆就把这个原则加入到语言级别的限制,而不是设计原则的指导。够霸道!有个性!

Blocks and Iterators - 块与迭代
下面是一个块的例子:
{ puts "Hello" } # this is a block
do ###
  club.enroll(person) # and so is this
  person.socialize #
end ###

迭代的威力(你会发现很多循环都被迭代实现了,也就是ruby很少用for或while):
>> 3.times { print "Ruby! }
Ruby! Ruby! Ruby! => 3                                                  
>> 1.upto(9) {|x| print x }                                              
123456789=> 1   


看看上面的代码,这个代码块和循环的实现真实令人耳目一新。
先看迭代,真够简洁,而且接近英语表达。这和我们常用的for和while比起来,简洁多了。其实你想一下,除了循环若干次这种迭代以外,我们还常用哪些迭代?数组!对,数组和Hash就和数字一样也有一些迭代方法,让我们可以循环操作它里面的每个元素。从OO的角度,ruby把迭代这个功能划归给数字,Hash和数组,似乎更为直接。迭代是不是数字,Hash和数组的职责所在呢?在ruby的概念里,是的。
再看这里的代码块。代码块直接跟在对象的方法后面,从而和方法的调用关联起来。这是ruby的一项很强大的基本功能。这种用法常常和循环结合使用,从而达到简洁的表达迭代。
更令人吃惊的是代码块可以作为参数传递(用&表示要传递代码块):
def wrap &b
  print "Santa says: "
  3.times(&b)
  print "\n"
end
wrap { print "Ho! " }

Expressions and Operators - 表达式和操作符
引用
Ruby’s syntax is expression-oriented.

面向表达式的语法。if在java里面是一个语句,但在ruby里面却是一个表达式,表达式是有值的哦:
minimum = if x < y then x else y end

在ruby里面所有的语句都是表达式,但有些没有有意义的返回值,而是返回nil,也就是空。
>> 2 ** 1024                                                            
=> 179769313486231590772930519078902473361797697894230657273430081157732
675805500963132708477322407536021120113879871393357658789768814416622492
847430639474124377767893424865485276302219601246094119453082952085005768
838150682342462881473913110540827237163350510684586298239947245938479716
304835356329624224137216

ruby里面的运算和java没有太大的区别,但是ruby的整数是没有大小限制的,这样你就可以再ruby里面表达大数了哦。

Methods
方法用def定义,可以用return 返回值,也可以不用return。没有return的时候,最后一个表达式的值就是返回值。
def square(x)  
  x*x  
end

上面的方法,并没有指明属于哪个类。这叫什么OO啊?其实这样的方法是Object类的私有方法。如果要为一个类定义方法,如下:
def Math.square(x)  
  x*x # here is comment.
end

这里,Math不仅是一个类,还是ruby内置的类。这又是ruby的一大特色:类和模块是开放的,可以再运行时被修改和扩展。

Indentation & Comment
1. 换行,你不必用分号结束一句话。一条语句占一行
2. 缩进,习惯上ruby喜欢缩进两个字符
3. 块,  用end表示一个代码块的结束。不管是类还是方法,你不需要{}来表示开始和结束
4. 注释,用#表示注释,一直到行末

Data Types
1. 字符串String
   这个当然是最基本的类型了。你可以用单引号或者双引号来括起一串字符从而得到一个字符串。但是单引号括起来的字符串ruby基本不做什么处理,而双引号括起来的字符串ruby可以对他做很多事情,比如转移,格式化,正则表达式计算等。
def say_goodnight(name)
"Good night, #{name.capitalize}"
end
puts say_goodnight('pa' )


2. Arrays and Hashes
   数组和哈希结构都是带索引的集合,可以存贮任意对象。数组的索引是整数,而哈希的索引可以是任意对象。他们都可以根据需要自动扩展大小。数组的效率更高,而哈希则更为灵活。有趣的是一个数组或哈希集合里面可以存储不同类型的对象。
数组的创建和访问如下:
a = [ 1, 'cat' , 3.14 ] # array with three elements
a[0] # access the first element (1)
a[2] = nil # set the third element
# array now [ 1, 'cat', nil ]

哈希的例子:
inst_section = {
:cello => 'string' ,
:clarinet => 'woodwind' ,
:drum => 'percussion' ,
:oboe => 'woodwind' ,
:trumpet => 'brass' ,
:violin => 'string'
}

inst_section[:oboe] #=> 'woodwind'
inst_section[:cello] #=> 'string'
inst_section[:bassoon] #=> nil


3. Regular Expressions
你可以通过下面的两种方式定义一个正则表达式:
/pattern/ or %r{pattern}

你可以通过=~来测试是否匹配:
if line =~ /P(erl|ython)/
  puts "There seems to be another scripting language here"
end


Assignment
除了一般的赋值语法外,ruby还支持很有意思的并行赋值:
x, y = 1, 2 # Same as x = 1; y = 2
a, b = b, a # Swap the value of two variables
x,y,z = [1,2,3] # Array elements automatically assigned to variables


ruby支持多值返回,这得得益于这种并行赋值的强大:
# Define a method to convert Cartesian (x,y) coordinates to Polar
def polar(x,y)
theta = Math.atan2(y,x) # Compute the angle
r = Math.hypot(x,y) # Compute the distance
[r, theta] # The last expression is the return value
end

# Here's how we use this method with parallel assignment
distance, angle = polar(2,2)


Punctuation Suffixes and Prefixes - 前缀与后缀
ruby的方法名似乎没有什么限制,甚至可以有感情色彩,使得编程语言没有那么古板,没有人情味。比如你可以用问好?最为方法名的末尾,这表示返回布尔值,也就是一个谓词判断。比如数组有个方法叫“empty?”。你也可以在名字后面加上谈好!,表示用这个方法的时候要注意。很多ruby的核心类都定义了一套带!和不太!的同名方法,不带!的方法呢不会改变对象的值,带!的则会。
除了后缀,还有前缀。比如$符号开头的代表是全局变量。@开头的是对象实例的变量。@@开头的是类的变量。也就是表达了三个不同的变量作用域scope。

Ruby Names
ruby的命名规则很特别:
1. 本地的变量,方法参数和方法名称都得用小写字母或者下划线开头。对象实例内的变量用@开头。如果名字含有多个单词,就用下划线隔开。order, line_item, xr2000。
2. 类名,模块名和常量,必须用大写字母开头。如果含有多个词,用驼峰结构。Object,
PurchaseOrder, LineItem。

Regexp and Range - 正则表达式和范围
ruby提供了正则表达式对象和从一点到另一点的范围对象。
/[Rr]uby/ # Matches "Ruby" or "ruby"
/\d{5}/ # Matches 5 consecutive digits
1..3 # All x where 1 <= x <= 3
1...3 # All x where 1 <= x < 3


Classes and Modules - 对象和模块
引用
A class is a collection of related methods that operate on the state of an object.

类就是一些方法的集合,这些方法都是用来访问和操作对象状态的。所谓对象的状态,就是指对象的实例变量的值,也就是@开头的那些变量的值。

Ruby Surprises
Ruby的字符串是可变的。你知道java的字符串是不可变哦。
在使用条件表达式估值的地方,比如if,for和while,表达式的值不一定是true或者false哦。nil被看做false,其他的值都被看成是true哦。




6
3
分享到:
评论
1 楼 Hooopo 2011-03-28  
 

相关推荐

    ruby学习笔记

    ruby基础笔记,自学笔记,ruby基础语法非常全面ruby基础笔记,自学笔记,ruby基础语法非常全面

    精华ruby学习笔记和代码

    这个笔记里包含了ruby的整型,字符串,浮点数,布尔等基础数据类型,还有数组,哈希hash的用法, 类的定义,函数方法,以及对象定义,其他高级用法解释,除了笔记记录的语法糖之外,还包含了一些解释性的代码,帮助...

    Redis全套学习笔记 (带章节目录) 完整版pdf

    本文是一篇关于Redis全套学习笔记的文章,主要介绍了Redis的基础知识、数据结构、持久化、集群、高可用、性能优化等方面的内容。通过本文的学习,读者可以全面掌握Redis的使用和应用,提高自己的技术水平和实践能力...

    ruby on rails 笔记(陈刚)

    学习笔记,是入门新手的好教材!分享给大家!

    Ruby学习笔记一

    笔记: Ruby会默认返回方法中的最后一个值。 如果需要返回多个值,可以用数组来实现。...强烈推荐新手入门在线学习网站: http://tryruby.org/ ,简直爽到爆! 各种代码 eg1: 建立一个哈希表 ojs = {}

    Ruby元编程基础学习笔记整理

    元编程Metaprogramming是指编写能够操作其他程序的程序,例如C语言中的宏,是编程中的一项高级技巧,这里我们立足基础,来看一下Ruby元编程基础学习笔记整理.

    Ruby On Rails开发从头来系列教程(chm)

    摘要:一直想尝试Ruby On Rails,但是因为对apache,mysql都不熟,对Rails的环境搭建更是没信心,所以一直没有开始,从知道了InstantRails后,终于在windows上搭建了Ruby On Rails开发环境,开始了Rails的学习。...

    积分管理系统java源码-ruby-tutorial-cn:ruby-tutorial-cn

    学习笔记 ruby --version &gt; ruby 2.6.1p33 (2019-01-30 revision 66950) [x64-mingw32] 在入门学习 Ruby 的过程中,看了不少网上的教程,经常遇到的是明明代码和教程上完全一模一样,但是运行后各种报错。 本文主要...

    ruby on rails实现的一个简单的评论demo

    哭不知道还有多少人在用ruby,rails的资源也少的可伶,这个是个基础的学习用的demo,可以下载参考一下,慕课网上也有老师对应的教程,我以后会在这里写一些学习笔记,如果还有人在用ruby,大家抱团取暖吧哭哭哭~~~~~...

    torch.rb:由LibTorch支持的Ruby深度学习

    入门使用GPU,深度学习的速度明显加快。 如果您没有NVIDIA GPU,建议您使用云服务。 有一个很棒的免费计划。 我们整理了一个以使其易于上手。 在Paperspace上,创建一个带有自定义容器的笔记本。 在高级选项下,将...

    l-曲线matlab代码-Notes:日常学习笔记,什么都会有w

    有关SDRAM以及DDR的工作原理学习笔记,见 2020.09.09添加 在安装了Linux的PC端构建并使用QEMU运行ARM Linux,见 2020.09.20添加 ARM汇编,学习记录 信号与系统以及DSP,学习记录 数字电路以及verilog,学习记录 2020...

    Nodejs学习笔记之入门篇

    分享第一篇,关于 NodeJS —— Javascript 的常用知识以及如何从 Javascript 开发者过渡到 NodeJS 开发者(不会介绍具体的框架)。...接触过 ruby/python 的元编程的可能会觉得这个很熟悉,Javascript 也

    padrino-note:基于 Sinatra 的 Padrino Web 框架学习笔记

    Study notes for Padrino web framework英文名:Study notes for Padrino web framework中文名:Padrino学习笔记简介在使用Ruby语言的Web开发框架中,Rails和Sinatra是最流行的两个。由于Sinatra只提供了Web开发最...

    雨松MOMO程序研究院

    iTween研究院之学习笔记Move移动篇(一) Android研究院之应用程序对话框大合集(一) Cocos2D研究院之构建游戏开发环境(一) Direct3D研究院之创建第一个DirectX3D项目(一) NGUI研究院之开始学习制作第一个...

    rails-study:学习滑轨

    笔记编程Ruby Ruby元编程 Ruby on Rails教程 敏捷Web开发Rails 5 附注4(21-24) 杂项Ruby其他注释Rails杂项说明上传文件说明注意事项Sidekiq注意Webpacker注意相关的其他项目及笔记: 资本主义研究耙研要学习: ...

    SimpleITK-Notebooks:Jupyter笔记本,学习如何使用SimpleITK

    它可用以下编程语言提供:C ++,Python,R,Java,C#,Lua,Tcl和Ruby。 该存储库包含Jupyter Notebooks集合,说明了SimpleITK在教育和研究活动中的使用。 笔记本演示了使用SimpleITK通过Python和R编程语言进行...

    GroovyPDF文档

    Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大...本套资源中包含了:Groovy轻松入门 ,Groovy中文教程, Groovy用户指南, Groovy学习笔记,Groovy官方demo,五本书!

    计算卷积的matlab代码-Computer-Version-Notes:计算机视觉入门笔记

    计算机视觉入门 常用库 OpenCV Open Source Computer Vision Library,由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。Python源...

    leetcode中国-LeetCode-Notes:学习DS&A

    这是一个记录我写力扣题和学习算法的笔记 Progress 进度 Currently ranked about ~15,500 on LeetCodeCN Quick Links 快速链接 summary for questions based on types 问题按照类别的总结 91 天学算法第四期是一个...

Global site tag (gtag.js) - Google Analytics