`
1000copy
  • 浏览: 74392 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

-------------2008年6月14日 ruby 做着玩(1)

阅读更多


  这些天总是想要用ruby做点什么,因为喜欢ruby,也因为最近技术上缺少变化,想要主动的搞点不同的东西。想了不少的东西,但是很显然现在很忙,白天也不会有时间,只有晚上做,因此不能太大了,完整的系统就不要想了,但是找些耦合性不大的,有点意思的模块还是没有问题的,不如就做一个编号生成模块吧。
  今天周六,在床上睡得七荤八素的,想到左右没有事情,或者想到些事情也不想动,不如写写这个模块,动手。
  先看看需求
  A. Feat:做一个编号生成模块
  1. 通过类似${yyyy}-${mm}-${dd}-string-${autonum}样式来生成编码,这样生成的编号在今天就是2008-06-14-string-1,依次递增。
  2. 可以配置上面的格式化字符串
  3. 可以生成一个新的编号,并且不会重复,前面字符串变化后,后面的autonum可以归零再来。

  B. 技术限定:用函数,不要动不动就是数据库,想都不能想;总在做数据库,早就烦了,这次至少要改变些什么,要不然太没有意思了。

  C. 我要做的就是这个函数
   function GenenateSerialNo(serial_format,last_serial_no,last_num)
     当然需要通过下面的测试。实际上有了测试,这个函数才完整。
  D. testcase :
    assert_equal("2008-6-14-string-1",GenenateSerialNo("${yyyy}-${mm}-${dd}-string-${autonum}","",0))
    assert_equal("2008-6-14-string-4",GenenateSerialNo("${yyyy}-${mm}-${dd}-string-${autonum}","2008-6-14-string-3",3))
    assert_equal("2008-6-14-string-9",GenenateSerialNo("${yyyy}-${mm}-${dd}-string-${autonum}","2008-6-14-string-8",8))
      assert_equal("2008-6-14-string-1",GenenateSerialNo("${yyyy}-${mm}-${dd}-string-${autonum}","2008-6-13-string-8",8))

  如果用数据库的思路,现要考虑数据库表如何规划,上一个num和上一个格式化字符串的位置,还有这3张表的关系,耦合大了去了,又如何去重用呢?

  E. Testcase换成Ruby的表达,更详细的设计

  可是我不知道在ruby中如何表达单元测试?
  google "ruby unit test"
  找到一个例子:
  少许调整,改成自己想要的东西。然后....ruby serail_test
  架子成了,休息下,听音乐,音乐好啊。

  F. 开始写代码 - 表意代码,但是必须替换为ruby的样子,ruby估计不会有什么now.month,也不会有replace的方法。
    def GenenateSerialNo(serial_format,last_serial_no,last_num)
     serial_format.replace("${yyyy}",now.year);
     serial_format.replace("${mm}",now.month);
     serial_format.replace("${dd}",now.day);
     temp = serail.replace("${autonum},last_num")
     if (temp == last_serial_no)
         serial_format.replace("${autonum}",last_num+1);
     else
         serial_format.replace("${autonum}",1);
     serial_format
    end
        这些代码只能算是伪代码,表达意思没有问题,但是ruby显然不是这样表达的,其中的日期函数肯定不是这样的,replace函数恐怕也没有,就算有,恐怕也不能用一个数字来替换,比如last_num,必须转成string才可以。
  G. 如何表达string.replace ? 继续google "ruby string replace ",知道gsub可以干这个事情
     用irb验证
     "abc".gsub("ab","c)
     ==> cc
     就是它。
  H. 那么now.year 呢? google :"ruby date year",每个语言对日期的处理都不一样,不过也没有必要说那么多,都是知识性的,总之找到,然后用irb来测试。
      irb(main):011:0> Time.now.day
    => 14
    irb(main):012:0> Time.now.year
    => 2008
    irb(main):013:0> Time.now.month
    => 6
    irb(main):015:0> Time.now.month.to_s()
    => "6"
    irb(main):016:0> Time.now.month.to_s
    => "6"
      这样基本库函数的就比较明确了,正式编码了。
   J. 废话少说,看代码,然后通过第一个测试,随后以及也就通过了,懒得在看了。
       def GenenateSerialNo(serial_format,last_serial_no,last_num)
     serial = serial_format
     serial = serial.gsub("${yyyy}",Time.now.year.to_s)
     serial = serial.gsub("${mm}",Time.now.month.to_s)
     serial = serial.gsub("${dd}",Time.now.day.to_s)
     temp = serial.gsub("${autonum}",last_num.to_s)
     if (temp == last_serial_no)
         serial = serial.gsub("${autonum}",(last_num+1).to_s);
     else
         serial = serial.gsub("${autonum}",1.to_s);
     serial
     end
    end
   K. 总结
   一开始通过测试驱动的方式来,更加容易集中于代码,而不是考虑数据库如何,表如何.
   因为和数据库,表没有关系,更加容易重用。
   因为和数据库没有关系,也就有了新意,好玩,并且代码也就不多。
   不要着急进入代码细节,先表意,然后用ruby翻译,当然如果ruby比较熟悉了,可以一步到位,而我现在不熟悉,就干脆从顶到下,思路更加清晰。人的头脑不适合在层次中切换,如果先考虑好上一层,然后在进入下一层,当然更加容易。
   irb可以交互执行,看库函数,或者快速看结果更合适,不像ruby.exe 那么死板。可以在刚刚提到的场合多用,这个工具更加容易看到脚本比编译的灵活快速的特点。

1
0
分享到:
评论

相关推荐

    src-oepkgs/ruby-ruby2ruby

    src-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2...

    ruby-debug-ide

    《深入理解Ruby调试工具:ruby-debug-ide》 在Ruby编程世界中,高效的问题排查与代码调试是开发者必备的技能之一。ruby-debug-ide正是这样一个强大的调试接口,它为Ruby开发环境提供了集成的调试支持,使得开发者...

    ruby-2.5.3-x64 下载

    "rubyinstaller-devkit-2.5.3-1-x64.exe"是Ruby安装程序的名称,它包含了Ruby解释器以及DevKit。RubyInstaller是Windows平台上用于安装Ruby的工具,它可以轻松地在Windows系统上搭建Ruby环境。DevKit则是一个配套...

    sqlite3-ruby-mswin32.gem

    《SQLite3 Ruby绑定在Windows平台的应用与解析》 SQLite3是一种轻量级的、自包含的、无服务器的SQL数据库引擎,广泛应用于嵌入式系统和小型应用中。Ruby是面向对象的脚本语言,以其简洁优雅的语法和强大的功能深受...

    ruby安装包-rubyinstaller-devkit-3.0.2-1-x64.zip

    总的来说,"rubyinstaller-devkit-3.0.2-1-x64.zip"是一个完整的Ruby开发环境,包含Ruby解释器和必要的开发工具,使得Windows用户可以轻松地安装和使用Ruby及其相关的开源库。这个压缩包对于希望在Windows系统上进行...

    mingw32-ruby-1.9.1-wxruby-2.0.1-setup.exe

    mingw32-ruby-1.9.1-wxruby-2.0.1-setup.exe

    ruby-1.8.7-p302.tar.gz

    Ruby,一种为简单快捷的面向对象编程(面向对象程序设计)而创的脚本语言,在20世纪90年代由日本人松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、...

    ruby安装包-rubyinstaller-devkit-3.0.2-1-x64安装文件

    ruby安装包-rubyinstaller-devkit-3.0.2-1-x64安装文件 Ruby是一种面向对象、动态类型的脚本语言,由Yukihiro "Matz" Matsumoto于1995年创建。它以其简洁、优雅的语法和强大的编程能力而闻名,广泛应用于Web开发、...

    ruby-irb-1.8.7.352-13.el6.x86_64.rpm

    ruby-irb-1.8.7.352-13.el6.x86_64.rpm ruby-irb-1.8.7.352-13.el6.x86_64.rpm

    rh-ruby25-rubygems-devel-2.7.6-6.el7.noarch.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    ruby186-25.part1

    ruby186-25 for windows

    ruby-debug-1.87.rar

    1. `ruby-debug-base-0.10.4.gem`:这是`ruby-debug`的核心库,提供了基本的调试功能,如断点管理、堆栈跟踪、变量查看等。它包含了实现调试器所需的大部分逻辑,并为其他模块提供了接口。 2. `linecache19-0.5.12....

    ruby-oracle相关的数据库操作的gems包

    6. `ruby-oci8-1.0.7-x86-mswin32-60.gem`:专为Windows上的Ruby 1.9.x编译的版本。 7. `ruby-oci8-2.1.0.tar.gz` 和 `ruby-oci8-2.0.6.tar.gz`:源代码包,可以自行编译安装。 8. `ruby-oci8-1.0.7.tar.gz`:同上,...

    ruby-1.9.3-p547.tar.gz

    Ruby是一种面向对象的、动态类型的编程语言,由日本的松本行弘于1995年设计并开发。Ruby的设计理念是简洁、优雅,并注重程序员的生产力,它提供了丰富的内置库和强大的元编程能力。在本压缩包"ruby-1.9.3-p547.tar....

    ruby-debug-base19-0.11.26.gem

    ruby-debug-base19-0.11.26.gem

    ruby-1.9.2-p290.tar.gz

    这个版本是Ruby的1.9.2分支的一个更新点,标记为p290,意味着它是该分支的第290个补丁级别。在Ruby的版本管理中,每个“p”后面的数字代表对主版本或次要版本的修复和改进的集合。 Ruby是一种动态类型、面向对象的...

    ruby-2.4.3.tar.gz

    Ruby是一种面向对象、动态类型的脚本语言,由Yukihiro "Matz" Matsumoto于1995年创建。它以其简洁、优雅的语法和强大的元编程能力而闻名,被广泛应用于Web开发、系统管理、自动化任务以及各种工具的编写。在Linux...

    Ruby-GNOME2.zip

    跟其它界面开发包不同的是,Ruby-GNOME2不仅仅提 供界面控件,它提供了整个GNOME 2.0的环境,包含Ruby/GLib2、Ruby/ATK、Ruby/Pango、Ruby/GTK2、Ruby/GnomeCanvas2、Ruby /GNOME2、Ruby/GnomeVFS、Ruby/GtkHtml2、...

    savon-ruby-gem

    savon-ruby-gem

    ruby-oci8-2.1.5-x86-mingw32.gem

    ruby-oci8-2.1.5-x86-mingw32.gem,ruby连接oracle数据库gem包

Global site tag (gtag.js) - Google Analytics