探讨贴:如何快速高效读懂源码.
本帖最后由 执骨哟 于 2020-9-28 16:34 编辑首先,很感谢明经的各位大神们,谢谢大神们分享了这么多实用的源码案例,也指导了很多像我一样的小白.帮助我们度过重重阻碍,撰写出属于自己的源码.在明经中有很多很多的源码,有的是单独的功能,有的是多个功能的合集,我在学习的过程中,陆陆续续下载了近百种不同功能的源码,但是在阅读的过程中,发现想要理解并贯通这些源码非常困难,需要逐行逐句的去记忆各函数的功能,去理解大神们撰写这些代码的思路,但是这个过程是很耗时且很耗心力的,对与一些"急于求成"的小白来说更是"男上加男",因此特意发了这则探讨贴,想请教一下各位,有什么好的方法能快速的读懂源码的含义和思路?如何能在多个功能交杂的源码中找到自己想要的源码段落?
这么描述比较空洞,这里举个例子以供参考,请各位大神赐教(源码均来源于明经,冒昧摘用还请见谅):
2048小游戏的源码中是由多个单独的功能组成的(每一个主函数对应一个功能),如果在没有注释的情况下,怎么快熟了解各个主函数的功能 从中摘取自己需要的部分.
本帖最后由 wyl219 于 2020-9-29 08:49 编辑
说实话没有太好的捷径,初学看源码并不是太好的学习方法.
我建议的学习流程(非专业向,仅为了解决自己的工作上的问题):
0.一定的编称基础,lisp的语法很简单,但是学习资料不多,可以从python,C语言之类的入门,学习基础的编程概念,最起码要知道什么是变量,运算符,函数,返回值,循环,条件判断等有基础的概念.其实没概念也能死记.但是遇到有的常识的问题反倒会一头雾水.
1.准备资料,<AutoLisp葵花宝典A><dxf参考手册><命令与系统变量>,以及cad的帮助文件等等,前面几个论坛里都有,帮助文件可以下一个离线版的cad2016的帮助文件.
2.下载一个飞诗lispedit,有代码提示和常用的系统函数解释,能减少很多翻资料的时间.
3.看葵花宝典,了解所有函数,浏览一遍Autolisp部分,对函数有个印象就行了.Vlisp不用着急看.
4.写一些自己常用的小程序,熟悉常用函数,学编程要么系统化学习,自学的话,写代码比看代码入门快.
刚开始自己写代码的时候可以随意一些,不用太高深的技术,能用到的系统函数也就十几个,有什么问题土办法解决不了了,可以上论坛搜一下,说不定有很简单的解决办法.
5.优化自己的代码,自己写一些通用的小函数,写多了以后就会发现,很多时候用foreach代替repeat,mapcar代替foreach会更舒服一些.
如果编程有比较好基础,就知道函数(轮子)越小越好,一个函数只解决一个问题,复用起来更方便.编程的经验的积累基本等同于轮子的积累.
6.学习一些进阶的技术,例如lambda,grread,mapcar,apply,eval,*error*等,这时候可以有意的接触一些Vlisp函数,大多时候Vlisp比Alisp更好用,效率更高.
7.有了以上的积累以后,就可以看别的人源码了,但是建议从api库开始看,例如晓东的lispapi(晓东的lisp函数库有源码,XDRX函数库是C++写的,没源码),还有这个:https://gitee.com/vicwjb/abfl.
看函数库是为了学技术,一个完整的程序会有大量的辅助功能,例如获取输入等,关键函数和关键步骤被迫隐藏在其中.而函数库往往仅有一些关键步骤,短短的十来行,很容易找到自己需要的部分.
8.这时候可以看一些完整的源码了,看大佬源码主要不是为了看程序,而是看思路看流程.
其实到了第四个阶段就能解决自己遇到的大部分问题了,到这个阶段也就知道该怎么提问了,高效的提问不是解决一个功能,而是解决一个实际的问题.就像你疑惑的"找到一段提取文字到txt的源码,在定义导出路径的时候,如何从指定路径变成自选路径.",不如直接问怎么通过lisp获取路径,前面那个问题太大了,想解释清楚很麻烦,所以很多人懒的解释,后一个问题,让我回答就是试试getfiled函数.
另一个"提取区域内文字的时候,如何筛选同位置的重叠文字不导出(因为会重复导出两个一模一样的值)",这个问题就更大了,涉及到获取,判断,循环等等,论坛又不允许发伪代码,又没什么挑战性,自然很少有人愿意回答.不如直接问怎么判断文字是否重叠,那就是看组码10,相同,或者距离小于一定范围就可以认为重叠.
怎么看源码呢,根据程序流程从头往下看,善用断点和调试(cad的ide有单步调试),不太容易理解的地方做好注释.真想快速定位你需要修改的地方,自然你得知道这里是应该做什么,才能有目的的搜索或者筛选,不然车都没摸过就想修发动机?也太看不起汽车了吧:lol.
放弃吧:lol从简单的代码一点一点研究 本帖最后由 执骨哟 于 2020-9-28 17:17 编辑
gaics 发表于 2020-9-28 17:05
放弃吧从简单的代码一点一点研究
一直在学习研究中,提出这个问题是因为近期在研究一些功能的变形时,从网上下载了一些同类型功能的源码,理解的过程很头疼,所以想看看各位大神是如何去理解他人源码的.因为有一些问题不太好提问,比如:
1.找到一段提取文字到txt的源码,在定义导出路径的时候,如何从指定路径变成自选路径.
2.提取区域内文字的时候,如何筛选同位置的重叠文字不导出(因为会重复导出两个一模一样的值)
类似的问题有很多,我相信有很多跟我一样的初学者,都是有需求了才开始学习如何写源码,是抱着完成这个功能的目的而去找的相关资料,因此在网上搜索关键词的时候,只能找到相近功能的,或多或少需要去改动源码,但是又因不是系统学习,可能只理解了几句或几段,想要求助又没有对象,单独的去麻烦某个人也不好,求人不如求己,所以想看看有没有好的方法去阅读理解他人的源码
执骨哟 发表于 2020-9-28 17:08
一直在学习研究中,提出这个问题是因为近期在研究一些功能的变形时,从网上下载了一些同类型功能的源码,理 ...
嗯,你有具体的目标可以有针对性的提问。 本帖最后由 hhh454 于 2020-9-29 23:58 编辑
可以从CAD的命令出发,command,了解CAD命令运行的过程,再根据你的工作,你想要的实现什么,你工作运用CAD的过程,你肯定是非常精通了,你从用CAD的内置命令,换个方法思路,要是能输入一个命令,就能实现很多的command,基本你就能掌握lisp了,再结合前辈们写的程序,今天加一点,明天加一点,后天你就能写一个对自己有用的代码了,浅见
可以看看我这个帖子,对照练习一下,坚持写就对了
foreach的故事
http://bbs.mjtd.com/forum.php?mo ... 2258&fromuid=363233
(出处: 明经CAD社区)
foreach的故事
楼主如果是想跟武林小说一样,幻想突然打通了经脉,成为绝世高手,那么作为lisp运用和编程6年的人劝告你,不要有这个幻想,都是一步一步基础打下来的。 我刚开始试着做适用于自己工作的程序时是在网上找到相近功能的源码,然后复制到程序中,从上往下在"Autolisp函数全集""AutoLisp葵花宝典""LISP通用函数学习手册"这三份文件中找到函数名,然后去试着修改源码中的数值,改一个值就在CAD中执行一次,去对比变化,记下每一个值代表的含义,然后一点点使这个功能符合我的需求,就这样一点点的填充,前不久刚完成能满足工作基本需求的程序.
我的想法就是继续完善和优化这个程序,但是随着功能的升级,所需的代码已经不是一点点理解和测试能满足得了,因此想到在明经发帖求助,想了解一下大家的学习经验,看能不能从中得到启发.
很感谢各位大神的回复,从中学习到了很多,不止是lisp的学习经验,更多的是态度和思维模式的成长
我的语言表达能力不是很强,所以有点啰嗦,整段的逻辑有点混乱,希望不会带来误解,再次拜谢各位大佬! 执骨哟 发表于 2020-9-30 14:32
我刚开始试着做适用于自己工作的程序时是在网上找到相近功能的源码,然后复制到程序中,从上往下在"Autolis ...
抛出你遇到的问题和需求,逐个攻克。
所谓经验都是大家在实战中摸索出来的,别人告诉你的不可能面面俱到,也不是一教就会的。 没有sdk文档,就算给你cad的源码,你也很难定位出自己想要的。稍微大一点的源码都难读懂
页:
[1]
2