powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Scala
19 сообщений из 94, страница 4 из 4
Scala
    #39454925
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Код: javascript
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.
//вернуть сумму трех Option-ов, если все они существуют
def sumAll(a: Option[Int], b: Option[Int], c: Option[Int]): Option[Int] = for {
   av <- a
   bv <- b
   cv <- c
} yield a + b + c

//вернуть сумму всех существующих Option-ов
def sumAny(a: Option[Int], b: Option[Int], c: Option[Int]): Option[Int] = 
  a.getOrElse(0) + b.getOrElse(0) + c.getOrElse(0)

//вернуть сумму всех существующих Option-ов (вариант 2)
def sumAny(a: Option[Int], b: Option[Int], c: Option[Int]): Option[Int] = {
  var sum = 0
  a.foreach { v => sum += v }
  b.foreach { sum += _ } //то же самое
  с.foreach { sum += _ } 
  sum
}

def max(a: Int, b: Int) = 
  if (a > b) 
    a //здесь могла бы быть ваша рекламафигурная скобка и кусок кода, return не нужен
  else 
    b



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

Код: javascript
1.
2.
3.
let sumAll = (a, b, c, cb) => if (a && b && c) cb(a + b + c)
let sumAny = (a, b, c) => (a || 0) + (b || 0) + (c || 0)
let max = (a, b) => a > b ? a : b
...
Рейтинг: 0 / 0
Scala
    #39454947
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: javascript
1.
let sumAll = (a, b, c, cb) => if (a != null && b != null && c != null) cb(a + b + c)
...
Рейтинг: 0 / 0
Scala
    #39455080
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
private,

Про адекватность сравнения типизированного языка с нетипизированным я уже писал.
...
Рейтинг: 0 / 0
Scala
    #39455815
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SupplierStreram - хороший пример -

как написать такое без ФП я ХЗ ....


Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
import static java.util.Arrays.asList;
import java.util.List;
import java.util.function.Supplier;
import java.util.stream.Stream;

/**
 * конкатенация всех комбинаций 
 *  любой длинны !!! 
 *
 */
public class SupplierStreram {

