新手问题 有人觉得 Ruby 的语法乱吗?

nevernet · 2012年08月15日 · 最后由 oran 回复于 2012年08月23日 · 7754 次阅读

总结

各位前辈的回复都很中肯,对于部分用其他语言很多年的new rubyer来说, 基础语法,写法确实有不习惯的地方,呵呵, 如果你写过VB.Net ,然后C Sharp 或者delphi,再java,等等, 刚开始确实有不习惯。  没有好坏,只有适用或者不适用。 

基础语法的本质是一样的,只不过表现形式不同而已。

从 java/C#/PHP/过来,感觉确实很多不习惯啊。

如:

class NewDog
  def initialize(breed)
    @breed = breed
  end
  attr_reader :breed, :name   # create reader only
                              # setter method
  def name=(nm)
    @name = nm
  end
end

使用的时候:

nd = NewDog.new('Doberman')
nd.name=('Benzy') // 这里为啥不可以nd.name = "Benzy"? 
puts nd.name

好多地方啊,又是do .... end, 又是 begin ....end,搞得跟 pascal 语法差不多了。 为啥不能直接{}呢?

没有return这个关键词 ...


不好意思,其实“// 这里为啥不可以nd.name = "Benzy"?”这个是错误的 Ruby 支持nd.name = "Benzy"

好多好多...

感觉你学的 Ruby 和我们学的不是一个次元的。。

其实靠这几个基本的语法,ruby 省去了其它语言中一打的关键字和高级语法结构

ruby 里面有太多其它语言的影子了,如 js, java, .... ruby 里面有.net linq 的例子?

#1 楼 @jjym 来几个例子?

#3 楼 @nevernet 哪里有 js 和 java 的影子了? .net 那个是 rails 的影子

又有来砸场子的了

#6 楼 @hooopo 非也,新手有感而发而已

匿名 #8 2012年08月15日

竟然有人觉得 Ruby 比 PHP 乱的,我看到 PHP 代码都不知道怎么看,比如这个 CodeIgniter 的 sample

class Blogmodel extends CI_Model {

    var $title   = '';
    var $content = '';
    var $date    = '';

    function __construct()
    {
        // Call the Model constructor
        parent::__construct();
    }

    function get_last_ten_entries()
    {
        $query = $this->db->get('entries', 10);
        return $query->result();
    }

    function insert_entry()
    {
        $this->title   = $_POST['title']; // please read the below note
        $this->content = $_POST['content'];
        $this->date    = time();

        $this->db->insert('entries', $this);
    }

    function update_entry()
    {
        $this->title   = $_POST['title'];
        $this->content = $_POST['content'];
        $this->date    = time();

        $this->db->update('entries', $this, array('id' => $_POST['id']));
    }

}

#8 楼 @yggg 感慨而已,其实主要想表达的意思是感觉 ruby 的基础语法用的不太统一,就比如有人说 php 函数定义有的是 get_first_name,有时是 getFirstName 一样

匿名 #10 2012年08月15日

#9 楼 @nevernet 因为 Ruby 比较灵活,很多东西有多种写法,这个就需要代码风格统一了

预感后面楼主会被教育的很惨,珍重...

想请教下,我贴出的代码,这个网站自动加 [code][/code] 了?

为什么都 10L 了还没人吐槽

这里为啥不可以 nd.name = "Benzy"? puts nd.name 好多地方啊,又是 do .... end, 又是 begin ....end,搞得跟 pascal 语法差不多了。 为啥不能直接{}呢? 没有 return 这个关键词 ...

匿名 #14 2012年08月15日

#12 楼 @nevernet 按快捷键 M

#12 楼 @nevernet 我帮你编辑了一下..

#13 楼 @jjym 呵呵,错误已经修改了

为啥要有return?明明有return的嘛。

#17 楼 @bhuztez you are right.

good ruby style generally only uses explicit returns for an early return. Ruby is big on code minimalism/implicit magic. That said, if an explicit return would make things much clearer or easier to read, it won't harm anything.

ruby 是有很多 lisp 的影子,学习 ruby 建议看看那本经典的和,然后再看 Rails 的书。。。

我以前也有点不适用 用多了,就知道多爽了

@jjym 可以用啊,没有问题

无语路过

欲练神功,自废武功------偷@hisea 的话。 目前楼主处于自废武功阶段,不适应,很正常。

楼主的症状和我现在一样,我从 c,php 过来,还有点不习惯 ruby 语法。其实不用喷什么,谁都有一个从不熟到熟的过程,社区的作用就帮助像我们这些新人,而不是排挤。

真心建议新手在吐槽前先做一下功课。。。

那是楼主你自己写得乱

我是一个设计师,对代码没什么理解

只看了同事写的.net 和 php 代码,只感觉他们写的比较多,然后括弧也很多。

