LINUX.ORG.RU
ФорумTalks

[java] Живо еще, как там лямбды?

 


0

0

Что-то недавно нужно было реализовать логику:

writePrefix();
//тут чойто делает клиент моего клаccа
writeSuffix();

Распространенный фокус, вобщемто, еще часто встречается когда юзаем блокировки и тп. В принципе можно сказать клиенту «**ись сам с правильным вызовом методов», но этож не культурно, потому часто ему предлагают кондом в виде реализации интерфейса с одним лишь методом, в коем прячется лузерская логика (предохраняя его от ошибок) — суть маразм, надо заводить целый класс пусть и онанимный, и в конце кноцов все это пипец как нечитабельно. А если эта хрень имеет некоторую вложенность?

Вот вспомнил я что был слух про лямбды в яве, поискал в инете но все новости мягко говоря несвежие, и чойто непонятно, их там реализовывают или стоит переходить на моно (ибож альтернатив то немае)? И если реализовывают то в каком виде?

★★☆
Ответ на: комментарий от dimon555

какбе если я начну писать на неведомой юхне то те кто увидит мой код еще больше пожелают смерти всему миру, да и у явы хоть какято стабильность и IDE есть, а у шкалы?

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

А у моны что, есть стабильность? Или ты можешь писать на этой юхне хороший код?

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

клиенту для того чтобы экспортнуть в XML табличку пердется реализовать пяток монструозных интерфейсов? Ухехе

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

оно изменяет убогий сентаксис жабки?

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

Кстати, если уж упомянул таблички и XML, то явно не числодробилка. Поэтому можешь пользоваться любым тормозным интерпретатором, хоть Ruby, хоть VB, хоть Python, хоть Groovy все равно тормоза не заметишь

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

косяк в том что в целом то там весьма требовательно к памяти и скорости приложение, но оно в виде апплета (тута понятно выбор скудеет) и... должно уметь выкакивать результаты в xml.

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

лучшеб кто рассказал добавили ли лямбды в семерке

wfrr ★★☆
() автор топика

Мне одному кажется, что выфер изъясняется как бугмакер?

nikolayd
()
abstract class myClass(){
  abstract void myFunction();
  myMethod(){
   writePrefix();
   muFunction();
   writeSuffix();
  }
}

class clientClass extends myClass(){
  void  myFunction(){/*realization*/
}

никак не? или я не понимаю проблему?

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

этот костыль кой нарушает ООП и придумали от убогости ООП (отсутсвия анонимных функций) какбе имеет название и я описывал в главном посте убогость этого решения.

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

Если усилить:

abstract public class myClass {
	abstract protected void myFunction();

	final public void myMethod() {
		writePrefix();
		myFunction();
		writeSuffix();
	}

	protected void writeSuffix() {
		/* my realization */
	}

	protected void writePrefix() {
		/* my realization */
	}
}

public class clientClass extends myClass {
	@Override
	public void myFunction() {
		/* client realization */
	}
}

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

а). это не костыль б). это никак не нарушет ООП.

>в коем прячется лузерская логика (предохраняя его от ошибок) — суть маразм, надо заводить целый класс пусть и онанимный, и в конце кноцов все это пипец как нечитабельно. А если эта хрень имеет некоторую вложенность?

лузерская логика - не аргумент

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

нечитабельно - не аргумент

какая хрень какую вложенность? Вложенность иметь может только абстрактный класс, если от него будет что-либо наследоваться. Если ты хочешь наследовать от клиентсткого не абстрактного класса, то лучше искать в нете не лямбды в джаве, а способы смены ДНК :)

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

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

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

Вообще-то именно о читабелности и ведёт речь топикастер. Только он почему то упоминает лямбды, тогда как они тут не к месту, к месту - вариации на тему with в питоновском стиле.

theos ★★★
()

Странный ты, белочка, хочешь и на яве писать, и чтоб всё по-человечески было. На яве надо по-армейски, а кто шибко умный, то переходи уже на питон.

kot_otbelivatel
()
Ответ на: комментарий от theos

пример тут ниочём, никакая читабельность не страдает.

Если бы в пример он привёл вычисление интеграла типа integrete(/*something-that-is-not-in-java*/,from,to,step), где /*something-that-is-not-in-java*/ это указатель на функцию, лямбда и что угодно, т.к. в яве этого нет.

Тут да нужен враппер фунции, и танцы с костылями.

Но топик стартер описал другой случай, имеющий решение в рамках явы.

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

Тут да нужен враппер фунции, и танцы с костылями.

Это делается через кучерявый интерфейс

Calculable<T,V>{
  V calculate(T argument);
}

Как и все остальное в жабке, если тебя это удовлетворяет, то повесься на ближайшем суку (и напиши себе на лбу «не аргумент!!11»). Нормальным людям надоело наследовать любой встречный\поперечный класс и они сваливаю с это дурацкой жабки.

А тут вопрос о том если в жабе свет в конце тоннеля, или все также убого.

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

к месту - вариации на тему with в питоновском стиле.

Пример кода в студию, хотя один хрен он мне не понадобится.

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

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

а что касается начала топика, то всё решается нормальным построением иерархии.

qnikst ★★★★★
()

А нафига? Сделай на основе шаблона Functor. А для крастоы сделай простенькую комбинаторную библиотечку. На Скалу перейдй, наконец...

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

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

Я жабке передавать функции нельзя, так что тут пук мимо.

что касается начала топика, то всё решается нормальным построением иерархии.

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

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

Сделай на основе шаблона Functor.

Вот уж костыль так костыль, и как будет читабелен тот код? Или слово Functor и ниипет.

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

ОМГ, лучше фреймворк сразу или ЯП.

На Скалу перейдй, наконец...

Писал же, низя.

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

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

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

>Вот уж костыль так костыль, и как будет читабелен тот код?

Читаем он будет отлично... Functor f = new Functor(); f();

>ОМГ, лучше фреймворк сразу или ЯП.


Сказал же - простенькую. Операцию композиции двух функторов, операцию условного выполнения двух функторов, операцию передачи параметра сразу в два функтора и т.п.

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

Читаем он будет отлично... Functor f = new Functor(); f();

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

Functor<String, Integer> f = new Functior<String, Integer>(А тут 
 туева хуча параметров кои былибы в контексте замыкания
 используй мы анонимные классы или лямбды);
String res = f.execute(1);//ты надеюсь знаешь что в жабке за f() //компилятор оторвет яйца? 

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

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

Сказал же - простенькую. Операцию композиции двух функторов, операцию условного выполнения двух функторов, операцию передачи параметра сразу в два функтора и т.п.

У меня смутное подозрение, что ты про яву знаешь лишь то что это мотоцикл и острав в окияне.

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

>У меня смутное подозрение, что ты про яву знаешь лишь то что это мотоцикл и острав в окияне.

У меня смутное подозрение, что ты не читал не только Александреску, но и даже GoF.

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

твои подозрения не оправдались, будем подозревать друг друга дальше? Или ты сразу признаешься что накосячил с «Functor f = new Functor(); f();» ?

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

ять, переять, какбе ты не понимаешь что проще

final int i = 0;
writeRow(new Runanble(){
  void run(){
    //тут мы выполянем свои действия и имеем доступ к 'i'
  }
});

/// с онанимной функцией
final int i = 0;
writeRow{ //синтаксис сперт из руби
 //тоже самое!
}

Вот скажи, нахрена в данном случае нужен функтор и туча библиотек (тем более посмотрел я ужос по твоей ссылке, тыб сам на то глянул, а)?

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