O Standard Generalized Markup Language (SGML) é uma metalinguagem através da qual se pode definir linguagens de marcação para documentos. Documentos como (X)HTML e XML são derivadas do SGML. O DOCTYPE é um acrônimo para DTD (Definição de Tipo de Documento). É o doctype que diz para os user agents qual o tipo de documento que ele tem que interpretar (parsing) e como ele deve renderizar esse documento. A definição de um tipo de documento (doctype) informa quais as regras que os user agents devem utilizar do que é e o que não é permitido em uma determinada versão de um XML e de um (X)HTML. É uma forma de dizer a eles quais são as regras que aquele documento pretende seguir e quais as regras que o browser deve utilizar ao analisar (parsing) o documento. E basicamente existem 3 tipos de DOCTYPES que são: Strict, Transitional, Frameset.
Campanha Anti-IF para um código mais simples
Bem fiz a tradução desse artigo Anti-IF.
O problema básico é que o IF cria dependências, o acoplamento entre os módulos (métodos, objetos, componentes, etc) e aumenta os caminhos possíveis dentro do nosso código (o que reduz a legibilidade).
Um IF parece ser uma maneira rápida e fácil de fazer mudanças, mas pelos motivos listados acima, se após o IF, criamos software cheio de duplicações que não pode ser modificado.
Aqui está um exemplo simples:
double calculateValue() {
// look is here
if(_type == BTP) {
return calculateBTPValue();
// look is here
} else if(_type == BOT) {
return calculateBOTValue();
} else {
return calculateEUBValue();
}
}
Toda mudança no tipo de vínculo, por exemplo, um novo laço para avaliar, conduz a uma modificação no nosso pedaço de código. Imagine o que seria necessário fazer para modificar os métodos com CASES e IF’s e suas opções!
double calculateValue() {
_bondProfile.calculate();
}
// AbstractBondProfile class
//
// look is here
abstract double calculate();
// classe BTPBondProfile >> AbstractBondProfile
double calculate() {
...
}
// classe BOTBondProfile >> AbstractBondProfile
double calculate() {
...
}
// classe EUBondProfile >> AbstractBondProfile
double calculate() {
...
}
O que ganhamos tirando IF?
A vantagem é que, amanhã, podemos atender a solicitação para um novo tipo de ligação, basta criar uma nova classe, com a única lógica necessária para calcular o valor do novo Bond.
A solução não é sempre criar uma nova classe abstrata ou uma interface. Mas a solução será sempre fazer o software flexível, comunicativo, testável, prontos para a mudança.





