Vì tôi đã thấy nhiều câu hỏi hỏi mẹo chơi golf bằng ngôn ngữ quan tâm của họ, tôi quyết định hỏi ngôn ngữ yêu thích của mình: Groovy. Mọi người có thể đưa ra một số mẹo và thủ thuật sẽ được sử dụng khi chơi golf với Groovy.
Vì tôi đã thấy nhiều câu hỏi hỏi mẹo chơi golf bằng ngôn ngữ quan tâm của họ, tôi quyết định hỏi ngôn ngữ yêu thích của mình: Groovy. Mọi người có thể đưa ra một số mẹo và thủ thuật sẽ được sử dụng khi chơi golf với Groovy.
Câu trả lời:
Tôi là người mới đối với toàn bộ môn đánh gôn này, đây là những gì tôi có được cho đến nay:
Sử dụng Đóng không phải chức năng:
def a (b) {in b}
dài hơn
a = {in nó}
Bạn có thể sử dụng chỉ mục phủ định trong mảng và liệt kê dưới dạng bí danh cho kích thước () -
c = "abc" d = ["a", "b", "c"] khẳng định c [c.size () - 1] == c [-1] khẳng định c [c.size () - 2] == c [-2] khẳng định d [d.size () - 1] == d [-1] khẳng định d.last () == d [-1]
Toán tử lây lan là một phím tắt để thu thập:
khẳng định d * .size () == d.collect {it.size ()}
Để sắp xếp sử dụng toán tử tàu vũ trụ:
e = [54,5,12]
assert e.sort{a,b->a<=>b}==e.sort{a,b->a<b?-1:+1}
assert e.sort{a,b->a<=>b}==e.sort{a,b->if (a>b) {return(-1)} else {return(+1)}}
Chỉnh sửa chuyển đổi:
assert "123" as int == "123".toInteger()
*.X
toán tử lây lan thường có thể được viết là.X
Vì Groovy là một ngôn ngữ hơi dài dòng, bạn có thể sử dụng Groovys MOP để rút ngắn các cuộc gọi phương thức.
Ví dụ đoạn mã sau sẽ trả hết sau lần sử dụng thứ tư:
''.metaClass.r<<{i->(int)Math.random()*i}
''.r(12)
Mẹo chỉnh sửa golf:
0.metaClass.r<<{i->(int)Math.random()*i}
0.r(12)
Hoặc, bạn biết:
r={(int)Math.random()*it}
r(12)
grep
là ngắn và làm việc trên một số vấn đềlấy ký tự của chuỗi dưới dạng danh sách có khoảng trắng và không có phần tử đứng đầu: 'ABC XYZ'.grep()
trả về[A, B, C, , X, Y, Z]
grep với regapi ngắn hơn chuyển đổi sang chữ hoa, nếu được yêu cầu: it.grep(~/(?i)$c/)
thay vìit.toUpperCase().grep(c)
'ABC XYZ'as Set
là một nhân vật ngắn hơn và hoạt động ở hầu hết các nơi giống nhau
Lấy một mảng từ danh sách các đối tượng
Nếu bạn có một danh sách các đối tượng như:
def users = [[user:'A',id:1],[user:'B',id:2],[user:'C',id:3]]
Bạn có thể tạo một ArrayList với một thuộc tính nhất định bằng cách sử dụng:
def userIds = users*.id // [1, 2, 3] no explicit loops!
THƯỞNG: Groovy ... trên đường ray!
Chà, trong Grails Framework, chúng ta phải nhận được nhiều giá trị từ một lựa chọn có nhiều thuộc tính . Bạn có thể sử dụng các vòng lặp, làm phẳng và lập trình các cấu trúc điển hình khác, nhưng bạn có thể lưu một số dòng. Nếu bạn có một lựa chọn như:
<select id="users" multiple="true" name="users">
<option value="193">User A</option>
<option value="378">User B</option>
<option value="377">User C</option>
</select><%-- No Grails tags for now --%>
Sau đó, trong bộ điều khiển của bạn, bạn có thể viết đơn giản:
def aListOfUsers = User.getAll(params.list('userIds'))