    public static void main(String[] args) {

        List<List<String>> input = asList(
                asList("a", "b"),
                asList("x", "y"),
                asList("1", "2"));


        Supplier<Stream<String>> s
                = input.stream()

                .<Supplier<Stream<String>>>map(list -> list::stream)

                .reduce((sup1, sup2) -> () -> sup1.get()

                .flatMap(e1 -> sup2.get().map(e2 -> e1 + e2)))

                .orElse(() -> Stream.of(""));

        s.get().forEach(System.out::println);
        
    
    }
...
Рейтинг: 0 / 0
Scala
    #39455954
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,

то же на скале:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
object Main {
  def main(args: Array[String]): Unit = {
    val input = List(
      List("a", "b"),
      List("x", "y"),
      List("1", "2")
    )

    val result: List[String] = input.foldLeft(List("")) { (list1, list2) =>
      list1.flatMap { e1 =>
        list2.map(e2 => e1 + e2) //еще можно так: list2.map(_ + e2)
      }
    }

    result.foreach(println)

  }
}
...
Рейтинг: 0 / 0
Scala
    #39456217
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПро адекватность сравнения типизированного языка с нетипизированным я уже писал.

Типизированная версия будет та-же, вариант с ТайпСркиптом

Код: javascript
1.
2.
3.
4.
5.
6.
7.
let sumAll = (a: number | null, b: number | null, c: number | null): number | null => {
  return (a != null && b != null && c != null) ? a + b + c : null
}
let sumAny = (a: number | null, b: number | null, c: number | null) => {
  return (a || 0) + (b || 0) + (c || 0)
}
let max = (a: number, b: number) => a > b ? a : b



И оригинальный код на скале ниже - сложнее и запутаннее.

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
def sumAll(a: Option[Int], b: Option[Int], c: Option[Int]): Option[Int] = for {
   av <- a
   bv <- b
   cv <- c
} yield a + b + c

//вернуть сумму всех существующих Option-ов
def sumAny(a: Option[Int], b: Option[Int], c: Option[Int]): Option[Int] = 
  a.getOrElse(0) + b.getOrElse(0) + c.getOrElse(0)

//вернуть сумму всех существующих Option-ов (вариант 2)
def sumAny(a: Option[Int], b: Option[Int], c: Option[Int]): Option[Int] = {
  var sum = 0
  a.foreach { v => sum += v }
  b.foreach { sum += _ } //то же самое
  с.foreach { sum += _ } 
  sum
}

def max(a: Int, b: Int) = 
  if (a > b) 
    a //здесь могла бы быть ваша рекламафигурная скобка и кусок кода, return не нужен
  else 
    b
...
Рейтинг: 0 / 0
Scala
    #39456222
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и вообще - в том коде изначально ошибка, это как-раз пример как не нужно делать. Что на скале что на других языках таких вещей следует избегать, а не показывать их как достоинства языка

Код: javascript
1.
2.
3.
(a: Option[Int], b: Option[Int], c: Option[Int]): Option[Int]

(a: number | null, b: number | null, c: number | null): number | null
...
Рейтинг: 0 / 0
Scala
    #39456487
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
privateНу и вообще - в том коде изначально ошибка, это как-раз пример как не нужно делать. Что на скале что на других языках таких вещей следует избегать, а не показывать их как достоинства языка

Код: javascript
1.
2.
3.
(a: Option[Int], b: Option[Int], c: Option[Int]): Option[Int]

(a: number | null, b: number | null, c: number | null): number | null



Любопытно, в чем ошибка и каких вещей избегать?
...
Рейтинг: 0 / 0
Scala
    #39456617
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно стараться избегать использования нулл или опшенал. Они должны как-то обрабатываться в другом месте а не перемешиваться с логикой алгоритма - суммирования в данном случае. Алгоритм должен работать с числами, а проблемы нулей/опшенелов решаться в другом месте.

Я знаю что есть мнение что хорошо универсально все обрабатывать - но я думаю это не правильно, простой алгоритм суммирования превращается в размазанную лапшу из опшенолов как в примере выше.
...
Рейтинг: 0 / 0
Scala
    #39459298
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
privateНужно стараться избегать использования нулл или опшенал. Они должны как-то обрабатываться в другом месте а не перемешиваться с логикой алгоритма - суммирования в данном случае. Алгоритм должен работать с числами, а проблемы нулей/опшенелов решаться в другом месте.

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

+1
...
Рейтинг: 0 / 0
Scala
    #39459350
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
private
Я знаю что есть мнение что хорошо универсально все обрабатывать - но я думаю это не правильно, простой алгоритм суммирования превращается в размазанную лапшу из опшенолов как в примере выше.
+1
Толи дело потрясающий C#!
Код: c#
1.
2.
3.
4.
 static int? MySumm(params int?[] arg)
        {
            return arg.Sum();
        }



P.S.
Не надо в ФП использовать циклы и переменные!
...
Рейтинг: 0 / 0
Scala
    #39459364
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,
это если бизнес-логика только одна - математика.
...
Рейтинг: 0 / 0
Scala
    #39459382
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ЕвгенийВ,
это если бизнес-логика только одна - математика.
Да нифига подобного, просто надо мыслить по иному.
Вот например чистый web, правда не scala.
...
Рейтинг: 0 / 0
Scala
    #39459395
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ Вот например чистый web,
совмещение разметки с кодом?
...
Рейтинг: 0 / 0
Scala
    #39459472
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по этому топику, главным критерием функционального программирования для джавистов выступает поддержка языком лямбда функций.
...
Рейтинг: 0 / 0
Scala
    #39459537
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FishHookСудя по этому топику, главным критерием функционального программирования для джавистов выступает поддержка языком лямбда функций.
В Java не реализован например вывод типов и функции высших порядков сделаны через одно место, отсюда, от незнания и такие помыслы...
...
Рейтинг: 0 / 0
Scala
    #39459580
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ...
Не надо в ФП использовать циклы и переменные!
Из всех фП языков, сталкивался только с APL. Было это еще в старших классах школы

Там циклов не было, как понятия. Просто не было. Про переменные не помню ))) были или нет ))) вроде были.

Глубинной крутости лямбд не понимаю ((( На мой взгляд, синтаксический сахар над обычными callback'ами. При этом в Java про exception'ы полностью забыли. Что в ряде случаев, превращает код с лямбдами в нечто монстрообразное, когда приходится try...catch... куда надо и не надо впихивать. IMHO & AFAIK

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

Старый код на форах и интераторах, занимает не намного больше места (не намного сложнее пишется), но зато интерпретируется значительно более однозначно.

Все таки AFAIK в общем времени разработки, собственно набор кода - не больше 10% от времени. Т.ч. компактность кода выраженная в кол-ве символов, это конечно хорошо, но не в ущерб простоте восприятия.

Сталкивался с кодом на Cobol'е. Даже потребности взять книжку или скачать документацию из И-нет'а не появлялось. Просто смотришь на код и понимаешь, что же он делает. Глядя на код в данной теме, люди не знакомые с вопросом, фиг что поймут.
...
Рейтинг: 0 / 0
Scala
    #39459607
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВВ Java не реализован например вывод типов
авторJava EE — Java Enterprise Edition, представляет собой набор спецификаций для создания программного обеспечения уровня предприятия.
поэтому "строгая типизация".
Мало ли что там компилятор выдаст)). А у нас атомный реактор)).
...
Рейтинг: 0 / 0
Scala
    #39459760
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Глубинной крутости лямбд не понимаю ((( На мой взгляд, синтаксический сахар над обычными callback'ами.
За счет callback реализованы функции высших порядков.
Т. е. функция может быть аргументом и результатом другой функции.
...
Рейтинг: 0 / 0
19 сообщений из 94, страница 4 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Scala
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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