Micuta problema cu if statements / conditionalele

Vreau sa am conditiile urmatoare:

0-5 ani: gratuit
5-10 ani: $10
10-65 ani: $20
65+ ani: gratuit

Asa ca am facut

const age = "10";
if (age >= 0 && age <= 5 || age >= 65) {
    console.log ("Free entry!")
}

else if (age >= 5 && age <= 10) {
    console.log ("$10");
}

else if (age >= 10 && age <= 65) {
    console.log ("$20")
}

else {
    console.log ("Vârstă invalidă");
}

Cum adaug si conditia ca atunci cand introduci la string-ul “age” numere negative de la -0 spre minus infinit si de la 100 spre plus infinit sa iti zica consola ce vrei tu?

Spre exemplu, eu am incercat, dar nu a mers urmatoarea comanda:

else if (age <= -0 || age < 0 && age > 100) {
    console.log ("You are either too old or the age number is invalid/negative).
}

Sunt la inceput, don’t judge me! :slight_smile:

Later edit:
Nu imi merge nimic orice as face pentru ca am dat deja functia

age >= 0
age < 100

iar JS crede ca nu mai are rost sa umble mai departe, deci probabil trebuie ori sa separ numerele ori nu stiu… ceva in genul I guess…

Nu ai type-ul corect, il tratezi ca si string, nu int

const age = 10;

Daca iti vine dintr-un input.

const age = "10";

age = parseInt( age );
2 Likes
if (age < 5) {
    console.log("Free entry!");
}
else if (age < 10) {
    console.log("$10");
}
else if (age < 65) {
    console.log("$20");
}
else {
    console.log("Free entry!");
}
1 Like

0-5 ani: gratuit
5-10 ani: $10
10-65 ani: $20
65+ ani: gratuit

Cum adaug si conditia ca atunci cand introduci la string-ul “age” numere negative de la -0 spre minus infinit si de la 100 spre plus infinit sa iti zica consola ce vrei tu?

Așa:

if(age < 0)
{
	console.log("Not born yet!");
}
else if(age <= 5)
{
	console.log("Free entry!");
}
else if(age <= 10)
{
	console.log("$10, please!");
}
else if(age <= 65)
{
	console.log("$20, please!");
}
else if(age <= 100)
{
	console.log("Free entry!");
}
else
{
	console.log("Too old!");
}

Sau așa:

if(age < 0)
{
	console.log("Not born yet!");
}
else if(age <= 5 || (age > 65 && age <= 100))
{
	console.log("Free entry!");
}
else if(age <= 10)
{
	console.log("$10, please!");
}
else if(age <= 65)
{
	console.log("$20, please!");
}
else
{
	console.log("Too old!");
}

Poti lua in considerare si un switch statement, este un pic mai usor de citit (IMHO):

switch (true) {
    case age <= 5:
        console.log('Free')
        break
    case age <= 10:
        console.log('$10')
        break
    case age <= 65:
        console.log('$20')
        break
    default:
        console.log('Free')
}

Alta sugestie este ca atunci cand ai conditionale mai complexe sa pui paranteze ca sa fie clar cum sung grupate:

age >= 0 && age <= 5 || age >= 65 // bad
(age >= 0 && age <= 5) || age >= 65 // better
1 Like

O alta abordare a fi early return ul. Ceva de genul asta

function getPriceByAge(age) {
	if (typeof age !== 'number' || age < 0 || age > 100) {
    console.log ("You are either too old or the age number is invalid/negative");  
    return;
  }

	if (age >= 0 && age <= 5 || age >= 65) {
  	console.log("Free entry!");
    return;
  }
  
  if (age >= 5 && age <= 10) {
    console.log("$10")
    return;
  }
  
  if (age >= 10 && age <= 65) {
		console.log("$20");
		return;
  }
}

Evident, se poate extinde, poti face ceva helper de genul asta care sa faca codul un pic mai verbose (ofc, in cazul de fata e posibil sa fie un pic over engineered)

function isInInterval(value, min, max) {
	return value => min && value <= max;
}

Legat de early return poti sa te uiti aici Why I Don't Use Else When Programming - YouTube sau sa sapi pe google cu early return js (uneori numit si early exit)

Am lasat aici un fiddle in caz ca vrei sa te joci ad hoc Edit fiddle - JSFiddle - Code Playground . De precizat ca nu am testat nimic, dar daca descoperi vreo greseala cu atat mai bine, tema pt acasa :smiley:

1 Like

Inainte de moduri foarte fancy de a scrie codul trebuie avut grija si la corectitudine.

5 ani inseamna gratis sau $10?