掌桥专利:专业的专利平台
掌桥专利
首页

一种代码生成方法、装置、电子设备及存储介质

文献发布时间:2024-04-18 19:58:30


一种代码生成方法、装置、电子设备及存储介质

技术领域

本发明涉及计算机技术领域,特别是涉及一种代码生成方法、装置、电子设备及存储介质。

背景技术

Java语言:Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

lambda表达式:lambda是一种基于函数的编程语言,对于这种类型的语言典型的代表就是Haskell。但是从Java最早开始一直提倡的是面向对象编程,也就是说一切的操作必须有类,所有的功能都要定义在类之中。很多习惯于函数编程的开发者都觉得Java不好用,于是快在20年之后Java终于推出了lambda表达式。

lambda表达式,也可称为闭包,它是推动java 8发布的最重要新特性。lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用lambda表达式可以使代码变的更加简洁紧凑。

Java 8的lambda表达式具有代码简洁、非常容易实现并行计算、可能代表未来的编程趋势的优点,但同时也存在若没有学过lambda表达式,代码抽象不容易被初学者看懂和应用的缺点。

发明内容

鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种代码生成方法、装置、电子设备及存储介质。

第一方面,本发明实施例公开了一种代码生成方法,包括:

获取代码应用场景信息;

获取针对所述代码应用场景信息的用户输入信息,所述用户输入信息包括:方法体信息、变量命令信息、变量类型信息、参数信息中的至少一种;

根据所述代码应用场景信息和所述用户输入信息,生成lambda代码表达式和非lambda代码表达式。

可选地,所述根据所述代码应用场景信息和所述用户输入信息,生成lambda代码表达式和非lambda代码表达式,包括:

获取代码模板;

根据所述代码应用场景信息,从所述代码模板中确定目标代码模板;

根据所述目标代码模板和所述用户输入信息,生成lambda代码表达式和非lambda代码表达式。

可选地,所述代码模板包括:lambda代码表达式的模板和非lambda代码表达式的模板。

可选地,所述代码模板包括:List遍历模板、Set遍历模板、Map遍历模板、事件监听模板、Predicate filter接口模板、Map迭代遍历模板、Reduce聚合模板、线程模板中的至少一种。

可选地,所述代码应用场景信息包括:实现Runnable接口、事件处理、列表迭代、函数式接口Predicate、Map、Reduce、求集合元素的最大值、求集合元素的最小值、求集合元素的平均值、stream流中的至少一种。

可选地,所述lambda代码表达式包括第一注释说明,所述第一注释说明包括对lambda代码表达式中的方法体的注释说明。

可选地,所述方法还包括:

在用户界面展示所述lambda代码表达式和非lambda代码表达式。

第二方面,本发明实施例公开了一种代码生成装置,包括:

代码应用场景信息获取模块,用于获取代码应用场景信息;

用户输入信息获取模块,用于获取针对所述代码应用场景信息的用户输入信息,所述用户输入信息包括:方法体信息、变量命令信息、变量类型信息、参数信息中的至少一种;

代码生成模块,用于根据所述代码应用场景信息和所述用户输入信息,生成lambda代码表达式和非lambda代码表达式。

可选地,所述代码生成模块具体用于:获取代码模板;根据所述代码应用场景信息,从所述代码模板中确定目标代码模板;根据所述目标代码模板和所述用户输入信息,生成lambda代码表达式和非lambda代码表达式。

可选地,所述代码模板包括:lambda代码表达式的模板和非lambda代码表达式的模板。

可选地,所述代码模板包括:List遍历模板、Set遍历模板、Map遍历模板、事件监听模板、Predicate filter接口模板、Map迭代遍历模板、Reduce聚合模板、线程模板中的至少一种。

可选地,所述代码应用场景信息包括:实现Runnable接口、事件处理、列表迭代、函数式接口Predicate、Map、Reduce、求集合元素的最大值、求集合元素的最小值、求集合元素的平均值、stream流中的至少一种。

