因为我目前用的套装是 ruby coffeescript haml sass 似乎只有 ruby 是不强制缩进的,而 python 却是风格上和 coffeescript haml sass 一样 今天刚意识到这点,突然有种奇怪的感觉 希望能出个 ruby 强制缩进版本,顺便把 end 也去了,那样就完美了 不知道有没有人跟我一样的想法呢。。。。
缩进是多么反人类的事情。。。 有些 lib 在 coffee 下就不得不写成类似
$('#banner-slides').slidesjs(
{
width: 710
height: 353
navigation:
{
active: false
}
pagination:
{
active: true
}
play:
{
active: false
effect: "slide"
interval: 5000
auto: true
swap: false
}
}
)
黑细长,可读性真的不一定有提升,还有像写回调函数的时候,很容易失误缩进错,而且这种问题报的错误都很抽象,不好定位
$('#banner-slides').slidesjs(
width: 710
height: 353
navigation:
active: false
pagination:
active: true
play:
active: false
effect: "slide"
interval: 5000
auto: true
swap: false
)
我看着没问题啊,而且即使用花括号也是这样排版
$('#banner-slides').slidesjs({
width: 710
height: 353
navigation: {
active: false
}
pagination: {
active: true
}
play: {
active: false
effect: "slide"
interval: 5000
auto: true
swap: false
}
})
Lua 同样坑 end
和缩进:
function a(x)
return x + 1
end
print(a(3))
找到过一个无 end
的 Ruby 版本,不是原生,编译过程挺烦的
https://rubygems.org/gems/endlessruby
超想有个强制缩进的版本,括号和缩进造成语义重复,不应该强制人重复
#6 楼 @serco 心情几乎一样,但我是觉得逼人写跨行的括号让我有种受迫的感觉 写了一大串我认为括号不好的理由 https://github.com/jiyinyiyong/cirru-eval/issues/3
#17 楼 @jiyinyiyong 所以像缩进这种很看习惯的事情,语言不应该强制开发者如何如何的....像刚才我举得那个例子 我就是有强迫症看着不爽,但反过来@Rei 觉得可以接受,这种事情是好是坏真的说不清楚的
Should I be able to stand whitespace-sensitive languages I might as well go learn [whitespace](http://en.wikipedia.org/wiki/Whitespace_programming_language\)()
#20 楼 @jiyinyiyong 编辑器和开发环境差异。。。这不就是在吐槽强制缩进么...配置不当的编辑器怎么区分 tab 和空格...用括号就没这个问题
#28 楼 @jiyinyiyong 制表和空格在没有充分配置的环境下很容易混淆,然后就会产生问题,毕竟制表和空格都是语言允许的缩进方式,但是混用就有可能有问题,这个是缩进语言的硬伤啊,都强制开发者缩进了。。再强制编辑器如何配置,就有点。。引用个刚学的词“BDFL” “仁慈的”终生大独裁者
#30 楼 @jiyinyiyong 谁说两个空格缩进是非常习惯的作法的...看看Python coding style先,虽然空格缩进用的最多,但是用 tab 同样多,而且明确指出了混合用就是坑,以至于解释器要花费精力解决这个问题 另外即使使用空格缩进,Python 也提倡 4 空格,而不是两个,你的习惯可不是国际惯例 你说制表符的宽度不同,但是实际表达的意义却是相同的,从文本上都是‘\t',而你用四空格还是两空格可在文本上的意义就不同了,这对计算机来说可不是严谨
另外 再进一步扯一句,根据王垠的文章所述,Python 分析缩进花了词法分析器大量的精力,这对机器可是额外的负担,而用句尾用分号断句的语言在这方便又有先天的优势
Ruby 的 do...end Basic 的 begin...end 还有 c-style 的{}还有 lisp 的 () 都有自己的问题,缩进也一样,这只是一个个人品味问题,事实上,我也可以说出其他风格的不是来,但我觉得意义不大,没有讨论的必要
#30 楼 @jiyinyiyong 而且默认设置下,制表符默认就等同于 4 个 tab 的宽度,任何编辑器都一样,没有可能一说 用了括号同样也要有缩进,没有合理缩进的程序员不应该作为同事存在 不举 coffee 的例子了,我对 coffee 有些误解,刚才写了一些代码,了解了,但仍然有槽点
$('#banner-slides').slidesjs(
width: 710
height: 353
navigation: active: false
pagination: active: true
play:
active: false
effect: "slide"
interval: 5000
auto: true
swap: false
)
如果不慎插入一个逗号呢?这种失误是有可能的,缩进同样一致,但是表达的含义变了,而且有可能不报形参数量不同的错误,而使用大括号就能避免这种错误发生
#32 楼 @jasl 嗯,Python 4 空格,2 空格在 coffee 也只是推荐,没有标准 我没有可以遵循的法则来比较两者优劣,所以很大程度是自己使用当中的考量 缩进的符号用对了计算机都是能理处的.. 我不想多讨论计算机处理这个是否严谨,跳过 :P
词法分析不懂.. 因为网上简单的解析器都不支持缩进,导致我现在到没学会,, 有路过的高人讲解一下么,Python 真的性能消耗在缩进的处理上? 实现缩进的语言不止 Python, 解析缩进很难么..?
不好意思代码我之前理解错了.. 这个写法我也觉得容易混淆,, 如果是我习惯这样写:
options =
width: 710
height: 353
navigation: { active: false } # 避免混淆
pagination:
active: true # 或者这样, 不过不打算两种混用
play:
active: false
effect: "slide"
interval: 5000
auto: true
swap: false
$('#banner-slides').slidesjs options # coffee 参数部分像 Ruby 容易花, 简化
#33 楼 @jiyinyiyong #34 楼 @jasl
缩进处理对性能一点影响都没有,更何况第一次跑完就生成 pyc 了不用处理缩进了
coffee 里不慎多插了逗号也不会造成错误... 不合法的写法编译期会给你提示的 如果用 js, 最后一项多了逗号就会导致 ie 7 挂掉...
#41 楼 @2forVendetta end 有 end 的好处,松本有论述为什么选择 end 而不选择强制缩进。你无非不习惯而已。。。在我不习惯 python 的眼里,python 感觉也很屎。刚开始学 js 的时候满眼的大括号,还真是头疼死我了。习惯了就都好了。
#44 楼 @blacktulip 英语好难懂... 虽然摘了一遍
Python style block by indentation is an interesting idea, but it works badly with
So I'd rather be conservative here.
Note that the Haskell folks have managed to evolve a language in which python-like spacing can be used to mark the extent of discrete code chunks, but so can traditional braces.
I admit Haskell syntax is much better than Python's. But I am not yet sure if it can be applied to Ruby.
imho: indentation should not define semantic;
Agreed.
suggestion: make 'end' optional if code block contains only one statement;
I'm not sure if we can define syntax for above suggestion.
while cond
puts a
puts b # delimit by indentation or else??
or maybe
while cond: puts a # should be in same line
I admit Haskell syntax is much better than Python's.
Matz, you must be joking... Python is much easier to read than Haskell.
To rephrase, "Haskell INDENTATION SYNTAX is much better than Python's". Clear?
What do you think about OPTIONAL block indendation in Ruby?
I am not positive for general block-by-indentation idea. If one REALLY loves the idea, Python always waits for you.
But I sometime want "end"-less single line structure (in normal order), e.g.
if foo then bar # pseudo syntax; you may require delimiters
not
bar if foo
especially when I write very small code chunk. Not knowing what syntax it should be.
imho: we need special terminator anyway, now it is 'end', could be another; suggestion: introduce ';;' terminator for 'implicit blocks (not started with class/module/def/do/begin), ie:
For your information, 1.9 once had exact same syntax you've proposed for a short while. I have a time machine. The idea was abandoned since it caused serious unreadability.