juan_gandhi: (Default)
Juan-Carlos Gandhi ([personal profile] juan_gandhi) wrote2008-03-06 06:04 pm

some lambda in plain java

See what people, I mean, [livejournal.com profile] dtm, can do with our Java::

  // Look, it's an anonymous recursive function!
  public void testY() {
    assertEquals(720,
        new Function<Function<Fii, Fii>, Fii>() {
          public Fii apply(final Function<Fii, Fii> f) {
            return new Branch() {
              public Fii apply(final Branch x) {
                return f.apply(new Fii() {
                  public Integer apply(Integer y) {
                    return x.apply(x).apply(y);
                  }
                });
              }
            }.apply(new Branch() {
              public Fii apply(final Branch x) {
                return f.apply(new Fii() {
                  public Integer apply(Integer y) {
                    return x.apply(x).apply(y);
                  }
                });
              }
            });
          }
        }.apply(new Function<Fii, Fii>() {
          public Fii apply(final Fii f) {
            return new Fii() {
              public Integer apply(Integer i) {
                return (i <= 0) ? 1 : i * f.apply(i - 1);
              }
            };
          }
        }).apply(6).intValue());
  }
}

[identity profile] ivan-gandhi.livejournal.com 2008-03-07 04:26 pm (UTC)(link)
Looks cool. And makes a lot of sense; will try to use this style... not everybody supports this, though.

[identity profile] just-developer.livejournal.com 2008-03-07 05:26 pm (UTC)(link)
Methods extension, complexType, sequence and etc. have declaration like this:
 
public static XTExtension extension(XTNode... nodes);

Than we use
import static xsdgraph.model.XTUtil.*;


Also C-strXXX like style for setting arbitrary number of attributes:

public class XTElement {
    public XTElement minOccurs(int value) {
        minOccurs = value;
        return this;
    }
}

[identity profile] mikkim08.livejournal.com 2008-03-07 05:41 pm (UTC)(link)
Последнeе вроде с легкой руки М. Фоулера называется fluent interface.

Я вот думаю такой стиль для манипуляции с коллекциями использовать. Типа, select( new Predicate() {...}).orderedBy(new Predicate() {...}).groupedBy(...). А то

[identity profile] just-developer.livejournal.com 2008-03-07 05:58 pm (UTC)(link)
идея не очень хорошая.
не будет оптимизации запроса.
В идеале - так строить запрос - а потом его прозрачно выполнять.
Вроде
select( new Predicate() {...}).orderedBy(new Predicate() {...}).groupedBy(...).go();

Есть пакет работы с матрицами с похожим подходом.

[identity profile] mikkim08.livejournal.com 2008-03-07 06:14 pm (UTC)(link)
Я так тоже думал. Только все эти "go()", "doit()", "execute()" и др. в коде задрали уже :)

Да и никакой оптимизации запросов я, если честно, не планировал. Просто хочется заменить все эти дурацкие циклы, имплементирующие подобную бизнес-логику (e.g. retrieve all purchased items along with their expiration date and group them by bundle id) на коллекциях, возвращаемых всякими веб-сервисами и прочими API, на что-то б.-м. читабельное. Ну и чтоб лепить эту логику быстрее.

Но, может, Вы и правы.

[identity profile] just-developer.livejournal.com 2008-03-07 06:00 pm (UTC)(link)
C- strXXX методы придумали несколько раньше...

[identity profile] mikkim08.livejournal.com 2008-03-07 06:15 pm (UTC)(link)
Зато Фоулер им придумал звучное название :)