ਹਰ ਪ੍ਰੋਗਰਾਮ ਨੂੰ ਪ੍ਰਤੀਕਿਰਿਆ (react) ਕਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਇੱਕ ਯੂਜ਼ਰ ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰਦਾ ਹੈ। ਇੱਕ API ਡੇਟਾ ਵਾਪਸ ਕਰਦਾ ਹੈ। ਇੱਕ ਫਾਰਮ ਫੀਲਡ ਖਾਲੀ ਹੋ ਜਾਂਦੀ ਹੈ। ਬਿਨਾਂ ਕਿਸੇ ਬ੍ਰਾਂਚਿੰਗ (branching) ਦੇ ਤਰੀਕੇ ਦੇ, ਤੁਹਾਡਾ ਕੋਡ ਅਸਲ ਵਿੱਚ ਜੋ ਵੀ ਹੋ ਰਿਹਾ ਹੈ, ਉਸ ਦੀ ਪਰਵਾਹ ਕੀਤੇ ਬਿਨਾਂ ਲਾਈਨ ਦਰ ਲਾਈਨ ਚੱਲੇਗਾ। ਕੰਡੀਸ਼ਨਲਜ਼ (Conditionals) JavaScript ਨੂੰ ਚੁਣਨ ਦੀ ਇਹ ਸਮਰੱਥਾ ਦਿੰਦੇ ਹਨ। ਉਹ ਤੁਹਾਡੇ ਫੰਕਸ਼ਨਾਂ ਦੇ ਅੰਦਰ ਫੈਸਲਾ ਲੈਣ ਵਾਲੇ ਹੁੰਦੇ ਹਨ, ਉਹ ਗੇਟਕੀਪਰ ਹਨ ਜੋ ਫੈਸਲਾ ਕਰਦੇ ਹਨ ਕਿ ਕੀ ਚੱਲਣਾ ਹੈ ਅਤੇ ਕੀ ਛੱਡਣਾ ਹੈ। ਇੱਕ ਵਾਰ ਜਦੋਂ ਤੁਸੀਂ ਇਹ ਸਮਝ ਲੈਂਦੇ ਹੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਚੰਗੀ ਤਰ੍ਹਾਂ ਕਿਵੇਂ ਲਿਖਣਾ ਹੈ, ਤਾਂ ਤੁਸੀਂ ਸਖ਼ਤ ਸਕ੍ਰਿਪਟਾਂ ਲਿਖਣਾ ਬੰਦ ਕਰ ਦਿੰਦੇ ਹੋ ਅਤੇ ਅਜਿਹਾ ਸਾਫਟਵੇਅਰ ਬਣਾਉਣਾ ਸ਼ੁਰੂ ਕਰ ਦਿੰਦੇ ਹੋ ਜੋ ਅਸਲ ਵਿੱਚ ਜਵਾਬ ਦਿੰਦਾ ਹੈ।

ਕੰਡੀਸ਼ਨਲਜ਼ ਕਿਉਂ ਮਹੱਤਵਪੂਰਨ ਹਨ

ਕੰਟਰੋਲ ਫਲੋ (Control flow) ਤਰਕ (logic) ਦੀ ਰੀੜ੍ਹ ਦੀ ਹੱਡੀ ਹੈ। ਤੁਸੀਂ ਸਰਵਰ 'ਤੇ ਪਾਸਵਰਡ ਪੋਸਟ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਉਹਨਾਂ ਨੂੰ ਵੈਲੀਡੇਟ ਕਰਨ ਲਈ ਕੰਡੀਸ਼ਨਲਜ਼ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ। ਟੈਕਸ ਦੀ ਗਣਨਾ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਤੁਸੀਂ ਚੈੱਕ ਕਰਦੇ ਹੋ ਕਿ ਕੀ ਸ਼ਾਪਿੰਗ ਕਾਰਟ ਖਾਲੀ ਹੈ। ਤੁਸੀਂ ਪਤਾ ਲਗਾਉਂਦੇ ਹੋ ਕਿ ਕੀ ਨੈੱਟਵਰਕ ਰਿਕਵੈਸਟ ਫੇਲ ਹੋ ਗਈ ਹੈ ਤਾਂ ਜੋ ਤੁਸੀਂ ਖਾਲੀ ਸਕ੍ਰੀਨ ਦੀ ਬਜਾਏ ਐਰਰ (error) ਦਿਖਾ ਸਕੋ। ਇਹ ਸਾਰੇ ਸੀਨਾਰੀਓ ਇੱਕੋ ਹੀ ਸਧਾਰਨ ਵਿਚਾਰ 'ਤੇ ਨਿਰਭਰ ਕਰਦੇ ਹਨ: ਕਿਸੇ ਚੀਜ਼ ਦਾ ਮੁਲਾਂਕਣ ਕਰੋ, ਫਿਰ ਉਸ ਅਨੁਸਾਰ ਕਾਰਵਾਈ ਕਰੋ।

