一文了解编程领域的模版

简介: 一文了解编程领域的模版

🍊在编程领域,模板是一种代码片段,它可以被重复使用,并允许您在保持代码的基本结构不变的情况下,根据需要调整其中的内容。模板通常在构建大型程序或开发一类相关程序时非常有用,以减少代码冗余并提高代码可读性。

      🍊模板可以通过多种方式实现,具体取决于使用的编程语言。在 C++ 中,可以使用模板来实现泛型编程。在 Java 中,可以使用泛型来实现类似模板的功能。此外,许多编程语言都提供了模板引擎,可以生成静态 HTML 或动态网页。

模版含义

在编程领域中,模板可以有多种含义。以下是最常见的几种:

泛型:泛型是指在一个类、接口或函数的定义中使用泛型,以提供对多种类型的支持。泛型模板可以在编译时为不同类型生成不同的代码版本,从而提供灵活的代码表示。

模板引擎:模板引擎是一种生成静态 HTML 或动态网页的工具。它通常使用特定的语法,将数据与模板中的代码结合,以生成最终的网页。

      模板的使用与实现方式因编程语言而异,但所有编程语言都提供了某种形式的模板来支持代码的重复使用和灵活性。

代码模版

      代码模板是指在编程过程中,预先编写好的一份代码,并通过一些技巧,将其中的特定部分替换为需要的信息,从而快速生成符合需求的代码。

      代码模板常用于节省编写重复代码的时间,以及保证代码质量和一致性。

以 Java 为例,下面是一个简单的代码模板文件(Template.txt):

public class ${ClassName} {
    public ${ReturnType} ${MethodName}(${Parameters} ) {
        // 业务逻辑code
        ${generalEditorCode}
    }
}

73d8c9be8b2a4960a39693770de0ac9a.png

可以通过以下步骤使用此模板:

  1. 将模板代码复制到一个文件中,例如Template.txt。
  2. 读取模版文件。
  3. 将模板中的占位符替换为具体的值,如ClassName、ReturnType、MethodName和Parameters。
  4. 保存到新文件中(如MyApplication.java)。

       根据需要,在代码中对方法进行修改和扩展。

以下代码来实现读取模板并根据模板生成代码:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class GenerateCode {
    public static void main(String[] args) throws IOException {
      public class GenerateCode {
    public static void main(String[] args) throws IOException {
        //替换模版的信息(根据需要,玩转模版)
        String className = "MyApplication";
        String returnType = "void";
        String methodName = "myMethod";
        String parameters = "int a, String b";
        String generalEditorCode = "System.out.println(a + b);";
        // 读取模板
        BufferedReader br = new BufferedReader(new FileReader("./file/Template.txt"));
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = br.readLine()) != null) {
            sb.append(line).append("\n");
        }
        br.close();
        // 替换模版中占位符
        String template = sb.toString();
        template = template.replace("${ClassName}", className);
        template = template.replace("${ReturnType}", returnType);
        template = template.replace("${MethodName}", methodName);
        template = template.replace("${Parameters}", parameters);
        template = template.replace("${GeneralEditorCode}", generalEditorCode);
        // 写入新文件
        FileWriter fw = new FileWriter("./file/" + className + ".java");
        fw.write(template);
        fw.close();
    }
}
    }
}

以我的视角为例,运行代码后会生成一个新的.java文件

73d8c9be8b2a4960a39693770de0ac9a.png

泛型

下面是一个简单的泛型类,它可以存储任意类型的数据:

public class Box<T> {
   private T t;
   public void add(T t) {
      this.t = t;
   }
   public T get() {
      return t;
   }
}
public class Main {
   public static void main(String[] args) {
      Box<Integer> integerBox = new Box<Integer>();
      Box<String> stringBox = new Box<String>();
      integerBox.add(10);
      stringBox.add("Hello World");
      System.out.println("Integer Value : " + integerBox.get());
      System.out.println("String Value : " + stringBox.get());
   }
}

在这个例子中,我们定义了一个名为 Box 的泛型类,并使用了 add 和 get 方法在其中存储和检索值。在创建 Box 对象时,您可以在括号中指定数据类型,如 Integer 或 String。

模版引擎

      模板引擎是一种生成动态内容的工具,常用于 Web 开发中。模板引擎允许用户创建一个静态的 HTML 页面,其中一些内容是可以动态生成的。通过在 HTML 模板中插入占位符,引擎可以根据需要在运行时自动替换为实际的内容。

以下是 Java 中使用 FreeMarker 作为模板引擎的示例代码:

  1. 创建 pom.xml,添加 FreeMarker 依赖
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.30</version>
</dependency>
  1. Java代码实现
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
/**
* @author 
* @date 2023年02月03日 14:43
*/
public class TemplatEengine {
   public static void main(String[] args) {
       // 定义模板(模版可以存在文件系统、DB或者云端存储等)
       String template = "<html>\n" +
               "    <head>\n" +
               "        <title>${title}</title>\n" +
               "    </head>\n" +
               "    <body>\n" +
               "        <h1>${header}</h1>\n" +
               "        <p>${message}</p>\n" +
               "    </body>\n" +
               "</html>";
       // 创建模板配置
       Configuration configuration = new Configuration();
       // 将模板数据存入数据模型
       Map<String, Object> dataModel = new HashMap<>();
       dataModel.put("title", "My Page");
       dataModel.put("header", "Welcome");
       dataModel.put("message", "Hello, World!");
       // 生成模板
       StringWriter writer = new StringWriter();
       try {
           Template t = new Template("template", new StringReader(template), configuration);
           t.process(dataModel, writer);
           System.out.println(writer.toString());
       } catch (TemplateException | IOException e) {
           e.printStackTrace();
       }
   }
}

该代码创建了一个简单的 HTML 模板,其中包含三个占位符:t i t l e 、 {title}、title、{header} 和 ${message}。接下来,代码将数据模型存入数据字典,然后使用 FreeMarker 模板引擎生成最终的 HTML。

运行结果

73d8c9be8b2a4960a39693770de0ac9a.png

小结

      在编程领域的一些场景下,模板是作为特定类型项目或任务的起点的蓝图或表单。在编程环境中,模板通常用于生成可针对特定用例进行定制的可重用代码。

      有几种类型的模板,包括代码模板、通用模板和模板引擎。代码模板为一段代码提供了一个基本结构,可以用作起点,而通用模板允许创建可以处理一系列数据类型的灵活代码。模板引擎是一种更高级的模板形式,允许创建和呈现动态 HTML 模板。

      总的来说,这些模版都可以提高效率,减少重复的工作量,可以给研发提供额外的时间来关注其他事情,如稳定性、代码优化、重构等。⚠️但是,了解使用模板的限制和权衡很重要,因为模板也可能会增加代码的复杂性并使其更难调试。

相关文章
|
人工智能 关系型数据库 分布式数据库
拥抱Data+AI|“全球第一”雅迪如何实现智能营销?DMS+PolarDB注入数据新活力
针对雅迪“云销通App”的需求与痛点,本文将介绍阿里云瑶池数据库DMS+PolarDB for AI提供的一站式Data+AI解决方案,助力销售人员高效用数,全面提升销售管理效率。
|
存储
进入BIOS设置和基本选项
进入BIOS设置和基本选项
614 0
|
关系型数据库 MySQL Java
spi机制打破双亲委派机制
在JDBC4及以上版本,连接MySQL数据库不再需要显式加载驱动(`Class.forName`),而是利用SPI机制。系统通过扫描`META-INF/services/java.sql.Driver`文件找到`com.mysql.cj.jdbc.Driver`并使用`ServiceLoader`由AppClassLoader加载。`DriverManager`在启动时加载所有可用的`Driver`实现,实现解耦和动态发现。虽然看起来逆向了双亲委派,但实际上每个类仍由适当的类加载器加载,保持了加载层次。
spi机制打破双亲委派机制
|
机器学习/深度学习 数据挖掘 物联网
【专栏】机器学习如何通过预测性维护、负载预测、动态冷却管理和能源效率优化提升数据中心能效
【4月更文挑战第27天】随着信息技术发展,数据中心能耗问题日益突出,占全球电力消耗一定比例。为提高能效,业界探索利用机器学习进行优化。本文讨论了机器学习如何通过预测性维护、负载预测、动态冷却管理和能源效率优化提升数据中心能效。然而,数据质量、模型解释性和规模化扩展是当前挑战。未来,随着技术进步和物联网发展,数据中心能效管理将更智能自动化,机器学习将在实现绿色高效发展中发挥关键作用。
359 5
|
10月前
|
小程序
微信小程序数据绑定与事件处理:打造动态交互体验
在上一篇中,我们学习了搭建微信小程序开发环境并创建“Hello World”页面。本文深入探讨数据绑定和事件处理机制,通过具体案例帮助你打造更具交互性的小程序。数据绑定使用双花括号`{{}}`语法,实现页面与逻辑层数据的动态关联;事件处理则通过`bind`或`catch`前缀响应用户操作。最后,通过一个简单的计数器案例,巩固所学知识。掌握这些核心技能,将助你开发更复杂的小程序。
|
数据采集 监控 安全
智能辅助快运装车规划系统整体建设方案
本方案为一家全国性快运企业设计,针对其分拣与装车过程中的问题,提出了一套全面的智能辅助快运装车规划系统。该系统通过多源货品整合、优先级驱动的配送安排、地址信息精准转化等功能,结合先进的智能算法,实现高效的装车与配送规划,从而提升调度精度、降低物流成本、提高配送效率。系统分六个阶段逐步建设,从基础平台搭建到持续优化,确保系统的高效运行与持续改进。
405 3
|
Ubuntu Linux 开发工具
windows11安装WLS2+Ubuntu
windows11安装WLS2+Ubuntu
|
Python
python中动态导入文件的方法
python中动态导入文件的方法
711 0
python中动态导入文件的方法
|
机器学习/深度学习 数据采集 算法
Python实现WOA智能鲸鱼优化算法优化支持向量机回归模型(LinearSVR算法)项目实战
Python实现WOA智能鲸鱼优化算法优化支持向量机回归模型(LinearSVR算法)项目实战
|
关系型数据库 MySQL Unix
MySQL配置不区分大小写的方法
结论 通过适当配置 lower_case_table_names参数以及在数据定义和查询中选择合适的校对规则,可以灵活地控制MySQL中的大小写敏感性,以适应不同的应用场景和需求。这样的设置既可以增加数据库的兼容性,又可以在必要时利用大小写敏感性进行精确的数据处理。需要注意的是,修改 lower_case_table_names参数后,最好在数据库初始化时进行,以避免现有表名的大小写问题。
1435 3