powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Функциональный подход Рекурсия
25 сообщений из 66, страница 2 из 3
Функциональный подход Рекурсия
    #38822555
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Методы с кучей параметров ты тоже в строку ровняешь? От этого никуда не дется. Так что привыкай.
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38822557
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это как карта ляжет. Если более чем 7 аргументов - то тревожный красный флажок на доработке.
Слишком длинные имена - ну вобщем не флажок но тоже пожелание по краткости.
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38822671
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ моём лице вы можете найти сторонника ФП. Я всего-лишь сказал что
попытка писать в функциональном стиле на синтаксисе Java ужасает.
Когда я делаю code review/refactoring того что колбасит моя группа - то
обычно ровняю такие штуки в 1 строку. Когнитивный диссонанс от переноса
точки вызывает у меня глухое раздражение. Ничего не могу с собой поделать.

Вопрос вкуса. Мне нравится.
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38822757
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне тоже нравится, намного читабельнее
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38822764
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лямбды - читабельнее. Точки - втопку. Миру - мир. Всем - пива. Линуксоидам - рут с консолью.
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38823012
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleapvДобрый день, уважаемые форумчане.

Функция по вычислению факториала на языке F# выглядит так:
Код: c#
1.
2.
3.
let rec fact x = 
if x = 1 then 1
else x*fact(x-1)




Как записать такую функцию на Java 8?
на джаве надо писать через цикл.
остальное от лукавого.
ведь выше у тебя записан итеративный процесс. зачем же извращаться, когда язык джава для итеративного процесса - предоставляет такое стредство как цикл?
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38823022
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZyK_BotaNостальное от лукавого.
ведь выше у тебя записан итеративный процесс. зачем же извращаться, когда язык джава для итеративного процесса - предоставляет такое стредство как цикл?
Ну например засунув эти "мегавычисления" в Stream API можно их на халяву распараллелить. Код останется простым, перфоманс вырастит (у меня вырос в 3 раза).
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38827038
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Красота кода, вам видимо не приходилось работать в проектах где в соглашениях о форматировании требуется обязательно ставить скобки фигурные везде и начинать каждую такую скобку с новой строки :)

По функциональному коду - мне кажется что в жава он еще менее читабельный чем обычный не функциональный код..
Особенно эти пляски с опциями / туплами. Читать потом тарабарщину типа val().left().val() и тп.

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

Скала это вообще атас, тот-же старый и многословный жавовский код, но дополнительно усложненный еще сотня новых классов.
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38827044
smackmychi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
private,

у меня блондинка есть знакомая, тоже считает, что на работе должно быть весело. Не пробовали привязать, например, воздушный шарик, чтобы ява такой скучной не казалась?
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38827059
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В середине 20 века тоже был идейный спор т.н. "физиков" и "лириков". Мне кажется в современном It
срезе общества тоже есть некое деление на "котелков" и "жестянщиков". "Фантазёров" и "практиков".
Теоретиков и опытных. А разработка ПО и поставка deliveries существует в ортогональном направлении.
И этому направлению как-бе по большему счёту пофиг какая стоит парадигма. Ведь в конечном счёте
люди, human resources делают задачи а не сама парадигма.
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38827077
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
privateПо функциональному коду - мне кажется что в жава он еще менее читабельный чем обычный не функциональный код..
Особенно эти пляски с опциями / туплами. Читать потом тарабарщину типа val().left().val() и тп.

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

Скала это вообще атас, тот-же старый и многословный жавовский код, но дополнительно усложненный еще сотня новых классов.
А есть пример современного не унылого, не многословного языка?
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38827401
aleapv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вычисление факториала можно еще записать используя абстракцию над функцией факториала в виде итеративной функции. Итерируется произведение каждого числа на аккумулятор.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
package exponenta;

import java.util.function.BinaryOperator;

public class Iter {
	
	@FunctionalInterface
	interface Fi<F, A, B, I> {
		
		I iterate(F f, A a ,B b, I i);
	}
	
    static Fi<BinaryOperator<Integer>, Integer, Integer, Integer> fi;
    static BinaryOperator<Integer> fact = (x, y) -> { return x * y; };

