Для работы в своих проектах мы используем разнообразные предметно-ориентированные языки. Один из них служит для описания структур данных (будем называть его SL). Структуры описанные на нем используются для клиент-серверного обмена. Иметь промежуточный язык очень удобно, когда клиентская и серверная части написаны на разных платформах и языках (к примеру Flash и <подставьте сюда то, что вам больше нравится>). Многие в этом случае пишут свой код дважды. В нашем случае транслятор SL подготавливает структуры данных и методы сереализации под все используемые в проекте платформы.
В OCaml есть такая интересная штука, как Variants. В Scala подобную роль выполняют Case Classes. Поддержка такой языковой конструкции есть и в SL. К сожалению почти во всех императивных языках ее поддержки нет, что создает сложности для трансляции кода из SL в эти языки. На пример для AS3 нет способа реализовать подобное типобезопасно. Недавно понадобилось сделать кодогенерцию SL в Java.
// SL
variant game-resource
float money
float energy
// Генерированный код.
public class PGameResource {
public interface Matcher {
void energy(float value);
void money(float value);
}
private Object __storage;
private byte __variance;
public void match(Matcher matcher) {
switch (__variance) {
case 0:
matcher.energy((Float) __storage);
break;
case 1:
matcher.money((Float) __storage);
break;
}
}
public void set_energy(float value) {
__variance = 0;
__storage = value;
}
public void set_money(float value) {
__variance = 1;
__storage = value;
}
// ...
}
// Разбор
value.match(new PGameResource.Matcher() {
public void money(float value) {
quest.reward.add(new AddResourceAction<Quest>(
FunholeResourceKind.MONEY,
value));
}
public void energy(float value) {
quest.reward.add(new AddResourceAction<Quest>(
FunholeResourceKind.ENERGY,
value));
}
});
Вообще я не слишком искушен в Java, так что если среди читателей есть Java-программисты, то было бы здорово выслушать их мнения.
Чета я вообще не понимаю что и зачем ты делаешь и какая из всего этого мораль.
ОтветитьУдалить> Чета я вообще не понимаю что и зачем ты делаешь и какая из всего этого мораль.
ОтветитьУдалитьЯ же выше объяснил, что за синтаксическая конструкция. Она очень удобна и применяется у нас повсеместно.
Лех, завязывай, пошли пить пиво!
ОтветитьУдалить