Ruby语言介绍(一)——Ruby风格指南

开始时间:2022年5月18日13:19:32

预期目标:学会ruby编程基本逻辑。为之后的进一步工作打好基础。

遵循格式仍旧为

主题:x

阐述:y

主题:源代码排版

阐述:曾经有一句名言说:所有风格都有仇有难读,自己的除外。

如果将自己的除外这些字眼拿掉,这句话也许是对的。

谈到Ruby的排版格式,采用UTF-8为源文件的编码。

每个缩排层级使用两个空格,不使用制表符。

使用Unix风格的换行符。如果使用git,使用以下命令确保项目无忧

git config --global core.autocrlf true

不要使用;隔开语句和表达式,一行一条语句

对于没有主体的类,倾向使用单行定义。

定义方法时,避免单行写法。尽管这种写法有时颇为普遍。但其略显古怪的定义语法容易使人犯错。无论如何,至少保证单行写法的方法不应该拥有一个以上的表达式。

这个规则的一个例外是空方法。

操作符前后适当地添加空格,在逗号,、冒号:、以及分号;之后,尽管ruby解释器会忽略空格,但适量的空格可以增强代码的可读性。

唯一的例外是使用指数操作符时(、【之后,】)之前不要添加任何空格。在{前后,}之前添加空格。

{和}需要额外说明,是因为它们可以同时用在区块、哈希字面及字符串插值中。

对于哈希字面量,有两种可被接受的风格。第一种更具可读性,第二种风格的优点是,在视觉上使得区块与哈希字面量有所区分。无论选择哪种风格,都必须确保使用时的连贯性。

对于插值表达式,括号内两端不要有空格。

!之后,不要添加任何空格。

范围的字面量语法中,不要添加任何空格。

when与case编排在同一层级,一种已经被确立的风格。

当将一个条件表达式的结果赋值给一个变量时,保持分支缩排在同一层级。

在各个方法定义之间添加空行,并将方法分成若干合乎逻辑的段落。

在各个段落之间,使用一个空行分隔。

在属性修饰器之后,使用一个空行分隔。

在不同所缩进词之间,使用不同 的空行分隔。

避免在方法调用的最后一个参数之后添加逗号,尤其当其参数没有分布在同一行时。

当给参数的方法赋予同一默认值时,在=后添加空格。

使用统一风格进行链式方法调用。

当构建数组时,应当保持对齐。

使用_语法改善大数的数值字面量的可读性。

当需要前缀标志进制时,0o表示八进制,0x标志十六进制,0b标志二进制。十进制数值无需前缀标志。

不要在注释与def之间添加空行。

将单行长度控制在80隔字符以内。

文件以空白行结束。

不要使用区块注释,他们不能被空白字符引导,且不如常规注释容易辨认。

主题:语法

阐述:使用::引用常量(包括类与模块)与狗仔妻。不要使用::调用方法。

使用def定义方法时,如果有参数则使用括号。如果无参数则省略括号。

方法调用应当使用括号包裹参数,尤其是第一个参数以(开头时。

但在下述情况下可以使用。但是在下述情况中可以省略括号:

无参数调用;内部DSL的组成部分;具有关键字特性的方法。

定义可选参数时,将可选参数防止在参数列表尾部。

定义变量时,避免并行赋值。

除非必要,否则避免在并行赋值时使用单字符的_变量。

永远不是用for,除非你知道为什么。

永远不要再if/unless中使用then。

在多行if/unless中,总是把条件表达式与if/unless放在同一行。

倾向于使用三元操作符(?:),而不是if/then/else/end结构。前者更为简练且常见。

三元操作符的每个分支只写一个表达式。即不要嵌套三元操作符。嵌套情况请使用if/else结构。

永远不要使用if x; ...。使用三元操作符来替代。

利用if与case是表达式这个特性。

避免使用!!

永远不要使用and与or表达式,用&&与||替代。

避免在多行区块中使用if/unless修饰语法。

避免使用嵌套if/unless/while/until修饰语法,适当情况下,使用&&与||来替代。

对于否定条件,请昂使用unless而不是if。

不要使用unless和else的组合。将他们改写成肯定条件。

不要使用括号包裹流程控制的条件表达式。

对于单行主体,倾向于使用while/until修饰语法。

对于否定条件,倾向于使用until而不是while。

对于无限循环,使用kernel#loop而不是while/until

对于后置条件循环语句,倾向使用kernel#loop与break的组合。而不是begin/end/until或begin/end/while。

对于可选参数的哈希,省略其外围的花括号。

对于DSL内部方法的调用,同时省略其外围的花括号与圆括号。

当被调用方法是当前区块中唯一操作时,倾向于使用剪短的传参语法。

对于单行主体,倾向使用{...}而不是do...end。对于多行主体,避免使用{...}。

优先考虑使用显式区块参数,以避免某些情况下通过创建区块的方法来传递参数给其他区块。此规则对性能有所影响。因为区块会被转换为proc对象。

避免在不需要进行流程控制的时候试用return。

避免在不需要的时候使用self。

避免局部变量蒙蔽方法调用。除非他们有相同的效果。

不要在条件表达式中使用=的返回值,除非复制语句包裹在括号之中。这种管用法被称作条件表达式的安全赋值。

优先考虑简短的自我赋值语法。

当变量尚未初始化时,使用||=对齐进行初始化。

不要用||=对布尔变量进行初始化。

使用&&=预先检查变量是否存在,如果存在,则做相应的动作。

使用==就不要使用更加严格的eql?,其在实践中很少使用。

运行ruy解释器时,总是开启-w选项来。如果忘记了某个重要的规则,则会收到提示。

对于单行区块,使用新的lambda字面量定义语法。对于多行区块,使用lambda定义语法。

定义lambda方法时,如果有参数则使用括号。

定义lambda方法时,如果无参数则省略括号。

倾向使用proc而不是proc.new

对于lambda方法或代码块,倾向使用proc.call(),而不是proc[]或proc.()

使用stdout/$stderr/$stdin而不是STDOUT/STDERR/STDIN。因为后者是常量,解释器会发出警告。

倾向使用sprintf或其别名format而不是灰色的string#%方法

倾向于使用Array#join而不是相当晦涩的带参数字符的Array#方法。

当你希望处理的变量类型是数组,但不太确定其是否真的是数组时,通过使用Array()来替代显式的数组类型检查与转换。

通过使用范围或comparable#between?来替代复杂的比较逻辑。

倾向使用谓词方法而不是==操作符,但数值比较除外。

不做显式的non-nil检查,除非检查对象是布尔变量。

避免使用BEGIN区块,使用kernel#at_exit来替代。

避免使用flip-flops操作符。

流程控制中,避免使用嵌套条件。

倾向使用防御从句进行非法数据断言。防御从句是指处于方法顶部的条件语句。其能尽早地退出方法。

循环中,倾向使用next而不是条件区块。

倾向使用map而不是collect,find而不是delete。select而不是find_all。reduce而不是inject以及size而不是lengthy。这不是一个硬性要求,如果使用别名可以增强可读性,使用它也没关系。

主题:命名

阐述:标志符使用英文命名。

符号、方法、变量使用蛇底式小写。

给符号、方法、变量命名时,避免分隔字母与数字。

类与模块使用驼峰式大小写。

文件名使用蛇底式小写。

主题;注释

阐述:良好的代码自身就是最佳文档。当你要添加一注释时,扪心自问,如何改善代码让它不要注释?

编写让人一目了然的代码然后徐略这一届的其他部分,。

使用英文编写注释。

签到#与注释文本之间增加至少一个空格。

注释超过一个单词时,句首字母应当大写。并在语句停顿或结尾处使用标点符号。

主题:注解

阐述:注解应当直接写在相关代码执行哪行。

注解关键字后面,跟着一个冒号及空格,接着是描述问题的文本。

主题:类与模块

阐述:在类定义中,使用一致的结构。

在混入多个模块时,倾向于使用多行语法。

如果嵌套类数目较多,进而导致外围类定义较长,则将它们从外围类中提取出来,分别放置在单独的都可以嵌套类命名的文件中,并将文件归类至以外围类命名的文件夹下。

定义只有类方法的数据类型时,倾向使用模块而不是类,只有当需要实例化时才使用类。

当你向将模块的实例方法改成类方法时,倾向使用module_function而不是extend_sel

主题:异常

阐述:杜宇㕈处理,倾向使用raise而不是fail

不要抑制异常

避免使用rescue修饰语法

不予奥将异常处理作为流程控制使用

避免补货Exception。这种做法会同事将信号与exit方法困住。

把较具体的异常放在处理链的上层。不然他们永远不会被执行。

主题:集合

阐述:对于数组与哈希,倾向于使用字面量方语法来构建实例。

创建一组元素为单词的数组时,倾向使用%w而不是【】。

主题:元编程

阐述:避免无谓的元编程。

当编写程序库时,不要使核心类混乱。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王辞夜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值