CN112527315A - 编程语言函数自动转化方法、装置、计算机设备及介质 - Google Patents
编程语言函数自动转化方法、装置、计算机设备及介质 Download PDFInfo
- Publication number
- CN112527315A CN112527315A CN202011573452.0A CN202011573452A CN112527315A CN 112527315 A CN112527315 A CN 112527315A CN 202011573452 A CN202011573452 A CN 202011573452A CN 112527315 A CN112527315 A CN 112527315A
- Authority
- CN
- China
- Prior art keywords
- converted
- constructor
- function
- class
- item
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000006870 function Effects 0.000 title claims abstract description 283
- 238000000034 method Methods 0.000 title claims abstract description 176
- 238000006243 chemical reaction Methods 0.000 title claims abstract description 145
- 238000013519 translation Methods 0.000 claims description 39
- 238000004590 computer program Methods 0.000 claims description 13
- 238000010276 construction Methods 0.000 claims description 8
- 238000012546 transfer Methods 0.000 claims description 6
- 238000013473 artificial intelligence Methods 0.000 abstract description 2
- 238000011426 transformation method Methods 0.000 abstract 1
- 230000009466 transformation Effects 0.000 description 13
- 230000008569 process Effects 0.000 description 12
- 238000010586 diagram Methods 0.000 description 4
- 238000013500 data storage Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/72—Code refactoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Library & Information Science (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本发明用于人工智能领域,涉及区块链领域,公开了编程语言函数自动转化方法、装置、计算机设备及存储介质,方法部分包括:确定需要进行构造函数转化的待转化项目,获取包括待转化项目中待转化文件的存放地址的配置文件,然后确定待转化项目是否支持目标函数类的语法;若待转化项目是否支持目标函数类,则通过函数转化工具读取配置文件中的存放地址,并根据存放地址获取待转化文件中的构造函数方法代码块,通过函数转化工具将构造函数方法代码块中的原构造函数转化为目标函数类;通过引入函数转化工具和配置文件,即可对项目中的构造函数方法代码块进行自动化转化,减少了人为转化成本,降低了人为转化所导致的疏漏和错误,进而减少了项目风险。
Description
技术领域
本发明涉及计算机编程技术领域,尤其涉及一种编程语言函数自动转化方法、装置、计算机设备及介质。
背景技术
在javascript(即JS)高级编程语言中,是通过构造函数的形式生成实例对象,但是构造函数的形式与常规的传统编程语言(如C++、java)的差异很大,对于初学者或一般的开发者而言,常常出现阅读困难、项目代码维护困难的问题。基于此,在现有开发项目中,常常需要将不易维护的构造函数(如ES5构造函数)转化为写法更加清晰、代码可维护性更强、且效果同原构造函数一致的Class类(如ES6 Class类),以便于开发人员的阅读理解和维护。
但在现有技术中,将项目中的构造函数转化Class类,需要开发人员同时熟悉构造函数语法和Class类的语法,然后对项目进行现有代码逻辑的梳理,再对构造函数进行人工的转化,而在人工转化过程中,不可避免地存在疏漏和错误,人力成本较大且容易带来项目风险。
发明内容
本发明提供一种编程语言函数自动转化方法、装置、计算机设备及介质,以解决现有技术中,对构造函数进行人工转化导致成本较大、容易带来项目风险的问题。
一种编程语言函数自动转化方法,包括:
确定需要进行构造函数转化的待转化项目;
获取配置文件,其中,所述配置文件包括待所述待转化项目中待转化文件的存放地址;
确定所述待转化项目是否支持目标函数类的语法,其中,所述目标函数类的语法为根据用户转化需求确定的转化编程语言函数语法;
若所述待转化项目支持所述目标函数类的语法,则通过函数转化工具读取所述配置文件中的所述存放地址,并根据所述存放地址获取所述待转化文件中的构造函数方法代码块;
通过所述函数转化工具将所述构造函数方法代码块中的原构造函数转化为所述目标函数类。
进一步地,所述配置文件还包括所述待转化项目的根目录地址,所述根据所述存放地址获取所述待转化文件中的构造函数方法代码块,包括:
通过所述函数转化工具读取所述配置文件中的所述根目录地址;
将所述根目录地址和所述存放地址进行拼接,获得所述待转化文件的完整地址;
根据所述完整地址中配置的构造函数方法名数组,获取所述构造函数方法代码块。
进一步地,所述目标函数类为E6 class类,所述通过所述函数转化工具将所述构造函数方法代码块中的原构造函数转化为所述目标函数类,包括:
确定所述构造函数方法代码块中的所有原构造函数,并根据所述所有原构造函数新增对应的class类;
将所述原构造函数的原构造函数方法名作为所述对应的class类的类名;
将所述原构造函数中的变量迁移至所述对应的class类;
将所述原构造函数中原型对象的所有方法迁移至所述对应的class类;
将所述构造函数方法代码块中的原构造函数替换为所述对应的class类,并删除所述原构造函数。
进一步地,所述将所述原构造函数中原型对象的所有方法迁移至所述对应的class类,包括:
遍历所述原构造函数中所述原型对象下所有的字段;
判断所述字段的类型是否属于预设类型;
若所述字段的类型属于所述预设类型,则提取所述字段对应的方法,并将所述字段作为所述对应class类中新增函数方法的方法名;
将所述字段对应的方法中的原函数块代码作为对应class类中所述新增函数方法的逻辑。
进一步地,所述确定所述待转化项目是否支持目标函数类的语法,包括:
根据所述待转化项目的根目录地址获取所述待转化项目的项目描述文件;
确定所述项目描述文件中是否包含预设配置项,其中,所述预设配置项为将所述目标函数类进行转译的转移工具;
若所述项目描述文件中包含所述预设配置项,则确定所述待转化项目支持所述目标函数类的语法;
若所述项目描述文件中不包含所述预设配置项,则确定所述待转化项目不支持所述目标函数类的语法。
进一步地,所述配置文件还包括最新版本的转译工具,所述确定所述待转化项目是否支持目标函数类的语法之后,所述方法还包括:
若所述待转化项目不支持所述目标函数类的语法,则获取所述最新版本的转译工具;
将所述最新版本的转译工具安装至所述待转化项目。
一种编程语言函数自动转化装置,包括:
第一确定模块,用于确定需要进行构造函数转化的待转化项目;
获取模块,用于获取配置文件,其中,所述配置文件包括待所述待转化项目中待转化文件的存放地址;
第二确定模块,用于确定所述待转化项目是否支持目标函数类的语法,其中,所述目标函数类的语法为根据用户转化需求确定的编程语言函数语法;
读取模块,用于若所述待转化项目是否支持所述目标函数类,则通过所述函数转化工具读取所述配置文件中的所述存放地址,并根据所述存放地址获取所述待转化文件中的构造函数方法代码块;
转化模块,用于通过所述函数转化工具将所述构造函数方法代码块中的原构造函数转化为所述目标函数类。
进一步地,所述配置文件还包括所述待转化项目的根目录地址,所述根据所述存放地址获取所述待转化文件中的构造函数方法代码块,包括:
通过所述函数转化工具读取所述配置文件中的所述根目录地址;
将所述根目录地址和所述存放地址进行拼接,获得所述待转化文件的完整地址;
根据所述完整地址中配置的构造函数方法名数组,获取所述构造函数方法代码块。
一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述编程语言函数自动转化方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述编程语言函数自动转化方法的步骤。
上述编程语言函数自动转化方法、装置、计算机设备及存储介质所提供的一个方案中,通过确定需要进行构造函数转化的待转化项目,获取配置文件,其中,配置文件包括待转化项目中待转化文件的存放地址,然后确定待转化项目是否支持目标函数类的语法,其中,目标函数类的语法为根据用户转化需求确定的编程语言函数语法;若待转化项目是否支持目标函数类,则通过函数转化工具读取配置文件中的存放地址,并根据存放地址获取待转化文件中的构造函数方法代码块,通过函数转化工具将构造函数方法代码块中的原构造函数转化为目标函数类;本发明中,用户无需了解了解原构造函数的语法和目标函数类的语法,也无需梳理代码逻辑,引入函数转化工具和配置文件,即可对项目中的构造函数方法代码块进行自动化的构造函数转化,减少了人为转化的成本,并降低了人为转化所导致的疏漏和错误,进而减少了项目风险。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例中编程语言函数自动转化方法的一应用环境示意图;
图2是本发明一实施例中编程语言函数自动转化方法的一流程示意图;
图3是图2中步骤S40的一实现流程示意图;
图4是图2中步骤S50的一实现流程示意图;
图5是图4中步骤S54的一实现流程示意图;
图6是图2中步骤S30的一实现流程示意图;
图7是本发明一实施例中编程语言函数自动转化方法的另一实现流程示意图;
图8是本发明一实施例中编程语言函数自动转化装置的一结构示意图;
图9是本发明一实施例中计算机设备的一结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供的编程语言函数自动转化方法,可应用在如图1所示的应用环境中,其中,终端设备通过网络与服务器进行通信。终端设备通过用户的操作确定需要进行构造函数转化的待转化项目,获取配置文件,配置文件包括待转化项目中待转化文件的存放地址,然后确定待转化项目是否支持目标函数类的语法,其中,目标函数类的语法为根据用户转化需求确定的编程语言函数语法;若待转化项目是否支持目标函数类,则通过函数转化工具读取配置文件中的存放地址,并根据存放地址获取待转化文件中的构造函数方法代码块,通过函数转化工具将构造函数方法代码块中的原构造函数转化为目标函数类,用户无需了解了解原构造函数的语法和目标函数类的语法,通过引入函数转化工具并配置文件,即可进行自动化的构造函数转化,减少了人为转化的成本,并降低了人为转化所导致的疏漏和错误,进而减少了项目风险,实现了项目中构造函数转化的人工智能化,提高了转化效率。
其中,函数转化工具、待转化项目的代码、配置文件等相关数据存储在服务器的数据库中,在需要对待转化项目的代码进行构造函数转化时,需要在转化项目中安装好函数转化工具,在确定待转化项目之后,获取相关数据以进行构造函数的自动转化。
本实施例中的数据库存储于区块链网络中,用于存储实现浏览器页面测试方法中用到、生成的数据,如函数转化工具、待转化项目的代码、配置文件等相关数据。本申请所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。将数据库部署于区块链可提高数据存储的安全性。
其中,终端设备可以但不限于各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一实施例中,如图2所示,提供一种编程语言函数自动转化方法,以该方法应用在图1中的终端设备为例进行说明,包括如下步骤:
S10:确定需要进行构造函数转化的待转化项目。
可理解地,待转化项目指的是需要对项目编程语言的构造函数进行函数转化的项目。确定需要对构造函数进行函数转化的待转化项目之前,需要获取函数转化工具,并将函数转化工具安装至终端设备中,以便后续使用函数转化工具待转化项目中的构造函数进行转化。
其中,函数转化工具可以是以java script语法进行书写的,最终按照npm包的规范进行输出一个包。在获取函数转化工具之后,需要定位待转化项目所处的根目录,当用户在命令行(如mac系统的终端)中键入函数转化工具的工具添加命令(该命令可以为npm ipa-change-to-class-save-dev)之后,执行该工具添加命令,也即将函数转化工具添加到待转化项目所处根目录下,即将函数转化工具安装至待转化项目中,此时,会默认自动加入并下载函数转化所需要的依赖文件。依赖文件可以是常用的开源的函数工具包,如lodash。
例如,确定待转化项目之后,用户在终端中键入npmi pa-change-to-class-save-dev,即可将函数转化工具安装至待转化项目中,此时,会默认自动加入并下载本次函数转化所需要的函数工具包。
S20:获取配置文件,其中,配置文件包括待转化项目中待转化文件的存放地址。
在确定需要进行函数转化的转化项目时,用户会根据待转化项目的根目录编写配置配置文件,其中,配置文件至少包括待转化项目中待转化文件的存放地址。
例如,配置文件可以是一个json格式的文件(config.json),配置文件中包含了进行函数转化所需要的相关参数(如待转换文件的地址),需要用户手动配置。
本实施例中,配置文件可以是一个json格式的文件仅为示例性说明,在其他实施例中,配置文件还可以是其他方便读取的文件,在此不再赘述。
在将函数转化工具安装至待转化项目中之后,函数转化工具会自动获取配置文件,然后对配置文件中的信息进行读取,以获得转化项目的相关信息,如待转化文件、转化项目的项目描述文件等。
S30:确定待转化项目是否支持目标函数类的语法,其中,目标函数类的语法为根据用户转化需求确定的编程语言函数语法。
在获取配置文件之后,函数转化工具会确定待转化项目是否支持目标函数类的语法,其中,目标函数类的语法为根据用户转化需求确定的编程语言函数语法,即最终转化完成的编程语言函数语法。
在确定待转化项目是否支持目标函数类的语法之后,若待转化项目不支持目标函数类的语法,表示待转化项目无法执行函数转化工具转化后的目标函数类,此时需要在待转化项目中安装相应的转译工具,以对转化后的目标函数类进行转译,以使待转化项目能够兼容目标函数类。
例如,转化项目为浏览器,不同版本的浏览器所支持的语法不同,浏览器中编程语言的原有构造函数为ES5构造函数,需要转化的目标函数类为ES6Class类,若待转化的浏览器仅支持ES5构造函数的语法,而不支持ES6 Class类的语法,则需要安装ES6 Class类的转译工具,即在浏览器中安装转译ES6语法的开源代码库,使浏览器能够兼容ES6语法,以便后续将ES5构造函数转化为ES6 Class类后,浏览器能够正常运行。
本实施例中,以原有构造函数为ES5构造函数、需要转化的目标函数类为ES6Class类为例进行说明,在此不再赘述。
S40:若待转化项目支持目标函数类的语法,则通过函数转化工具读取配置文件中的存放地址,并根据存放地址获取待转化文件中的构造函数方法代码块。
在确定待转化项目是否支持目标函数类的语法之后,若待转化项目支持目标函数类的语法,则不需要安装转译工具,此时可通过函数转化工具读取配置文件中待转化文件的存放地址,并根据存放地址获取待转化文件,进而获取转化文件中的构造函数方法代码块。
S50:通过函数转化工具将构造函数方法代码块中的原构造函数转化为目标函数类。
在根据存放地址获取待转化文件中的构造函数方法代码块之后,通过函数转化工具将构造函数方法代码块中的原构造函数进行函数转化,以将原构造函数自动转化为目标函数类,实现了转化项目中编程语言构造函数的人工智能转化,减少了人为转化的成本,并降低了人为转化所导致的疏漏和错误,进而减少了项目风险。
例如,在确定待转化项目是否支持目标函数类的语法之后,若待转化项目支持目标函数类的语法,可直接根据配置文件定位到待转化项目的根目录,然后在命令行添加执行命令npm run change-to-class,在目标函数类构建完成后,会将转换后的函数代码直接替换待转化项目中待转化文件的代码块。
本实施例中,通过确定需要进行构造函数转化的待转化项目,获取配置文件,配置文件包括待转化项目中待转化文件的存放地址,然后确定待转化项目是否支持目标函数类的语法,其中,目标函数类的语法为根据用户转化需求确定的编程语言函数语法,若待转化项目是否支持目标函数类,则通过函数转化工具读取配置文件中的存放地址,并根据存放地址获取待转化文件中的构造函数方法代码块,通过函数转化工具将构造函数方法代码块中的原构造函数转化为目标函数类;用户无需了解了解原构造函数的语法和目标函数类的语法,也无需梳理代码逻辑,通过引入函数转化工具并配置文件,即可对项目中的构造函数方法代码块进行自动化的构造函数转化,减少了人为转化的成本,并降低了人为转化所导致的疏漏和错误,进而减少了项目风险。
此外,进行函数转化后的待转化项目,优化了代码的语法,大大增强了代码的可阅读性、可维护性。同时,不会增加整体项目的大小,更不会不影响用户体验,处理逻辑的代码与业务逻辑代码做到了很好的兼容,不会影响到待转化项目代码的执行,即不会影响待转化项目的正常运行。
在一实施例中,配置文件还包括待转化项目的根目录地址,如图3所示,步骤S40中,即根据存放地址获取待转化文件中的构造函数方法代码块,具体包括如下步骤:
S41:通过函数转化工具读取配置文件中的根目录地址。
本实施例中的配置文件还包括待转化项目的根目录地址,在确定待转化项目支持目标函数类的语法之后,通过函数转化工具读取配置文件中的根目录地址,其中,通过根目录地址可以提取转化项目的项目描述文件。
S42:将根目录地址和存放地址进行拼接,获得待转化文件的完整地址。
在函数转化工具读取转化项目的根目录地址和待转化文件的存放地址之后,将根目录地址和存放地址进行拼接,获得待转化文件的完整地址。
S43:根据完整地址中配置的构造函数方法名数组,获取构造函数方法代码块。
在获得待转化文件的完整地址之后,可根据完整地址读取完整地址中配置的构造函数方法名数组,根据待转化文件的完整地址提取待转化文件,进而根据构造函数方法名数组在待转化文件中获取构造函数方法代码块。即配置文件中的完整地址包括转化项目的根目录地址和待转化文件的存放地址,其中,完整地址下包括构造函数方法名数组。
例如,配置文件config.json所设置的完整地址包括root地址,root地址下包括project_address字段,表示待转化文件的存放地址,通过读取配置文件config.json中的project_address字段,可获取到需要转换的待转化文件的存放地址,与转化项目的根目录地址进行拼接,生成待转化文件的完整地址,获取到待转化文件的完整地址后,再根据完整地址中配置的构造函数方法名数组,定位到待转化文件中的构造函数方法代码块。
其中,如果在配置文件中未读取到project_address字段,即待转化文件的存放地址,则函数转化工具会抛出异常,以提示用户。此时,函数转化工具终止执行转化动作,用户可以在命令行看到错误的信息,并提示用户必须要配置待转化文件的存放地址。
本实施例中,通过函数转化工具读取配置文件中的根目录地址,将根目录地址和存放地址进行拼接,获得待转化文件的完整地址,根据完整地址中配置的构造函数方法名数组,获取构造函数方法代码块,细化了根据存放地址获取待转化文件中的构造函数方法代码块的具体步骤,通过配置文件中的完整地址提取构造函数方法代码块,保证了文件提取的准确性,也减少了函数转化工具的操作和负载,提高了函数转化效率。
在一实施例中,目标函数类为E6 class类,如图4所示,步骤S50中,即通过函数转化工具将构造函数方法代码块中的原构造函数转化为目标函数类,具体包括如下步骤:
S51:确定构造函数方法代码块中的所有原构造函数,并根据所有原构造函数新增对应的class类。
在确定待转化文件的构造函数方法代码块,确定构造函数方法代码块中的所有原构造函数,并根据所有原构造函数新增对应的class类。
S52:将原构造函数的原构造函数方法名作为对应的class类的类名。
在确定构造函数方法代码块中的所有原构造函数之后,将原构造函数的原构造函数方法名作为对应的class类的类名。
S53:将原构造函数中的变量迁移至对应的class类。
在确定构造函数方法代码块中的所有原构造函数之后,还需要将原构造函数中的变量迁移至对应的class类。
例如,在确定构造函数方法代码块中的所有原构造函数之后,在原构造函数方法中,根据this.关键字,获取到原构造函数设置的实例对象上的变量,然后将这些变量放置在对应的class类中的constructor构造方法中,完成函数变量迁移。
S54:将原构造函数中原型对象的所有方法迁移至对应的class类。
在确定构造函数方法代码块中的所有原构造函数之后,还需要将原构造函数中原型对象的所有方法迁移至对应的class类。
例如,在确定构造函数方法代码块中的所有原构造函数之后,将原构造函数中原型对象(prototype对象)下的所有方法,在对应的class类中依次放置,以作为class类中实例的方法。
S55:将构造函数方法代码块中的原构造函数替换为对应的class类,并删除原构造函数。
在将原构造函数中的变量迁移至对应的class类、将原构造函数中原型对象的所有方法迁移至对应的class类、并将原构造函数的原构造函数方法名作为对应的class类的类名之后,将构造函数方法代码块中的原构造函数替换为对应的class类,并删除原构造函数,完成函数转化。
本实施例中,通过确定构造函数方法代码块中的所有原构造函数,并根据所有原构造函数新增对应的class类,然后将原构造函数的原构造函数方法名作为对应的class类的类名,并将原构造函数中的变量迁移至对应的class类,并将原构造函数中原型对象的所有方法迁移至对应的class类,最后将构造函数方法代码块中的原构造函数替换为对应的class类,并删除原构造函数,细化了通过函数转化工具将构造函数方法代码块中的原构造函数转化为目标函数类的过程,为原构造函数转化为目标函数类提供了基础。
在一实施例中,如图5所示,步骤S54中,将原构造函数中原型对象的所有方法迁移至对应的class类,具体包括如下步骤:
S541:遍历原构造函数中原型对象下所有的字段。
S542:判断字段的类型是否属于预设类型。
S543:若字段的类型属于预设类型,则提取字段对应的方法,并将字段作为对应class类中新增函数方法的方法名。
S544:将字段对应的方法中的原函数块代码作为对应class类中新增函数方法的逻辑。
例如,遍历原构造函数的prototype对象下所有的字段,判断字段的类型是否属于function类型,如果字段的类型是否属于function类型,则将该字段对应的方法提取出来,将该字段名作为对应的class类中新增函数方法的方法名,然后该字段对应的方法中的原函数块代码,作为class类中新增函数方法的逻辑。
本实施例中,通过遍历原构造函数中原型对象下所有的字段,然后判断字段的类型是否属于预设类型,若字段的类型属于预设类型,则提取字段对应的方法,并将字段作为对应class类中新增函数方法的方法名,将字段对应的方法中的原函数块代码作为对应class类中新增函数方法的逻辑,明确了将原构造函数中原型对象的所有方法迁移至对应的class类的具体过程,通过遍历获得所有相关字段,避免了人为转换过程中,可能存在疏漏和错误,节省了开发人力成本、降低了改造带来的项目风险。
在一实施例中,如图6所示,步骤S30中,确定待转化项目是否支持目标函数类的语法,具体包括如下步骤:
S31:根据待转化项目的根目录地址获取待转化项目的项目描述文件。
在获取包括待转化项目的根目录地址的配置文件之后,根据待转化项目的根目录地址获取待转化项目的项目描述文件。
S32:确定项目描述文件中是否包含预设配置项,预设配置项为将目标函数类进行转译的转移工具。
在获取待转化项目的项目描述文件之后,确定项目描述文件中是否包含预设配置项,预设配置项为将目标函数类进行转译的转移工具。
S33:若项目描述文件中包含预设配置项,则确定待转化项目支持目标函数类的语法。
在确定项目描述文件中是否包含预设配置项之后,若项目描述文件中包含预设配置项,则确定待转化项目支持目标函数类的语法,表示待转化项目在转化完成后可正常运行,此时可以继续执行函数转化过程。
S34:若项目描述文件中不包含预设配置项,则确定待转化项目不支持目标函数类的语法。
在确定项目描述文件中是否包含预设配置项之后,若项目描述文件中包含预设配置项,则确定待转化项目不支持目标函数类的语法,表示待转化项目在转化完成后不可正常运行,此时需要安装转译工具才能继续执行函数转化过程。
例如,项目描述文件为java script编程语言编写的文件,原有构造函数为ES5构造函数、需要转化的目标函数类为ES6 Class类,则预设配置项为转译ES6 class类语法的配置项,包括babel-polyfill和babel-plugin-transform-runtime两个配置项,检测项目的package.json文件中是否包含babel-polyfill和babel-plugin-transform-runtime这两个配置项,若package.json文件中包含有上述两个配置项,表示待转化项目支持目标函数类的语法,转化完成后可正常运行,则可继续执行转化过程;若package.json文件中不包含有上述两个配置项,则确定待转化项目不支持目标函数类的语法,表示待转化项目不兼容ES6 Class类,转化完成后无法正常运行。
本实施例中,根据待转化项目的根目录地址获取待转化项目的项目描述文件,确定项目描述文件中是否包含预设配置项,预设配置项为将目标函数类进行转译的转移工具,若项目描述文件中包含预设配置项,则确定待转化项目支持目标函数类的语法,若项目描述文件中不包含预设配置项,则确定待转化项目不支持目标函数类的语法,细化了确定待转化项目是否支持目标函数类的语法的具体过程,为确定待转化项目是否支持目标函数类的语法提供了基础。
在一实施例中,配置文件还包括最新版本的转译工具,如图7所示,步骤S30之后,即确定待转化项目是否支持目标函数类的语法之后,所述方法还具体包括如下步骤:
S301:若待转化项目不支持目标函数类的语法,则获取最新版本的转译工具。
在确定待转化项目是否支持目标函数类的语法之后,若待转化项目不支持目标函数类的语法,表示待转化项目在转化完成后不可正常运行,此时需要安装转译工具才能继续执行函数转化过程,此时,可直接从配置文件中提取最新版本的转译工具。
S302:将最新版本的转译工具安装至待转化项目。
在获取最新版本的转译工具之后,将最新版本的转译工具安装至待转化项目,以保证转化函数后的待转化项目能够正常运行。
例如,需要转化的目标函数类为ES6 Class类,则转译工具为转译ES6class类语法的开源代码库,包括babel-polyfill和babel-plugin-transform-runtime两个开源代码库,若待转化项目的package.json文件中不包含有babel-polyfill和babel-plugin-transform-runtime这两个配置项,则表示待转化项目不兼容ES6 Class类,此时函数转化工具需要执行命令npm install babel-polyfill–save,以及执行命令npm installbabel-plugin-transform-runt,以将babel-polyfill和babel-plugin-transform-runtime两个开源代码库安装至待转化项目的代码中。
本实施例中,在确定待转化项目是否支持目标函数类的语法之后,若待转化项目不支持目标函数类的语法,则获取最新版本的转译工具,将最新版本的转译工具安装至待转化项目,在确定转化项目不支持目标函数类的语法之后,直接从配置文件中获取最新版本的转译工具,并安装至待转化项目中,保证后转化函数后的待转化项目能够正常运行。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
在一实施例中,提供一种编程语言函数自动转化装置,该编程语言函数自动转化装置与上述实施例中编程语言函数自动转化方法一一对应。如图8所示,该编程语言函数自动转化装置包括第一确定模块801、获取模块802、第二确定模块803、读取模块804和转化模块805。各功能模块详细说明如下:
第一确定模块801,用于确定需要进行构造函数转化的待转化项目;
获取模块802,用于获取配置文件,其中,所述配置文件包括待所述待转化项目中待转化文件的存放地址;
第二确定模块803,用于确定所述待转化项目是否支持目标函数类的语法,其中,所述目标函数类的语法为根据用户转化需求确定的编程语言函数语法;
读取模块804,用于若所述待转化项目是否支持所述目标函数类,则通过函数转化工具读取所述配置文件中的所述存放地址,并根据所述存放地址获取所述待转化文件中的构造函数方法代码块;
转化模块805,用于通过所述函数转化工具将所述构造函数方法代码块中的原构造函数转化为所述目标函数类。
进一步地,所述配置文件还包括所述待转化项目的根目录地址,所述读取模块804具有用于:
通过所述函数转化工具读取所述配置文件中的所述根目录地址;
将所述根目录地址和所述存放地址进行拼接,获得所述待转化文件的完整地址;
根据所述完整地址中配置的构造函数方法名数组,获取所述构造函数方法代码块。
进一步地,所述目标函数类为E6 class类,所述转化模块805具体用于:
确定所述构造函数方法代码块中的所有原构造函数,并根据所述所有原构造函数新增对应的class类;
将所述原构造函数的原构造函数方法名作为所述对应的class类的类名;
将所述原构造函数中的变量迁移至所述对应的class类;
将所述原构造函数中原型对象的所有方法迁移至所述对应的class类;
将所述构造函数方法代码块中的原构造函数替换为所述对应的class类,并删除所述原构造函数。
进一步地,所述转化模块805具体还用于:
遍历所述原构造函数中所述原型对象下所有的字段;
判断所述字段的类型是否属于预设类型;
若所述字段的类型属于所述预设类型,则提取所述字段对应的方法,并将所述字段作为所述对应class类中新增函数方法的方法名;
将所述字段对应的方法中的原函数块代码作为对应class类中所述新增函数方法的逻辑。
进一步地,第二确定模块803具体用于:
根据所述待转化项目的根目录地址获取所述待转化项目的项目描述文件;
确定所述项目描述文件中是否包含预设配置项,其中,所述预设配置项为将所述目标函数类进行转译的转移工具;
若所述项目描述文件中包含所述预设配置项,则确定所述待转化项目支持所述目标函数类的语法;
若所述项目描述文件中不包含所述预设配置项,则确定所述待转化项目不支持所述目标函数类的语法。
进一步地,所述配置文件还包括最新版本的转译工具,所述确定所述待转化项目是否支持目标函数类的语法之后,所述第二确定模块803具体还用于:
若所述待转化项目不支持所述目标函数类的语法,则获取所述最新版本的转译工具;
将所述最新版本的转译工具安装至所述待转化项目。
关于编程语言函数自动转化装置的具体限定可以参见上文中对于编程语言函数自动转化方法的限定,在此不再赘述。上述编程语言函数自动转化装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端设备,其内部结构图可以如图9所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部服务器通过网络连接通信。该计算机程序被处理器执行时以实现一种编程语言函数自动转化方法。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
确定需要进行构造函数转化的待转化项目;
获取配置文件,其中,所述配置文件包括待所述待转化项目中待转化文件的存放地址;
确定所述待转化项目是否支持目标函数类的语法,其中,所述目标函数类的语法为根据用户转化需求确定的转化编程语言函数语法;
若所述待转化项目支持所述目标函数类的语法,则通过函数转化工具读取所述配置文件中的所述存放地址,并根据所述存放地址获取所述待转化文件中的构造函数方法代码块;
通过所述函数转化工具将所述构造函数方法代码块中的原构造函数转化为所述目标函数类。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
确定需要进行构造函数转化的待转化项目;
获取配置文件,其中,所述配置文件包括待所述待转化项目中待转化文件的存放地址;
确定所述待转化项目是否支持目标函数类的语法,其中,所述目标函数类的语法为根据用户转化需求确定的转化编程语言函数语法;
若所述待转化项目支持所述目标函数类的语法,则通过函数转化工具读取所述配置文件中的所述存放地址,并根据所述存放地址获取所述待转化文件中的构造函数方法代码块;
通过所述函数转化工具将所述构造函数方法代码块中的原构造函数转化为所述目标函数类。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (10)
1.一种编程语言函数自动转化方法,其特征在于,包括:
确定需要进行构造函数转化的待转化项目;
获取配置文件,其中,所述配置文件包括所述待转化项目中待转化文件的存放地址;
确定所述待转化项目是否支持目标函数类的语法,其中,所述目标函数类的语法为根据用户转化需求确定的转化编程语言函数语法;
若所述待转化项目支持所述目标函数类的语法,则通过函数转化工具读取所述配置文件中的所述存放地址,并根据所述存放地址获取所述待转化文件中的构造函数方法代码块;
通过所述函数转化工具将所述构造函数方法代码块中的原构造函数转化为所述目标函数类。
2.如权利要求1所述的编程语言函数自动转化方法,其特征在于,所述配置文件还包括所述待转化项目的根目录地址,所述根据所述存放地址获取所述待转化文件中的构造函数方法代码块,包括:
通过所述函数转化工具读取所述配置文件中的所述根目录地址;
将所述根目录地址和所述存放地址进行拼接,获得所述待转化文件的完整地址;
根据所述完整地址中配置的构造函数方法名数组,获取所述构造函数方法代码块。
3.如权利要求1所述的编程语言函数自动转化方法,其特征在于,所述目标函数类为E6class类,所述通过所述函数转化工具将所述构造函数方法代码块中的原构造函数转化为所述目标函数类,包括:
确定所述构造函数方法代码块中的所有原构造函数,并根据所述所有原构造函数新增对应的class类;
将所述原构造函数的原构造函数方法名作为所述对应的class类的类名;
将所述原构造函数中的变量迁移至所述对应的class类;
将所述原构造函数中原型对象的所有方法迁移至所述对应的class类;
将所述构造函数方法代码块中的原构造函数替换为所述对应的class类,并删除所述原构造函数。
4.如权利要求3所述的编程语言函数自动转化方法,其特征在于,所述将所述原构造函数中原型对象的所有方法迁移至所述对应的class类,包括:
遍历所述原构造函数中所述原型对象下所有的字段;
判断所述字段的类型是否属于预设类型;
若所述字段的类型属于所述预设类型,则提取所述字段对应的方法,并将所述字段作为所述对应class类中新增函数方法的方法名;
将所述字段对应的方法中的原函数块代码作为对应class类中所述新增函数方法的逻辑。
5.如权利要求2所述的编程语言函数自动转化方法,其特征在于,所述确定所述待转化项目是否支持目标函数类的语法,包括:
根据所述待转化项目的根目录地址获取所述待转化项目的项目描述文件;
确定所述项目描述文件中是否包含预设配置项,其中,所述预设配置项为将所述目标函数类进行转译的转移工具;
若所述项目描述文件中包含所述预设配置项,则确定所述待转化项目支持所述目标函数类的语法;
若所述项目描述文件中不包含所述预设配置项,则确定所述待转化项目不支持所述目标函数类的语法。
6.如权利要求1-5任一项所述的编程语言函数自动转化方法,其特征在于,所述配置文件还包括最新版本的转译工具,所述确定所述待转化项目是否支持目标函数类的语法之后,所述方法还包括:
若所述待转化项目不支持所述目标函数类的语法,则获取所述最新版本的转译工具;
将所述最新版本的转译工具安装至所述待转化项目。
7.一种编程语言函数自动转化装置,其特征在于,包括:
第一确定模块,用于确定需要进行构造函数转化的待转化项目;
获取模块,用于获取配置文件,其中,所述配置文件包括待所述待转化项目中待转化文件的存放地址;
第二确定模块,用于确定所述待转化项目是否支持目标函数类的语法,其中,所述目标函数类的语法为根据用户转化需求确定的编程语言函数语法;
读取模块,用于若所述待转化项目是否支持所述目标函数类,则通过函数转化工具读取所述配置文件中的所述存放地址,并根据所述存放地址获取所述待转化文件中的构造函数方法代码块;
转化模块,用于通过所述函数转化工具将所述构造函数方法代码块中的原构造函数转化为所述目标函数类。
8.如权利要求7所述的编程语言函数自动转化装置,其特征在于,所述配置文件还包括所述待转化项目的根目录地址,所述根据所述存放地址获取所述待转化文件中的构造函数方法代码块,包括:
通过所述函数转化工具读取所述配置文件中的所述根目录地址;
将所述根目录地址和所述存放地址进行拼接,获得所述待转化文件的完整地址;
根据所述完整地址中配置的构造函数方法名数组,获取所述构造函数方法代码块。
9.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至6任一项所述编程语言函数自动转化方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述编程语言函数自动转化方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011573452.0A CN112527315A (zh) | 2020-12-24 | 2020-12-24 | 编程语言函数自动转化方法、装置、计算机设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011573452.0A CN112527315A (zh) | 2020-12-24 | 2020-12-24 | 编程语言函数自动转化方法、装置、计算机设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112527315A true CN112527315A (zh) | 2021-03-19 |
Family
ID=74976597
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011573452.0A Pending CN112527315A (zh) | 2020-12-24 | 2020-12-24 | 编程语言函数自动转化方法、装置、计算机设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112527315A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114035804A (zh) * | 2021-11-16 | 2022-02-11 | 北京字节跳动网络技术有限公司 | 代码转换方法、装置、介质和电子设备 |
CN114756240A (zh) * | 2022-04-18 | 2022-07-15 | 北京字节跳动网络技术有限公司 | 一种类型转化方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120151437A1 (en) * | 2010-12-09 | 2012-06-14 | Bull Hn Information Systems Inc. | Method for translating a cobol source program into readable and maintainable program code in an object oriented second programming language |
US20130174131A1 (en) * | 2012-01-04 | 2013-07-04 | International Business Machines Corporation | Code converting method, program, and system |
CN107861728A (zh) * | 2017-10-25 | 2018-03-30 | 深圳四方精创资讯股份有限公司 | 用于传统程序语言向现代程序语言转换的方法及其系统 |
-
2020
- 2020-12-24 CN CN202011573452.0A patent/CN112527315A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120151437A1 (en) * | 2010-12-09 | 2012-06-14 | Bull Hn Information Systems Inc. | Method for translating a cobol source program into readable and maintainable program code in an object oriented second programming language |
US20130174131A1 (en) * | 2012-01-04 | 2013-07-04 | International Business Machines Corporation | Code converting method, program, and system |
CN107861728A (zh) * | 2017-10-25 | 2018-03-30 | 深圳四方精创资讯股份有限公司 | 用于传统程序语言向现代程序语言转换的方法及其系统 |
Non-Patent Citations (1)
Title |
---|
冯锦丹;战德臣;聂兰顺;徐晓飞;: "基于模式的业务构件代码生成方法", 电子学报, no. 1, 15 December 2008 (2008-12-15), pages 19 - 24 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114035804A (zh) * | 2021-11-16 | 2022-02-11 | 北京字节跳动网络技术有限公司 | 代码转换方法、装置、介质和电子设备 |
CN114756240A (zh) * | 2022-04-18 | 2022-07-15 | 北京字节跳动网络技术有限公司 | 一种类型转化方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109976761B (zh) | 软件开发工具包的生成方法、装置及终端设备 | |
CN111399853A (zh) | 机器学习模型与自定义算子的模板化部署方法 | |
CN112765023B (zh) | 测试用例生成方法、装置 | |
CN106648755B (zh) | 一种在安卓art环境中动态加载dex的方法及装置 | |
US20110126179A1 (en) | Method and System for Dynamic Patching Software Using Source Code | |
CN112527315A (zh) | 编程语言函数自动转化方法、装置、计算机设备及介质 | |
US10248409B1 (en) | Limiting the effects of source code patches on corresponding native-code patches | |
CN109255107A (zh) | 组态软件处理方法、装置、计算机设备和存储介质 | |
CN109614325B (zh) | 一种确定控件属性的方法及装置、电子设备和存储介质 | |
CN113094252B (zh) | 测试用例生成方法、装置、计算机设备及存储介质 | |
CN112306533A (zh) | 前端框架自动转换方法、装置、计算机设备及存储介质 | |
US9639375B2 (en) | Generation of language bindings for libraries using data from compiler generated debug information | |
CN115686606A (zh) | 一种项目依赖树的展示方法、装置、系统及介质 | |
CN111367512B (zh) | 一种应用程序开发中创建Android库模块依赖关系的方法及装置 | |
CN110806891B (zh) | 嵌入式设备软件版本的生成方法及装置 | |
CN117149209A (zh) | 一种代码增量编译方法、装置、计算机设备及存储介质 | |
CN112527314A (zh) | 项目代码自动优化方法、装置、设备及介质 | |
CN109426497B (zh) | 数据嵌入方法、装置、系统以及存储介质 | |
CN115129598A (zh) | 一种sql语句的风险检测方法、装置、系统及介质 | |
CN115167828A (zh) | 提升视力的函数自动转化方法和数据写入方法及装置 | |
CN115167862A (zh) | 补丁方法及相关设备 | |
CN116774988B (zh) | 解除框架包模式符号依赖的方法及装置 | |
CN117251234B (zh) | 基于补丁的函数调用方法及装置 | |
WO2022074712A1 (ja) | 仕様情報抽出装置、仕様情報抽出方法及びプログラム | |
CN115202659A (zh) | 一种应用的开发方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |