前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从Java到Groovy的八级进化论

从Java到Groovy的八级进化论

作者头像
FunTester
发布2020-04-03 15:41:49
4130
发布2020-04-03 15:41:49
举报
文章被收录于专栏:FunTesterFunTester

Groovy和Java确实是亲戚关系,它们的语法非常相似,因此对于Java开发人员来说,Groovy非常容易学习。相似之处在于,大多数Java程序甚至都是有效的Groovy程序(把文件后缀.java改成.groovy即可)。

我将从一个基础Hello World程序开始,分享一下Java如何演化成Groovy的Demo。

原始的Hello World

代码语言:javascript
复制
public class HelloWorld {

    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public String greet() {
        return "Hello " + name;
    }

    public static void main(String[] args) {
        HelloWorld helloWorld = new HelloWorld();
        helloWorld.setName("Groovy");
        System.out.println(helloWorld.greet());
    }

}

这个Hello World类具有一个私有字段,该私有字段表示名称及其相关的getter()setter()。还有一个greet()方法,该方法将返回著名的Hello World字符串。然后是一个main()方法,该方法将实例化我们的类,设置名称并在输出欢迎消息。

Groovy程序一级进化

代码语言:javascript
复制


public class HelloWorld {

    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public String greet() {
        return "Hello " + name;
    }

    public static void main(String[] args) {
        HelloWorld helloWorld = new HelloWorld()
        helloWorld.setName("Groovy")
        System.out.println(helloWorld.greet());
    }
}

初级进化的Groovy跟Java程序是完全相同的程序!这并不是真正的Groovy程序,因为我们可以对其进行改进以使其更加简洁易读。

Groovy程序二级进化

我们将通过执行一些简单的步骤来Groovy化该程序。第一步将是删除分号:并且,同时,我还将删除public关键字,因为默认情况下,类和方法在Groovy中是public,除非另有明确说明。我们的Groovy程序现在变为:

代码语言:javascript
复制
class HelloWorld {

    private String name

    void setName(String name) {
        this.name = name
    }

    String getName() {
        return name
    }

    String greet() {
        return "Hello " + name
    }

    static void main(String[] args) {
        HelloWorld helloWorld = new HelloWorld()
        helloWorld.setName("Groovy")
        System.out.println(helloWorld.greet())
    }
}

Groovy程序三级进化

我们还可以使用Groovy的特殊字符串:GString。在用双引号分隔的普通字符串中,可以放置一些用${someVariable}分隔的占位符,当打印该字符串时,它们将被变量或表达式的值替换。因此,无需费心手动连接字符串。那么,我们的greet()方法是什么样的呢?

代码语言:javascript
复制
String greet() {
    return "Hello ${name}"
}

Groovy程序四级进化

更进一步:可以省略return关键字,方法的最后一个计算表达式将是返回值。因此,greet()现在甚至更简单了:

代码语言:javascript
复制
class HelloWorld {

    private String name

    void setName(String name) {
        this.name = name
    }

    String getName() {
        name
    }

    String greet() {
        "Hello ${name}"
    }

    static void main(String[] args) {
        HelloWorld helloWorld = new HelloWorld()
        helloWorld.setName("Groovy")
        System.out.println(helloWorld.greet())
    }
}

甚至可以自由地将getName()greet()方法转换为单行代码。

Groovy程序五级进化

但是接下来呢?Groovy类属性方法开始起作用。可以简单地声明一个属性,而不是创建一个私有字段并编写一个gettersetter方法。在Groovy中,属性非常简单,因为它们仅是字段声明,没有任何特定的可见性。我们的name属性将只是String name,仅此而已。Groovy将免费提供一个私有字段以及相关的gettersetter。对于调用setName(),您将能够编写helloWorld.name ="Groovy",对于getName(),只需编写helloWorld.name

代码语言:javascript
复制
class HelloWorld {

    String name

    String greet() {
        "Hello ${name}"
    }

    static void main(String[] args) {
        HelloWorld helloWorld = new HelloWorld()
        helloWorld.name = "Groovy"
        System.out.println(helloWorld.greet())
    }
}

Groovy程序六级进化

Groovy为您提供了一些诸如打印之类的日常任务的便捷方法和快捷方式。您可以将System.out.println()替换为println()。Groovy甚至通过提供其他实用程序方法来装饰JDK类。对于顶级语句(仅是带有某些参数的方法调用的语句),可以省略括号。

代码语言:javascript
复制
class HelloWorld {

    String name

    String greet() {
        "Hello ${name}"
    }

    static void main(String[] args) {
        HelloWorld helloWorld = new HelloWorld()
        helloWorld.name = "Groovy"
        println helloWorld.greet()
    }
}

Groovy程序七级进化

到目前为止,我们通过定义每个方法,变量或字段的类型在各处使用了强类型。Groovy还支持动态键入。因此,如果愿意,我们可以摆脱所有类型:

代码语言:javascript
复制
class HelloWorld {

    def name

    def greet() {
        "Hello ${name}"
    }

    static main(args) {
        def helloWorld = new HelloWorld()
			helloWorld.name = "Groovy"
			println helloWorld.greet()
    }
}

我将字符串转换为def关键字,我们能够删除main方法的void返回类型以及其参数的字符串类型数组。

Groovy程序八级进化

Groovy是一种面向对象的语言,它支持与Java相同的编程模型。但是同时Groovy还拥有一个重要的特性:Groovy是一种脚本语言,因为它允许编写一些不需要定义类结构的自由格式程序。因此,在本教程的最后一步,我们将完全摆脱主要方法:

代码语言:javascript
复制
class HelloWorld {

    def name

    def greet() {
        "Hello ${name}"
    }
}

def helloWorld = new HelloWorld()
helloWorld.name = "Groovy"
println helloWorld.greet()

脚本实际上只是一堆随意扔到程序中的代码。甚至可以在脚本中定义几个类,就像我们的HelloWorld类一样。


  • 郑重声明:文章首发于公众号“FunTester”,禁止第三方(腾讯云除外)转载、发表。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原始的Hello World
  • Groovy程序一级进化
  • Groovy程序二级进化
  • Groovy程序三级进化
  • Groovy程序四级进化
  • Groovy程序五级进化
  • Groovy程序六级进化
  • Groovy程序七级进化
  • Groovy程序八级进化
相关产品与服务
网站渗透测试
网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档