    public static void main(String[] args) {

    	fi = (BinaryOperator<Integer> f, Integer a, Integer b, Integer i) -> {
        	if(a > b) return i;
        	else return f.apply(fi.iterate(f, a + 1, b, i), a);
        };
        
        System.out.println(fi.iterate(fact, 1, 5, 1));
    }
    
}
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38827402
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё факториал можно вычислить по аналитической формуле. Ваш кэп.
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38827403
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> А есть пример современного не унылого, не многословного языка?
Руби, да даже ЖаваСкрипт и то мощнее и компактней. Кложур еще возможно, но я его не особо знаю потому утверждать не буду.
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38827415
aleapv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovА ещё факториал можно вычислить по аналитической формуле. Ваш кэп.
Я хотел узнать имеет ли такой способ записи право на жизнь? - прочитал в учебнике :)
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38827435
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleapvВычисление факториала можно еще записать используя абстракцию над функцией факториала в виде итеративной функции. Итерируется произведение каждого числа на аккумулятор.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
package exponenta;

import java.util.function.BinaryOperator;

public class Iter {
	
	@FunctionalInterface
	interface Fi<F, A, B, I> {
		
		I iterate(F f, A a ,B b, I i);
	}
	
    static Fi<BinaryOperator<Integer>, Integer, Integer, Integer> fi;
    static BinaryOperator<Integer> fact = (x, y) -> { return x * y; };

    public static void main(String[] args) {

    	fi = (BinaryOperator<Integer> f, Integer a, Integer b, Integer i) -> {
        	if(a > b) return i;
        	else return f.apply(fi.iterate(f, a + 1, b, i), a);
        };
        
        System.out.println(fi.iterate(fact, 1, 5, 1));
    }
    
}


Вот это шлак..
Лямбды тут ну ни разу не нужны.
Параметры f и i не нужны - всегда передаётся одно и тоже.

Если это выбросить останется всего лишь:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
package iter;

import static java.lang.System.out;

public class Iter {

    public static void main(String[] args) {
        out.println(fi(1, 5));
    }

    static int fi(int a, int b) {
        return a > b ? 1 : fi(a + 1, b) * a;
    }
}
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38827461
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зашибись алгоритмы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
package iter;
import static java.lang.System.out;
public class Iter {
    public static void main(String[] args) {
        int i = Integer.parseInt(args[0]);
        out.println(i + ": " + fi(1, i));
    }
    static int fi(int a, int b) {
        return a > b ? 1 : fi(a + 1, b) * a;
    }
}

Код: plaintext
1.
2.
> for %A in (29 30) do @java -cp bin iter.Iter %A
29: -1241513984
30: 1409286144
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38827514
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovЗашибись алгоритмы
А нехрен больше двенадцати в такое передавать..
В оригинале был инт, я инт и оставил.

Код с BigInt'ами уже был приведён.
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38827593
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Убрать второй ненужный параметр и преобразовать хвостовую рекурсию в явный цикл - не бином ньютона. Раз уж наш класс назван Iter.
Кинуть исключение по выходу аргумента за допустимые пределы - тоже.
Заменить int на long - вообще не требует напряжения мысли.
И в чём остаётся смысл покритиковать корявый код, приведя другой корявый код?
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38827670
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovЗаменить int на long
Доо. Вот это идея! 20 первых чисел против 12 - это, конечно, ни разу не корявый код.

Basil A. SidorovИ в чём остаётся смысл покритиковать корявый код, приведя другой корявый код?
А вот чтобы показать что останется если убрать лямбды и 2 не нужных параметра (и алгоритм оставить тем же).
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38827798
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
private> А есть пример современного не унылого, не многословного языка?
Руби, да даже ЖаваСкрипт и то мощнее и компактней. Кложур еще возможно, но я его не особо знаю потому утверждать не буду.

ладно, руби - для поклонников сайт за 1 день, но JS то чем мощнее?:( Я всегда думал, что у JS и Java слегка разные сферы применения....;)
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38827838
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp.mkА есть пример современного не унылого, не многословного языка?
93 год подойдет?
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38827846
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
privateда даже ЖаваСкрипт и то мощнее и компактней.

Язык в котором наследование надо делать самому и через одно место не может быть "мощнее". Вся его мощь в отсутствии типизации и возможности ссылаться на функции.
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38827894
GregTk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин,

Если учесть что на горизонте ECMA 6, и node.js из всех шелей выползает. То что то у Java JS всё таки отожмёт в ближайшее время.
...
Рейтинг: 0 / 0
Функциональный подход Рекурсия
    #38827913
For All
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GregTkЕсли учесть что на горизонте ECMA 6, и node.js из всех шелей выползает. То что то у Java JS всё таки отожмёт в ближайшее время.Не отожмёт. Яве уже лет 15 как пророчат - скоро яве трындец, скоро ява пропадёт и т.д.
...
Рейтинг: 0 / 0
25 сообщений из 66, страница 2 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Функциональный подход Рекурсия
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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