Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как понять Groovy? / 22 сообщений из 22, страница 1 из 1
03.09.2012, 18:52:43
    #37941877
oson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
Смотрю Groovy. Волосы встают дыбом. Как же разработку такого кода держать в таких рамках, чтобы приложение работало.
Например

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
class ModifyList extends ArrayList
{
    public ModifyList(def collection)
    {
        super(collection)
    }

    public void modify(closure)
    {
        for(i in 0..<this.size())
        {
            this[i] = closure(this[i])
        }
    }
}


def list = new ModifyList([1,2,3])
list.modify({it * it})
println(list)



То есть мы просто что-то, что по нашему замыслу должно быть коллекцией, назвали def collection.
А если другой программист туда передаст int? Или он должен догадаться по названию?
Я мог бы назвать параметр например def vasya. И как тогда должен пользователь метода догадываться,что именно передавать как параметр.

Кстати, если я делаю def list = new ModifyList(3), то ничего не падает.
Спокойно отрабатывается код и печатает []
Если такое будет внутри сложной системы, то как же отловить такую ошибку?
Получается, что например я написал код и назвал параметр collection, а другой член команды
должен был по названию догадаться, что это коллекция и передавать туда именно ее, а не int.
Но если он не догадается об этом или случайно передаст туда int, то билд все равно соберется и будет тихо работать неправильно.
Никаких сообщений об ошибке не будет даже в runtime. Будет падать где-то дальше, где ожидается например непустой List, а приходит пустой.
Но понять почему падает будет сложно.


Далее

Код: java
1.
list.modify({it * it})

.
Тут я передаю closure в метод, а в методе уже происходит

Код: java
1.
this[i] = closure(this[i])



То есть closure должен знать как обработать каждый элемент из этого this[i].
Если я выполняю умножение в этом closure, то я предполагаю, что там цифры.
То есть я должен передать известные мне аргументы, и передать что с ними делать
Например тут я передаю closure, который выполняет над String то что есть для String - конкатенацию.
Код: java
1.
2.
 def list = new ModifyList(["Name1", "Name2"])
 list.modify({it + it})



А тут я вызываю в closure то, что можно сделать с int - ну и передаю соответственно int.

Код: java
1.
2.
 def list = new ModifyList([1,2,3])
list.modify({it * 2})



Тут вроде я контролирую ситуацию.
Но при этом я должен знать, что будет делать метод modify(closure) в классе ModifyList с этим closure? То есть я должен знать внутреннее устройство метода прежде чем передать туда closure? И общая функциональность получается в результате сложения функциональности метода и функциональности передаваемого closure,
Как тут контролировать это смешение моего кода в closure, который я передаю в метод, и собственно кода в самом методе?
Хорошо если код в методе просто пробегает коллекцию и делает манипуляции, задаваемые closure, над каждым элементом.
Но наверное ж это просто частный случай?

В чем тут философия? Как это понимать?
...
Рейтинг: 0 / 0
03.09.2012, 19:34:43
    #37941918
GregTk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
oson,

Динмическая типизация она такая... Как вариант можно использовать в груви strict типизацию, в последней версии это есть.
...
Рейтинг: 0 / 0
03.09.2012, 21:10:47
    #37942027
oson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
А что значит в последней версии она есть? Ее ж вроде всегда можно было использовать? Или есть какой то механизм, чтобы team lead например разрешил только строгую типизацию?
...
Рейтинг: 0 / 0
03.09.2012, 21:40:34
    #37942054
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
osonчтобы team lead например разрешил только строгую типизацию?
на кой он тогда вообще нужен. groovy это ж типа та же Java, но с динамической типизацией. убираем динамическую типизацию. остаётся Java. :)
...
Рейтинг: 0 / 0
03.09.2012, 22:02:27
    #37942082
