ruby,就是这么简单粗暴

啥?你没学过 ruby?
嗯哼,其实我也没学过,今天看了这篇,尽管你还是不了解它,但是挡不住你会爱上它的冲动

首先让我们先来完成一个简单的小题目:

那么在我在完全没有学习这门语言,直接入手写东西,我是这么做的:

  • 分析这个题目大致需要用到如下的知识点
  • 定义变量 : 数值类型,引用类型(数组)
  • 变量的操作:数组追加值的方法
  • 定义函数
  • 使用循环

大致有了这些知识点就足够完成这道题目,同时也就掌握了ruby 的这些语法的书写方法.
然后就足一的去网上找ruby语言的这些语法的使用方法.

那么除了怎么写,我们应该还需要关注一个问题,怎么运行?
根据我们经验,我们知道js语言的执行方法是:$ node 文件名
那么现在是另一种语言,该怎么执行它呢,我们不防先假设一下,那它是不是用$ ruby 文件名也可以呢,那我们来试一试:
在网上看到这样一个hello world例子,发现ruby的代码可以不放在函数里面也可以直接执行,那我把它写在一个ruby文件中,文件名为:FizzBuzz.rb
测试,内容如下:

puts("hello world")

执行这个文件$ ruby FizzBuzz.rb(注意这里必须是完整的文件名,以及文件的扩展名)
输出结果为:


ok,那么我的猜想是对的,我们可以类比 js 文件的执行方法,来知道ruby文件的执行方法。

注意:

经过测试发现,这里执行ruby文件的时候,必须使用完整的文件名,不像 js, 可以不需要写文件名后面的扩展名,比如一个js文件hello.js只需要执行:$ node hello就可以啦,但是ruby的话,不加文件名的扩展名会出错:

思考的姿势

那么,这里我要安利一下,不管我们遇到什么问题,我们都不应该立马去查一下解决办法是什么,我们应该先自己先猜想一下它的原因和解决办法,然后再去找答案,这样可能对自己的思考能力有很大的提升和帮助.


所以这个题目,我的第一版代码就写成这样:
版本1.1(以下代码都是放在FizzBuzz.rb文件中)

# 如果输入的数字是 6 
  i = 0  #这里是ruby定义一个简单变量的方法,发现它不需要像其他语言一样需要规定它的类型,而是直接给变量赋值就可以了
numArr = Array.new   #这就是ruby定义一个数组的方法,也可以定义数组的长度为20,如:Array.new(20)
for i in (1..6)     #ruby使用for循环,其中..表示一个范围,这里表示1~6 的数字,包括1和6
     if i%3 ==0 && i%5 ==0  #这里的条件一定要放在最前面,如果放在后面会因为前面条件先满足而劫持
        numArr<<"FizzBuzz"   # ruby中向数组中追加一个元素的方法<<, 也可以使用push方法
    elsif i %3 == 0    
       numArr<< "Fizz"  
    elsif i%5 ==0    
       numArr<<"Buzz"  
    else    
        numArr<<i 
  end   #表示一个代码块 if 结束
end  #表示一个代码块 for 结束
puts(numArr)   # ruby打印一个元素的方法

执行:$ ruby FizzBuzz.rb
输出结果如下:


我学会函数的使用后代码写成这样:

# 如果输入的数字是 6 
def  get_StrNum   #这就是定义一个函数的方法,def 类似于js中的function,get_StrNum就是方法名字
   i = 0  #这里是ruby定义一个简单变量的方法,发现它不需要像其他语言一样需要规定它的类型,而是直接给变量赋值就可以了
   numArr = Array.new   #这就是ruby定义一个数组的方法,也可以定义数组的长度为20,如:Array.new(20)
   for i in (1..6)     #ruby使用for循环,其中..表示一个范围,这里表示1~6 的数字,包括1和6
     if i%3 ==0 && i%5 ==0  #这里的条件一定要放在最前面,如果放在后面会因为前面条件先满足而劫持
        numArr<<"FizzBuzz"   # ruby中向数组中追加一个元素的方法<<, 也可以使用push方法
    elsif i %3 == 0    
       numArr<< "Fizz"  
    elsif i%5 ==0    
       numArr<<"Buzz"  
    else    
        numArr<<i 
  end   #表示一个代码块 if 结束
end  #表示一个代码块 for 结束
puts(numArr)   # ruby打印一个元素的方法

然后执行:$ ruby FizzBuzz.rb
咦,咋没有输出呢,检查一下,没有错啊,真的没有错啊
再来好好思考一下,真的没有问题吗
为什么它没有输出,在这个函数的开头放一个输出puts("hello"), 重新执行后,发现依然没有输出。 那就说明,这个函数根本就没有执行啊,为什么没有执行呢?想想我们写 js 的时候,如果写一个函数,想让它执行,怎么办呢,调用它啊~! 所以类比到这里,也是一样的啊,想让一个函数执行,也必须要有人调用它啊!

