0%

🔀 Nosacījumi

Nosacījumi ļauj programmai pieņemt lēmumus – izpildīt dažādu kodu atkarībā no vērtībām un situācijām.

javascript

if / else if / else

Teksts
// Pamata if / else
const punkti = 75;

if (punkti >= 90) {
    console.log("Lielisks!");
} else if (punkti >= 75) {
    console.log("Labi");
} else if (punkti >= 60) {
    console.log("Apmierinošs");
} else {
    console.log("Nepietiekami");
}

// Vienas rindiņas (bez figūriekavām) – ehtniski, bet bīstami
if (punkti > 50) console.log("Izturēja");

// "Falsy" vērtības (visas tiek uzskatītas par false):
// false, 0, "", null, undefined, NaN
if (!null) console.log("null ir falsy");
if (!0)    console.log("0 ir falsy");
if (!"")   console.log("Tukša virkne irfalsy");

// Vērtību pārbaudes
const lietotājs = { vārds: "Anna", vecums: 28 };

if (lietotājs && lietotājs.vārds) {
    console.log("Vārds:", lietotājs.vārds);
}
if ("vecums" in lietotājs && lietotājs.vecums >= 18) {
    console.log("Pilngadīgs lietotājs");
}

switch / case

⚠️ break aizmirsšana

Bez break izpilde "iekrīt" nākamajā case! Tas dažreiz ir paredzēts (vairāki case vienam kodam), bet biežāk ir kļūda.

Teksts
const diena = "pirmd";

switch (diena) {
    case "pirmd":
    case "otrd":
    case "trešd":
    case "ceturtd":
    case "piektd":
        console.log("Darba diena");
        break; // ← Obligāts! Bez break "krīt" uz nākamo case
    case "sestd":
    case "svētd":
        console.log("Brīvdiena");
        break;
    default:
        console.log("Nezināma diena");
}

// switch ar return funkcijā
function nosauktDienu(numurs) {
    switch (numurs) {
        case 1: return "Pirmdiena";
        case 2: return "Otrdiena";
        case 3: return "Trešdiena";
        case 4: return "Ceturtdiena";
        case 5: return "Piektdiena";
        case 6: return "Sestdiena";
        case 7: return "Svētdiena";
        default: return "Nezināma";
    }
}
console.log(nosauktDienu(3)); // "Trešdiena"

Ternārais operators

Teksts
// nosacījums ? jā : nē
const vecums = 20;

// Vienkāršs
const statuss = vecums >= 18 ? "pieaugušais" : "nepilngadīgs";

// HTML renderēšana
const pierakstīts = false;
const pogas_teksts = pierakstīts ? "Iziet" : "Pieteikties";
document.getElementById("poga").textContent = pogas_teksts;

// CSS klases pārslēgšana
const aktīvs = true;
const klase = `pogas ${aktīvs ? "aktīva" : "neaktīva"}`;

// Funkciju izsaukums
const apstrādāt = dati => dati
    ? JSON.stringify(dati)
    : null;

// IZVAIRĪTIES no dziļas ligzdošanas!
// Grūti lasāms:
const vērtējums = s => s>89?"A":s>79?"B":s>69?"C":s>59?"D":"F";

// Labāk ar if/else vai lookup objektu:
function iegūtVērtējumu(s) {
    if (s > 89) return "A";
    if (s > 79) return "B";
    if (s > 69) return "C";
    if (s > 59) return "D";
    return "F";
}

Nullish coalescing ?? un ??=

Teksts
// ?? – atgriež labo pusi tikai ja kreisā ir null vai undefined
const ievade = null;

// || problēma: 0, "" arī tiek uzskatīts par "false"
const ar_vai = ievade || "noklusējums";  // "noklusējums"
const nulle = 0 || "noklusējums";        // "noklusējums" ← nevēlami!

// ?? risinājums: tikai null/undefined
const ar_qq = ievade ?? "noklusējums";  // "noklusējums"
const nulle_qq = 0 ?? "noklusējums";    // 0            ← pareizi!
const tuksums = "" ?? "noklusējums";    // ""           ← pareizi!

// Praksē – noklusējuma konfigurācija
function izveidotKonfigurāciju(opcijas) {
    return {
        ports: opcijas.ports ?? 3000,
        resursi: opcijas.resursi ?? 10,
        debug: opcijas.debug ?? false,
        nosaukums: opcijas.nosaukums ?? "MansProjekts",
    };
}

const konf = izveidotKonfigurāciju({ ports: 8080, resursi: 0 });
// { ports: 8080, resursi: 0, debug: false, nosaukums: "MansProjekts" }

// ??= piešķiršanas operators
let lietotājs = null;
lietotājs ??= { vārds: "Viesis" }; // Piešķir tikai ja null/undefined
console.log(lietotājs.vārds); // "Viesis"

// Optional chaining + ??
const dati = null;
const vārds = dati?.lietotājs?.vārds ?? "Nezināms";
console.log(vārds); // "Nezināms" (nevis TypeError)

Praktiski piemēri

Teksts
// ========================================
// Formas validācija ar nosacījumiem
// ========================================
function validētPieteikumu(dati) {
    const kļūdas = [];

    if (!dati.vārds || dati.vārds.trim().length < 2) {
        kļūdas.push("Vārdam jābūt vismaz 2 simboli garam");
    }

    if (!dati.email?.includes("@")) {
        kļūdas.push("Nav derīga e-pasta adrese");
    }

    if (!dati.parole || dati.parole.length < 8) {
        kļūdas.push("Parolei jābūt vismaz 8 simboli garai");
    } else if (dati.parole !== dati.parole_atkārtota) {
        kļūdas.push("Paroles nesakrīt");
    }

    return kļūdas;
}

const kļūdas = validētPieteikumu({
    vārds: "An",
    email: "nav-epasts",
    parole: "123",
    parole_atkārtota: "456"
});

if (kļūdas.length > 0) {
    console.log("Validācijas kļūdas:");
    kļūdas.forEach(k => console.log("• " + k));
} else {
    console.log("Visi dati derīgi!");
}

// ========================================
// Stāvokļu mašīna ar switch
// ========================================
function pasūtījumaStatuss(statuss) {
    switch (statuss) {
        case "gaida":     return { krāsa: "dzeltena", teksts: "Gaida apstrādi" };
        case "apstrādā":  return { krāsa: "zila",     teksts: "Tiek apstrādāts" };
        case "nosūtīts":  return { krāsa: "zaļa",     teksts: "Nosūtīts" };
        case "atcelts":   return { krāsa: "sarkana",  teksts: "Atcelts" };
        default:          return { krāsa: "pelēka",   teksts: "Nezināms statuss" };
    }
}