ਕੰਡੀਸ਼ਨਲਜ਼ ਤੋਂ ਬਿਨਾਂ, ਤੁਹਾਡੀ ਐਪਲੀਕੇਸ਼ਨ ਗੱਲਬਾਤ ਦੀ ਬਜਾਏ ਇੱਕ ਇਕਪਾਸੜ ਗੱਲਬਾਤ (monologue) ਵਾਂਗ ਹੋਵੇਗੀ। ਇਹ ਵੱਖ-ਵੱਖ ਡੇਟਾ ਸੀਨਾਰੀਓ ਨੂੰ ਸੰਭਾਲ ਨਹੀਂ ਸਕਦੀ, ਗਲਤੀਆਂ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਪ੍ਰਬੰਧਿਤ ਨਹੀਂ ਕਰ ਸਕਦੀ, ਜਾਂ ਯੂਜ਼ਰ ਦੀਆਂ ਕਾਰਵਾਈਆਂ 'ਤੇ ਕਿਸੇ ਵੀ ਅਰਥਪੂਰਨ ਤਰੀਕੇ ਨਾਲ ਪ੍ਰਤੀਕਿਰਿਆ ਨਹੀਂ ਕਰ ਸਕਦੀ। ਇਹ ਤੁਹਾਨੂੰ ਇਹ ਕੰਟਰੋਲ ਕਰਨ ਦਿੰਦੇ ਹਨ ਕਿ ਤੁਹਾਡਾ ਪ੍ਰੋਗਰਾਮ ਅਸਲ ਦੁਨੀਆ ਦੀ ਅਨਿਸ਼ਚਿਤਤਾ ਦੇ ਅਧੀਨ ਕਿਵੇਂ ਚੱਲਦਾ ਹੈ।

ਬੇਸਿਕ if ਸਟੇਟਮੈਂਟ

ਸ਼ੁਰੂਆਤ ਕਰਨ ਲਈ ਸਭ ਤੋਂ ਸਧਾਰਨ ਜਗ੍ਹਾ ਸਟੈਂਡਅਲੋਨ if ਹੈ। ਇਹ ਕਹਿੰਦਾ ਹੈ, ਜੇਕਰ ਇਹ ਚੀਜ਼ ਸਹੀ ਹੈ, ਤਾਂ ਇਹ ਕੰਮ ਕਰੋ। ਬੱਸ ਇੰਨਾ ਹੀ। ਕੋਈ ਬਦਲ (fallback), ਕੋਈ ਵਿਕਲਪਿਕ ਰਸਤਾ ਨਹੀਂ।

if (x % 2 === 0) {
    console.log("Even");
}

ਇਸ ਸਨਿਪੇਟ (snippet) ਵਿੱਚ, ਮੋਡੂਲਸ ਓਪਰੇਟਰ ਚੈੱਕ ਕਰਦਾ ਹੈ ਕਿ ਕੀ x ਦੋ ਨਾਲ ਪੂਰੀ ਤਰ੍ਹਾਂ ਵੰਡਿਆ ਜਾਂਦਾ ਹੈ। ਜਦੋਂ ਬਾਕੀ (remainder) ਜ਼ੀਰੋ ਹੁੰਦਾ ਹੈ, ਤਾਂ ਕੰਸੋਲ ਸਟ੍ਰਿੰਗ ਨੂੰ ਲੌਗ ਕਰਦਾ ਹੈ। ਜੇਕਰ x ਇੱਕ ਬੇਜੋੜ (odd) ਸੰਖਿਆ ਹੈ, ਤਾਂ ਕੁਝ ਨਹੀਂ ਹੁੰਦਾ। ਬਲਾਕ ਨੂੰ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ ਐਗਜ਼ੀਕਿਊਸ਼ਨ (execution) ਹੇਠਾਂ ਜਾਰੀ ਰਹਿੰਦੀ ਹੈ।

ਉਹ ਸ਼ਾਂਤ ਨਜ਼ਰਅੰਦਾਜ਼ੀ ਮਹੱਤਵਪੂਰਨ ਹੈ। ਕਈ ਵਾਰ ਤੁਸੀਂ ਸਿਰਫ਼ ਇੱਕ ਸਿੰਗਲ ਐਕਸ਼ਨ ਦੀ ਰੱਖਿਆ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ। ਸ਼ਾਇਦ ਤੁਸੀਂ ਕਿਸੇ ਬਟਨ ਵਿੱਚ CSS ਕਲਾਸ ਸਿਰਫ਼ ਉਦੋਂ ਹੀ ਜੋੜਨਾ ਚਾਹੁੰਦੇ ਹੋ ਜਦੋਂ ਇਹ ਐਕਟਿਵ ਹੋਵੇ, ਜਾਂ ਕਿਸੇ ਐਰੇ (array) ਵਿੱਚ ਕੋਈ ਆਈਟਮ ਸਿਰਫ਼ ਉਦੋਂ ਹੀ ਜੋੜਨਾ ਚਾਹੁੰਦੇ ਹੋ ਜਦੋਂ ਇਨਪੁਟ ਖਾਲੀ ਨਾ ਹੋਵੇ। ਇੱਕ ਸਾਧਾਰਨ if ਸਟੇਟਮੈਂਟ ਤੁਹਾਨੂੰ ਉਹ ਲੋਜਿਕ ਲਿਖਣ ਲਈ ਮਜਬੂਰ ਕੀਤੇ ਬਿਨਾਂ ਉਹਨਾਂ ਪਲਾਂ ਨੂੰ ਸੰਭਾਲਦੀ ਹੈ ਜਿਸਦੀ ਤੁਹਾਨੂੰ ਲੋੜ ਨਹੀਂ ਹੈ।

if-else ਨਾਲ ਇੱਕ ਵਿਕਲਪ ਜੋੜਨਾ

ਅਸਲ ਫੈਸਲੇ ਆਮ ਤੌਰ 'ਤੇ ਦੋ ਪਾਸਿਆਂ ਵਾਲੇ ਹੁੰਦੇ ਹਨ। ਜਾਂ ਤਾਂ ਯੂਜ਼ਰ ਉਮਰ ਵਿੱਚ ਕਾਫ਼ੀ ਵੱਡਾ ਹੈ, ਜਾਂ ਨਹੀਂ। ਜਾਂ ਤਾਂ ਭੁਗਤਾਨ ਸਫਲ ਹੋ ਗਿਆ ਹੈ, ਜਾਂ ਇਹ ਫੇਲ ਹੋ ਗਿਆ ਹੈ। if-else ਢਾਂਚਾ ਦੋਵਾਂ ਨੂੰ ਕਵਰ ਕਰਦਾ ਹੈ।

if (age >= 18) {
    console.log("Adult");
} else {
    console.log("Not an Adult");
}

else ਬਲਾਕ ਉਹ ਸਭ ਕੁਝ ਫੜ ਲੈਂਦਾ ਹੈ ਜਿਸ ਨੂੰ ਪਹਿਲੀ ਸ਼ਰਤ ਨੇ ਰੱਦ ਕਰ ਦਿੱਤਾ ਸੀ। ਇਹ ਇੱਕ ਸਾਫ਼ ਬਾਈਨਰੀ ਬ੍ਰਾਂਚ (binary branch) ਬਣਾਉਂਦਾ ਹੈ। ਇਹ ਪੈਟਰਨ ਟੌਗਲਜ਼ (toggles), ਪਰਮਿਸ਼ਨਾਂ ਅਤੇ ਫੀਚਰ ਫਲੈਗਾਂ ਲਈ ਵਧੀਆ ਕੰਮ ਕਰਦਾ ਹੈ। ਹਰੇਕ ਬਲਾਕ ਦੇ ਅੰਦਰ ਲੋਜਿਕ ਨੂੰ ਕੇਂਦਰਿਤ ਰੱਖੋ। ਜੇਕਰ ਤੁਸੀਂ ਆਪਣੇ ਆਪ ਨੂੰ ਇੱਕ ਬ੍ਰਾਂਚ ਵਿੱਚ ਬਹੁਤ ਸਾਰੇ ਕੰਮਾਂ ਨੂੰ ਜੋੜਦੇ ਹੋਏ ਪਾਉਂਦੇ ਹੋ, ਤਾਂ ਇਹ ਆਮ ਤੌਰ 'ਤੇ ਕੰਮ ਨੂੰ ਛੋਟੇ ਫੰਕਸ਼ਨਾਂ ਵਿੱਚ ਵੰਡਣ ਦਾ ਸੰਕੇਤ ਹੁੰਦਾ ਹੈ।

