Arduino和Raspberry Pi初学者?这是编写干净代码的方法

当您开始越来越多地了解软件开发时,经常会遇到“干净的代码"这一短语。以最纯粹的形式,这是易于他人阅读的代码。它具有表现力和美观性,您可以通过查看轻松辨别其意图。

编写清晰的代码说起来容易做起来难。

是使用Python的Arduino应用程序,或者您甚至是Web开发人员,因此有一些有用的提示可以使您的代码更容易被他人阅读。 这是您需要了解的内容

也许第一个也是最明显的提示是,与您的工作保持一致。一个很好的例子就是在命名函数时遵循相同的模式。您应该选择一个命名约定并坚持使用。

那么,您应该使用哪种命名约定?

那么,如果您正在为Raspberry Pi编写Python,答案是明确。 PEP-8标准(良好,清晰的Python代码的晴雨表)说,变量名应小写,每个单词之间用下划线分隔。例如: gpio_input moisture_sensor_reading 。在这里,单词之间没有任何分隔符,但是每个单词的第一个字母都大写,除了第一个单词。例如: buttonPressed temperatureReading

当然,还有其他样式的变量命名。以上只是官方样式指南的建议。但是无论您选择什么,都要确保坚持使用,并在整个程序中使用相同的命名约定。

注释是解释程序功能的好方法。您可以说明每个函数的功能,每个变量用您自己的词表示。这样一来,第三方可以很容易地阅读您的代码,同时也使您的代码更易于维护,因为您最终会更好地理解它。

但是,如果您不以这种方式编写注释,

在编写注释时,除了如何操作,还应尝试解释代码的原因。尝试使意图非常清楚,并说出一些代码本身无法说明的内容。因此,而不是:

// update reading

考虑写作:

// Update the number of times the laser beam has been broken, before tweeting it out

请确保您写出完整的,语法正确的句子。此外,Python的PEP-8标准规定您应始终以英语编写注释和变量。如果您决定将代码发布为开源代码,这将使其他人更容易与您合作,因为英语几乎是软件开发的通用语言。

Arduino风格指南走得更远,并且说您必须注释每个代码块,每个for循环和每个变量声明。

我个人认为这有点极端。如果您要编写冗长的表达性变量名,那么您的代码已经是自记录文件了。也就是说,请不要在您认为需要的地方添加评论。运用自己的良好判断力。

第一次学习发展时,通常会充满着极大的热情。您将阅读有关所选语言,框架或平台的所有信息。您开始遇到以前从未了解过的概念,并且都非常渴望在自己的代码中使用它们。

诸如三元运算符之类的东西,可让您浓缩“ if语句"的逻辑,例如就像这样:

