Советы по игре в гольф в Groovy


14

Поскольку я видел много вопросов с советами по игре в гольф на интересующем их языке, я решил спросить о своем любимом языке: Groovy. Люди могут дать некоторые советы и рекомендации, которые будут использоваться в игре в гольф с Groovy.


1
Ну, это не очень популярно, не так ли :-(
Арманд

@Alison: Я чувствую себя плохо, так как на этом сайте Groovy нет чаевых для гольфа :(
Ant's

2
Есть ли у вас какие-либо советы, чтобы начать нас?
Арманд

Ответы:


5

Я новичок во всей этой игре в гольф, вот что я получил до сих пор:

Используйте замыкания, а не функции:

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
cfrick

3

Поскольку 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)

2

grep является коротким и работает над несколькими проблемами

получить символы строки в виде списка с пробелами и без ведущих элементов: 'ABC XYZ'.grep()возвращает[A, B, C, , X, Y, Z]

grep с регулярным выражением короче, чем преобразование в верхний регистр, если требуется: it.grep(~/(?i)$c/)вместоit.toUpperCase().grep(c)


1
'ABC XYZ'as Setна один персонаж короче и работает в большинстве одинаковых мест
Марти Нил,

2

Получение массива из списка объектов

Если у вас есть список объектов, таких как:

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'))

1
Примет ли этот вопрос советы по игре в гольф Grails? Признаюсь, я боюсь снайперов downvote ...
Виктор Ф

2
Не бойтесь, PCG полон очень хороших людей :)
Beta Decay
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.