我的工程实践为《智能wifi无线通信系统的分析与设计》,由于工程偏向硬件,所以找了树莓派机器人相关的源码,包括andriod控制端和wifi模块的设计。
如图为目录结构。
1.android.java 实现Android与树莓派的无线通信,指令下发以及身份识别等工作。
2.pysocket.py 树莓派配置AP热点,实时上传视频流到固定的网址。
3.README是项目的说明文件
4.sensor.py 传感器数据传到安卓客户端
5.shipin.py 实现视频实时显示
如图为类名定义和函数定义,均符合命名规范。
如图为socket连接,注释简洁明了。
此段为python代码,树莓派配置AP热点,实时上传视频流到固定的网址。
如下介绍python代码的风格规范:
代码规范:
1 .缩进:4个空格实现缩进,尽量不使用Tab,禁止混用Tab和空格
2.行:每行最大长度不超过79,换行可以使用反斜杠(\)。最好使用圆括号将换行内容括起来,不建议使用“;”
3.导入:
imports 仅仅用做包和模块的导入,包的导入每个尽量独占一行
推荐使用绝对导入,标准库代码应总是使用绝对导入。在包结构比较复杂时,可以使用相对导入。
4.注释:
行注释:行注释和代码声明间至少间隔两个空格。
块注释:同等级别的一块代码的注释,块注释内每行注释以 # 开头,内部注释段落之间使用以 # 开头的空行注释隔开。
避免无谓的注释
5.命名:
类名:类名通常使用驼峰式命名习惯,使用驼峰式时,缩写全部大写,例如:HTTPServerError 好于 HttpServerError。
函数与方法参数:实例方法第一个入参一定要是 self。类方法第一个入参一定要是 cls。如果函数入参名和保留关键字冲突,则后缀下划线好过缩写或者糟糕的拼写。
常量: 常量一般定义在模块级别。命名风格如:MAX_OVERFLOW 或 TOTAL 。
公共和内部接口:模块应该使用 __all__ 属性明确声明公共 API 名,如果 __all__ 为空,则表明模块没有公共 API。尽管使用了 __all__ 属性,内部接口仍然需要使用前缀下划线。
6.非ASCII字符:尽量不使用非 ASCII 字符, 使用时必须使用 UTF-8 编码.即使是英文, 也不应将用户界面的文本硬编码到源代码中, 因此非 ASCII 字符应当很少被用到. 特殊情况下可以适当包含此类字符.
7.函数调用:要么一行写完函数调用, 要么在圆括号里对参数分行, 要么参数另起一行且缩进四格. 如果没有其它顾虑的话, 尽可能精简行数, 比如把多个参数适当地放在同一行里.
8.预处理指令/命名空间不使用额外缩进, 类/结构体/枚举/函数/语句使用缩进;
如图,在此项目中 行注释应该在一句代码后记注释,他将注释放到代码上方有悖规范。
也多了不少无谓的注释,不够简洁。此代码优化则要规范行代码的注释,因为是硬件模块所以在代码也需要模块化注释以下,另外删去无谓的代码。
总结同类编程语言c++在代码规范和风格的一般要求:
1.大括号使用规则:左括号前不换行;右括号后有else等代码时不换行。
2.if、for、while、switch、do等关键字与左右括号之间必须加空格;任何运算符左右必须加空格。
建议:即使if判断后只跟一个语句也要加上大括号。
原因:便于阅读;就算日后要修改if的执行语句也比较方便。
3.换行规范:单行字符数最好不超过80个字符。
第二行相对第一行缩进4个空格,其余行与第二行对齐;运算符与下文一起换行;多个参数则在逗号后换行;小括号前不得换行。
4.在方法体内的执行语句组、变量的定义语句组、不同的业务逻辑之间或者不同的语义之间要插入空行;换而言之,具有相同语义、功能的语句要尽量放在一起。
5.当一个类有多个同名方法时,按顺序放置,便于阅读。
6.类内方法的定义顺序推荐采用:公有或保护>私有>getter、setter。
原因:公有类的调用和维护是最为重要的,首屏展示最好;保护方法虽然只是应用于子类,也可能是“模板设计模式”下的核心方法(抽象类知识点);私有方法外部一般不关心;而其余方法信息价值相对较低。