Quy định đặt tên định danh: Bắt đầu bởi chữ cái, ký hiệu dollar sign, hoặc dấu gạch dưới. Không được phép bắt đầu bởi số.
Chữ cái là các ký tự nằm trong khoảng
- từ
a
đếnz
(ký tự ASCII viết thường) - từ
A
đếnZ
(ký tự ASCIII viết hoa) - từ
\u00c0
đến\u00d6
- từ
\u00d8
đến\u00f6
- từ
\u00f8
đến\u00ff
- từ
\u0100
đến\ufffe
Một số định danh đặc biệt
// https://www.fileformat.info/info/unicode/char/00c0/index.htm
def À = 1
assert À == 1
Cách sử dụng map
File Hello.groovy
có nội dung
map = [:]
map.'''triple abc'''
map."""triple xyz"""
map./love string/
map.$/doll love string/$
def something = [:]
def firstName = "Van"
something."NguyenBich-${firstName}" = "Nguoi yeu cu"
assert something."NguyenBich-Van" == "Nguoi yeu cu"
println(something.'NguyenBich-Van')
println(something."NguyenBich-Van")
Lưu ý với cách đặt tên key trong kiểu dữ liệu map, những thứ dưới đây là cho phép
foo = [:]
foo./yeu em/ = "Yêu em Vân"
foo.$/bo em trang/$ = "Bỏ em Trang"
Chạy lệnh
groovy Hello.groovy
Kết quả là
Picked up _JAVA_OPTIONS: -Xmx512M
Nguoi yeu cu
Nguoi yeu cu
Cái này gọi là Groovy GString, khả năng nội suy xâu ký tự của Groovy. Javadoc https://docs.groovy-lang.org/latest/html/api/groovy/lang/GString.html
Các ký tự đặc biệt cho phép trong string là
\b
\f
\n
\r
\s
\\
\'
\"
Ví dụ liên quan đến GString
def sum = "The sum of 2 and 3 equals ${2 + 3}"
assert sum.toString() == 'The sum of 2 and 3 equals 5'
def sum2 = "The sum of 2 and 3 equals ${def a = 1; def b = 6; a + b}"
assert sum2.toString() == 'The sum of 2 and 3 equals 7'
def nguoi_nao_do = [ten: 'Van', tuoi: 33]
assert "$nguoi_nao_do.ten hien tai $nguoi_nao_do.tuoi tuoi" == "Van hien tai 33 tuoi"
def so_pi = 3.1415926535
def sParameterLessClosure = "1 + 2 == ${-> 3}"
assert sParameterLessClosure == '1 + 2 == 3'
def sOneParameterClosure = "1 + 2 == ${w -> w << 3}"
assert sOneParameterClosure == '1 + 2 == 3'
Ví dụ liên quan đến eager GString và lazy GString
def number = 1 // Mục 1
def eagerGString = "value == ${number}"
def lazyGString = "value == ${-> number}"
assert eagerGString == "value == 1" // Mục 2
assert lazyGString == "value == 1" // Mục 3
number = 2 // Mục 4
assert eagerGString == "value == 1" // Mục 5
assert lazyGString == "value == 2" // Mục 6
- Mục 1. Định ngĩa biến
number
chứa giá trị 1 ở đó chúng ta nội suy bên trong 2 GString, như là một biểu thức trongeagerGString
và một closure tronglazyGString
. - Mục 2. Chúng ta kỳ vọng rằng xâu kết quả chứa cùng giá trị là 1 cho
eagerGString
- Mục 3. Chúng ta kỳ vọng rằng xâu kết quả chứa cùng giá trị là 1 cho
lazyGString
- Mục 4. Sau đó, chúng ta thay đổi giá trị của biến thành một giá trị khác.
- Mục 5. Với biểu thức nội suy thuần, giá trị thực sự ràng buộc vào thời điểm khởi tạo GString.
- Mục 6. Nhưng với biểu thức closure, closure được gọi dựa trên mỗi lần ép giá trị của GSTring vào String, kết quả là một chuỗi được cập nhật chưuá giá trị số mới.
Một số dạng đặc biệt của string
def fooPattern = /.*chu_cuoi.*/
assert fooPattern == '.*chu_cuoi.*'
def escapeSlash = /The character \/ is a forward slash/
assert escapeSlash == 'The character / is a forward slash'
def nhieu_dong_chuoi_tron = /mot
hai
ba
bon/
assert nhieu_dong_chuoi_tron.contains('\n')
def mau_sac = 'xanh'
def noi_suy_chuoi_tron = /mot chiec xe mau ${mau_sac}/
assert noi_suy_chuoi_tron == 'mot chiec xe mau xanh'