Jawa / Говнокод #11878 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
final HCons<String, HCons<Integer, HCons<Boolean, HNil>>> a =
      nil().extend(true).extend(3).extend("Foo");
    final HCons<Double, HCons<String, HCons<Integer[], HNil>>> b =
      nil().extend(new Integer[]{1, 2}).extend("Bar").extend(4.0);

    // A lot of type annotation
    final HAppend<HNil, HCons<Double, HCons<String, HCons<Integer[], HNil>>>,
      HCons<Double, HCons<String, HCons<Integer[], HNil>>>> zero = append();
    final HAppend<HCons<Boolean, HNil>, HCons<Double, HCons<String, HCons<Integer[], HNil>>>,
      HCons<Boolean, HCons<Double, HCons<String, HCons<Integer[], HNil>>>>> one = append(zero);
    final HAppend<HCons<Integer, HCons<Boolean, HNil>>, HCons<Double, HCons<String, HCons<Integer[], HNil>>>,
      HCons<Integer, HCons<Boolean, HCons<Double, HCons<String, HCons<Integer[], HNil>>>>>> two = append(one);
    final HAppend<HCons<String, HCons<Integer, HCons<Boolean, HNil>>>,
      HCons<Double, HCons<String, HCons<Integer[], HNil>>>,
      HCons<String, HCons<Integer, HCons<Boolean, HCons<Double, HCons<String, HCons<Integer[], HNil>>>>>>>
      three = append(two);

    // And all of that lets us append one list to the other.
    final HCons<String, HCons<Integer, HCons<Boolean, HCons<Double, HCons<String, HCons<Integer[], HNil>>>>>>
      x = three.append(a, b);

    // And we can access the components of the concatenated list in a type-safe manner
    System.out.println(x.head()); // Foo
    System.out.println(x.tail().tail().tail().tail().head()); // Bar

Это вот такая она, функциональщина, упрощающая жизнь.
http://functionaljava.googlecode.com/svn/artifacts/3.0/demo/1.5/HList_append.java

Запостил: 3.14159265 3.14159265, (Updated )

Комментарии (18) RSS

  • Видно поцонам сильно хотелось лиспа.
    >x.tail().tail().tail().tail().head()
    Но это какая-то хацкильная ересь, а не православные car & cdr?
    Ответить
    • Явисты изобрели список типов из крестов, при этом способный хранить значения указанного типа в экземплярах списка.
      Ответить
  • Я давно эту штуку видел. По сути это кортежи, только с универсальным интерфейсом. Забавно, но на практике бесполезно из-за огромного количества аннотаций типа, которые приходится писать, в жабе же нельзя объявлять дженерики с переменным числом типов-параметров.
    Не скажу, что это говно, но и жизнь не облегчает. Так, забавный финт ушами.
    Ответить
    • >Не скажу, что это говно
      А вот я вижу здесь говно и это не только я.
      Не следует применять фичи из чужого языка, если они впихиваются в используемый язык из под шконки.
      Не пользуйся ты недотуплами, возми классы.
      Ответить
    • >но на практике бесполезно из-за огромного количества аннотаций типа, которые приходится писать
      Объявление типа кортежа больше, чем сам код, который его использует. Говнище.
      Отчасти из-за того что автовывод типов очень хуёвый. И нет всяких var или auto, как у конкурентов.

      LispGovno выше всё абсолютно правильно сказал. Ну создай ты класс с полями, нет хочу городить громоздкий пиздец.
      Ответить
  • Говно не в функциональщине, говно в головах тех, кто пытается ее повсюду впихнуть.
    Ответить
    • Жаба вообще никак не подходит для функционального стиля. С ней даже "родная" императивщина очень громоздкой получается.
      Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8