如果你已经编码了十多年,你很可能有一些坚定的首选风格,你坚信并用你自己的观点捍卫它们到最后。下面是一些我曾经坚定支持的人,但现在我觉得我不得不放手了。1、用m或this表示成员变量规则:要区分成员变量和局部变量,可使用以下方法之一:使用匈牙利表示法,即mMemberVariable和localVariable。其中m代表成员变量。这使用带有局部变量的this.member变量。废弃原因:原因是我们在阅读代码的时候,不用看它们的声明就可以很容易的知道它们是成员变量还是局部变量。classMyClass{varmMember="member"fundoSomething(){vallocal="local"println(this.mMember)println(local)}}现在:如果它是现代IDE,则不再需要这种基于文本的区分。看下面相同的代码,它会自动给它们涂上不同的颜色。>variables2的不同着色。明确声明公共、受保护或私有规则:类中的所有变量和函数必须明确声明为公共、私有或受保护。不采用默认状态。需要明确类型,如字符串或整数需要明确类型是私有的还是公共的publicclassMyClass{publicvalpublicVariable:String="100"privatefunprivateFunction(){}publicfunpublicFunction(){}}过时的原因:这是为了避免someonemakingamistake这些函数或变量可以明确地访问,即,如果函数未声明,用户可能不知道默认状态(如果它是公共的或私有的)。现在:使用现代IDE,我们不需要显式声明默认值,例如对于暴露的Kotlin。用户不会无意中弄错默认状态,因为自动完成只会显示公共方法。因此,任何人都不太可能混淆默认状态。>TheprivateFunctionwon'tappearonauto-complete如果有任何错误的用法(例如访问私有函数),它不会只在编译时出现。错误会立即出现并显示一条明确的消息。3.总是显式声明变量类型规则:所有变量都应该声明它们的类型,即使从它们被赋值的值来看是显而易见的,例如,需要显式声明类型,如字符串或整数publicclassMyClass{publicvalpublicVariable:String="100"privateFunPrivateFunction(){}PublicFunPublicFunction(){}}作废原因:这是为了避免有人错误地访问这些函数或变量,例如变量分配了错误的类型,导致编译错误。现在:在现代编程语言中,当变量可推导且明确时,无需显式声明变量的类型。这称为类型推断。今天,它以多种现代语言提供。如果有任何错误的分配等,它不会只是在编译时出错。错误会立即发生并显示明确的消息。>10+MyClass().publicVairable会立即报错,因为Int和String不能相加4.成员变量应该始终是私有规则:所有应该私有并通过getter和setter访问的成员变量适用于那些需要被外部成员变量设置或获取。publicclassMyClass{privatevarmember="member";publicfungetMember():String{returnmember;}publicfunsetMember(value:String){member=value;}}过时的原因:如果我们公开它用于set和get,那么在set或get时他们需要做一些事情,我们需要更改访问它的所有代码。所以如果我们限制getters和setters的使用,我们是可以控制的。classMyClass{privatevarmember="成员";fungetMember():String{println("Settingmember")returnmember;}funsetMember(value:String){println("Settingmemberwith$value")member=value;}}现在:在现代语言中(例如在Kotlin中),我们可以在需要时轻松地将变量getter或setter插入到变量中,而无需显式设置和获取两个函数。因此,我们可以编写如下代码,而无需在类中添加额外的setter和getter函数。classMyClass{varmember="member"}当我们需要对setter或getter进行操作时,我们可以轻松添加它们,而无需更改访问成员的代码。classMyClass{varmember="member"get():String{println("Settingmember")returnfield}set(value:String){println("Settingmemberwith$value")field=value}}5.左右大括号应该是对齐规则:所有大括号都应该在同一列对齐,这样我们就可以很容易地找到它们,例如:classMyClass{privatevarmember:String="member"fundoSomething(state:Boolean){vallocal="local"println(member)println(local)过时的原因:原因是通过垂直观察我们可以很容易地找到它们的对,从而知道函数的作用域在哪里。现在:使用新的IDE,我们不再需要在同一列上对齐左大括号和右大括号,只要代码看起来整洁即可。classMyClass{privatevarmember:String="member"fundoSomething(state:Boolean){vallocal="local"println(member)println(local)}}这是因为我们可以轻松折叠或展开它们,如下所示。>轻松扩展或折叠代码范围要了解有关大括号的更多信息,请参阅以下内容。6.Usetabrulesforallindentation:Usetabrulesforallindentation,notspaces过时的原因:这减少了所需的打字量。例如下图显示,使用空格时,您必须多次键入>旧文本编辑器,每个空格都需要键入现在:使用IDE,它会自动为我们缩进适当数量的空格。留有空格还可以确保所有代码在用户环境中看起来一致。>现代IDE,直到执行空格的自动缩进7。使用分号结束代码声明规则:结束代码语句时,必须使用分号。过时的原因:这是必需的,因为以前的编程语言(包括C和C++、Java等)让解析器认识到它已经结束了。部分原因是因为我们有80列,所以当我们需要为一个语句写更多行时,我们可以为一个语句写多行。现在:有了新的现代语言(例如Kotlin),不再需要编写长语句(例如,我们可以用更短的缩进形式命名变量)。即使我们需要写更长的语句,我们也不再局限于8列(尽管这不是一个好的做法)。此外,这些天我们的显示器更长了>FotisFotopoulos在Unsplash上的照片所以如果一种语言不允许使用分号,那就这样吧!有关第4-7项的更详细说明,您可以阅读以下内容。通过改变我对上述7种编码风格的信念,我对我的代码进行了以下更改:世界在变化。过去的要求可能不再适用。借助技术和工具,我们应该始终重新评估我们曾经拥有的规则并继续前进。感觉很年轻。看看编码行业正在发生怎样的变化!