可选地,所述lambda代码表达式包括第一注释说明,所述第一注释说明包括对lambda代码表达式中的方法体的注释说明。

可选地,所述装置还包括:

代码展示模块,用于在用户界面展示所述lambda代码表达式和非lambda代码表达式。

第三方面,本发明实施例公开了一种电子设备,包括:处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述的代码生成方法的步骤。

第四方面,本发明实施例公开了一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现上述的代码生成方法的步骤。

本发明实施例包括以下优点:

根据代码应用场景信息和用户针对代码应用场景信息输入的方法体信息、变量命令信息、变量类型信息、参数信息等信息,生成lambda代码表达式和非lambda代码表达式。从而可以快速生成lambda代码表达式,以及通过生成的lambda代码表达式和非lambda代码表达式的比对,帮助初学者快速理解运用lambda代码。

附图说明

图1是本发明实施例提供的一种代码生成方法的步骤流程图;

图2是本发明实施例提供的另一种代码生成方法的步骤流程图;

图3是本发明实施例提供的一种用户界面的示意图;

图4是本发明实施例提供的一种代码生成工具的示意图;

图5是本发明实施例提供的一种代码生成的流程图;

图6是本发明实施例提供的一种代码生成装置的结构框图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

lamdba表达式具有代码简洁、容易实现并行计算、代表未来的编程趋势等优秀的特性;也由于lambda表达式简洁的特性,导致代码比较抽象,不容易被初学者看懂和快速运用。鉴于此,本发明提出一种基于java语言的lambda代码生成方法,根据具体的使用场景快速生成可用的lambda表达式代码,并可通过工具的注释、java7代码(非lambda表达式)的比对快速理解和运用lambda表达式。

参照图1,示出了本发明实施例提供的一种代码生成方法的步骤流程图,所述方法具体可以包括如下步骤:

步骤101,获取代码应用场景信息。

本发明可以应用于代码生成设备,代码生成设备可以为计算机、智能手机、平板电脑、可穿戴设备等。本发明对代码生成设备的种类不作具体限制。

本发明实施例根据代码的用途,将代码划分成多种应用场景。例如,代码的用途是为了实现List遍历、或Set遍历、或Map遍历,则对应的代码应用场景为:列表迭代应用场景。

List集合:以一种特定的顺序存储。Set集合:存储的元素中不允许有重复元素。Map集合:存储的每组数据都是成对的“键-值”。List遍历指对List集合中的元素进行遍历。Set遍历指对Set集合中的元素进行遍历。Map遍历指对Map集合中的元素进行遍历。

在一种实施例中,代码应用场景信息可以包括:实现Runnable接口、事件处理、列表迭代、函数式接口Predicate、Map、Reduce、求集合元素的最大值、求集合元素的最小值、求集合元素的平均值、stream流中的至少一种。

在一种实施例中,代码生成设备可以包括用户界面(User Interface,UI)。用户界面,亦称使用者界面,是系统和用户之间进行交互和信息交换的媒介,它实现信息的内部形式与人类可以接受形式之间的转换。用户界面是介于用户与硬件而设计彼此之间交互沟通相关软件,目的在使得用户能够方便有效率地去操作硬件以达成双向之交互,完成所希望借助硬件完成之工作,用户界面定义广泛,包含了人机交互与图形用户接口,凡参与人类与机械的信息交流的领域都存在着用户界面。

在代码生成设备的用户界面上可以显示有代码应用场景输入栏,用户可以在代码应用场景输入栏输入代码应用场景,或者根据代码应用场景输入栏提供的实现Runnable接口、事件处理、列表迭代、函数式接口Predicate、Map、Reduce等应用场景选项,选择对应的代码应用场景。响应于用户在代码应用场景输入栏输入的代码应用场景,代码生成设备可以获取代码应用场景信息。

步骤102,获取针对代码应用场景信息的用户输入信息,用户输入信息包括:方法体信息、变量命令信息、变量类型信息、参数信息中的至少一种。

