{"id":17121458,"url":"https://github.com/hellojukay/groovy-script","last_synced_at":"2025-08-01T09:33:50.219Z","repository":{"id":140615333,"uuid":"136901905","full_name":"hellojukay/groovy-script","owner":"hellojukay","description":"groovy script document","archived":false,"fork":false,"pushed_at":"2019-05-20T06:15:04.000Z","size":6107,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-24T02:33:25.519Z","etag":null,"topics":["document","groovy","groovy-script","script"],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hellojukay.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-06-11T09:10:13.000Z","updated_at":"2019-05-20T06:15:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"07e753e4-bef5-4d82-8127-e1d582f8d342","html_url":"https://github.com/hellojukay/groovy-script","commit_stats":{"total_commits":7,"total_committers":2,"mean_commits":3.5,"dds":0.2857142857142857,"last_synced_commit":"1b6ce6462a0ad19d8091cfa842edd6cab95e060f"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hellojukay/groovy-script","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hellojukay%2Fgroovy-script","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hellojukay%2Fgroovy-script/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hellojukay%2Fgroovy-script/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hellojukay%2Fgroovy-script/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hellojukay","download_url":"https://codeload.github.com/hellojukay/groovy-script/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hellojukay%2Fgroovy-script/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268199450,"owners_count":24211823,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-01T02:00:08.611Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["document","groovy","groovy-script","script"],"created_at":"2024-10-14T18:02:41.430Z","updated_at":"2025-08-01T09:33:50.176Z","avatar_url":"https://github.com/hellojukay.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# groovy-script\n```groovy\nprintln(\"这是一份关于groovy script的中文文档\")\n```\n## 代码注释\n和其他的编程语言一样Groovy脚本的注释有两中\n* // 这是行注释\n* /* 这是块注释 */\n\n推荐使用块注释的方式\n\n## 定义变量\nGroovy是一种动态的编程语言，所以变量可以在脚本里面使用def关键字来定义\n```groovy\ndef x = \"hello world\"\nprintln(x)\nx = 100\nprintln(x)\n```\n动态语言，并不是说Groovy没有类型，你也可以在定义变量的时候指定变量类型\n```groovy\nInteger x =10\nprintln(x)\n// 类型不匹配，赋值会报错\nx = \"hello world\"\nprintln(x)\n```\n## 字符串模板\n可以在字符串中直接使用模板替换变量\n```groovy\ndef name=\"hello jukay\"\ndef age = 18\ndef hello = \"Hello ${name}\" \ndef a = \"i am ${age} years old\"\nprintln(name)\nprintln(a)\n```\n\n## if/else条件表达式\n```shell\ndef age = 18\nif (age \u003c 18){\n    println(\"你是未成年人\")\n}else{\n    println(\"你是成年人\")\n}\n```\n\n## Switch条件达表示\ngroovy的case语句如果不break，会一直往下面执行。\n```groovy\ndef c= 'C'\nswitch(c) {\n    case 'A':\n    println(\"you got A\")\n    break\n    case 'B':\n    println('you got B')\n    case 'C':\n    println(\"you got C\")\n    default:\n    println('不知道你的成绩')\n}\n```\n\n## 返回一个Boolean类型的值\n```groovy\ndef check(x){\n    if (x \u003e 1000){\n        return true\n    }\n    return false\n}\ndef check(x){\n    return x \u003e 1000\n}\nprintln(check(1000))\n```\n\n## null与空字符串\nGroovy中null表示不指向任何对于，空字符串表示一个长度为0，不包含任何字符的字符串。一下脚本输出：不相等。\n```groovy\ndef a = null\nif (a == \"\"){\n    println(\"相等\")\n}else{\n    println(\"不相等\")\n}\n```\n数字转字符串\n```groovy\ndef array = [\"Hello\",\"World\"]\nprint(array.join(\",\"))\n```\n\n## 安全的操作对象\n如果你要使用 . 来访问对于的属性或者放置，如果对象没有初始化，或者指向了null,那么就会产生空指针一样，我们可以使用?来避免这个问题，如下：\n```groovy\n\nclass Person{\n    def getAge(){\n        return 18\n    }\n}\n\ndef p = new Person();\nprintln(p.getAge())\np = null\nprintln(p?.getAge())\n```\n使用？的好处是，如果对象是空，并不会抛出空指针异常，而是吧表达式的值认为是null.\n\n## 打印日志\n使用println函数来打印日志，一般会结合使用字符串模板，如下：\n```groovy\ndef age=18\nprintln(\"user age=${age}\")\n```\n\n## 使用列表\n初始化一个列表\n```groovy\ndef list = [1,2,3,4,'5']\n// 定义一个空的列表\ndef empty_list = []\n```\n遍历一个列表\n```groovy\ndef list = [1,2,3,4]\nfor(i in list){\n    println(i)\n}\n```\n使用索引访问列表中的数据，并且修改他\n```groovy\nprintln(list[0])\nlist[0] = \"hello world\"\nfor(i in list){\n    println(i)\n}\n```\n删除和添加列表中的数据\n```groovy\nlist.add(\"hellojukay\")\nfor(i in list){\n    println(i)\n}\nlist.remove(\"hellojukay\")\nfor(i in list){\n    println(i)\n}\n```\n\n## 使用Map结构\n初始化一个map\n```groovy\ndef map = ['name':\"Hellojukay\", 'age':18]\n// 定义一个空的map\ndef map2 = [:]\n```\n查找元素\n```groovy\nprintln(map.get('name'))\nprintln(map.get('sex')) // print null\nprintln(map['fuck']) // print nulll\nmap['sex'] = true\nprintln(map.get('sex')) // print true\nmap.remove('name') // 删除元素\n```\n遍历Map\n```groovy\ndef map = ['name':\"Hellojukay\", 'age':18]\nfor(e in map){\n    printf(\"key=%s, value=%s\\n\",e.key,e.value)\n}\n```\n\n## 使用range迭代\n使用 .. 可以是快速的产一个一个序列,从i到j,如果i==j，那么会产生一个长度为1的列表\n```groovy\ndef range=1..100\nfor(i in range){\n    println(i)\n}\n```\nrange是可以转化成数组或者list的\n```groovy\ndef range=1..1\nfor(i in range){\n    println(i)\n}\ndef arr= range.toArray()\nprintln(arr)\ndef list = range.toList()\nprintln(list)\nlist.add(\"hello\")\nprintln(list)\n```\n所以一般可以使用下面的方法来快速的生成数组或者list.\n```groovy\nprintln((1..3).toArray())\nprintln((1..3).toList())\n```\n\n## 定义函数\n```groovy\ndef fn(){\n    println(\"Hello World\")\n}\n```\n\n缺省参数\n```groovy\ndef fn(name=\"hellojukay\") {\n    println(name)\n}\nfn()\n```\n命名参数\n```groovy\ndef fn(String name){\n    println(name)\n}\nfn(name=\"hellojukay\")\n```\n可变长度参数\n```groovy\ndef fuck(String... names){\n    for(name in names){\n        printf(\"fuck your %s\\n\",name)\n    }\n}\nfuck(\"hello\", \"World\")\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhellojukay%2Fgroovy-script","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhellojukay%2Fgroovy-script","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhellojukay%2Fgroovy-script/lists"}