2010-06-21 11 views

Odpowiedz

12

Kompilator Groovy będzie oczywiście znajdować błędy składniowe, ale prawie żadnych błędów typu, jak w Javie. Nawet użycie niezadeklarowanych zmiennych często przejdzie kompilację.

Zgłaszanie typów zwiększa ilość sprawdzanych czynności, ale nie o wiele.

Dzieje się tak dlatego, że Groovy jest dynamicznym językiem z rozbudowanymi funkcjami metaprogramowania, które uniemożliwiają kompilatorowi poznanie np. jakie metody lub pola dany obiekt będą miały w czasie kompilacji, ponieważ można to zmienić w czasie wykonywania przez inny kod.

Jednak wtyczki IDE oferują kompromis, zaznaczając elementy zmiennych zadeklarowanym typem, które nie występują w deklaracji klasy jako możliwe błędy. Następnie programista może zdecydować, czy ten użytkownik będzie obecny w czasie wykonywania, czy też po prostu zrobił literówkę. Dodatkowo, znani członkowie klasy pojawiają się w autouzupełnianiu.

1

nr

Został on zaprojektowany jako dynamicznego typowania języki programowania, które jest dość dużo przeciwieństwem jak sprawdzanie czasie kompilacji.

Zamiast tego należy dodać więcej testów jednostkowych.

+0

Myślę, że to jest kwestia - nie masz czasu na sprawdzanie kompilacji, więc możesz chcieć napisać więcej testów, aby sprawdzić, czy Twój kod jest poprawny. – Paul

+0

Dokładnie. A jako dodatkowy bonus złapiesz więcej niż tylko głupie błędy typu! – omnisis

14

Od Groovy 2.0 możliwe jest, aby sprawdzić typów w czasie kompilacji. Adnotacji można używać w klasie lub metodzie: @TypeChecked lub @CompileStatic. Pierwsza z nich mówi kompilatorowi, aby sprawdzał typ podczas kompilacji, a drugi wymusza na nim kompilację statyczną, która mniej więcej skutkuje kodem binarnym, jak z natywnego kompilatora JAVA. Oczywiście użycie drugiej adnotacji wiąże się z samoczynnym sprawdzeniem typu.

Grails 2.2 to pierwsze wydanie, które używa Groovy 2.0.

0

Ty nie można pisać testów jednostkowych, jeśli używasz Groovy ze składnią skryptu. To jak pisanie testów jednostkowych dla skryptów powłoki. Mimo to masz dostępną kompilację, po prostu nie mówi ci, że Sustem.out.println() jest nonsensem. Dla złapania tych błędów powinna być dostępna opcja kompilatora. Nie każdy skrypt zawiera meta-programowanie i kod DSL.