Skip to content

Instantly share code, notes, and snippets.

@viniceosm
Last active February 16, 2018 16:40
Show Gist options
  • Save viniceosm/4f03af77732003282df3bb6574fd996d to your computer and use it in GitHub Desktop.
Save viniceosm/4f03af77732003282df3bb6574fd996d to your computer and use it in GitHub Desktop.
Montar as possibilidades através de if/else
class PossibilidadesIf {
constructor() {
this.arrSe = [];
this.syntaxesComParametro = ['se', 'senao', 'log', 'getMensagem'];
this.syntaxesSemParametro = ['fimse'];
}
se(str) {
this.arrSe.push(str);
}
senao(str) {
this.arrSe.pop();
this.arrSe.push(str);
}
fimse() {
this.arrSe.pop();
}
log(str) {
console.log(this.getMensagem(str));
}
getMensagem(str) {
return (this.arrSe.join(' && ') + (str != undefined ? '\n\t\t' + str : ''));
}
evaluate(fn) {
let str = adicionaThisNasFuncoes(fn.toString(), this);
eval('let fn = ' + str + '; fn()');
function adicionaThisNasFuncoes(str, o) {
for (let palavraSubstituir of o.syntaxesComParametro) {
str = str.replace(new RegExp(palavraSubstituir + "\\(\\'", "g"), 'this.' + palavraSubstituir + '(\'');
};
for (let palavraSubstituir of o.syntaxesSemParametro) {
str = str.replace(new RegExp(palavraSubstituir + "\\(\\)", "g"), 'this.' + palavraSubstituir + '()');
}
return str;
}
}
}
var possibilidadesIf = new PossibilidadesIf();
@viniceosm
Copy link
Author

viniceosm commented Feb 16, 2018

Exemplo 1

possibilidadesIf.evaluate(() => {
	se('paula é maior que joao'); {
		log('a paula é maior que joao');
	} senao('paula não é maior que joao'); {
		log('joao é maior que paula');
	}
});

Exemplo 2

var msg = [];

possibilidadesIf.evaluate(() => {
	se('usuario.online'); {
		se('usuario.idade > 18'); {
			msg.push(getMensagem('entra no sitema"'));
		} senao('!usuario.idade > 18'); {
			msg.push(getMensagem('retorna "usuario menor de 18 anos"'));
		}
		fimse();
	} senao('!usuario.online'); {
		se('validaLogin(usuario.login, usuario.senha)'); {
			msg.push(getMensagem('entra no sistema'));
		} senao('!validaLogin(usuario.login, usuario.senha)'); {
			msg.push(getMensagem('retorna "senha ou usuario invalido"'));
		}
		fimse();
	}
	fimse();
});

console.log(msg.join('\n\n'));

output

"usuario.online && usuario.idade > 18
		entra no sitema"

usuario.online && !usuario.idade > 18
		retorna "usuario menor de 18 anos"

!usuario.online && validaLogin(usuario.login, usuario.senha)
		entra no sistema

!usuario.online && !validaLogin(usuario.login, usuario.senha)
		retorna "senha ou usuario invalido""

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment