Groovy常用語法彙總

来源:https://www.cnblogs.com/cleveraboy/archive/2019/01/23/10269798.html
-Advertisement-
Play Games

基本語法 1.Grovvy的註釋分為//和/**/和java的一樣. 2.Grovvy語法可以不已分號結尾. 3.單引號,裡面的內容嚴格的對應java中的String,不對$符號進行轉義. 4.雙引號“ ”的內容中如果有$號的話,會先對錶達式先求值. 5.三個引號中的字元串支持隨意的換行. 定義變數 ...


基本語法

1.Grovvy的註釋分為//和/**/和java的一樣.

2.Grovvy語法可以不已分號結尾.

3.單引號,裡面的內容嚴格的對應java中的String,不對$符號進行轉義.

def s1 = 'i am a student $'
println s1
i am a student $

4.雙引號“ ”的內容中如果有$號的話,會先對錶達式先求值.

def age = 100
def s2 = "他已經 $age 歲了"
println(s2)
他已經 100 歲了

5.三個引號中的字元串支持隨意的換行.

def s3 = '''
 x
 y
 z
'''
println(s3)
 x
 y
 z

定義變數

Grovvy中支持動態類型,定義變數的時候可以不指定類型,Grovvy中可以使用關鍵字def.

def a = 1
def b = "我是誰"
def double = 1.0

定義函數

def fun(){
}
fun()
def fun1(def1,def2){
   println def1+" &&"+def2
}
fun1(1,2)
String fun2(){
    return "返回值"
}
println fun2()
def getSomething(){
    "我是誰"
     1000
}
println getSomething()

註意:

1.無返回類型的函數定義,必須使用def關鍵字 ,最後一行代碼的執行結果就是本函數的返回值

2.如果指定了函數返回類型,則可不必加def關鍵字來定義函數

斷言assert

斷言變數為空

def t1 = null
assert t1

斷言變數的長度

def t2 = "ab3"
assert t2.size() >3

註意:

1.如果斷言發生,斷言後面的代碼無法執行

迴圈For

方式一

for (i=0;i<5;i++){
    println i
}

方式二

for(i in 0..5){
  println i
}

其它

for(i in 0..<5){
  println ("hello world")
}

迴圈time

times表示從0開始迴圈到4結束

4.times {
    println it
}

三目運算符

def name = 'd'
def result = name=='d'?'cc':"abc"
println result

捕獲異常

try {
  5/0
}catch(Exception e){
   e.printStackTrace()
}

Switch

age = 36
def rate
switch (age){
    case 10..26:
        rate = 0.05
          break
    case 27..36:
        rate = 0.06
        break
    case 37..46:
        rate = 0.07
        break
    default:
        throw new IllegalArgumentException()
}
println rate

判斷是否為真

Person person
println person?.Data?.name

asType

asType就是數據類型轉換

def g1 = '1'
def f1= g1 as int
def f2 = g1.asType(Integer)
println f2

Groovy數據類型

Groovy中的數據類型主要分2種

  • 一個是Java中的基本數據類型。

  • 另外一個是Groovy中的容器類。

  • 最後一個非常重要的是閉包。

      Java 基本類型

def boolean b1 = true
println b1
def int b2 = 100
def String b3 = "hello world"
if(b1){
   println "hello world"
}

      Groovy 容器

List:鏈表,其底層對應Java中的List介面,一般用ArrayList作為真正的實現類。

Map:鍵-值表,其底層對應Java中的LinkedHashMap。

Range:範圍,它其實是List的一種拓展。

 List

def aList = [5,'string',false]
println aList
println aList[0]
println "集合的長度:"+aList.size()
aList[10] = 'sss'
println aList
[5, string, false]
5
集合長度:3
[5, string, false, null, null, null, null, null, null, null, 'sss']
集合長度:11

 map

def map = [key1:"value1",key2:"value2",key3:"value3"]
println map
println "map的長度:"+map.size()
println map.keySet()
println map.values()
println map.key1
println map.get("key1")
map.put("key4","value4")
println map.entrySet()
Iterator it = map.iterator()
while(it.hasNext()){
    println "遍歷map:"+it.next()
}
map.containsKey("key1")
map.containsValue("values1")
map.clear()
Set set = map.keySet()

range

Range 是 Groovy 對 List 的一種拓展.

def range = 1..5
println range
println "長度:"+range.size()
println "迭代器:"+range.iterator()
println "獲取標號為1的元素:" +range.get(1)
println "是否包含元素5:"+range.contains(5)
println "最後一個元素:"+range.last()
//println "移除標號為1的元素:"+range.remove(1)
//清空列表
//range.clear()
println "第一個數據:"+range.from
println "最後一個數據:"+range.to

