1. Java / Говнокод #11878

    +95

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 05 Октября 2012

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

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

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

      use Scala, π
      Ответить

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