else if ਨਾਲ ਕਈ ਰਸਤਿਆਂ ਦੀ ਜਾਂਚ ਕਰਨਾ

ਜ਼ਿੰਦਗੀ ਬਹੁਤ ਘੱਟ ਹੀ ਸਿਰਫ਼ ਦੋ ਚੋਣਾਂ ਦਿੰਦੀ ਹੈ। ਤੁਹਾਨੂੰ ਕਿਸੇ ਸੰਖਿਆ ਨੂੰ ਪੌਜ਼ੀਟਿਵ, ਨੈਗੇਟਿਵ, ਜਾਂ ਜ਼ੀਰੋ ਵਜੋਂ ਸ਼੍ਰੇਣੀਬੱਧ ਕਰਨ ਦੀ ਲੋੜ ਹੋ ਸਕਦੀ ਹੈ। ਤੁਸੀਂ ਭਾਰ ਦੇ ਬ੍ਰੈਕਟਾਂ ਦੇ ਅਧਾਰ 'ਤੇ ਸ਼ਿਪਿੰਗ ਰੇਟ ਅਸਾਈਨ ਕਰ ਸਕਦੇ ਹੋ। ਕ੍ਰਮਵਾਰ, ਕਈ ਤੁਲਨਾਵਾਂ ਲਈ, else if ਦੀ ਵਰਤੋਂ ਕਰੋ।

if (x > 0) {
    console.log("Positive");
} else if (x < 0) {
    console.log("Negative");
} else {
    console.log("Zero");
}

JavaScript ਇਹਨਾਂ ਦਾ ਉੱਪਰ ਤੋਂ ਹੇਠਾਂ ਮੁਲਾਂਕਣ ਕਰਦਾ ਹੈ। ਜਿਵੇਂ ਹੀ ਇੱਕ ਸ਼ਰਤ ਪਾਸ ਹੁੰਦੀ ਹੈ, ਇਹ ਉਸ ਬਲਾਕ ਨੂੰ ਚਲਾਉਂਦਾ ਹੈ ਅਤੇ ਬਾਕੀ ਨੂੰ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰ ਦਿੰਦਾ ਹੈ। ਕ੍ਰਮ (Order) ਮਹੱਤਵਪੂਰਨ ਹੈ। ਜੇਕਰ ਤੁਸੀਂ x > 100 ਦੀ ਜਾਂਚ ਕਰਨ ਤੋਂ ਬਾਅਦ x > 0 ਦੀ ਜਾਂਚ ਕੀਤੀ ਹੁੰਦੀ, ਤਾਂ ਸਖ਼ਤ ਚੈੱਕ ਕਦੇ ਨਹੀਂ ਚੱਲਦਾ ਕਿਉਂਕਿ ਹਲਕਾ ਚੈੱਕ ਇਸਨੂੰ ਪਹਿਲਾਂ ਹੀ ਫੜ ਲੈਂਦਾ। else if ਨੂੰ ਇੱਕ ਪ੍ਰਾਥਮਿਕਤਾ ਸੂਚੀ (priority list) ਵਜੋਂ ਸਮਝੋ।

switch ਸਟੇਟਮੈਂਟ

ਜਦੋਂ ਤੁਸੀਂ ਇੱਕ ਮੁੱਲ ਦੀ ਤੁਲਨਾ ਕਈ ਵੱਖ-ਵੱਖ ਵਿਕਲਪਾਂ ਨਾਲ ਕਰਦੇ ਹੋ, ਤਾਂ else if ਸਟੇਟਮੈਂਟਾਂ ਦੀ ਇੱਕ ਲੰਬੀ ਲੜੀ ਦੁਹਰਾਓ ਵਾਂਗ ਲੱਗ ਸਕਦੀ ਹੈ। ਇੱਕ switch ਸਟੇਟਮੈਂਟ ਇਸਨੂੰ ਸਾਫ਼ ਕਰ ਦਿੰਦੀ ਹੈ। ਇਹ ਇੱਕ ਐਕਸਪ੍ਰੈਸ਼ਨ (expression) ਨੂੰ case ਕਲਾਜ਼ਾਂ ਨਾਲ ਮਿਲਾਉਂਦੀ ਹੈ ਅਤੇ ਮੇਲ ਖਾਣ ਵਾਲੇ ਬਲਾਕ ਨੂੰ ਚਲਾਉਂਦੀ ਹੈ।