在用户界面还可以显示有方法体输入栏、变量命令输入栏、变量类型输入栏、参数输入栏。用户可以根据需求在相应的输入栏输入对应的信息。或者,也可以在用户在代码应用场景输入栏输入应用场景后,代码生成设备根据用户输入的应用场景,显示相应的输入栏,相应的输入栏包括:方法体输入栏、变量命令输入栏、变量类型输入栏、参数输入栏中的至少一种。用户可以根据需求在显示的输入栏输入对应的信息。

例如,用户在代码应用场景输入栏输入“实现Runnable接口”,代码生成设备显示方法体输入栏,用户在方法体输入栏输入方法体;用户在代码应用场景输入栏输入“列表迭代”,代码生成设备显示方法体输入栏和参数输入栏,用户在方法体输入栏输入方法体,在参数输入栏输入参数。

响应于用户在方法体输入栏、变量命令输入栏、变量类型输入栏、参数输入栏中输入的信息,代码生成设备可以获取方法体信息、变量命令信息、变量类型信息、参数信息等信息。

步骤103,根据代码应用场景信息和用户输入信息,生成lambda代码表达式和非lambda代码表达式。

代码生成设备获取代码应用场景信息和用户输入信息后,可以根据代码应用场景信息和用户输入信息生成lambda代码表达式和非lambda代码表达式。

本发明实施例根据代码应用场景信息和用户针对代码应用场景信息输入的方法体信息、变量命令信息、变量类型信息、参数信息等信息,生成lambda代码表达式和非lambda代码表达式。从而可以快速生成lambda代码表达式,以及通过生成的lambda代码表达式和非lambda代码表达式的比对,帮助初学者快速理解运用lambda代码。

参照图2,示出了本发明实施例提供的另一种代码生成方法的步骤流程图,所述方法具体可以包括如下步骤:

步骤201,获取代码应用场景信息。

步骤202,获取针对代码应用场景信息的用户输入信息,用户输入信息包括:方法体信息、变量命令信息、变量类型信息、参数信息中的至少一种。

本发明实施例的步骤201~202与上述步骤101~102类似,在此不再赘述。

步骤203,获取代码模板。

步骤204,根据代码应用场景信息,从代码模板中确定目标代码模板。

代码模板可以包括:lambda代码表达式的模板和非lambda代码表达式的模板。

Lambda表达式的格式为(形式参数)->{代码块},组成Lambda表达式的三要素为形式参数,箭头,代码块。形式参数:如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可;箭头->:由英文中画线和大于符号组成,固定写法。代表指向动作;代码块:是我们具体要做的事情,也就是以前我们写的方法体内容。根据Lambda表达式的格式,可以提炼出lambda代码表达式的模板。非lambda代码表达式的模板也可以类似进行提炼。

代码模板可以包括:List遍历模板、Set遍历模板、Map遍历模板、事件监听模板、Predicate filter接口模板、Map迭代遍历模板、Reduce聚合模板、线程模板中的至少一种。

可以建立代码模板与代码应用场景的映射关系。则获取代码应用场景信息后,可以根据代码应用场景信息和上述映射关系,从代码模板中找到目标代码模板。例如,可以建立代码应用场景“函数式接口Predicate”与代码模板“Predicate filter接口模板”的映射关系,当代码生成设备获取到用户输入的代码应用场景“函数式接口Predicate”,代码生成设备即调用代码模板“Predicate filter接口模板”。Predicate filter接口模板包括:通过lambda代码表达式编写的Predicate filter接口模板和通过非lambda代码表达式编写的Predicate filter接口模板。

类似的,还可以建立代码应用场景“Reduce”与代码模板“Reduce聚合模板”的映射关系、代码应用场景“实现Runnable接口”与代码模板“线程模板”的映射关系、代码应用场景“Map”与代码模板“Map迭代遍历模板”的映射关系。同样,Reduce聚合模板、线程模板、Map迭代遍历模板也都包括通过lambda代码表达式编写的和通过非lambda代码表达式编写的两种模板形式。

