Поскольку я видел много вопросов с советами по игре в гольф на интересующем их языке, я решил спросить о своем любимом языке: Groovy. Люди могут дать некоторые советы и рекомендации, которые будут использоваться в игре в гольф с Groovy.
Поскольку я видел много вопросов с советами по игре в гольф на интересующем их языке, я решил спросить о своем любимом языке: Groovy. Люди могут дать некоторые советы и рекомендации, которые будут использоваться в игре в гольф с Groovy.
Ответы:
Я новичок во всей этой игре в гольф, вот что я получил до сих пор:
Используйте замыкания, а не функции:
def a (b) {print b}
длиннее чем
a = {распечатать}
Вы можете использовать отрицательный индекс в массивах и списках в качестве псевдонима для size () -
c = "abc" d = ["a", "b", "c"] assert c [c.size () - 1] == c [-1] assert c [c.size () - 2] == c [-2] assert d [d.size () - 1] == d [-1] assert 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 является несколько многословным языком, вы можете использовать Groovys MOP для сокращения вызовов методов.
Следующий фрагмент, например, окупится после четвертого использования:
''.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()
возвращает[A, B, C, , X, Y, Z]
grep с регулярным выражением короче, чем преобразование в верхний регистр, если требуется: 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!
БОНУС: Отличный ... на Rails!
Что ж, в 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'))