switch (true) {
    case marks >= 90:
        Branch = "Computer science";
        break;
    case marks >= 80:
        Branch = "Mechanical";
        break;
    default:
        Branch = "Other";
}

ਇਹ ਉਦਾਹਰਣ ਬੂਲੀਅਨ (boolean) ਸ਼ਰਤਾਂ ਦਾ ਸਿੱਧਾ ਮੁਲਾਂਕਣ ਕਰਨ ਲਈ switch(true) ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ, ਜੋ ਕਿ ਇੱਕ ਆਮ JavaScript ਪੈਟਰਨ ਹੈ ਜਦੋਂ ਤੁਹਾਡਾ ਲੋਜਿਕ ਸਹੀ ਬਰਾਬਰੀ ਦੀ ਬਜਾਏ ਰੇਂਜਾਂ (ranges) 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ। break ਕੀਵਰਡ ਜ਼ਰੂਰੀ ਹੈ। ਇਸ ਤੋਂ ਬਿਨਾਂ, ਐਗਜ਼ੀਕਿਊਸ਼ਨ ਅਗਲੇ ਕੇਸ ਵਿੱਚ ਚਲੀ ਜਾਂਦੀ ਹੈ ਭਾਵੇਂ ਉਹ ਮੇਲ ਖਾਂਦਾ ਹੋਵੇ ਜਾਂ ਨਹੀਂ, ਜੋ ਕਿ ਇੱਥੇ ਬਹੁਤ ਘੱਟ ਹੀ ਚਾਹਿਆ ਜਾਂਦਾ ਹੈ। default ਕਲਾਜ਼ ਇੱਕ ਅੰਤਿਮ else ਵਾਂਗ ਕੰਮ ਕਰਦੀ ਹੈ, ਜੋ ਕਿਸੇ ਵੀ ਅਜਿਹੀ ਚੀਜ਼ ਨੂੰ ਫੜਦੀ ਹੈ ਜੋ ਪਹਿਲਾਂ ਵਾਲੇ ਕੇਸਾਂ ਵਿੱਚ ਫਿੱਟ ਨਹੀਂ ਬੈਠਦੀ।

Switch ਉਦੋਂ ਚਮਕਦਾ ਹੈ ਜਦੋਂ ਤੁਹਾਡੇ ਕੋਲ ਸਪੱਸ਼ਟ, ਨਿਸ਼ਚਿਤ ਵਿਕਲਪ ਹੁੰਦੇ ਹਨ। ਇਹ ਅਕਸਰ else if ਬਲਾਕਾਂ ਦੇ ਇੱਕ ਉੱਚੇ ਢੇਰ ਨਾਲੋਂ ਸਕੈਨ ਕਰਨ ਵਿੱਚ ਆਸਾਨ ਹੁੰਦਾ ਹੈ, ਖਾਸ ਕਰਕੇ ਜਦੋਂ ਹਰ ਬ੍ਰਾਂਚ ਸਿਰਫ਼ ਇੱਕ ਮੁੱਲ ਅਸਾਈਨ ਕਰਦੀ ਹੈ ਜਾਂ ਇੱਕ ਸਿੰ

ਗੁੰਝਲਦਾਰ ਲੌਜਿਕ ਲਈ ਕਈ ਵਾਰ ਅਗਲੇ ਸਵਾਲ ਪੁੱਛਣ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਤੁਸੀਂ ਕਿਸੇ ਫੈਸਲੇ ਨੂੰ ਹੋਰ ਸਪਸ਼ਟ ਕਰਨ ਲਈ ਇੱਕ if ਦੇ ਅੰਦਰ ਦੂਜਾ if ਨੈਸਟ (nest) ਕਰ ਸਕਦੇ ਹੋ।

if (weather === "sunny") {
    if (temp > 30) {
        console.log("