引领先锋|7种过时的代码风格


引领先锋|7种过时的代码风格
本文插图

> Picture by geralt on Pixabay
如果您已经进行了十多年的编码 , 那么您可能会拥有一些坚定的首选样式 , 您会坚定地相信这些样式 , 并坚持自己的观点来捍卫它们直到最后 。
下面是我曾经坚定支持过的一些人 , 但现在我认为我必须放手 。
规则:要区分成员变量和局部变量 , 请使用以下任一方法
· 使用匈牙利表示法 , 即mMemberVariable与localVariable 。其中m代表成员变量 。
· 这个的使用 this.member变量与局部变量 。
原因是当我们阅读代码时 , 可以很容易地知道它们是成员变量还是局部变量 , 而无需查看它们的声明 。
class MyClass {var mMember = "member"fun doSomething() {val local = "local"println(this.mMember)println(local)}}如果是现代IDE , 则不再需要这种基于文本的区分 。参见下面的相同代码 , 它将自动为它们涂上不同的颜色 。
引领先锋|7种过时的代码风格
本文插图

> Different coloring of variables
规则:一个类中的所有变量和函数都必须明确声明为public , private或protected 。不要采用默认状态 。
· 需要明确说明类型 , 例如 字符串或整数

· 需要明确说明它是私有的还是公共的
public class MyClass {public val publicVariable: String = "100"private fun privateFunction() {}public fun publicFunction() {}}这是为了避免有人错误地访问这些函数或变量 , 即 , 如果未声明函数 , 则用户可能不知道默认状态(如果是公共状态或私有状态) 。
使用现代IDE , 我们无需明确声明默认值 , 例如 对于公开的Kotlin 。用户不会无意中误认为默认状态 , 因为自动完成只会显示公共方法 。因此 , 不太可能有人会混淆默认状态 。
引领先锋|7种过时的代码风格
本文插图

> The private Function won't appear on auto-complete
如果有任何错误用法(例如访问私有功能) , 它不会仅在编译时出现错误 。立即出现错误并显示一条清晰消息 。
规则:所有变量均应使用其类型声明 , 即使从已为其赋值的值很明显即可 , 例如 需要明确说明类型 , 例如 字符串或整数
public class MyClass {public val publicVariable: String = "100"private fun privateFunction() {}public fun publicFunction() {}}这是为了避免有人错误地访问这些功能或变量 , 例如 变量分配给错误的类型 , 并导致编译错误 。

如果使用现代编程语言 , 则在可推断且明确的情况下 , 无需显式声明变量的类型 。这称为类型推断 。如今 , 它可以多种现代语言提供 。
如果有任何错误的分配等 , 它不会仅在编译时出错 。立即出现错误并显示一条清晰消息 。
引领先锋|7种过时的代码风格
本文插图

> 10 + MyClass().publicVairable will error out immediately as Int and String can't be added together
规则:所有应为私有的并通过getter和setter访问的成员变量适用于需要在外部设置或获取的成员变量 。
public class MyClass{private var member = "member";public fun getMember(): String {return member;}public fun setMember(value: String) {member = value;}}如果我们将其公开以进行设置和获取 , 则在设置或获取它们时需要执行一些操作时 , 我们需要更改所有访问它的代码 。
因此 , 如果我们限制使用getter和setter , 则可以控制它 。
class MyClass{private var member = "member";fun getMember(): String {println("Setting member") return member;}fun setMember(value: String) {println("Setting member with $value") member = value;}}
在现代语言(例如Kotlin)中 , 我们可以在需要时轻松地将变量getter或setter插入变量 , 而无需明确地具有两个仅用于设置和获取的函数 。
因此 , 我们可以按以下方式进行编码 , 而无需在类中添加附加的setter和getter函数 。
class MyClass { var member = "member"}
当我们需要对setter或getter进行操作时 , 我们可以轻松地添加它们 , 而无需更改访问成员的代码 。
class MyClass {var member = "member"get(): String {println("Setting member")return field}set(value: String) {println("Setting member with $value")field = value}}规则:所有大括号应在同一列对齐 , 以便我们可以轻松找到它们 , 例如
class MyClass {private var member: String = "member"fun doSomething(state: Boolean){val local = "local"println(member)println(local)}}原因是通过垂直查看 , 我们可以轻松找到它们的对 , 从而知道函数的作用范围在哪里 。
使用新的IDE , 只要代码看起来很整洁 , 我们就不再需要在同一列上对齐开始和结束大括号 。
class MyClass {private var member: String = "member"fun doSomething(state: Boolean) {val local = "local"println(member)println(local)}}
这是因为我们可以轻松折叠或展开它们 , 如下所示 。
引领先锋|7种过时的代码风格
本文插图

> Easily expand or collapse code scope
要了解有关大括号的更多信息 , 请查看以下内容 。
规则:对所有缩进使用制表符 , 而不要使用空格
这减少了所需的键入次数 。例如 下面显示了使用空格时 , 必须多次键入
引领先锋|7种过时的代码风格
本文插图

> The old text editor, one need to type every space
使用IDE , 它将为我们自动缩进适当数量的空格 。拥有空格还将确保所有代码在整个用户环境中看起来都一致 。
引领先锋|7种过时的代码风格
本文插图

> The modern IDE, till perform auto-indentation of spaces
规则:在结束代码语句时 , 必须使用分号 。
这是必需的 , 因为从前的编程语言(包括C和C ++ , Java等)使解析器识别它已经结束 。部分原因是因为我们有80列 , 因此当需要为一条语句编写更多代码时 , 我们可以为一条语句编写多行代码 。
使用新的现代语言(例如Kotlin) , 不再需要编写长语句(例如 , 我们可以将变量命名为较短 , 缩进的缩进形式) 。

即使我们需要编写更长的语句 , 我们也不再受限于8列(尽管这不是一个好习惯) 。此外 , 这几天我们的显示器更长longer
引领先锋|7种过时的代码风格
本文插图

> Photo by Fotis Fotopoulos on Unsplash
因此 , 如果一种语言不允许使用分号 , 那就去吧!
要进一步详细说明项目4–7 , 您可以阅读以下内容 。
通过改变对上述7种编码样式的信念 , 我对代码进行了如下更改
引领先锋|7种过时的代码风格
本文插图

世界在不断变化 。过去的要求可能不再适用 。借助技术和工具 , 我们应该始终重新评估我们曾经拥有的规则 , 并继续前进 。
感觉这么年轻 。看看编码行业是如何变化的!
(本文翻译自Elye的文章《The 7 Coding Styles That Are Dated》 , 参考:)
【引领先锋|7种过时的代码风格】


    推荐阅读