瞎扯淡 有没有筒子觉得,Ruby 要是不用敲那么多 end,会更优美?

匿名 · 2012年03月04日 · 最后由 wonter 回复于 2015年01月08日 · 10592 次阅读

如题, 比如模仿下 python~~~

update --- 本人是 smalltalk 的 big fan, 近几天才开始研究 ruby; 之前偶然看到一本 "metaprogramming ruby", 才抛开了比较狭隘的民族主义情节,学习下 ruby.

其实这个问题提的比较蛋疼,只是我有点强迫症,总喜欢简单,再简单。

关于具体的语法,我更喜欢 类似于 obj message 的 smalltalk 消息语法。ruby 属于随大流,非要用 '.', 其实也有点不爽,不过没办法,主流嘛。

还有类似 obj message:parameter 的语法,除了 smalltalk, 还真不见别的语言有这样的简洁性了和表达能力。不过这都是表皮,ruby 的魂还是十分 smalltalk 的,灰常的接近。

@xds2000 兄弟给了一个可能的解决方案:http://lazibi.rubyforge.org/index.html ps:记不得 markdown 语法,各位见谅。

这是设计哲学问题吧。

我用 Python 的时候觉得缩进格式很规范,用 Ruby 的时候我就觉得 end 作代码块很对称,各有各有美。

匿名 #2 2012年03月04日

@tualatrix ruby 的哲学不是更多选择嘛,如果这个也能选就好了. 不过这样也好,如果发现嵌套太多的 end, 就可以考虑重构一下了:)

这个啊~ 是仁者智者的问题啦,比如我对 Python 的强制缩进比较的不喜欢。对 Ruby 的 end 感觉还可以啊。本来就是萝卜和青菜嘛,呵呵。就像 Emacs 和 Vi,Gnome 和 KDE,各自都有其眷属。只能代表各自的喜好而已 :>

匿名 #4 2012年03月04日

@skandhas 是的,呵呵; 我是个懒人,总觉得能省就省。ruby 的方法调用可以省略括号,觉得大爱啊。要是能支持 smalltalk 款式的参数列表就更 high 了~(本人其实是 ios 程序员:)

ruby 学习缩进语法,挺好的倡议。楼主听有创意。 可以用用这个库,实现 Python style indenting in Ruby. http://lazibi.rubyforge.org/index.html

Ruby + Python 缩进 = less, CoffeeScript

就是不喜欢 Python 没有 end,开起来奇怪

我也是不喜欢 Python 没有 end,而且好像 end 也不用自己敲吧。。。。

花括號模式最美~

我也喜欢 python 那样没 end 的,很爽

我觉得有 end 挺好,用 snippets 不用手敲,每次看见 end 会让自己有种安定感,就像开辟一个工作区一样

为什么不喜欢 end 呢?

我曾经倒是想过,用 lisp 的风格来写 Ruby 中的代码块,不过和 Lisp 括号比起来, 阅读效果差好多了。

下面是代码示例,你们看看不用 end 晕不晕。

File.open("1.txt") {|f|
  f.each_line {|line|
    line.each_char {|char|
      print char.upcase}}}

最主要是没有 lisp 括号那种对称美.Matz 是 lisp 的绝顶高手,他绝对想过这种方式。

匿名 #14 2012年03月04日

@zw963 嗯,可能是习惯问题。我也是最近才开始研究 ruby, 因为我是 smalltalk 的粉丝,而 ruby 是相对主流的语言里面最像 smalltalk 的,呵呵

不管是 ruby 的 end,还是 python 的缩进,还是 C++ 等的大括号,都不影响对语言的选择,可能是本身水平太低,风格还没到影响心情的地步。

#15 楼 @adventurelw 没有一种语言是自己非用不可的,如果要选择的话,要选择自己喜欢的玩嘛!你怎么又扯到了水平高低上去了!

#4 楼 @nil 擦,我记得当初注册的时候 nil 叫不了,才降级到 dotnil 的哇

主要是觉得水平高的才更容易嫌这嫌那的。。。毕竟当你啥都做不出来的时候,羞愧都来不及,哪有那么多心情啊。

匿名 #19 2012年03月04日

@dotnil 呵呵,兄弟也是做 OC 的?

#19 楼 @nil 不是,最早知道 nil 这个词是因为那会我还用 emacs,现在做 Rails 兼 Web 前端开发

有强迫症,看不到 end 受不了。

匿名 #22 2012年03月04日

@dotnil 哦,看来在这边的基本都是 ror 专业程序员了,我过来学习学习,呵呵。

老 c 认为{}看着舒服

看图更直观

有 end

module Showbuilder
  module Builders
    class ModelListBuilder
      module ShowColumns
        def show_text_column(*methods)
          self.show_method_column(methods) do |value|
            self.safe_html_string(value)
          end
        end

        def show_time_column(*methods)
          self.show_method_column(methods) do |value|
            self.time_string(value)
          end
        end

        def show_date_column(*methods)
          self.show_method_column(methods) do |value|
            self.date_string(value)
          end
        end
      end
    end
  end
end

没有 end

module Showbuilder
  module Builders
    class ModelListBuilder
      module ShowColumns
        def show_text_column(*methods)
          self.show_method_column(methods) do |value|
            self.safe_html_string(value)

        def show_time_column(*methods)
          self.show_method_column(methods) do |value|
            self.time_string(value)

        def show_date_column(*methods)
          self.show_method_column(methods) do |value|
            self.date_string(value)