oson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
Ну а как управлять проектом, где каждый может написать def vasya? Получается что все должны быть в команде
гипер-профессионалы и очень наблюдательные. Компилятор и IDE тут не поможет же.
Вот и соберется себе билд спокойно, но работать не будет и ошибки будет кидать далеко в другом месте от того, где кто-то кто не выспался в тот день в этот метод вместо коллекции передавал просто int.
Как же с этим бороться? Или это язык для тех кто пишет в одиночку и знает, для чего он ввел этот параметр def value и что он там дальше с ним делает.
...
Рейтинг: 0 / 0
04.09.2012, 01:16:18
    #37942207
Лагман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
oson,

Придётся все-таки думать во время кодинга.
...
Рейтинг: 0 / 0
04.09.2012, 09:01:41
    #37942289
GKS_Samara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
Добрый день, oson!

> Ну а как управлять проектом, где каждый может написать def vasya?

Делать очень много юнит-тестов.
Так, чтобы они заменяли статическую типизацию.

--
Алексей
JID: alxt@ya.ru


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.09.2012, 09:11:33
    #37942294
Kostya Ilyinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
...
Рейтинг: 0 / 0
04.09.2012, 09:39:29
    #37942322
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
я за строгую типизацию. При любой ошибке и полном ребилде, компилятор поймает любую (почти ))) ) ошибку.
Эта ситуация напоминает JS в "обозревателях интернета". Поэтому пром.системы на нём не пишут.
...
Рейтинг: 0 / 0
04.09.2012, 14:42:31
    #37942895
oson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
Petro123я за строгую типизацию. При любой ошибке и полном ребилде, компилятор поймает любую (почти ))) ) ошибку.
Эта ситуация напоминает JS в "обозревателях интернета". Поэтому пром.системы на нём не пишут.

В одном из топиков человек написал что именно банковские системы и строятся на Grails. Вот и пойми. Тут видимо только супер профессионалы должны работать.

По поводу http://groovy.codehaus.org/gapi/groovy/transform/CompileStatic.html
Это видимо в последней версии? Должен и последний Grails быть уже на этой версии Groovy?
...
Рейтинг: 0 / 0
04.09.2012, 14:53:36
    #37942919
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
osonВ одном из топиков человек написал что именно банковские системы и строятся на Grails. Вот и пойми. Тут видимо только супер профессионалы должны работать.
скажу IMHO. Топиков с конкретикой как у тебя о семантике ЯП тут не много. В большинстве много общих рассуждений. Интересна как раз конкретика.
...
Рейтинг: 0 / 0
04.09.2012, 15:13:16
    #37942952
GregTk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
Я что-то не догоняю разговора, теперь что на строгую типизацию молиться надо? Что техники такие как TDD не работают? Или ООП совсем не такой как хочется и вообще в только в блокноте нормальные системы пилятся. Проясните какие проблемы с тем что у Groovy динамическая типизация?

Пример что какой-то программист Вася присвоет не то значение не состоятелен, так как и в Java можно закастить хоть что, хоть во что.

:)
...
Рейтинг: 0 / 0
04.09.2012, 15:18:10
    #37942962
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
GregTkЯ что-то не догоняю разговора, теперь что на строгую типизацию молиться надо? Что техники такие как TDD не работают? Или ООП совсем не такой как хочется и вообще в только в блокноте нормальные системы пилятся. Проясните какие проблемы с тем что у Groovy динамическая типизация?

Пример что какой-то программист Вася присвоет не то значение не состоятелен, так как и в Java можно закастить хоть что, хоть во что.

:)

Все зависит от проекта. В больших командах, и там где стабильность важнее(большинство опечаток и логических ошибок ловится во время компиляции) - предпочтительнее использовать статическую типизацию, и это никак не зависит от TDD. Для утилитных проектов или в проекте, который пишут 2-3 человека, динамическая типизация может сильно сократить время.
...
Рейтинг: 0 / 0
04.09.2012, 15:37:36
    #37943003
1024
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
osonPetro123я за строгую типизацию. При любой ошибке и полном ребилде, компилятор поймает любую (почти ))) ) ошибку.
Эта ситуация напоминает JS в "обозревателях интернета". Поэтому пром.системы на нём не пишут.

