前不久,看了知乎上的一个问题,蛮有意思的,是关于程序员的代码量,有兴趣的朋友可以看一下这篇帖子《程序员代码量过20万行,是一种什么体验?》
虽然写代码不属于我的工作范畴,最多只是下班后的一种消遣,但是我还是挺好奇这一年来我到底写了多少代码。
接下来就来聊一聊,如何通过写脚本来统计自己的代码量。
首先,在计算代码量的过程中,注释行不应该算在代码量中。那么,就先来聊一聊Matlab中注释的那些事。
相信接触过Matlab脚本的朋友都知道,如果我想对一行命令或是一段命令进行注释时,会写一个%,然后在百分号后面写下注释,比如:
其中第一行并不属于代码行,而第二行属于代码行。因此在判断是否为有效代码行时的一个标注就是,每一行的第一个非空格字符是否为百分号。
在这里说一个关于注释的题外话,选取几行代码,按键ctrl + R,所选行就会变成注释,然后按键ctrl + T,所选注释就会减少一个百分号。
除了上述这种注释的方法之外,还有另外两种注释的方式:
一种是使用两个连续的百分号,正如下面这幅图所展示的,鼠标所在模块颜色会加深,通过这种形式的注释,代码层次感更强,更有助于代码的管理。
判断这种注释形式的逻辑与第一种相同,都是去判断每一行的第一个非空字符是否为百分号
另一种方式是通过%{与%}将一整段代码变成注释。判断这种注释的逻辑是,判断该行非空字符串是否为%{或%}。这其中可以参考的函数为strcmp函数。
除了注释行会影响代码量之外,还有续行符也会影响。关于续行符,通过一个简单的例子来说明:
顾名思义,通过续行符,能将一行代码多次换行来写,以避免单行代码过长,不便阅读的情况。判断一行代码是否有续行符的逻辑也非常简单,去判断每一行的末三位字符串是否为续行符,同样可使用的函数为strcmp。
3. 读取一个文件夹下所有.m文件
在理清了代码量的影响因素之后,就可以着手开始写脚本了。
在开发一个工具的过程中,有一些代码会被大量的重复使用,因此,这部分代码会单独作为一个function函数文件,通过主脚本调用的形式进行使用。这就意味着对于一个工具,存在多个.m文件。
为了避免人为手动的去累加每个.m文件的代码量,在这里建议通过脚本的形式去读取该工具所在文件夹下所有的.m文件。对此,可以考虑使用以下的函数:
然后通过一个for循环,例遍每一个.m文件,而在循环过程中,以读取txt文件的形式去读取每一个.m文件,并且以.m文件中的行数为导向,例遍每一行,结合之前两点所介绍的,去判断每一行是否为注释行或者是否存在续行符,计算该.m文件最终的有效代码量
以上就是统计代码量的主要逻辑,接下来看一下,今年我所写的几个主要的小工具的代码量
当初写这个工具,纯属自己太懒,不想自己动手去改Simulink模型,结果这工具,一写就是两个月。这个工具目前仍然在开发中,正如先前所言,我正在开发Learn Mode。此后,我将会陆续开发仿真功能(Simulation),数据库管理功能(Database),以及仿真数据分析功能(Analyse)。
说来实在是惭愧,本来说好的要尽快通过公众号上线的,但是我懒。。。请有需求的朋友耐心等耐,我会加把劲的
最初写完这个工具之后,真的挺兴奋的,因为解决了几个技术难题,包括Word报告的自动生成,雷达图的分析。不过这个工具出来之后,反响并不尽如人意,为此那个礼拜,我尤其的沮丧。不过很感谢有这个机会来开发这个工具,这个工具是我在技术点上收获最多的一个工具。
3. 曲线原始数据获取工具
当初想写这个工具,是因为在网上找了一张锂离子电池的电压电量的曲线图,想扒原始数据下来做仿真,于是就有了这个工具。其中可再开发的点还是有挺多的,比如发动机、电机的一些特性图。
除此以外,包括动图制作工具,dcm文件读取标定量,Simulink模型加密工具,网络爬虫等,2017年用MATLAB一共写了9672行代码,老实说,离专业的程序员还差好几万行代码量的距离。
如果你有兴趣,欢迎关注我的微信公众号"打浦桥程序员",谢谢!
本文写作初衷:有个可爱的学妹问我
在看到一个算法编程时的步骤是什么
,然而作为伪大神的我,感觉并不知道怎么回答,感觉我编程就俩字死磕,错了咋办?再来一遍!不行咋办?换个写法试试!还不行?百度!不过既然人家诚心诚意的问了 o( ̄▽ ̄)o,还是说点建设性的经验。
- 算法是处理解决问题的思路及办法,程序语言是按照一定语法把算法表达来。
要实现的这个算法网上能搜到大量的资料,比如算法的思想是什么,使用这个算法的例子(翻书太慢,不够丰富,不推荐)。
算法的核心是解决问题的思路和方法,所弄明白一个算法的思路是非常有必要的(当然对于某些教材上的算法给出的步骤详细的不能再详细,不知道思路比着步骤也能编,这里不考虑)。
在用遗传算法解决问题时:
,比较多见的是百度百科,CSND博客,博客园,知乎,脚本之家的内容,也是我重点关注的搜索结果。前三者的内容相对比较系统,可以从中掌握这个算法的由来,思想,一般步骤。知乎大神的回答一般比较深入浅出,或者站在一个比较高的高度耳目一新,脚本之家给出的代码比较实用,百度知道一些论坛智库里面也会有一些有价值的回答,但是没有前面几个的思想有深度。
这里从百度百科的结果看思想:
理解好这个介绍就完成了一大步(因为具体问题的具体实现不能照搬,只有思想是通用的):从这里理解了遗传算法就是仿真生物种群优胜劣汰的过程,适者生存,不适者淘汰。并且知道了这个算法的解决问题一般步骤是编码,产生初代种群,迭代演化(演化要计算个体适应度,交叉,变异,产生新的个体)
此外还需要理解每个过程都需要实现什么功能:
这里看得出整个算法的关键是构造一个迭代(不懂迭代就理解维循环),迭代的每一步需要计算种群中每个个体的适应度,优胜劣汰种群中的个体,种群中交叉运算,变异运算(是为了生成新的可行解,为寻找到初始种群里之外更好可行解提供了可能)得到新的种群
看懂了思想,知道了每步是干啥的,就可以联系我们要解决的问题思考(思考的方式大致就是要解决的问题有什么?可以对应到算法的那一部分上?这样对应后其他部分要怎么实现?):
参考另一篇博客,基本功熟练,才能看到问题有想法思路(能力决定思维)
比如针对这次数学建模第三轮训练——下料问题,假设建立了这样的模型:
怎么应用约束条件,是直接根绝约束条件生成可行解,还是随机生成后判断是否满足约束?前者设计困难,后者效率可能非常低下。
我对这个算法有一个问题:
我需要将代码翻译成Python,然后我完成了下一步:
当我执行de Python代码时,要花很长时间来计算de xor,我认为问题是
是一个矩阵,这需要很长时间来计算。问题是什么?在
此算法的伪代码是下一个:
我的问题是:为什么我的python代码需要很长时间才能执行?怎么了?我认为问题出在
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。