我看了 ruby 和 python 以后觉得写出来排列出来比较好看。python 尼玛这语言更精简,结束符都没有,用不惯。最后我还是学 ruby 了!

对 ruby 没 feeling 的话,那还是改投其他门派为好。

其实就是一个适应过程,习惯了语法看起来就很容易了。知道语法的几种变化,规范自己的书写习惯。 还有说 php ci 那段的混乱的,我觉得那段代码很清楚,因为我 php 也用了 n 年了。

感谢各位的倾力回复啊,收益良多,谢谢。

#8 楼 @yggg 那是因为 php4-是没有 OO 的,所以硬要写 OO 实在是难看。

一开始不适应,吐着吐着就觉得很优雅,当然比不上 coffeescript

匿名 #34 2012年08月15日

#32 楼 @tedeyang 嗯 没写过 php,几次想尝试下,都放弃了

@zeeler 经典的什么和什么?

你不能说中文很黄色,你只能说 金瓶梅 肉蒲团 写的很黄色。

这个乱不乱本身就是个主观的东西。

#35 楼 @williamherry 呃,忘记了这里会有转义,其实我想推荐的书是The Ruby Programming LanguageMetaprogramming Ruby,还推荐一下松本行弘的松本行弘的程序世界,最后这本读后你就知道 ruby 怎么来的,为什么要弄出个这种语言来,它有什么优势,这种语言有什么不同。

看你是什么背景出来的了。 从代码杂乱程度来说,比起 Perl 会好很多。 从功能复杂度来说,会比 C++ 好很多。

总的来说 ruby 算是比较高级的混合语言了,把过于复杂的元素去除了,例如 lisp 里面的 macro,留下了比较精粹的东西。

匿名 #40 2012年08月17日

水至清则无鱼,要说语法最简洁的可能就是 smalltalk & lisp 了,smalltalk 就一种语法,向对象发消息; lisp 没语法.... 有啥用,曲高和寡~

呵呵 0、我是个不折不扣的新手,该叫 new rubyist? 1、我觉得楼主如果是从 Java/C#/PHP 过来的应该不会感到不习惯 2、看楼主的示例代码,真心觉得楼主学的 Ruby 和我们学的不是一个次元的 3、没有好坏,只有适用或者不适用。我觉得这句话很扯,如果语法没有好坏,楼主干脆用机器码写写试试 4、楼主懂得那么多种语言,真的不相信楼主会不适应 ruby 的语法 5、看过楼主之前发的一些帖子,没有恶意,但是真心希望楼主有问题先 google 6、希望 Ruby 能带给楼主快乐和财富 最后,关于 ruby 如何入门,请看这里 http://ruby-china.org/wiki

#41 楼 @karma 说实话,我这个主题问的都很主观化,所以习惯问题真要看个人。 关于你的 1,2,4 几个问题,举个简单例子:每行结束的时候,会情不自禁的敲上一个;(分号) 吗?if 后面会情不自禁的敲上一个{吗?呵呵 当然习惯是一个过程,再多学几天,我就习惯了,呵呵。

3 - 对于基础语法问题,恐怕要扯到好坏这个问题上,确实有难度,有的人就是喜欢 pascal 语法,但有人就是喜欢 C 系列的语法,或许还真有人喜欢用机器码,呵呵,难讲。

5 - 这个问题 - google 一直是我的习惯。

我承认发这个帖子,或者发这个主题的帖子是草率的,确实这个主题会引起很多口水仗。

6 - 谢谢,也希望 Ruby 能给你带来快乐和财富。

最后,我之所以说“ruby 语法有点乱” -- 其实是因为一个想法:ruby 基础语法既有 c 的影子,又有 pascal 的影子。

当然,如果你有时间,你可以去看看 delphi, vb.net, c#/java/php,然后试着用他们写个项目

over

这个帖子应该移动到“瞎扯谈”里面,还要麻烦版主了

没看楼上内容,不过看楼主标题,估计要讲的不是, 是灵活。

Ruby 这门语言的特点是灵活,同一个问题可以用很多种优雅的方法来实现。

怎么说呢?这就像武侠里的练功,练到后来,随性而发,在最适合的场合,使用相对最适合,最优雅的方法. Ruby 给你提供了实现这种选择的基石,剩下的就看你怎么发挥了。

你说你用过 delphi, 可是你竟然不习惯 end, 其实这两者不仅仅是 end 相似,还有个共同点是:设计层次, 比较严谨而且具有一致性, 但是使用上语法却非常灵活(Object pascal 的语法,和 C, C++ 完全是同样级别的)

p.s. 顺便再说一句,不管是{}, 还是 begin end, do end, 这些都不是让人敲的,要不然,要 snippet 干嘛?

我倒觉得大括号语法看起来很乱

需要 登录 后方可回复, 如果你还没有账号请 注册新账号