总结
各位前辈的回复都很中肯,对于部分用其他语言很多年的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 比 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']));
}
}
为什么都 10L 了还没人吐槽
这里为啥不可以 nd.name = "Benzy"? puts nd.name 好多地方啊,又是 do .... end, 又是 begin ....end,搞得跟 pascal 语法差不多了。 为啥不能直接{}呢? 没有 return 这个关键词 ...
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.
楼主的症状和我现在一样,我从 c,php 过来,还有点不习惯 ruby 语法。其实不用喷什么,谁都有一个从不熟到熟的过程,社区的作用就帮助像我们这些新人,而不是排挤。
我是一个设计师,对代码没什么理解
只看了同事写的.net 和 php 代码,只感觉他们写的比较多,然后括弧也很多。
我看了 ruby 和 python 以后觉得写出来排列出来比较好看。python 尼玛这语言更精简,结束符都没有,用不惯。最后我还是学 ruby 了!
其实就是一个适应过程,习惯了语法看起来就很容易了。知道语法的几种变化,规范自己的书写习惯。 还有说 php ci 那段的混乱的,我觉得那段代码很清楚,因为我 php 也用了 n 年了。
#35 楼 @williamherry 呃,忘记了这里会有转义,其实我想推荐的书是The Ruby Programming Language和Metaprogramming Ruby,还推荐一下松本行弘的松本行弘的程序世界,最后这本读后你就知道 ruby 怎么来的,为什么要弄出个这种语言来,它有什么优势,这种语言有什么不同。
看你是什么背景出来的了。 从代码杂乱程度来说,比起 Perl 会好很多。 从功能复杂度来说,会比 C++ 好很多。
总的来说 ruby 算是比较高级的混合语言了,把过于复杂的元素去除了,例如 lisp 里面的 macro,留下了比较精粹的东西。
水至清则无鱼,要说语法最简洁的可能就是 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 干嘛?