LINUX.ORG.RU
ФорумTalks

[ЖЖ] Почему жабка такая многословная?

 


0

3

Сабж. Такое впечатление, что создатели из всех возможных вариантов конструкций выбирали наиболее длинный.

И не надо говорить, что IDE заменяет мозг^Wпамять - она может подсказать название метода, но код вида

someButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//bla-bla...
}
});

утомляет неимоверно.

В этом нашем питоне все куда более логичнее и понятнее.

Давай начнем с избыточности.

Какое слово из этого кода, по твоему мнению, не нужно?

И приведи пример на «жабе твоей мечты», где этого слова было бы не нужно

stevejobs ★★★★☆
()

Тот кто грустит над синтаксисом джавы, может взять скалу, а не создавать нытик-треды.

baverman ★★★
()

жаба - ентерпрайз

в ентерпрайзе погромистам платят за объем написанного, все верно

xtraeft ★★☆☆
()

размотай лапшу; создай свои листенеры, производные от нужных; будь мужиком, не ной, итп ;))


думаю, гуру меня подправят :)

aol ★★★★★
()
Ответ на: комментарий от stevejobs

>Какое слово из этого кода, по твоему мнению, не нужно?

Почему не передать в setOnClickListener указатель на метод или просто анонимную функцию?

Собственно я жабу только начинаю пинать. Может где-то и существует красивый и лаконичный код на ней, но пока встречал только подобное написанному в топике.

KDE41user
() автор топика
Ответ на: комментарий от KDE41user

> Почему не передать в setOnClickListener указатель на метод или просто анонимную функцию?

Тут другой подход к решению задач, чем в Питоне. Те же самые результаты добиваются совсем другим способом, старые способы не работают. В частности, желание постоянно писать анонимные функции сиволизирует, что нужно сменить архитектуру.

красивый и лаконичный код на ней, но пока встречал только подобное написанному в топике.


в том, что я вижу в топике, только важные и нужные слова.
есть в жаве фигня, но не в твоем примере.

stevejobs ★★★★☆
()

Должно быть как в c++:

struct button {
	typedef void (fname)();
	std::list<fname*> onclick;
	void clicked() const
	{
		for (auto i=onclick.cbegin();i!=onclick.cend();++i)
			(*i)();
	};
};
int main()
{
	button b;
	
	/* см сюда */
	b.onclick.push_back([]{cout << "blah\n"; });
	
	b.clicked();
}
legolegs ★★★★★
()
Ответ на: комментарий от legolegs

в примере у ТС onClick - это только небольшая часть приаттаченного listener'а, может быть даже не самая главная =)

stevejobs ★★★★☆
()

>Такое впечатление, что создатели из всех возможных вариантов конструкций выбирали наиболее длинный.

Месье ещё не видел C#?


В этом нашем питоне все куда более логичнее и понятнее.


Месье ещё не видел Перл?

kranky ★★★★★
()

Потому что Питон современный язык с динамической типизацией а не энтерпраыйз-убожество для обезьянокодеров.

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от stevejobs

Уж простите, но если мы к событию onClick приаттачиваем обработчик, то onclick - это по определению его самая главная часть же.

PS кстати, мой пример тоже переусложнён. При нормальной архитектуре никогда не нужны несколько листенеров для onclick. Для какого-нибудь onvaluechanged - может быть, но не для клика по кнопке. Так что std:list у меня лишний.

legolegs ★★★★★
()

Тяжелый синтаксис явы - следствие необходимости сохранения обратной совместимости. Новые ключевые слова вводить тоже нельзя.

В вашем питоне нет таких жестких стандартов.
В нашей скале таких проблем тоже нет)

note173 ★★★★★
()
Ответ на: комментарий от legolegs

то onclick - это по определению его самая главная часть же.

обработчик - это объект же. Может быть, иерархия родительских классов уже добавила достаточно логики, чтобы у onClickListener'а не было вообще никакого метода onClick?

например,

someButton.addBehavior(new SubmitButtonBehavior()) form.add(someButton)

подразумевая, что у формочки на html-странице есть только один метод Submit, доопределять SubmitButtonBehavior по-умолчанию не нужно, понятно что он сделает.

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

stevejobs ★★★★☆
()

>И не надо говорить, что IDE заменяет мозг^Wпамять - она может подсказать название метода, но код вида

В этом примере IDE вполне себе само всё сделает.

Yareg ★★★
()
Ответ на: комментарий от stevejobs

>обработчик - это объект же Что значит «объект»? он сохраняет своё состояние между кликами? А зачем? Клики считать? Как часто это нужно? А если состояния нет - это это таки просто функция, процедура если хотите.

Простые вещи должны делаться просто. В 99% случаев достаточно тупого onclick = function(){ submit(); }, поэтому такие вещи должны делаться просто. А усложняться постепенно, по мере усложнения, простите за каламбур.

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

> поэтому такие вещи должны делаться просто.

чтобы сгенерить код из топика, нужно немногим больше нажатий на клавиши, чем твое «onclick = function(){ submit(); }». Весь шаблонный код генерит IDE. Но при этом масштабируется оно гораздо лучше — масштабирование тут искаропки!

Простые вещи должны делаться просто. В 99% случаев достаточно тупого onclick


в тех фреймворках, с которыми я сейчас имею дело, лиснеры — одна из самых сложных вещей. говоря button.addBehavior мы редактируем сложную цепочку вызовов на сервере, автоматически генерим клиентский javascript и xhtml. (так можно писать аяксовые приложения, не написав ни строчки жаваскрипта самому). Так что в том банальном лиснере - многие тысячи строк кода, сакральный onClick - только вершина айсберга, запускающая лавину.

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

>чтобы сгенерить код

А читать, понимать и поддерживать его тоже IDE будет?

