- Loogiset operaattorit ovat olennaisia ohjelmoinnissa päätöksenteossa ja suoritusvirran hallinnassa.
- JA- ja TAI-operaattoreiden oikosulkeminen optimoi tehokkuutta välttämällä tarpeettomia arviointeja.
- Ne helpottavat monimutkaisten kyselyiden luomista tietokantoihin ehtojen yhdistelmien avulla.
- Ne ovat perustavanlaatuisia funktionaalisessa ohjelmoinnissa, koska ne mahdollistavat funktioiden kokoamisen deklaratiivisella tavalla.
1. Loogiset operaattorit ohjelmoinnissa
- JA (&&): Palauttaa tosi, jos molemmat operandit ovat tosi.
- TAI (||): Palauttaa tosi, jos ainakin yksi operandeista on tosi.
- EI (!): Kääntää operandin totuusarvon.
2. Oikosulun voima logiikkaoperaattoreissa
function esAdulto(edad) {
return edad && edad >= 18;
}
console.log(esAdulto(0)); // false
console.log(esAdulto(20)); // true
function saludar(nombre) {
nombre = nombre || "invitado";
console.log("Hola, " + nombre + "!");
}
saludar(); // Hola, invitado!
saludar("María"); // Hola, María!
3. Loogiset operaattorit ohjausrakenteissa
Monimutkaisten ehtojen yksinkertaistaminen
def puede_conducir(edad, tiene_licencia, esta_sobrio):
return edad >= 18 and tiene_licencia and esta_sobrio
# Uso
if puede_conducir(25, True, True):
print("Puedes conducir")
else:
print("No puedes conducir")
Loogisten operaattoreiden käyttäminen silmukoissa
def buscar_elemento(lista, elemento):
i = 0
while i < len(lista) and lista != elemento:
i += 1
return i if i < len(lista) else -1
# Uso
mi_lista =
print(buscar_elemento(mi_lista, 5)) # 2
print(buscar_elemento(mi_lista, 6)) # -1
4. Bittiloogiset operaattorit
XOR-temppu muuttujien vaihtamiseen
void intercambiar(int *a, int *b) {
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
}
// Uso
int x = 5, y = 10;
intercambiar(&x, &y);
printf("x = %d, y = %d\n", x, y); // x = 10, y = 5
Pariteetin tarkistus loogisten operaattoreiden kanssa
bool es_par(int n) {
return !(n & 1);
}
// Uso
printf("%d es %s\n", 4, es_par(4) ? "par" : "impar"); // 4 es par
printf("%d es %s\n", 7, es_par(7) ? "par" : "impar"); // 7 es impar
5. Loogiset operaattorit toiminnallisessa ohjelmoinnissa
Funktioiden kokoonpano loogisilla operaattoreilla
const esMayorDeEdad = edad => edad >= 18;
const tienePermiso = usuario => usuario.tienePermiso;
const puedeAcceder = usuario => esMayorDeEdad(usuario.edad) && tienePermiso(usuario);
// Uso
const usuario1 = { edad: 20, tienePermiso: true };
const usuario2 = { edad: 17, tienePermiso: true };
console.log(puedeAcceder(usuario1)); // true
console.log(puedeAcceder(usuario2)); // false
Loogiset operaattorit reaktiivisessa ohjelmoinnissa
import { fromEvent, merge } from 'rxjs';
import { map, filter } from 'rxjs/operators';
const clicks = fromEvent(document, 'click');
const moves = fromEvent(document, 'mousemove');
const clicksOrMoves = merge(
clicks.pipe(map(() => 'click')),
moves.pipe(map(() => 'move'))
);
clicksOrMoves.pipe(
filter(event => event === 'click' || (event === 'move' && Math.random() < 0.1))
).subscribe(console.log);
6. Suorituskyvyn optimointi loogisilla operaattoreilla
Laiska arviointi loogisten operaattoreiden kanssa
def operacion_costosa():
print("Ejecutando operación costosa...")
return True
def operacion_rapida():
print("Ejecutando operación rápida...")
return False
# Sin evaluación perezosa
if operacion_rapida() and operacion_costosa():
print("Ambas operaciones son verdaderas")
# Con evaluación perezosa
if operacion_costosa() and operacion_rapida():
print("Ambas operaciones son verdaderas")
Boolen lausekkeiden yksinkertaistaminen
# Antes de la optimización
if (a and b) or (a and c) or (b and c):
print("Condición cumplida")
# Después de la optimización
if a or b or c:
print("Condición cumplida")
7. Loogiset operaattorit tietokannoissa
Monimutkaiset kyselyt loogisilla operaattoreilla
SELECT nombre, edad, salario
FROM empleados
WHERE (edad > 30 AND salario > 50000) OR (experiencia > 5 AND departamento = 'IT');
Kyselyjen optimointi loogisilla operaattoreilla
-- Consulta potencialmente lenta
SELECT *
FROM productos
WHERE categoria = 'electrónica' OR precio > 1000;
-- Consulta optimizada
SELECT *
FROM productos
WHERE categoria = 'electrónica'
UNION
SELECT *
FROM productos
WHERE precio > 1000 AND categoria != 'electrónica&#';
8. Loogiset operaattorit rinnakkais- ja rinnakkaisohjelmoinnissa
Synkronointi atomilogiikkaoperaattoreiden kanssa
#include <stdatomic.h>
atomic_bool recurso_disponible = ATOMIC_VAR_INIT(true);
void usar_recurso() {
while (!atomic_compare_exchange_weak(&recurso_disponible, &(bool){true}, false)) {
// Esperar
}
// Usar el recurso
atomic_store(&recurso_disponible, true);
}
Loogiset operaattorit konsensusalgoritmeissa
def es_lider(nodo):
return nodo.termino_actual >= max(otros_nodos.termino_actual) y \
nodo.log_actualizado and \
nodo.votos_recibidos > len(otros_nodos) / 2
Johtopäätös
- Yksinkertaistaa ohjausrakenteita
- Optimoi suorituskyky käyttämällä tekniikoita, kuten laiska arviointi
- Luo monimutkaisia kyselyitä tietokantoihin
- Helpottaa toiminnallista ja reaktiivista ohjelmointia
- Koordinoi suoritus rinnakkaisissa ja rinnakkaisissa järjestelmissä
Yleisimmät kysymykset
- JA (&&): Palauttaa tosi, jos molemmat operandit ovat tosi.
- TAI (||): Palauttaa tosi, jos ainakin yksi operandeista on tosi.
- EI (!): Kääntää operandin totuusarvon.
- Käytä oikosulkua tarpeettomien arvioiden välttämiseksi.
- Yksinkertaistaa monimutkaisia loogisia lausekkeita.
- Laiskan arvioinnin toteuttaminen kalliiden laskelmien viivyttämiseksi.
SELECT * FROM productos WHERE (precio > 100 AND categoria = 'electrónica') OR (descuento > 0.5)
- Kokoa monimutkaisempia toimintoja yksinkertaisemmista funktioista.
- Toteuta virtauksen ohjausrakenteet deklaratiivisella tavalla.
- Suodata ja muunna tietokokoelmia.
const numeros = ;
const pares = numeros.filter(n => n % 2 === 0);
Sisällysluettelo
- 1. Loogiset operaattorit ohjelmoinnissa
- 2. Oikosulun voima logiikkaoperaattoreissa
- 3. Loogiset operaattorit ohjausrakenteissa
- 4. Bittiloogiset operaattorit
- 5. Loogiset operaattorit toiminnallisessa ohjelmoinnissa
- 6. Suorituskyvyn optimointi loogisilla operaattoreilla
- 7. Loogiset operaattorit tietokannoissa
- 8. Loogiset operaattorit rinnakkais- ja rinnakkaisohjelmoinnissa
- Johtopäätös
- Yleisimmät kysymykset