没 end,我担心读代码的时候,会让程序员产生疑惑(完了吗,完了吗,真的完了吗)。 但是,我觉得没有 end,代码少了好几行,挺酷的。 相对与 end,我更喜欢,强制缩进。 我没用过 pyhon,所以不能多说什么。

end 比 objectc 的 [] 好,那个写起来真叫人晕,多搞两层方法就分不清哪和哪了。 说实话,ruby 和 python 的风格都不怎么喜欢,还是喜欢 c 的{ 号。

end 绝对是 ruby 优雅性的重要体现。就像当年我很喜欢的 Object Pascal. Ruby 也绝对是个魔鬼,一个如此优雅的语言,却这么灵活多变...

#24 楼 @ery 这看着头重脚轻啊.. 不过看起来是清爽多了。

#27 楼 @zw963 哦 Object Pascal,让我想起了 Delphi。

一直以来对{...}end蛮抗拒的,搞得后来我特崇拜开发编辑器的人 缩进的图片 下面的图片来自:http://weibo.com/1679991957/xCmEAetmU lisp 缩进

同样感觉有 end,有明确的起始结束更有安全感

匿名 #32 2012年04月03日

@jinleileiking 不得不说,emacs 那张图看起来太难看了,字体,配色,看一会眼睛肯定花掉了

我恰恰觉得这是 ruby 比 python 好的地方,可能一开始写一些小东西不觉得,一旦函数变成几个屏幕长,这时候也没有明确的匹配标号来进行跳转,代码的层次很容易分不清。

如果我设计一门语言,一定是强制缩进 + end 结束块。

#33 楼 @ekim_sgra 这样的函数应该拆成几个小的

啊,emacs 还可以这样配置,赶紧研究下。

#33 楼 @ekim_sgra 怎么会有几个屏幕长的函数,这个时候该考虑重构了吧

匿名 #37 2012年04月07日

最不喜欢用缩进来排版的语言了,比如 python,haml

#30 楼 @jiyinyiyong 这个好,不知道 vim 下面有没有类似的插件实现这种效果呢?

#23 楼 @jinleileiking #26 楼 @hhuai 估计 matz 当时也想设计成{},但后来由于{}被用到 lambda 里的,就选了 end。 end 我觉得还好,惟一不爽的是你把光标放到 end 上不能高亮开头的 do。 而 ()[]{}一般都能自动高亮另一半。哪位有办法吗?

#30 楼 @jiyinyiyong 这编辑器很牛,不知有没有 vim 插件。

感觉有 end 更好,看起来舒服,而且比{}不伤眼~

#30 楼 @jiyinyiyong Emacs 这个好帅!完全没有 parathesis hell 的赶脚了!

@tylr @sevk 没去想过.. 记得缩进线的方案找到我都没配成功,这个就.. 要不还是求助图片作者的微博 http://weibo.com/1679991957/xCmEAetmU

搭一个用 html 排的图片 http://huaban.com/pins/3532086/zoom/

------------------- updated :: 04:30 做了一个在线编辑器玩,大概是这个样子,输入的时候就是列表的格式在运行 http://docview.cnodejs.net/test_ideas/code_blocks/html.html?html code_blocks

匿名 #44 2012年04月08日

@jinleileiking 之前没仔细看,lisp 木有括号!神了

木有 end 的语言里 gg=G 会杯具爆浆的...

不过有时候想,如果让 ruby 社区重新发明一遍 ruby 的话该也是 coffeescript 的那种样子吧...

匿名 #46 2012年04月08日

@fleuria 貌似 python coffeescript 都活的好好的~~~ 针对 ruby 可能要改插件~

#39 楼 @camel rubymine 那么强不行吗?

#47 楼 @hhuai ruby 当然可以啦,但我只用 rubymine 阅读开源代码,写代码还是用 vim 来得快些

#48 楼 @camel 如果会写 vim 插件的话,这个逻辑应该很容易实现的,

#39 楼 @camel

Emacs 可以跳转到对应的 do 前面的方法。

我自己定义的快捷键,按着 Ctrl 和 Alt 不放,一个快键跳到前面,一个快键跳到后面。

这个逻辑在 Emacs 中有现成的方法可用,ruby-beginning-of-block, ruby-end-of-block, 加高亮实现很简单,只不过按两下快键就知道在哪里了,没有任何必要而已。

... 终于给等到了... 最后一次更新是 5 months ago... EndLess Ruby https://github.com/pasberth/EndlessRuby/tree/dev 不知道跑不跑的起来.. 明天看看

还是习惯 "{}". do ... end 感觉更接近自然语言

没有万能的东西,每一种东西都有它的设计哲学和设计理念,以及设计的初衷。 这个没有什么好比的。 你的产品不可能满足所有用户,每个用户也都有自己的喜好。 用一种东西,就要以他的哲学来思考,来应用,否则你会很痛苦,很纠结,那是你用错了,至少的方式有问题,任何东西都不是橡皮泥,先怎么就怎么。

由于编程启蒙语言是 C++,喜欢追求代码的对称美,所以还是喜欢有结束符号。对 Python,CoffeeScript 不怎么喜欢。

匿名 #55 2012年11月13日

@woaigithub 有道理,这篇帖子搬到瞎扯淡会更合适,呵呵。

没有{.......}就好了,do ... end 看起来挺舒服的

这只能说日本人的严谨,一个 def 跟一个 end

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