1.Ruby常用数据类型 Numbers, Strings, Booleans

my_num = 25

my_boollean = true  (or false)

my_string = "Ruby"

2.Ruby常用数学计算操作符

加(+)
减 (-)
乘 (*)
除(/)
幂次方 (**)
求余 (%)

3.Ruby 输出操作

puts 带换行

print 不带换行

打印字符串:  print "HelloWorld" (不换行)

      puts "HelloWorld" (换行)

打印变量: name = "Ruby"

      print "#{name}"     #注意格式  "#{xxx}"

4.字符串常用操作函数

.length(计算字符串长度)    

name = "Ruby"

name.length  (返回4   等价于  "Ruby".length)

.reverse(反转字符串)

name.reverse(返回 ybuR  等价于 "Ruby”.reverse)

.upcase & .downcase (转换大小写)

name.upcase 和 name.upcase 分别返回 RUBY ruby

5.单行注释与多行注释

单行注释以 # 开头   eg. #I'm a comment
多行注释格式为
=begin
I'm a comment!
I don't need any # symbols.
=end
注意:=和begin和end之间不能有空格 begin后面也不要有空格

6.变量命名规则

变量名一般以小写字母开头, 单词之间用下划线分割, eg. counter, mastrful_method

Ruby不会阻止你用特殊符号如$, @等开头, 但是最好不要这么做, 容易产生歧义, 可读性降低。

7.方法调用

用.操作符调用方法

可以每次单独调用一个方法也可以进行联合调用

如:name = "Ruby"

可以

  name.downcase

  name.reverse

  name.upcase

也可以 name.downcase.reverse.upcase 这样调用

8.获取输入

print "what's your first name?"
first_name = gets.chomp gets是用来获取输入信息的方法,Ruby在其后面自动添加一个换行符\n chomp是用来删除换行符的方法。
eg:
  print "What's your first name?"
  first_name = gets.chomp
  print "What's your last name?"
  last_name = gets.chomp
  print "What are you from?"
  city = gets.chomp
  print "what's your state?"
  state = gets.chomp   print "#{first_name} #{last_name} #{city} #{state}"

9.Ruby的程序控制流

条件判断句 if/else的用法

print "Integer please: "
user_num = Integer(gets.chomp) if user_num < 0
puts "You picked a negative integer!"
elsif user_num > 0
puts "You picked a positive integer!"
else
puts "You picked zero!"
end 注意要以end结尾 elsif的写法(区别于elseif)

unless的用法

if(x<5) then statement1 end
unless x>=5 then statement1 end
这两句是对等的 if x<5 then statement1
else
statement2
end unless x<5 then statement2
else
statement1
end
也对等 unless 用来检验后面条件是否为假, 若假则执行后续代码, 若真则执行else (unless 相当于 if not)

比较运算符

相等  ==

不等  !=

大于 >

大于等于 >=

小于 <

小于等于 <=  

逻辑运算符

与 &&  或 ||  非 !

循环语句while用法

counter =
while counter <
puts counter
counter = counter +
end #注意以end结尾

循环语句until, 当until后条件满足时跳出循环(相当于  while not)

counter =
until counter >
puts counter
# Add code to update 'counter' here!
counter +=
end #注意以end结尾
注意: Ruby中没有前++和后++,前--后--。 但有+=, -=

for循环的用法

for num in ...    #三个点表示前闭后开  输出1-
  puts num
end for num in .. #两个点表示前后都封闭, 输出1-
  puts num
end

loop循环的用法  (相当于C里的 do...while)

i = 20
loop do
i -= 1
print "#{i}"
break if i <= 0
end

next的用法  (同C语言continue)

i = 20
loop do
i -= 1
next if i % 2 != 0
print i
break if i <= 0
end
输出 18 16 14 12 10 8 6 4 2 0 nil

10.数组

一维数组表示方法:  array = [1,2,3,4,5]  #注意  用中括号

一维数组的遍历:
  array = [1,2,3,4,5]
  方式一:
  array.each { |x| print"#{x+10}" } #可以在||之间使用任何变量名, 用来保存从数组中取得的值   方式二:
  array.each do |x|
    x += 10
    print "#{x}"
  end 多维数组的遍历:
  s = [["ham", "swiss"], ["turkey", "cheddar"], ["roast beef", "gruyere"]]
  s.each do |sub_array|
    sub_array.each do |y|
      puts y
  end
  end

.times 的用法

.times像是for循环的超级压缩版
10.times {print "xxx"} #打印10次 "xxx"

11.hash的用法

hash可以存储键值对,即key/value
创建hash
方式一:
my_hash = { "name" => "Eric",
"age" => 26,
"hungry?" => true
} puts my_hash["name"] #打印出 Eric
puts my_hash["age"] #打印出 26
puts my_hash["hungry?"]#打印出 true 在花括号中添加key/value 对
用=>符号来实现key/value的对应 方式二 用Hash.new方法创建hash
pets = Hash.new     #注意Hash首字母要大写
pets["Stevie"] = "cat"
pets["Bowser"] = "hamster"
pets["Kevin Sorbo"] = "fish" puts pets["Stevie"]
puts pets["Bowser"]
puts pets["Kevin Sorbo"] Hash.new 创建了一个空的hash
可以用类似数组的方式向构造出的hash对象添加key/value, key作为下标, value作为值
同样可以用类似数组的方法打印key对应的value 遍历hash
restaurant_menu = {
"noodles" => 4,
"soup" => 3,
"salad" => 2
} restaurant_menu.each do |item, price|
puts "#{item}: #{price}"
end
类似遍历数组, 针对上例,每次遍历hash,把hash的key赋给item, 把hash的key赋给price, 打印item和price hash排序
  puts "Please input: "
  text = gets.chomp
  words = text.split()
  frequencies = Hash.new(0)
  words.each do |letter|
    frequencies[letter] += 1
  end  
  frequencies = frequencies.sort_by do |word,count|
    count
  end

12.函数的定义方法

def double(n)
return n * 2
end
def为方法定义关键字, 后面double为方法名,n为参数,return表示函数有返回值, 返回n*2,以end结尾, 方法名和end之间为函数体。

13.语句块blocks的定义方法

blocks可以理解为没有方法名的方法,blocks可以用关键字do...end表示,也可以用{}表示
例如:
1.times do
puts "I'm a code block!"
end 1.times { puts "As am I!" }

14.理解symbol

symbol总是以:开头,后面必须紧跟一个字符或者一个下划线_ 

  puts :foo.object_id 327458
  puts :foo.object_id 327458
  puts :"foo".object_id 327458   puts "foo".object_id 24303850
  puts "foo".object_id 24300010
  puts "foo".object_id 24296170  #在 Ruby 中每一个对象都有唯一的对象标识符(Object Identifier),可以通过 object_id 方法来得到一个对象的标识符。 
 根据上面程序, 可知 symbol和string的区别:
 每个 String 对象都是不同的,即便他们包含了相同的字符串内容;而对于 Symbol 对象,一个名字(字符串内容)唯一确定一个 Symbol 对象(即名字相同,则symbol相同)。
 
哈希表是symbol应用最广泛的地方。
下面这个哈希表表示按城市分类的一些机器的集合。
一个哈希表例子 hosts{
'beijing' => 'machine1',
'shanghai' => 'machine2',
'guangzhou' => 'machine3',
'tianjin' => 'machine4',
'shenzhen' => 'machine5'
}
如果要引用 beijing 的机器,使用 hosts['beijing'] 。但如果我们程序中要频繁引用哈希表中 value ,这样就不大好了,因为 Ruby 对每一次字符串引用都会生成一个 String 对象,累积下来这个开销是相当大的。 我们完全可以使用 Symbol ,因为对于这些 key 来讲,我们用的就是名字而已,例如下面hosts[:beijing]
使用 Symbol 作为 key hosts = {
 :beijing => 'machine1',
 :shanghai => 'machine2',
 :guangzhou => 'machine3',
 :tianjin  => 'machine4',
 :shenzhen => 'machine5'
}
通常来讲,当你面临 String 还是 Symbol 的选择时,可以参考以下标准: 如果使用字符串的内容,这个内容可能会变化,使用 String
如果使用固定的名字或者说是标识符,使用 Symbol

string和symbol之间的转换

:sasquatch.to_s      # ==> "sasquatch" (symbol转string)
"sasquatch".to_sym   # ==> :sasquatch (string转symbol)
"hello".intern 和 .to_sym效果相同都可以string转symbol 

15.hash的新的表示方法

自Ruby1.9之后, hash的语法比原来更为简洁

new_hash = {
one: 1,
two: 2,
three: 3
}
冒号在symbol之后, 不再使用=>

16.Ruby允许单独访问key或value

my_hash = { one: 1, two: 2, three: 3 }

my_hash.each_key { |k| print k, " " }
# ==> one two three my_hash.each_value { |v| print v, " " }
# ==> 1 2 3

17.Ruby的隐式返回

  Ruby方法总会返回最近的一次表达式所得到的值。
  def add(a,b)
    return a+b
  end
  等价于:
  def add(a,b)
    a+b
  end

18. 三目运算符

three = 3
puts three == 3 ? "Of course." : "What?"
# ==> puts "Of course."
 

Ruby基本语法规则的更多相关文章

  1. JavaScript:声明变量名的语法规则

    一.语法规则 1.变量必须使用字母.下划线(_)或者美元符($)开始. 2.然后可以使用任意多个英文字母.数字.下划线(_)或者美元符($)组成. 3.不能使用JS关键词与保留字. 二.示例 var ...

  2. JSON 语法规则详解

    JSON 的语法规则十分简单,无论用何种方法总结都只有数条而已,它参考了 C 语言家族的一些习惯,学习起来并不会感到陌生. 回顾JSON 的五点语法 1)- 数组(Array)用方括号("[ ...

  3. JavaScript的语法规则

    JavaScript的语法规则 JavaScript区分大小写 JavaScript脚本程序须嵌入在HTML文件中 JavaScript脚本程序中不能包含HTML标记代码 每行写一条脚本语句 语句末尾 ...

  4. XML 语法规则

    转摘自:http://www.w3school.com.cn/xml/xml_elements.asp XML 语法规则 XML 文档包含 XML 元素. XML 的语法规则很简单,且很有逻辑.这些规 ...

  5. PHPCMS标签:PC标签模板语法规则

    模板语法规则1.变量表示{$name} 被解析成 <?=$name?>,表示显示变量$name的值,其中的“name”由英文字母.数字和下划线组成首字母必须是英文字母或者下划线. 2.常量 ...

  6. C++ 语法规则

    C++ 中的布尔类型:布尔类型只占用一个bit ,但是如果连续定义多个布尔类型时,编译器可能会多个布尔类型定义在一起.true  编译器用1来表示.false  编译器用0来表示. 将一个其他类型的数 ...

  7. Ruby的语法糖

    发现Ruby的语法糖好多,比如函数调用,参数列表可以写括号和不写括号.代码块可以用do end 或者 {}.   还有 if,unless后置.等等. 如果看Ruby代码看多了,你会发现,它很多地方的 ...

  8. Jenkins 定时构建语法规则

    1.Jenkins自由风格任务定时构建 2.语法规则 定时构建语法 * * * * * 第一个*表示分钟,取值0~59 第二个*表示小时,取值0~23 第三个*表示一个月的第几天,取值1~31 第四个 ...

  9. 良好的JavaScript编码风格(语法规则)

    编码风格 1.概述 "编程风格"(programming style)指的是编写代码的样式规则.不同的程序员,往往有不同的编程风格. 有人说,编译器的规范叫做"语法规则& ...

随机推荐

  1. Scala可变长度参数

    可变长度参数 Scala 允许你指明函数的最后一个参数可以是重复的.这可以允许客户向函数传入可变长度参数列表.想要标注一个重复参数,在参数的类型之后放一个星号.例如: scala> def ec ...

  2. hibernate-HQL连接查询

    和SQL查询一样,HQL也支持各种各样的连接查询, 如内连接.外连接. 实例: package Test; import static org.junit.Assert.*; import java. ...

  3. jboss wildfly 外网访问

    在standalone.xml中: 找到下面三行,看到是要访问public(8080端口的)和management的interface,将interface中的127.0.0.1改为0.0.0.0即可 ...

  4. persistent.xml hibernate 利用sql script 自定义生成 table 表

    <?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http:// ...

  5. 【项目】Http请求在NSMutableURLRequest添加HttpBody的字典params属性

    在请求头中加入字典集合的Body,首先把字典转换成json,然后json转换成NSData,然后加入到HTTPBody中,我有已下写法 // 参数paramsNSDictionary * params ...

  6. 高可用与负载均衡(1)之linux系统的数据链路层负载均衡

    preface 在蓝厂就职到时候,每台缓存服务器都能够跑到2G的流量,这么大的流量,有人会问,服务器是不是安装的万兆网卡,no no no,仅仅是3张千兆网卡绑定在一块.万兆网卡的服务器少见,大多数都 ...

  7. Javascript中call、apply、bind函数

    javascript在函数创建的时候除了自己定义的参数外还会自动新增this和arguments两个参数 javascript中函数也是对象,call.apply.bind函数就是函数中的三个函数,这 ...

  8. sky

    UniSky入门资料 http://game.ceeger.com/forum/read.php?tid=4069

  9. SPL--Serializable

    Serializable[自定义序列化的接口] : 实现此接口的类将不再支持 __sleep() 和 __wakeup(). 作用: 为一些高级的序列化场景提供支持.__sleep()和__wakeu ...

  10. Java8初体验(二)Stream语法详解

    感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 上篇文章Java8初体验(一)lambda表达式语法比 较详细的介绍了lambda表达式的方方面面,细心的读者会发现那篇文章的例 ...