В одном из топиков человек написал что именно банковские системы и строятся на Grails. Вот и пойми. Тут видимо только супер профессионалы должны работать.

По поводу http://groovy.codehaus.org/gapi/groovy/transform/CompileStatic.html
Это видимо в последней версии? Должен и последний Grails быть уже на этой версии Groovy?

этот человек, видимо, является поклонником этого граилс и выдаёт желаемое за действительное. Пистит, если своими именами назвать.
...
Рейтинг: 0 / 0
04.09.2012, 15:50:57
    #37943037
GregTk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
забыл ник,

Ok, Что за логические ошибки и как они возникают, и как динамическая типизация их пораждает?
Ошибки пораждаются членами команды и если член команды знает о том что типизация динамическая он и будет контролировать типы.
Про опечатки это вообще мне не понятно, сейчас почти все среды разработки имеет нормальный auto-complete с скучей плюшек. Мне кажется что ничего страшного в динамической типизации нет, а проблемы с ней выдуманы ну или как минимум преувеличены.
Готов обсудить пример из жизни, где действительно динамическая типизация добавила только хлопот.
...
Рейтинг: 0 / 0
04.09.2012, 16:14:38
    #37943088
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
GregTk,
- да элементарный рефакторинг. Решил заменить float на int. Грохнул в самом важном модуле. Нажал на компиляцию, и пошёл править там где он остановится.
...
Рейтинг: 0 / 0
04.09.2012, 17:29:12
    #37943230
GregTk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
Petro123,

согласен пример реальный, но зная эту особенность можно код покрыть тестом. Так что не очень критично.
...
Рейтинг: 0 / 0
04.09.2012, 17:48:36
    #37943265
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
GregTk,
я не представляю.
- компилятор контролирует каждую букву сам. Чтобы тестами покрывать буквы - это новый компилятор.
- автодополнение тоже работает от инфы статической типизации. Банально меньше методов вылазит при подсказках.
ну и т.д.... А того кто не написал тесты покроем ещё сверху тестами)))
...
Рейтинг: 0 / 0
04.09.2012, 17:54:57
    #37943278
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
GregTkPetro123,

согласен пример реальный, но зная эту особенность можно код покрыть тестом. Так что не очень критично.

Статическая типизация тем и хороша, что позволяет не писать тонны тривиальных тестов, как вам еще обьяснить:) Плюс в процесс разработки включается такое понятие как дисциплина, кто-то забыл про тест и давай, до свидания. Вы когда-нибудь работали над проектом, где более 10 программистов, и они распределены по разным странам?
...
Рейтинг: 0 / 0
04.09.2012, 23:42:24
    #37943638
dominator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
oson,

Сейчас модно говорить, что динамическая типизация позволяет ускорять процесс разработки, но на мой взляд очень спорное утверждение. Например, IDE может показать методы объекта только в 30% случаев по информации от разработчиков Idea. Если нет нормальной документации, то задолбаешься разбирать что же приходит в ответ на вызов метода. Как раз недавно писал на Ruby скрипты развертывания, так вот пришлось лезть в код библиотеки что бы понять тип возвращаемого объекта, утиная типизация тоже вызывет вопросы. И опять же в основном быстро писать код не нужно, проекты проваливаются не из за медленного написания, а по другим причинам.
...
Рейтинг: 0 / 0
05.09.2012, 11:09:52
    #37944099
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
dominator Как раз недавно писал на Ruby скрипты развертывания, так вот пришлось лезть в код библиотеки что бы понять тип возвращаемого объекта
Когда интересовался руби (лет 5 назад), мне сильно не понравилась их документация. Она какая-то ущербная.
...
Рейтинг: 0 / 0
05.09.2012, 12:14:43
    #37944299
GregTk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как понять Groovy?
забыл ник,

Сейчас над таким работаю, но у нас для забывчивых, кто не написал тест есть cobertura и sonar.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как понять Groovy? / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]