在公众号聊天后台有不少伙伴问咱如何将Python代码转换成MATLAB代码、把C\C++代码转换成MATLAB代码、把Fortran代码转换成MATLAB代码,...... 总而言之就是把其他各式各样的编程语言转换为MATLAB代码。毫不夸张地说,以咱目前的编程实力,实现上述编程语言间的代码转换并不是一件难事,当然也绝非易事。值得提醒的是,咱这里所讲的代码转换并不是指的联合编程,而是native to native,也就是把一种语言所写的代码用另一种语言完整无缺的实现出来。
为了与伙伴们敞开心扉聊聊,今天咱就把自己关于如何实现不同编程语言间的自由代码转换的一点微小看法在此分享,希望给那些“迷茫”的小伙伴带去一丝丝光明。
一、了解待转换语言各自的数据类型
作为编程语言,所支持的数据类型是进行后续处理工作的基石。像整数、浮点数、逻辑值、字符与字符串这几种基础的数据类型各种编程语言里都是必备,当然在处理上有一些差别,例如C/C++等编程语言中就要求用户必须先声明数据类型,而像python等编程语言中则对声明数据类型没有那么严格的要求,可以声明也可以不声明,编译器会根据赋值自动判断。除了基础的数据类型,不同编程语言往往还会有一些自己特有的数据类型,虽是特有的,但在其他编程中也可以找到替代类型。比如Python中的Dictionary数据类型,在matlab中就没有这样的数据类型,那有没有可以替代方法呢,当然是有的,咱们可用matlab的cell或struct来替代。
当然,仅仅是清楚各自拥有的数据类型是不够的,还得需要清晰编程语言各自数据类型如何创建、读取、增删,以及编程语言关于不同数据类型强制转换的一些方法。这样,咱们就可以说是进入不同编程语言代码转换的大门了。
二、明白待转换语言是“0基”还是“1基”
这里的“基”指的是索引起始值,“0基”代表该编程语言在读取含有多个元素的数据时,其读取的第一个元素对应的索引值是0。“1基”代表该编程语言在读取含有多个元素的数据时,其读取的第一个元素对应的索引值是1。这个对于编程老手来讲,不算什么问题。但对于新手来讲,这可是个致命的死穴,一不小心就出现索引值不对的错误。如C/C++等编程语言就是属于0基的,而matlab等编程语言就是属于1基,
三、了解待转换语言各自的流程控制
了解各自的数据类型之后,下一步就该进入实战环节。作为编程语言的共有属性,顺序执行、循环控制和判断控制是基础中的基础。顺序执行没什么好讲的,就是一句代码接一句代码的执行。循环控制就是咱们常讲的循环语句,作为循环语句的经典,for语句与while语句几乎是所有编程语言都支持的,而在代码转换中的难点也往往出现在对循环语言内容的理解上。不同编程语言在循环语句的处理上都有各自的特点,如matlab中就要求循环语句结尾必须加上end,而像C/C++、Python等编程语言则是以代码块来进行区分,无需额外添加循环结束标识。除此以外,有的编程语言如C/C++、Java支持do ... while循环,Fortran等支持goto循环,这些在处理中都是需要主要的。接下来就是判断控制,即常讲的if ... else语句和switch ... case语句,这种语句在转换中是比较简单,只需要注意写法上的差异,如matlab中的if ... elseif ... else ... end,python中的if ... elif ... else, Fortran中的if ... then .. . else if ... then ... else ... end if,MATLAB中的switch() ... case ... case ... otherwise ... end,Fortran中的select case() ... case ... case ... case default ... end select。虽然这些语言形式上千奇百怪,但本质上都是一样。循环控制与判断控制及其嵌套组合构成了多姿多彩、梦幻绝伦的编程世界。
四、了解待转换代码背后的数学逻辑与算法思想
编程的目的在于解决各种各样的实际问题,不同的编程语言就如同各种交通工具,咱为了到一个地方,可以选择步行、骑自行车、骑摩托车、开轿车、坐公交、坐地铁、坐轻轨 ...,又如同不同的购物渠道,如去小卖部买、去仓买买、去超市买、去商场买、在各种线上平台买,咱目的只有一个,那就到达了目的地或者买到了自己想要的商品。孙子兵法云:“知己知彼,百战不殆;不知彼而知己,一胜一负;不知彼,不知己,每战必殆。”想要能够完美的无偏差的实现不同编程语言间的代码转换,首先就得懂待转换的代码。懂代码并不是说每个语句都能看懂就叫懂,而是要把代码背后的数学逻辑与算法思想精炼提取出来,行之有效的方法就是根据程序的执行顺序绘制程序执行流程图和精炼里面可能数学公式,并结合程序的中关键词查阅相关的算法资料,做到这一步基本上算是做到了知己。接下就是知彼,也就是目标编程语言,这里的知彼并不是很严格,甚至你完全不懂那门语言也没有任何关系。你只需要做好一、二、三里面所讲到的基础功课,照葫芦画瓢即可。
五、完成转换后务必调测
代码的调试、测试是编程必学科目。调试代码可以快速定位错误,找出问题的关键点。有的伙伴写的代码执行不报错,但是结果就是不对,那此时就该毫不犹豫地选择调试代码,看看其中到底是什么环节出了问题,而不是从头到尾一句一句核对代码。代码转换完成之后的调试应该是不能省的,经过调试无误之后,再用各种输入测试代码实战能力如何。只有经过反复调试测试之后才能保证完成了真正的100%的转换。当然,对于逻辑鲜明、代码量小的,这个过程可以省略。
六、转换过程中遇到了拦路虎怎么办?
不同编程语言之间转换最大障碍就是编程语言各自独有的函数,也就是题目中咱所讲的拦路虎。因为语言差异,以及编程语言开发者开发编程语言初衷用途不一样,各自支持的功能也不一样。再加上各个编程语言都有自己的开发者社区,各社区会针对该语言开发相应的第三方包。这种包如果在目标编程语言中没有替代品,那基本上可以宣告Game Over了,除非自己造车把那个包也用目标语言重写一遍。但这种情况应该是少见的,即便找不到完整的替代品,一些零零散散的部件还是有的,咱可把部件拼凑在一起组装成目标包。完整成这样工作并非易事,不仅需要对当前语言非常熟悉,对目标语言也得非常熟悉。
七、总结
不同编程语言之间的任意代码转换确实是不错的想法,但实践的道路坎坷且曲折,不过要有一个信念:只要咱愿意去做那就一定能够实现。本文提到其实是最最最基础的东西,但咱也认为最基础的东西才是最重要的,如果基础都没整明白,上来就开干,可能效率并不会那么高。编程是需要细心和耐心的,不细心必然漏洞百出、Bug满天飞;无耐心,研究代码逻辑、调试代码就能让人焦头烂额。
拙见分享至此,后面有了新的想法还会继续和伙伴们分享。如果您有不同的意见和看法,欢迎在评论区留言。
祝伙伴们生活工作愉快,有缘再见!!!