閉包

模板

def xxx = {paramters -> code}  
//或者  
def xxx = {無參數,純code}
def fun1 = {
    p1 ->
         def s = "我是一個閉包,"+ p1
}
println(fun1.call())
println(fun1.call("我是一個參數"))
println fun1("我是參數2")

閉包沒定義參數的話,則隱含有一個參數,這個參數名字叫it,和this的作用類似。it代表閉包的參數。

def fun2 = {
    it -> "abcd"
}
println fun2.call()

如果在閉包定義時,採用下麵這種寫法,則表示閉包沒有參數!

def fun3 = {
    -> "cccc"
}
println fun3.call()

省略圓括弧

def list = [1,2,3]
list.each {
    println it
}
1
2
3

each函數調用的圓括弧不見了!原來,Groovy中,當函數的最後一個參數是閉包的話,可以省略圓括弧。比如:

def fun5(int a1,String b1,Closure closure){
   closure()
}
fun5(5,"test",{
    println "i am in closure"
})

以後這樣代碼會比較多:

task hello{
    doLast{
        println("hello world")
    }
}

案列1:

//字元串與閉包的結合使用
String str2 = 'the 2 and 4 is 6'
//each
str2.each {
    String temp ->println temp
}
//find來查找符合條件的第一個
println str2.find{
    String s -> s.isNumber()
}
//findAll
def sList = str2.findAll{
    String s1 -> s1.isNumber()
}
println sList
//any
def result = str2.any{
    String s -> s.isNumber()
}
println result
//collect
def list2 = str2.collect {
    it.toUpperCase()
}
println list2.toListString()

Java屬性

public class Person{
    def String name;
    def int age;

    String getName() {
        return name
    }

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

    int getAge() {
        return age
    }

    void setAge(int age) {
        this.age = age
    }

    @Override
    String toString() {
        return "Person{"+
                "name='"+name+'\''+
        ",age=" + age+
                '}';
    }
}
Person person = new Person()
person.setName("Test")
person.setAge(20)
println(person.toString())

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Quill是一個很流行的富文本編輯器,github上star大約21k: github:https://github.com/quilljs/quill/ 官網: https://quilljs.com/ 使用 下載: vue中使用: 效果 創建Quill實例需要兩個參數,container與opt ...
  • 首先,ES6 的 class 屬於一種“語法糖”,所以只是寫法更加優雅,更加像面對對象的編程,其思想和 ES5 是一致的。 function Point(x, y) { this.x = x; this.y = y; } Point.prototype.toString = function() { ...
  • if (window.performance) { console.info("window.performance is supported"); console.log(performance.navigation.type) } ...
  • 一、 主要知識點:html佈局,css變換,js事件觸發 二.CSS屬性記憶: CSS規則:子元素會繼承父元素的佈局屬性。不專本改變子元素的屬性,其會跟隨父元素。 功能 語句 margin 外邊距 Padding 內邊距 關於文本的水平居中為: text-align: center; 關於文本的垂直 ...
  • 1. 博客皮膚選擇 SimpleMemory 因為簡單,所以愛~ 2. 在”頁面定製CSS代碼“中填入以下內容 重要提示:側邊欄藍色風格,有的模塊可能遺漏,需要請自行在CSS樣式中的“側邊欄”加上對應DIV的id或者class 3. 在“首頁Html代碼”中填入以下內容: 說明:此樣式非首創,收集了 ...
  • 作為普通的網民來說,一般不需要知道也不用關心什麼是盜鏈,不過如果你是網站的開發者或維護者,就不得不重視盜鏈的問題了。如果你剛剛開發完一個沒有防盜鏈的帶有文件下載功能的網站,掛上internet,然後上傳幾個時下非常熱門的軟體或電影併在網站內公佈下載地址,讓MSN上的所有好友都來體驗一下你的傑作。 不 ...
  • 參考:https://www.cnblogs.com/lewis0077/p/5133812.html(深入解析策略模式) 參考:https://www.cnblogs.com/lewis0077/p/5133812.html(深入解析策略模式) 定義: 策略模式定義了一系列的演算法,並將每一個演算法封 ...
  • 前言 在上一篇中我們學習了結構型模式的組合模式和過濾器模式。本篇則來學習下結構型模式最後的兩個模式, 享元模式和代理模式。 享元模式 簡介 享元模式主要用於減少創建對象的數量,以減少記憶體占用和提高性能。這種類型的設計模式屬於結構型模式,它提供了減少對象數量從而改善應用所需的對象結構的方式。 用通俗的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...