编程语言思想----移花接木

ok,是不是有学到一点就是类比,其实编程语言都是相通的,故思想也都是可以类比的所以在 已经掌握一两门编程语言之后,再学习其它语言就不会那么吃力了!这是一个真理,如果你已经掌握编程语言的思想精髓的话,而不是仅仅会使用,移花接木就不会了,那是不行的!

所以在上面的代码后main加上一个调用那个函数的代码get_StrNum.
然后再执行ruby FizzBuzz.rb
输出结果为:


在我学会ruby的类的写法之后
给我的实现代码在加上单元测试:
我使用的ruby的测试框架为unit test

# 如果输入的数字是 变量n 
class FizzBuzz
def  get_StrNum(n)   #这就是定义一个函数的方法,def 类似于js中的function,get_StrNum就是方法名字
   i = 0  #这里是ruby定义一个简单变量的方法,发现它不需要像其他语言一样需要规定它的类型,而是直接给变量赋值就可以了
   numArr = Array.new   #这就是ruby定义一个数组的方法,也可以定义数组的长度为20,如:Array.new(20)
   for i in (1..n)     #ruby使用for循环,其中..表示一个范围,这里表示1~n 的数字,包括1和6
     if i%3 ==0 && i%5 ==0  #这里的条件一定要放在最前面,如果放在后面会因为前面条件先满足而劫持
        numArr<<"FizzBuzz"   # ruby中向数组中追加一个元素的方法<<, 也可以使用push方法
    elsif i %3 == 0    
       numArr<< "Fizz"  
    elsif i%5 ==0    
       numArr<<"Buzz"  
    else    
        numArr<<i 
     end   #表示一个代码块 if 结束
   end  #表示一个代码块 for 结束
 numArr   # ruby 表示返回一个元素的方法 ,可以写成return numArr ,也可以直接写成numArr ,它们是等价的
 end
end

我的测试:

require 'test/unit'   # 引入ruby的测试框架,这个在安装ruby的时候,就已经安装了,世界引入即可
require_relative "FizzBuzz.rb"  # 引入要测试文件名
class  TestFizzBuzz < Test::Unit::TestCase   # 这个测试类,<表示继承,::是一个命名空间,表示要继承Test下面的Unit 下面的TestCase
strNum = FizzBuzz.new   # FizzBuzz是实现代码中的一个类名,这里表示创建实现类FizzBuzzz的一个实例
def  test_fizz_buzz    #这里是一个测试函数
  assert_equal [1], strNum.get_StrNum(1)   #这是一个测试的断言 ,左边是期望值expected,右边的实际值 
  assert_equal [1,2],strNum.get_StrNum(2)    
  assert_equal [1,2,"Fizz"],strNum.get_StrNum(3)    
  assert_equal [1,2,"Fizz",4,"Buzz"],strNum.get_StrNum(5)    
  assert_equal [1,2,"Fizz",4,"Buzz","Fizz",7,8,"Fizz","Buzz",11,"Fizz",13,14,"FizzBuzz"],strNum.get_StrNum(15) 
 end
end

ok,现在跑一下测试文件,执行:$ ruby TestFizzBuzz.rb


一个测试,5个断言,0个失败,表示测试全部通过!

这个过程,短短的时间,简单的练习,关于 ruby 学到什么东西了呢

总结

  • 技术知识

  1. 定义一个变量:变量名 = 赋值
  2. 定义一个数组: arr = Array.new
    或 规定它的长度 arr = Array.new(10)
    数组追加内容: arr << 5
  3. 输出变量的方法:puts( 内容)
  4. 定义一个函数:
def 函数名
    .....
end
  1. 定义一个类:
class  类名
   ....
end
  1. for循环:
    for i in 1..n 或者 for i in (1..n)

  2. 引入文件的方法:
    require_relative "FizzBuzz.rb"
    require 'test/unit'

  3. 实例化一个对象:
    实例名 = 类名.new

    9.执行 ruby 代码的方法:$ ruby 文件名
    注意: 这里必须为完成的文件名,包括扩展名,区别于 js

  • 软技能

  • 遇到什么问题,我们都不应该立马去查一下解决办法是什么,我们应该先自己先猜想一下它的原因和解决办法,然后再去找答案,这样可能对自己的思考能力有很大的提升和帮助.提高学习能力
  • 编程语言思想----移花接木
    学会类比,模仿,提高学习效率
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,302评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,232评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,337评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,977评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,920评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,194评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,638评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,319评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,455评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,379评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,426评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,106评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,696评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,786评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,996评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,467评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,043评论 2 341

推荐阅读更多精彩内容