Pipe igual?
Olá povo,
Recebi um email com uma dúvida simples, mas interessante sobre Java, então resolvi posta aqui. O “|” (chama-se pipe ou popularmente “barra-em-pé”) representa o operador OR binário. Quando utilizamos || (dois pipes) em uma expressão booleana, se a primeira for verdadeira, ele nem avalia a segunda.
boolean a = true;
int x = 0;
if (a == true || ++x > 0){
// O valor de x não mudará
}x continuará zero, pois a segunda expressão não será avaliada.
Mas quando utilizamos o operador em uma atribuição, estamos fazendo uma operação binária de OR.
int a = 2; // Em binário 00000010
int b = 4; // Em binário 00000100
// Vai ativar os bits de "a" (que é 2) em "b"
// Logo, em binário, ficará 00000110 que é igual a 6
b |= a;Você pode se perguntar: “em que isso influencia?” ou ainda “onde vou usar isso?”. Essa abordagem é muito usada quando vc quer que uma propriedade possa assumir uma combinação de valores. Por exemplo, uma fonte pode ser bold, itálico e/ou sublinhado.
int bold = 1; //00001
int italic = 2; //00010
int underline = 4; //00100Get Nelson Glauber’s stories in your inbox
Join Medium for free to get updates from this writer.
Pra deixar uma fonte, itálico e sublinhada, usaríamos:
int fonte = bold | underline; // 00101 = 5Aí você pode perguntar: qual a diferença entre isso e o + ? É que quando você usa o OR, se o valor já estiver setado, ele não é alterado. Continuando com o exemplo acima:
// ao invés de usar
fonte += bold;
// igual a 6 (não seria o que queremos)
// usamos
fonte |= bold;
// como o primeiro bit já está como 1, fonte continua 5Já para checar se uma das opções da fonte está habilitada, usamos o operador &.
// assumindo que fonte = 5 = 00101
if (fonte & bold != 0){
// fonte é negrito
}Fui claro? :)
4br4ç05,
nglauber





