鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 编程语言开发 > ruby > >

在Codecademy上学习Ruby (一)Introductiong to Ruby

来源:互联网 作者:佚名 时间:2012-12-23 12:45
最近想学Ruby on Rails,网上找了不少网站和资料 比如易百,和这个以PPT格式教你Ruby基础语法的网页。另外还有两个不同人写的从0开始学习Ruby的建议:壹,

      

最近想学Ruby on Rails,网上找了不少网站和资料  比如 易百,和这个以PPT格式教你Ruby基础语法的网页。另外还有两个不同人写的“从0开始学习Ruby的建议”:壹,贰。

我有C++基础,有人就说可以直接学习ROR,在学习过程中自然就掌握了Ruby语法。虽然我也同意,但在粗略浏览上面那个PPT后有点蒙,语法点还是蛮多的而且跟C++ 差别不小。于是觉得这种做法对我来说还是不合适,总觉得不牢固掌握基础的情况下干其他什么事都没底。所以还是决定乖乖从头开始。

无意中又碰到了Codecademy这个网站,好像是个适合零基础的人学习一门新语言的很不错的地方,比如JS,Ruby,Python,html等等。于是稍微试了第一课后发觉其实挺不错的,虽然是英文的但很容易懂。有直接可以编码Ruby并运行的地方。完成每一小点只需要很少的时间。也会自动保存你的进度。虽然不知道基础介绍得全不全面,但能够这样推广的话相信跟着它这样学完肯定能够比较自由轻松地使用Ruby了。

我在学了几小节后意识到应该找个地方把重要的点记下来,包括一些Ruby和C++ 的区别。毕竟 notes 比较多不可能永远记得。因此找来了博客园。

要说明的是我只是个大学生,才疏学浅也没什么经验,这个主要是留着自己以后难免会用到。各位来访的大牛们哪里看不下去或者觉得Ruby很简单根本不必这样大动干戈的还望轻喷。

 

 

 

 【1. Variables & Data Type】

 

 

Ruby的特点

Ruby 很强大也很灵活,普遍用于web开发,是现在流行的ROR web框架的重要组成部分。

Ruby 的阅读和编写都很容易,看起来就像普通的英语一样。

Ruby 是一门解释性语言,不用编译就可以运行起来。

Ruby 是面向对象的,用户可以把数据封装起来。——  Everything in Ruby is an object。

Ruby 是由Matz 1995年创造出来的。他很强调用户的体验和人机的配合,服务器空间,因此Ruby 很容易上手。

 

数据类型

我们现在要关注的基本数据类型有三种:数字;布尔型(booleans);字符串。

另外,Ruby 是大小写敏感的。

 

变量

创造一个变量很容易,直接:

# declaring a variable my_num = 100

跟C/C++ 不一样,使用一个变量不用先声明,每个语句后面也不用加分号 (加了也不影响)。

变量的命名方式跟C/C++ 类似 ; “ = ” 号直接赋值。

另外 # 符号是单行注释,类似C++ 中的  //

 

基本运算

Ruby 中基本的数学运算有六种,除了常见的 " + - * / " 外,

** 是幂运算符,比如 5 ** 3 = 125

% 是取模运算符,也就是取余数。 19 % 4 = 3 

 

输出

就目前我知道的,Ruby 中输出有四种方式: printf, puts , 单独一个 p ,还有 system echo 的形式

print 没什么特别的,跟C++ 中的 cout 一样 。 

print "Ruby Programming" p "Hello World!"

而puts 的话会在输出的最后换行。 

puts "this is Ruby"

 这句话等同于  cout << " this is Ruby\n" ;

而 p 的话,如果输出的是字符串,会把双引号一起输出,并且换行。

a = "my Ruby" p a

这样的输出结果是

"my Ruby"

最后一种可以这么写

system " echo 'hello Ruby!'"

或者

system "echo", "hello ","Ruby!"

似乎有点繁琐,所以还是用上面的puts 或 print 就好啦

 另外上面的双引号都换成单引号也是可以的。

 

要连续输出字符串可以用 + 号或者 << 号连接:

puts "Hello " + "Ruby!" # or puts "Hello "<<"Ruby!" # or puts "Hello " + "Ruby “ << "! "

 

如果要多次输出一样的内容:

1)

puts "Hello Ruby!" * 3

注意:结果是

   Hello Ruby! Hello Ruby! Hello Ruby!

而不是一个 Hello Ruby!就换一行

2)

3.times { puts "Hello!"}

花括号不可省。这样的结果会是

  Hello!

  Hello!

  Hello!

注意:

puts "hello "+"Matz!"* 3

这样的结果是:

  hello Matz! Matz! Matz! 

 

 

 

【2.String Methods】

 

 

 这一节提到了 method 这个词,直译过来是“ 方法 ” ,它说你可以把它当做是每一个对象(object)都拥有的特性(skill)。

个人理解应该是等同于C++ 里头的函数吧。

因为接下来提到了 .length 这个 method,用于得到一个字符串的长度。