int x = 5;if ( x < 10) { y = 1;{ else { y = 0;}

排成一行,就像这样:

int x = 5; int y = (x < 10) ? 1 : 0;printf("%i\n", y);

三元运算符肯定很不错,我鼓励您继续阅读。但是,当您编写易于他人阅读的代码时,最好避免使用。

Arduino风格指南还鼓励您避免使用指针,#define语句和除标准以外的数据类型:布尔值,字符,字节,整数,无符号整数,长整型,无符号的long,float,double,string,array和void。您应该避免使用像uint8_t这样的数据类型,因为这些数据类型使用较少,没有在文档中进行解释,并且也不是十分简洁。

在编写简洁的代码时,Python用户是有优势的,因为标准的Python解释器要求所有代码必须必须合理地结构化和缩进。如果您不缩进每个函数和类的声明以及条件语句,则您的程序将无法运行。

在Arduino上,没有什么可以阻止您编写非结构化,紧凑的代码。最终,这很难理解且难以维护。

但是,也没有什么可以阻止您更好地构建代码。

首先,确定要投入多少缩进。您应该明智地使用Tab键,因为每个文本编辑器对Tab的ASCII代码都有不同的对待,并且如果您与他人共享代码,则他们可能会无意间在缩进中引入不一致之处。这些不一致会破坏您的程序,尤其是当您使用对空格敏感的语言(例如CoffeeScript或Python)时。 OpenSourceHacker的这篇文章更详细地说明了为什么应避免使用Tab键。

我倾向于为每个缩进使用四个空格,但是总数取决于您。只要保持一致即可。

You can configure your IDE and text editor to treat each tab as a set number of spaces, however, allowing you to use the tab key without the risk of introducing problems. If you use Sublime Text 2, check out their official documentation. If you use Vim, just edit your .vimrc file with these lines. The Arduino editor automatically does this for you, and inserts two spaces whenever you press tab.

然后,您只需要知道代码缩进的位置即可。根据经验,在每次函数声明后以及每个 if else for, switch case 语句。

许多编辑器都可以一次缩进整个代码块。如果您使用Sublime Text 2,则可以设置热键或按键组合。否则,您可以使用默认组合,在OS X上为 Cmd + ["。在Arduino编辑器中,您可以通过在Windows和Linux上按下 Ctrl + T ,在OS X上按下 Cmd + T 来自动修复文件的缩进。

这完全取决于您的编辑器,因此阅读手册

良好软件开发的最重要口号之一是不要重复自己 ,通常简称为 DRY。

编写DRY代码非常重要,因为它可以确保程序的逻辑一致性,并允许您一次更改。并使其在全球范围内得到反映,并且您花费更少的时间一次又一次地编写相同的内容。

保持DRY的最佳方法是自由使用慷慨地使用功能 –封装

一个好的函数是简短的;重复的任务带有一个代码块,您可以一次又一次地调用它,并确保每个代码都是不同的且编写良好。 PEP-8指南对功能的长度几乎没有说什么,但是鲍勃·马丁(强烈建议)编写的“清洁代码:敏捷软件技巧手册"说“功能几乎不应超过20行"。最好是,它们比该长度还要短

函数也应该恰好可以做一件事。需要执行两件事的功能吗? 编写两个函数。

这些技巧使您可以轻松跟踪程序的流程,并在需要时对其进行最终调试。 Arduino用户还有一个额外的好处,因为他们消除了冗余,因此他们受到存储限制的严格限制。这样会导致程序更小。

软件开发的另一个重要原则是“显式优于隐式" 。这意味着您的代码乍一看应该大喊大叫。 Arduino样式指南说应避免这种事情:

if(buttonPressed){  doSomething();}

相反,您应该清楚说明正在发生的事情。而是编写如下代码:

if (buttonPressed == True){  doSomething(); }

编写干净的代码非常简单。您只需要在所做的所有事情中保持一致,避免重复并保持明确即可。请记住,干净的代码只是可读的代码。

关于该主题的阅读材料很多。一个很好的起点是Arduino教程和API样式指南,如果要为Raspberry Pi构建Python应用程序,则可以遵循PEP-8标准。如果您使用的是另一种语言(例如Tessel板上的Javascript),请查看Google以获取正式的样式指南。

如果您正在寻找有关该主题的更多学术文章,请查看Clean Code: Bob Martin撰写的《敏捷软件技巧手册》。我在本文前面提到了它,强烈建议使用它。尽管它使用Java来说明概念,但许多想法都可以传递给其他语言,例如Arduino的Python和C。

在线上还有一些精彩的博客文章说明如何编写出色的,描述性的,干净的代码。我建议您阅读Arash Arabi为Butterfly.com.au撰写的“干净,高质量的代码:如何成为更好的程序员的指南",以及Chris Reynolds为webdevstudios撰写的“编写简洁代码的基础"。 com。

虽然与干净的代码没有明确的关系,但了解使用您选择的语言最好避免使用哪些函数和库也很有帮助。例如,如果您正在学习PHP,则应避免使用“ mysql"库,而如果要使用Arduino构建物理产品,则切勿使用Delay函数。

记住,更简单的代码阅读更容易维护。另外,如果您遇到任何困难,有人可以更轻松地阅读并帮助您。

您有编写干净代码的技巧吗?我有想念吗?告诉我!在下面给我留言,让我知道。

标签: