6.2 符号

我们尽量保持本书符号的一致性。 这会使阅读和编写代码更容易。 我们可以将符号定义为三个部分。

6.2.1 Julia 风格指南

首先,我们尝试遵循 Julia 风格指南 中的约定惯例。 更重要的是,要编写函数而不是脚本(也可查阅 Section 1.3)。 另外,我们使用与 Julia base/ 模块一致的命名约定,即:

同时,避免在条件语句中使用括号,即写为 if a == b 而不是 if (a == b),并且每级缩进使用 4 个空格。

6.2.2 Blue 风格指南

Blue 风格指南 在默认的 Julia 风格指南基础上增加了更多的约定。 一些规则可能听起来有点古板,但我们发现这样能提高代码的可读性。

根据风格指南,我们具体坚持:

6.2.3 我们的补充

6.2.3.1 加载符号

在不使用 REPL 时,我们更喜欢显式加载符号,即更喜欢使用 using A: foo 而不是 using A(另请查阅 JuMP Style Guide (2021))。 在此上下文中,符号表示对象的标识符。 例如,即使看起来不正常, 但本质上 DataFrameπCSV 都是符号。 在使用诸如 isdefined 这样的 Julia 方法时,我们发现了这一点:

isdefined(Main, :π)
true

接下来使用 using 时会变得显式,另外更喜欢使用 using A: foo 而不是 import A: foo ,因为后者更容易意外地扩展 foo。 注意这不仅仅是针对 Julia 的建议: Python 也不鼓励通过 from <module> import * 隐式加载符号 (van Rossum et al., 2001)

显式加载的重要性与语义版本控制有关。 结合语义版本控制 (http://semver.org) 后,版本号将关系到包是否存在 破坏性 更新。 例如,当包 A 的版本号从 0.2.2 变化到 0.2.3,其进行的是非破坏性更新。 在这种非破坏性更新下,你不用担心你的包会产生破坏,即抛出错误或改变行为。 如果包 A0.2 变化到 1.0, 这意味着破坏性更新,然后你预计需要对你的包做一些修改,然后才能使包 A 再次正常运行。 然而,导出额外符号视为非破坏性更新。 所以,在隐式加载符号时, 非破坏性更新会破坏你的包。 这就是为什么显式加载符号是一种很好的风格实践。



CC BY-NC-SA 4.0 Jose Storopoli, Rik Huijzer, Lazaro Alonso, 刘贵欣 (中文翻译), 田俊 (中文审校)