Comments 16
Забавно, надо запомнить и при случае попробовать применить.
0
Чем-то напоминает связку паттернов билдер + делегат + наблюдатель. Имхо решение конечно интересное получается, но вот код уж больно режет глаз да
и как на счет быстроты изменени кода я и поиска багов?
и как на счет быстроты изменени кода я и поиска багов?
+1
Вычислительные затраты минимальны по сравнению, скажем, с выполнением запроса к базе данных или парсингом XML. Вряд ли можно говорить о хоть каком-то влиянии на производительность.
0
Это дело называется (functional) reactive programming. Или, в более простом случае, dataflow programming.
+1
посмотрите еще на вот эту библиотеку — она реализует похожую идею + полный стек биндингов под гвт code.google.com/p/gwt-pectin/
0
Советую вот эту статейку:
lamp.epfl.ch/~imaier/pub/DeprecatingObserversTR2010.pdf
Там они описывают как строят подобное на scala. В частности разобраны сложности реализации — плюсы/минусы push/pop-моделей, как быть с динамически меняющимися связями и всякое такое. Это все нетривиально.
lamp.epfl.ch/~imaier/pub/DeprecatingObserversTR2010.pdf
Там они описывают как строят подобное на scala. В частности разобраны сложности реализации — плюсы/минусы push/pop-моделей, как быть с динамически меняющимися связями и всякое такое. Это все нетривиально.
0
Хм, отличная тулза, например, для смены локализации во всем приложении без перезагрузки приложения не через жопу.
0
Что такое локализация с точки зрения общего случая:
это набор значений которые зависят от одного переключателя. Необязательно это язык. Например это могут быть настройки режимов видимости полей/кнопок
— Продвинутый — видно всё
— Для начинающих — видно только основное а остальное в меню
Для таких вещей в библиотеке есть класс Fit
Пример
Результат
это набор значений которые зависят от одного переключателя. Необязательно это язык. Например это могут быть настройки режимов видимости полей/кнопок
— Продвинутый — видно всё
— Для начинающих — видно только основное а остальное в меню
Для таких вещей в библиотеке есть класс Fit
Пример
public static void main(String[] a) {
System.out.println("\nFit\n");
Fit‹String› g = new Fit‹String›()
.item("English", "w1", "First")
.item("English", "w2", "Second")
.item("English", "w3", "Third")
.item("Spain", "w1", "Primero")
.item("Spain", "w2", "Segundo")
.item("Spain", "w3", "Tercera");
Note s1 = new Note().bind(g.find("w1"));
Note s2 = new Note().bind(g.find("w2"));
Note s3 = new Note().bind(g.find("w3"));
Note s4 = new Note().bind(g.find("w4"));
System.out.println("/set English");
g.selector().value("English");
System.out.println(s1.value() + ", " + s2.value() + ", " + s3.value() + ", " + s4.value());
System.out.println("/set Spain");
g.selector().value("Spain");
System.out.println(s1.value() + ", " + s2.value() + ", " + s3.value() + ", " + s4.value());
}
Результат
Fit
/set English
First, Second, Third, null
/set Spain
Primero, Segundo, Tercera, null
+1
Просто замечательная реализация! Ещё бы добавить сюда:
— комментарии в код
— юнитесты( c удовольствием посоучавствую)
— maven-изация ( c удовольствием посоучавствую).
и я уже обоими руками ваш поклонник!
Мне нужно как раз сейчас нечно подобное для описания взаимодействия комплексных обьектов, и Tee-binding очень близок по духу, и как раз для явы. Супер!
Есть какие нибудь «теоретические основы» для «Тее»? Неужто всё из головы?! В коде не нашёл ни единого упоминания о «как должно быть»…
… при указании таковых метод может претендовать на самостоятельный проблемно-ориетнированный язык программирования!
… да, и ещё — не нашёл возможности указать на баг в гугло-коде. Trunk от сегодняшнего числа «обругал»:
…
-do-compile:
[javac] Compiling 13 source files to D:\1\build\classes
[javac] D:\1\src\tee\swingtest\TestFrame.java:12: method does not override or implement a method from a supertype
[javac] @Override public void job() {
[javac] ^
[javac] D:\1\src\tee\swingtest\TestFrame.java:39: method does not override or implement a method from a supertype
[javac] @Override
[javac] ^
[javac] D:\1\src\tee\swingtest\TestFrame.java:67: method does not override or implement a method from a supertype
[javac] @Override public void job() {
[javac] ^
[javac] Note: Some input files use unchecked or unsafe operations.
[javac] Note: Some input files use unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
[javac] 3 errors
BUILD FAILED
D:\1\nbproject\build-impl.xml:603: The following error occurred while executing this line:
D:\1\nbproject\build-impl.xml:245: Compile failed; see the compiler error output for details.
Total time: 2 seconds
Пришлось ревертиться к rev. 22.
— комментарии в код
— юнитесты( c удовольствием посоучавствую)
— maven-изация ( c удовольствием посоучавствую).
и я уже обоими руками ваш поклонник!
Мне нужно как раз сейчас нечно подобное для описания взаимодействия комплексных обьектов, и Tee-binding очень близок по духу, и как раз для явы. Супер!
Есть какие нибудь «теоретические основы» для «Тее»? Неужто всё из головы?! В коде не нашёл ни единого упоминания о «как должно быть»…
… при указании таковых метод может претендовать на самостоятельный проблемно-ориетнированный язык программирования!
… да, и ещё — не нашёл возможности указать на баг в гугло-коде. Trunk от сегодняшнего числа «обругал»:
…
-do-compile:
[javac] Compiling 13 source files to D:\1\build\classes
[javac] D:\1\src\tee\swingtest\TestFrame.java:12: method does not override or implement a method from a supertype
[javac] @Override public void job() {
[javac] ^
[javac] D:\1\src\tee\swingtest\TestFrame.java:39: method does not override or implement a method from a supertype
[javac] @Override
[javac] ^
[javac] D:\1\src\tee\swingtest\TestFrame.java:67: method does not override or implement a method from a supertype
[javac] @Override public void job() {
[javac] ^
[javac] Note: Some input files use unchecked or unsafe operations.
[javac] Note: Some input files use unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
[javac] 3 errors
BUILD FAILED
D:\1\nbproject\build-impl.xml:603: The following error occurred while executing this line:
D:\1\nbproject\build-impl.xml:245: Compile failed; see the compiler error output for details.
Total time: 2 seconds
Пришлось ревертиться к rev. 22.
-1
по поводу ошибки неясно. Я продолжаю что-то дописывать (например не хватает SQL-подобных выражений, чтоб уж окончательно закрыть все потребности).
Проверил только что — всё компилится и работает.
По поводу основ — что-то похожее будет в JavaFX. Я им долго занимался (см. мой сайт на javafx.me. К сожалению с участниками проекта JavaFX у меня как-то не заладилось, у них собственная реализация. На мой взгляд у них хуже.
Проверил только что — всё компилится и работает.
По поводу основ — что-то похожее будет в JavaFX. Я им долго занимался (см. мой сайт на javafx.me. К сожалению с участниками проекта JavaFX у меня как-то не заладилось, у них собственная реализация. На мой взгляд у них хуже.
0
А можно пример обратного преобразования в случае использования условий if-else?
Numeric n = new Numeric().value(-10); Note r = new Note().bind(new Fork‹String›() .condition(new Toggle().less(n, -5)) .then("Frost") .otherwise(new Fork‹String›() .condition(new Toggle().less(n, +15)) .then("Cold") .otherwise(new Fork‹String›() .condition(new Toggle().less(n, +30)) .then("Warm") .otherwise("Hot") ))); r.value("Hot"); System.out.println(n.value()); // Что будет выведено?
0
Предположим что нужно иметь разный текст SQL-команды в зависимости от диалекта. Примерно так
результат:
— видно что при изменении command также меняется и связанная с ней по условию переменная
ЗЫ
Note.iF это тоже самое что и new Fork() только короче
System.out.println("\nbidirectional Fork\n");
Note dialect = new Note().value("MS SQL");
Note forMSSQL = new Note().value("select top 10 * from table1");
Note forPostgreSQL = new Note().value("select * from table1 limit 10");
System.out.println("forMSSQL: "+forMSSQL.value());
System.out.println("forPostgreSQL: "+forPostgreSQL.value());
Note command = new Note();
command.bind(Note
.iF(dialect.similar("MS SQL"))
.then(forMSSQL)
.otherwise(forPostgreSQL));
System.out.println("dialect: " + dialect.value() + ", command: " + command.value());
System.out.println("/let dialect isn't MS SQL");
dialect.value("PostgreSQL");
System.out.println("dialect: " + dialect.value() + ", command: " + command.value());
System.out.println("/let command = select field1,filed2 from table1 limit 10");
command.value("select field1,filed2 from table1 limit 10");
System.out.println("command: " + command.value());
System.out.println("forMSSQL: " + forMSSQL.value());
System.out.println("forPostgreSQL: " + forPostgreSQL.value());
результат:
forMSSQL: select top 10 * from table1
forPostgreSQL: select * from table1 limit 10
dialect: MS SQL, command: select top 10 * from table1
/let dialect isn't MS SQL
dialect: PostgreSQL, command: select * from table1 limit 10
/let command = select field1,filed2 from table1 limit 10
command: select field1,filed2 from table1 limit 10
forMSSQL: select top 10 * from table1
forPostgreSQL: select field1,filed2 from table1 limit 10
— видно что при изменении command также меняется и связанная с ней по условию переменная
ЗЫ
Note.iF это тоже самое что и new Fork() только короче
0
Sign up to leave a comment.
Articles
Change theme settings
Функциональное программирование в Java