在一种实施例中,一个代码应用场景还可以与多个代码模板建立映射关系。例如,可以建立代码应用场景“列表迭代”与代码模板“List遍历模板”、“Set遍历模板”、“Map遍历模板”的映射关系。则可以根据代码应用场景信息和用户输入信息共同确定目标代码模板。例如,可以根据代码应用场景“列表迭代”,确定可能需要调用“List遍历模板”或“Set遍历模板”或“Map遍历模板”,再根据用户输入的方法体信息中的关键词来从“List遍历模板”、“Set遍历模板”、“Map遍历模板”中确定目标代码模板。

步骤205,根据目标代码模板和用户输入信息,生成lambda代码表达式和非lambda代码表达式。

确定目标代码模板后,即可将目标代码模板与用户输入信息进行组装,得到lambda代码表达式和非lambda代码表达式。lambda代码表达式和非lambda代码表达式可以在用户界面进行显示,以便于用户对二者进行比对。

用户还可以选择需要的代码进行输出,例如,可以将生成的lambda代码表达式输出为1个.java文件;或者将生成的非lambda代码表达式输出为一个.java文件;或者将lambda代码表达式和非lambda代码表达式分别输出为2个.java文件。

得到的.java文件可以打包成jar文件,然后将jar包文件部署在linux操作系统或windows操作系统,启动jar文件启动桌面版本工具,即可运行使用代码。或者,得到的.java文件可以打包成exe文件,然后将jar包文件部署在linux操作系统或windows操作系统,启动exe文件启动桌面版本工具,即可运行使用代码。

本发明实施例根据代码应用场景信息和用户针对代码应用场景信息输入的方法体信息、变量命令信息、变量类型信息、参数信息等信息,生成lambda代码表达式和非lambda代码表达式。从而可以快速生成lambda代码表达式,以及通过生成的lambda代码表达式和非lambda代码表达式的比对,帮助初学者快速理解运用lambda代码。

在一种实施例中,生成的lambda代码表达式中可以包括第一注释说明,第一注释说明包括对lambda代码表达式中的方法体的注释说明。本发明实施例通过对生成的lambda代码表达式进行注释说明,以帮助用户快速理解和运用lambda表达式。

参照图3,示出了本发明实施例提供的一种用户界面的示意图。在用户界面上显示有应用场景输入栏,用户可以通过应用场景输入栏提供的下拉选项选择应用场景。当用户选择了如图所示的“实现Runnable”应用场景后,用户界面上显示出Runnable方法体输入栏,用户可以在Runnable方法体输入栏输入需要用到的方法体。如图所示,用户输入的方法体为:System.out.print(“Before Java8.too much code for too little to do”)。用户完成应用场景的选择和方法体的输入后,可以对用户界面显示的“java7代码”、“java8代码”、“注释说明”三个选项按需勾选。“java7代码”选项和“java8代码”选项至少需要勾选其中一个,或者也可以2个选项都勾选。“注释说明”选项可以勾选,也可以不勾选。若用户勾选了“java7代码”,则代码生成设备会根据用户选择的应用场景和用户在Runnable方法体输入栏输入的信息,生成对应的非lambda表达式。若用户勾选了“java8代码”,则代码生成设备会根据用户选择的应用场景和用户在Runnable方法体输入栏输入的信息,生成对应的lambda表达式。若用户勾选了“注释说明”,则代码生成设备在生成lambda表达式的同时,还会生成对lambda表达式中方法体的注释说明,注释说明可以显示在lambda表达式显示区域的第一栏。在用户选择了“实现Runnable”应用场景,填入了Runnable方法体信息,勾选了“java7代码”选项和“java8代码”后,点击“生成代码”按钮,用户界面即会出现lambda表达式显示区域和非lambda表达式显示区域。如图3所示在lambda表达式显示区域和非lambda表达式显示区域分别对lambda表达式和非lambda表达式进行显示。

本发明实施例可以根据具体的使用场景快速生成可用的lambda表达式代码,并可通过工具的注释、java7代码的比对快速理解和运用lambda表达式;解决了初学用户使用中的痛点问题,降低了lamdba技术点的使用难度。