print "Hello World!" . length

这样的结果是输出 12 ,因为这个字符串一共有12个字符。

 

在C++中,如果要求一个字符串的长度,一般就要

string s="Hello World!"; std::cout<<s.length();

要先定义个string类型的变量来存储字符串,而且不能一个字符串直接.length() 这种用法。

而且Ruby中的method 后面也不用括号。 

 

然后是.reverse 这个method。用于倒置一个字符串。

"Ruby_Programming".reverse

结果会是 "gnimmargorP_ybuR"

 

还有 .upcase 和 .downcase , 分别可以将字母转化为大写字母和小写字母。

puts "hello world".upcase puts "HELLO WORLD".downcase

结果是

   HELLO WORLD 

   hello world

我特意测试了一下,香港服务器租用,对于.upcase来说,如果待转换的字符不是一个小写字母(意即任意字符),这个method 便不会转换这个字符,保持不变。 .downcase 也一样。

 

最后还有 .capitalize 这个方法,香港虚拟主机,用于把一串英文字母转化为首字母大写其他字母小写的方式。比如

string = "china" puts string . capitalize

结果会是

  China

但如果最后再加一句  puts string 呢 ?

结果是

  china 

为什么会这样呢?

因为 .capitalize 这个方法只是把原字符串拷贝了一份再进行大小写的各自转化,对原来的字符串并没有影响。所以原来的string 内容并不会被覆盖。

如果在 .capitalize 后面加个 !  则不会拷贝,会直接对原字符串转化后进行覆盖。

而如果是 string = string . capitalize ,虽然后面没有感叹号,但由于有赋值号,所以同样会把转换后的内容重新写入string 这个变量内。

string = "china" puts string . capitalize ! # 输出 China puts string # 输出 China string2 = "china" string2 = string2 . capitalize puts string2 # 输出 China

 

 

 

还有一点,methods 可以连续调用,比如

puts "RUBY".downcase.reverse

输出:

  ybur

 

 

 

【3.Writing Good Code】

 

 

注释

 这节说的是怎么写出好(看)的代码。

首先是 注释符 #   

在 # 后面的那一行的所有内容都不会算入待运行的代码的内容。 比如

# This is comments puts "hi!" # This is also comments

注释可以辅助阅读你的代码的人理解你的代码,

也可以用于提醒自己以后使用自己的代码时自己当初的想法。 

 

对于多行注释,显然一行一行输入 # 比较繁琐。因此有了

=begin This is comments line 2 , also comments line 3 , comments again =end

 =begin 和 =end 之间的所有内容都会被注释掉。

要注意的是:

等号和begin/end 之间不能有其他任何字符或空格。否则注释失败。

(但在其他情况下多余的空格是不会影响代码的运行的。)

 

命名规范

这里原文讲的有点简单和模糊。我自己搜索到了一篇文章然后给个很简单的总结(codecademy提到的比这个还少得多):

变量的命名有一定规则:以字母或下划线开头,变量中只能包含字母,数字和下划线。关键字不能作为变量名使用。

局部变量应以小写字母(或下划线)开头,且在适当的地方用下划线分开两个词。如 my_score 

 

codecademy只讨论了局部变量。所以也先说到局部变量的命名特点好了。

其他的先只要知道:

以@开始的变量是实例变量,它属于特定的对象。

以@@开始的变量是类变量。

以$开始的变量是全局变量。

 

 

【练手】

 

 

输入

 

variable = gets

这样就能把用户输入的东西存入变量里去。不过Ruby默认会在末尾加一个空行。

去掉这个空行的方法是gets后加上.chomp,

var = gets . chomp

这样就不会有 newline了。

( 测试后发现好像这里输入的都会被认为是输入字符串类型 ) 

 

若要输出输入的变量内容,比如 输入一个字符串并存在变量name里,在输出时把这个变量输出来。则:

name = gets.chomp print " My name is # { name } "

如果没有 . chomp 这个method,则输出最后会换行。

 也可以这样:

puts "hello "+gets.chomp+" !" # 或者 puts "hello #{gets.chomp} !"

 #{...} 号会把这个符号里面的内容会被它自己内容的结果替换

如 #{4+5} 会被替换成 9

 

 

 

 

 

 about eval

this method evaluates a string enclosed in quotes as a Ruby statement or expression and returns the result. It's handy for testing.

就是一串字符串加上eval 这个方法解释器就会把它当作一段Ruby语句来执行。“便于测试”

但我本人是没觉出有什么很好的地方,觉得直接执行也不会怎样吧。。或许是我还只学到皮毛没有深入。

这儿有篇文章对理解它应该有帮助。

 

 

自己定义一个方法(method) : def 开头,end结尾 

def sayHi puts end

其中 sayHi 是方法名

使用时直接写方法名 sayHi 就好了 

 

 

 

 

 

 

   Codecademy ·Ruby (一) Introductiong to Ruby  

                     mission success   : )         √

 

 

 

 

 

作者 :  sysu_yakiang

转载请注明出处:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

网友评论
<