Оскільки я бачив багато питань, що задають поради щодо гри в гольф цікавою мовою, я вирішив попросити мою улюблену мову: Groovy. Люди можуть дати кілька порад та підказів, які будуть використані в гольфі з Groovy.
Оскільки я бачив багато питань, що задають поради щодо гри в гольф цікавою мовою, я вирішив попросити мою улюблену мову: Groovy. Люди можуть дати кілька порад та підказів, які будуть використані в гольфі з Groovy.
Відповіді:
Я новачок у всій гольф-справі, ось що я отримав дотепер:
Використовуйте замикання, а не функції:
def a (b) {print b}
довше, ніж
a = {роздрукувати}
Ви можете використовувати негативний індекс у масивах та списках як псевдонім для size () -
c = "abc" d = ["a", "b", "c"] стверджувати c [c.size () - 1] == c [-1] стверджувати c [c.size () - 2] == c [-2] стверджувати d [d.size () - 1] == d [-1] стверджувати d.last () == d [-1]
Оператор розповсюдження - це ярлик для збирання:
assert d * .size () == d.collect {it.size ()}
Для сортування використовуйте оператор космічного корабля:
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)}}
Редагування конверсій:
assert "123" as int == "123".toInteger()
*.X
оператор розповсюдження часто може бути записаний як.X
Оскільки Groovy є дещо багатослівною мовою, ви можете використовувати MOP Groovys для скорочення викликів методів.
Такий фрагмент, наприклад, окупиться після четвертого використання:
''.metaClass.r<<{i->(int)Math.random()*i}
''.r(12)
Порада з гольфу редагувати:
0.metaClass.r<<{i->(int)Math.random()*i}
0.r(12)
Або ви знаєте:
r={(int)Math.random()*it}
r(12)
grep
короткий і працює над кількома проблемамиотримати символи рядка у вигляді списку з пробілами та без провідних елементів: 'ABC XYZ'.grep()
return[A, B, C, , X, Y, Z]
grep з regexp коротше, ніж перехід у верхній регістр, якщо потрібно: it.grep(~/(?i)$c/)
замістьit.toUpperCase().grep(c)
'ABC XYZ'as Set
на один персонаж коротший і працює в більшості тих самих місць
Отримання масиву зі списку об'єктів
Якщо у вас є список об'єктів, таких як:
def users = [[user:'A',id:1],[user:'B',id:2],[user:'C',id:3]]
Ви можете створити ArrayList з певним властивістю, використовуючи:
def userIds = users*.id // [1, 2, 3] no explicit loops!
БОНУС: Groovy ... на рейках!
Що ж, у Grails Framework ми повинні отримати багато значень із вибору з декількома атрибутами . Ви можете використовувати петлі, вирівнювати та інше програмування більш типових структур, але ви можете зберегти деякі рядки. Якщо у вас є вибір типу:
<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 --%>
Потім у свій контролер ви можете просто написати:
def aListOfUsers = User.getAll(params.list('userIds'))