Wskazówki do gry w golfa w Groovy


14

Ponieważ widziałem wiele pytań z pytaniami dotyczącymi gry w golfa w ich interesującym języku, postanowiłem zapytać o mój ulubiony język: Groovy. Ludzie mogą dać kilka wskazówek i wskazówek, które zostaną wykorzystane w grze w golfa z Groovy.


1
Cóż, to nie jest zbyt popularne, czy to :-(
Armand

@Alison: Czuję się źle, ponieważ na tej stronie nie ma wskazówek dla Groovy dotyczących golfa :(
Ant

2
Czy masz jakieś wskazówki na początek?
Armand

Odpowiedzi:


5

Jestem nowy w tej całej grze w golfa, oto co do tej pory mam:

Użyj zamknięć nie działa:

def a (b) {drukuj b}

jest dłuższy niż

a = {wydrukuj}

Możesz użyć ujemnego indeksu w tablicach i listach jako aliasu dla size () -

c = „abc”
d = [„a”, „b”, „c”]

assert c [c.size () - 1] == c [-1]
potwierdź c [c.size () - 2] == c [-2]
potwierdź d [d.size () - 1] == d [-1]
assert d.last () == d [-1]

Operator rozprzestrzeniania jest skrótem do zbierania:

assert d * .size () == d.collect {it.size ()}

Do sortowania użyj operatora statku kosmicznego:

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

Edytuj konwersje:

assert "123" as int == "123".toInteger()

jeśli na jakiejś liście *.Xoperator rozkładania może być często zapisany jako.X
por.

3

Ponieważ Groovy jest dość gadatliwym językiem, możesz użyć Groovys MOP, aby skrócić wywołania metod.

Na przykład następujący fragment kodu spłaci się po czwartym użyciu:

''.metaClass.r<<{i->(int)Math.random()*i}
''.r(12)

Wskazówka dotycząca gry w golfa:

0.metaClass.r<<{i->(int)Math.random()*i}
0.r(12)

Lub wiesz:

r={(int)Math.random()*it}
r(12)

2

grep jest krótki i działa na kilka problemów

pobierz znaki łańcucha jako listę ze spacjami i bez elementów wiodących: 'ABC XYZ'.grep()zwraca[A, B, C, , X, Y, Z]

grep z regexp jest krótszy niż konwersja na duże litery, jeśli jest to wymagane: it.grep(~/(?i)$c/)zamiastit.toUpperCase().grep(c)


1
'ABC XYZ'as Setjest o jedną postać krótszy i działa w większości tych samych miejsc
Marty Neal

2

Uzyskiwanie tablicy z listy obiektów

Jeśli masz listę obiektów takich jak:

def users = [[user:'A',id:1],[user:'B',id:2],[user:'C',id:3]]

Możesz wygenerować ArrayList z określoną właściwością, używając:

def userIds = users*.id // [1, 2, 3] no explicit loops!

BONUS: Groovy ... na szynach!

Cóż, w Grails Framework musimy uzyskać wiele wartości z wyboru z wieloma atrybutami . Możesz używać pętli, spłaszczać i programować bardziej typowe struktury, ale możesz zapisać niektóre linie. Jeśli masz wybór jak:

<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 --%>

Następnie w kontrolerze możesz po prostu napisać:

def aListOfUsers = User.getAll(params.list('userIds'))

1
Czy to pytanie zaakceptowałoby wskazówki Grails do gry w golfa? Przyznaję, że boję się downvote snajperów ...
Victor F

2
Nie bój się, PCG jest pełne bardzo miłych ludzi :)
Rozpad Beta
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.