参照图4,示出了本发明实施例提供的一种代码生成工具的示意图。代码生成工具包括:UI界面、代码表达式模板库、代码表达式生成模块。UI界面用于获取用户输入的应用场景信息和针对于应用场景信息输入的其它信息,例如方法体信息等;以及用于显示生成的lambda代码表达式和/或非lambda代码表达式。代码表达式模板库用于存储代码模板,代码模板可以包括:List遍历模板、Set遍历模板、Map遍历模板、事件监听模板、Predicatefilter接口模板、Map迭代遍历模板、Reduce聚合模板、线程模板等模板。代码表达式生成模块用于根据从UI界面获取的应用场景信息和针对于应用场景信息输入的其它信息,从代码表达式模板库中调用目标模板,以及根据目标模板和应用场景信息和针对于应用场景信息输入的其它信息生成对应的代码。

参照图5,示出了本发明实施例提供的一种代码生成的流程图。第一步:选择应用场景,应用场景包括:实现Runnable接口、事件处理、列表迭代、函数式接口Predicate、Map、Reduce、求集合元素的最大值、求集合元素的最小值、求集合元素的平均值、stream流。第二步:选择生成内容,即选择“java7”代码、“java8”代码、“注释说明”。第三步:根据选择的应用场景,填写相对应的变量命令、变量类型、方法体内容。第四步:点击“生成”按钮。第五步:后台根据选择应用场景,自动匹配对应的模板。第六步:后台根据选择应用场景、变量命令、变量类型、方法体内容组成代码块。第七步:在UI界面显示代码块。

需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。

参照图6,示出了本发明实施例提供的一种代码生成装置的结构框图,具体可以包括如下模块:

代码应用场景信息获取模块301,用于获取代码应用场景信息;

用户输入信息获取模块302,用于获取针对所述代码应用场景信息的用户输入信息,所述用户输入信息包括:方法体信息、变量命令信息、变量类型信息、参数信息中的至少一种;

代码生成模块303,用于根据所述代码应用场景信息和所述用户输入信息,生成lambda代码表达式和非lambda代码表达式。

可选地,所述代码生成模块具体用于303:获取代码模板;根据所述代码应用场景信息,从所述代码模板中确定目标代码模板;根据所述目标代码模板和所述用户输入信息,生成lambda代码表达式和非lambda代码表达式。

可选地,所述代码模板包括:lambda代码表达式的模板和非lambda代码表达式的模板。

可选地,所述代码模板包括:List遍历模板、Set遍历模板、Map遍历模板、事件监听模板、Predicate filter接口模板、Map迭代遍历模板、Reduce聚合模板、线程模板中的至少一种。

可选地,所述代码应用场景信息包括:实现Runnable接口、事件处理、列表迭代、函数式接口Predicate、Map、Reduce、求集合元素的最大值、求集合元素的最小值、求集合元素的平均值、stream流中的至少一种。

可选地,所述lambda代码表达式包括第一注释说明,所述第一注释说明包括对lambda代码表达式中的方法体的注释说明。

可选地,所述装置还包括:

代码展示模块,用于在用户界面展示所述lambda代码表达式和非lambda代码表达式。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本发明实施例还提供了一种电子设备,包括:

包括处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,该计算机程序被处理器执行时实现上述代码生成方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。

本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储计算机程序,计算机程序被处理器执行时实现上述代码生成方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。

以上对本发明所提供的一种代码生成方法、装置、电子设备及存储介质,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

相关技术
  • 报文预定义代码生成方法、装置、电子设备和存储介质
  • 一种浴室加热装置和用于控制浴室加热装置的方法、设备、电子设备及计算机可读存储介质
  • 一种漆面识别方法、装置、存储介质及电子设备
  • 一种植物观赏方法、装置、电子设备和存储介质
  • 一种题目搜索、批改方法、装置、电子设备和存储介质
  • 代码生成方法、代码生成装置、存储介质及电子设备
  • 代码生成方法、代码生成器、电子设备及存储介质
技术分类

06120116504367