нужно немногим больше нажатий на клавиши

Больше 20и нажатий?? Да, java - страшная штука.

Но при этом масштабируется оно гораздо лучше

Смасштабируйте мне на микроконтроллер.

лиснеры — одна из самых сложных вещей.

Таки листенер - это только часть поведения, не путай.

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

Смасштабируйте мне на микроконтроллер.

купи еще один сервак в стойку =)

Таки листенер - это только часть поведения, не путай.

эээ не путай что с чем?

stevejobs ★★★★☆
()
Ответ на: комментарий от baverman

> Тот кто грустит над синтаксисом джавы, может взять скалу

Тот, кто грустит, обычно не имеет права выбирать язык проекта.

tailgunner ★★★★★
()
Ответ на: комментарий от stevejobs

>Но при этом масштабируется оно гораздо лучше — масштабирование тут искаропки!
Пруф или не было. Ума не приложу причем тут масштабирование, или жаба настолько замечательная, что ей требуется пару серверов для того, чтобы обработать только пустые аякс запросы?
П.С.
Надеюсь тут хотя-бы есть возможность сделать так, чтобы 10 левых кнопок в таблице при клике делали задержку в 10 секунд не чепятая страницу кода.

Tark ★★
()
Ответ на: комментарий от tailgunner

Да, стабильная неудовлетворенность приземленной работой, отличительная черта IT.

baverman ★★★
()

Android? Там же и так можно:

<Button ...  android:onClick="butHello_Click"></Button>

и в коде класса

public void butHello_Click(View v){
    ...
}
snizovtsev ★★★★★
()

Ну такой вот язык. Конкретно в этом случае в 8-й джаве можно будет использовать другой синтаксис для анонимных функций. Кому хочется современного, но джавы - добро пожаловать в Scala, она уделывает все эти ваши пайтоны.

Legioner ★★★★★
()
Ответ на: комментарий от stevejobs

> Давай начнем с избыточности.

Какое слово из этого кода, по твоему мнению, не нужно?

И приведи пример на «жабе твоей мечты», где этого слова было бы не нужно



Всё уже давно изобрели:

button.onClick do |b|
# bla-bla...
end

geekless ★★
()
Ответ на: комментарий от stevejobs

> Тут другой подход к решению задач, чем в Питоне. Те же самые результаты добиваются совсем другим способом, старые способы не работают. В частности, желание постоянно писать анонимные функции сиволизирует, что нужно сменить архитектуру.

Всё верно — изобрели свой велосипед с квадратными колёсами и теперь ездят на нём «совсем другим способом, старые способы не работают». Если Желание пересесть на круглые колёса символизирует, что нужно купить нормальный велосипед.

geekless ★★
()

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

Quasar ★★★★★
()
Ответ на: комментарий от baverman

> Прозреваю, гуйню на нем пишут чаще, чем на руби :)

Честно говоря, о современном состоянии smalltalk имею смутное представление. Где smalltalk щас активно используется, можно примеры?

geekless ★★
()
Ответ на: комментарий от geekless

Где smalltalk щас активно используется

Примерно там же где и лисп. То есть поддержка легаси систем, первоначальные авторы которых успели промыть мозги заказчикам на волне AI и OO хайпов.

baverman ★★★
()
Ответ на: комментарий от geekless

Если Желание пересесть на круглые колёса символизирует, что нужно купить нормальный велосипед.

угу, желая прикрутить круглые колеса, ты упустил, что прикручиваешь их к ракете, а не велосипеду

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

И приведи пример на «жабе твоей мечты», где этого слова было бы не нужно

Ну дык очевидно же.

someButton.setOnClickListener(void(View v) {
//bla-bla
});
Это если вывод типов не добавлять. А если добавить, то так
someButton.setOnClickListener((v) {
...далее по тексту

Miguel ★★★★★
()
Ответ на: комментарий от geekless

Где smalltalk щас активно используется, можно примеры?

В Транзасе, вроде бы, на нём авиасимуляторы делают.

Miguel ★★★★★
()
Ответ на: комментарий от stevejobs

> протри очки: в твоем примере в onclick загоняется одна функция, а в примере ТСа - тысячи

Ну можно так:

button.addOnClickHandler do |b|
# bla-bla...
end

Или так:

button.addOnClickHandler SomeDefaultBehavior.new

geekless ★★
()
Ответ на: комментарий от baverman

Сам знаю, что кошмар. Но как еще явистам объяснить.

geekless ★★
()
Ответ на: комментарий от Miguel

>Взаимоисключающие параграфы.

Miguel


То что твоя мона не поддерживает динамическую типизацию исключительно недостаток твоей мертворожденной моны

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от Miguel

По части моделирования различных систем уже везде рулит и педалит Питон несмотря на все его недостатки

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от legolegs

Должно быть как в c++:

для gcc уже можно писать так:

   void clicked() const
   {
      for( auto it : onclick )
         (*it)();
   };
aho
()
someButton.setOnClickListener(new MineOnClickListener());

Class MineOnClicKListener implements OnClickListener {
@Override
public void onClick(View v) {
//bla-bla...
}
};

Типа того =)

fjfalcon ★★★
()
Ответ на: комментарий от DNA_Seq

По части моделирования различных систем уже везде рулит и педалит Питон несмотря на все его недостатки

Это каких, собственно?

Про модели процессоров на Haskell я слышал, про моделирование на змеюке - нет.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

Кстати, подобные проекты интересны еще и тем что интерактивный режим питона используется в качестве своеобразной консоли. Там в примерах есть. То есть допустим прямо из питоновской консоли можно загрузить модель, провести с ней какие-то манипуляции и сохранить. Если результат устраивает - сохранить все как скрипт.

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от DNA_Seq

Это называется REPL. Must have для любого современного языка.

Miguel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.